scikit-learn 中的警告消息

warning message in scikit-learn

我写了一个非常简单的scikit-learn决策树来实现异或:

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: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.

我不清楚需要更改什么以及为什么?请赐教!

提前致谢!

该方法对矩阵(二维数组)而不是向量(一维数组)进行操作。为方便起见,旧代码接受一个向量作为 1xN 矩阵。这导致了使用错误,因为一些用户忘记了向量的方向(1xN 与 Nx1)。

该建议告诉您如何将向量重塑为适当的矩阵形状。对于常数向量,只需将它们写成矩阵即可:

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

"other direction"(此应用程序错误)将是

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

clf.predict 的输入应该是一个二维数组。因此,而不是写

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

你需要写

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

正如警告信息所指出的,您只有一个样本要测试。因此,您可以按以下方式使用重塑或修复,

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]]))