2017-08-10 201 views
0

我写了一个很简单的scikit学习决策树来实现XOR:警告消息scikit学习

from sklearn import tree 
X = [[0, 0], [1, 1], [0, 1], [1, 0]] 
Y = [0, 0, 1, 1] 
clf = tree.DecisionTreeClassifier() 
clf = clf.fit(X, Y) 

print(clf.predict([0,1])) 
print(clf.predict([0,0])) 
print(clf.predict([1,1])) 
print(clf.predict([1,0])) 

预测部件产生一些像这样的警告:

DeprecationWarning:传递一维数组作为数据将在0.17 中弃用,并将提高0.19中的ValueError。如果数据包含单个要素,则使用 X.reshape(-1,1)重整数据,如果数据包含单个要素,则使用X.reshape(1,-1) 重整数据。

我没有清楚的想法需要改变,为什么?请赐教!

预先感谢您!

+1

似乎您传递的数据应与您传递的数据格式相同。使用[[0,1]]而不是[0,1] – MrE

回答

3

输入到clf.predict应的2D阵列。因此,而不是写

print(clf.predict([0,1]))

你需要写

print(clf.predict([[0,1]]))

0

该方法在矩阵(2D阵列)上运行,而不是矢量(1D阵列)。为了方便起见,较旧的代码接受一个向量作为1xN矩阵。这导致使用错误,因为一些用户忘记了向量的方向(1xN vs Nx1)。

该建议告诉您如何将您的矢量重塑为适当的矩阵形状。对于恒定的载体,只需将它们写为矩阵:

clf.predict([ [0, 1] ]) 

“其它方向”(错误此应用程序)将是

clf.predict([ [0], [1] ]) 
0

作警告消息指出,你必须单个样品进行测试。因此,您可以使用以下方式重新整形或修复:

from sklearn import tree 
X = [[0, 0], [1, 1], [0, 1], [1, 0]] 
Y = [0, 0, 1, 1] 
clf = tree.DecisionTreeClassifier() 
clf = clf.fit(X, Y) 

print (clf.predict([[0,1]])) 
print (clf.predict([[0,0]])) 
print (clf.predict([[1,1]])) 
print (clf.predict([[1,0]])) 
+0

这与“Miriam Farber”的答案有何关系? – Prune