Python sci工具包学习:使用X.Reformate(-1,1)重塑数据

Python sci工具包学习:使用X.Reformate(-1,1)重塑数据,python,scikit-learn,Python,Scikit Learn,我正在训练一个python(2.7.11)分类器进行文本分类,在运行时,我收到一条不推荐的警告消息,我不知道代码中的哪一行导致了它!错误/警告。然而,代码运行良好,并给我结果 \AppData\Local\Enthught\Canopy\User\lib\site packages\sklearn\utils\validation.py:386:DeprecationWarning:将1d数组作为数据传递在0.17中被弃用,并将在0.19中引发ValueError。如果数据具有单个特征,请使用X

我正在训练一个python(2.7.11)分类器进行文本分类,在运行时,我收到一条不推荐的警告消息,我不知道代码中的哪一行导致了它!错误/警告。然而,代码运行良好,并给我结果

\AppData\Local\Enthught\Canopy\User\lib\site packages\sklearn\utils\validation.py:386:DeprecationWarning:将1d数组作为数据传递在0.17中被弃用,并将在0.19中引发ValueError。如果数据具有单个特征,请使用X.restrape(-1,1),如果数据包含单个样本,请使用X.restrape(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文件:“标签\t文本\n” 测试数据的标签列中应该有什么


提前感谢

如果您想了解
警告
的来源,您可以将
警告
临时升级到
异常
。这将为您提供一个完整的回溯,从而返回程序遇到警告的行

with warnings.catch_warnings():
    warnings.simplefilter("error")
    main()
如果从命令行运行程序,也可以使用
-W
标志。有关警告处理的更多信息,请参阅

我知道这只是我回答的问题的一部分,但你调试代码了吗?

是:

pred = clf.predict(vec);
我在我的代码中使用了这一点,它起到了作用:

#This makes it into a 2d array
temp =  [2 ,70 ,90 ,1] #an instance
temp = np.array(temp).reshape((1, -1))
print(model.predict(temp))

您在
clf.fit(vec,l).fit中的“vec”输入必须是
[[]]
类型,而不仅仅是
[]
。这是一个怪癖,我总是忘记当我适合模型


只需添加一组额外的方括号就可以了

因为1D数组将被弃用。尝试将二维数组作为参数传递。这可能会有帮助

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

2解决方案:哲学\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

  • 只需添加:
    []

    vec = [vec]
    
  • 重塑您的数据

    import numpy as np
    vec = np.array(vec).reshape(1, -1)
    

  • Predict method Expected 2-d array,您可以观看此视频,我还找到了确切的时间。您必须从[]更改为[]。

    不,我没有调试,因为我在windows上使用canopy,需要升级才能下载调试工具,我是所有这些的初学者!谢谢你的回答如果你指的是控制台上的内容,那么我就得到了上面粘贴的内容。没有比这更重要的了。如果你的意思是跟踪代码,那么我没有尝试过,但是是的,我似乎可以导入pdb库,但是使用它没有多大帮助(可能是因为我是初学者)…请解释你的解决方案。