Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在sklearn中对1D阵列使用x.Reforme_Python_Scikit Learn - Fatal编程技术网

Python 在sklearn中对1D阵列使用x.Reforme

Python 在sklearn中对1D阵列使用x.Reforme,python,scikit-learn,Python,Scikit Learn,我尝试使用sklearn来使用一个简单的决策树分类器,但它抱怨说使用1D数组现在已经没有说服力了,必须使用X.Reformate(1,-1)。所以我做了,但它已经把我的标签列表变成了只有一个元素的列表,所以标签和样本的数量现在不匹配。换句话说,我的标签列表=[0,0,1,1]变成了[[0,0,1]]。谢谢 这是我使用的简单代码: from sklearn import tree import numpy as np features =[[140,1],[130,1],[150,0],[170,

我尝试使用sklearn来使用一个简单的决策树分类器,但它抱怨说使用1D数组现在已经没有说服力了,必须使用X.Reformate(1,-1)。所以我做了,但它已经把我的标签列表变成了只有一个元素的列表,所以标签和样本的数量现在不匹配。换句话说,我的标签列表=[0,0,1,1]变成了[[0,0,1]]。谢谢

这是我使用的简单代码:

from sklearn import tree
import numpy as np
features =[[140,1],[130,1],[150,0],[170,0]]
labels=[0,0,1,1]
labels = np.array(labels).reshape(1,-1)
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features,labels)
print clf.predict([150,0])

你在重塑错误的东西。重塑预测的数据,而不是标签

>>> clf.predict(np.array([150,0]).reshape(1,-1))
array([1])
标签必须与训练数据(特征)对齐,因此两个阵列的长度应相同。如果标签被重塑,您是对的,它是一个列表列表,长度为1,但不等于要素的长度

您必须重塑测试数据,因为预测需要一个看起来像您的训练数据的数组。i、 e.每个索引都需要是一个培训示例,具有与培训中相同数量的功能。您将看到以下两个命令分别返回一个列表和一个列表

>>> np.array([150,0]).reshape(1,-1)
array([[150,   0]])
>>> np.array([150,0])
array([150,   0])

我怀疑您可能想要这样:
labels=np.asarray(labels)[:,None]
?这似乎相当于使用重塑(-1,1)而不是(1,-1)。它给出了正确的答案,但我仍然得到了不赞成的警告。假设,一旦1D数组的使用被完全反对,sklearn的作者将不得不修改该函数(以及其他函数)以考虑它。我一直认为
形状数组
(x,y)是二维的,即使
x或y==1
。也就是说,我以前是错的,你是对的。没有警告和正确的结果。请多作解释。谢谢。