sci-kit 学习:使用 X.reshape(-1, 1) 重塑数据

新手上路,请多包涵

我正在训练用于文本分类的 python (2.7.11) 分类器,在运行时我收到一条已弃用的警告消息,我不知道我的代码中的哪一行导致了它!错误/警告。但是,代码工作正常并给我结果……

\AppData\Local\Enthought\Canopy\User\lib\site-packages\sklearn\utils\validation.py:386: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willrais ValueError in 0.19.如果您的数据具有单个特征,则使用 X.reshape(-1, 1) 重塑您的数据,如果它包含单个样本,则使用 X.reshape(1, -1) 。

我的代码:

 def main():
    data = []
    folds = 10
    ex = [ [] for x in range(0,10)]
    results = []
    for i,f in enumerate(sys.argv[1:]):
        data.append(csv.DictReader(open(f,'r'),delimiter='\t'))
    for f in data:
        for i,datum in enumerate(f):
            ex[i % folds].append(datum)
    #print ex
    for held_out in range(0,folds):
        l = []
        cor = []
        l_test = []
        cor_test = []
        vec = []
        vec_test = []

        for i,fold in enumerate(ex):
            for line in fold:
                if i == held_out:
                    l_test.append(line['label'].rstrip("\n"))
                    cor_test.append(line['text'].rstrip("\n"))
                else:
                    l.append(line['label'].rstrip("\n"))
                    cor.append(line['text'].rstrip("\n"))

        vectorizer = CountVectorizer(ngram_range=(1,1),min_df=1)
        X = vectorizer.fit_transform(cor)
        for c in cor:
            tmp = vectorizer.transform([c]).toarray()
            vec.append(tmp[0])
        for c in cor_test:
            tmp = vectorizer.transform([c]).toarray()
            vec_test.append(tmp[0])

        clf = MultinomialNB()
        clf .fit(vec,l)
        result = accuracy(l_test,vec_test,clf)
        print result

if __name__ == "__main__":
    main()

知道哪一行会引发此警告吗?另一个问题是,使用不同的数据集运行此代码会给我相同的精确度,但我无法弄清楚是什么原因造成的?如果我想在另一个 python 进程中使用这个模型,我查看了文档并找到了一个使用 pickle 库的示例,但没有用于 joblib。所以,我尝试使用相同的代码,但这给了我错误:

 clf = joblib.load('model.pkl')
pred = clf.predict(vec);

另外,如果我的数据是这种格式的 CSV 文件:“label \t text \n” 测试数据的标签列中应该是什么?

提前致谢

原文由 sareem 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 489
1 个回答

您对 clf.fit(vec,l).fit 的“vec”输入需要是类型 [[]] ,而不仅仅是 [] 。这是我在拟合模型时总是忘记的一个怪癖。

只需添加一组额外的方括号就可以解决问题!

原文由 Heavy Breathing 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题