2017-08-10 21 views
0

に私はXORを実装するために非常に単純なscikit学習決定木を書いた:警告メッセージがscikit-学ぶ

DeprecationWarning:として1D配列を渡す

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.17 で廃止され、ValueErrorは0.19に引き上げられます。データに単一機能がある場合は X.reshape(-1,1)を使用するか、単一のサンプルが含まれている場合はX.reshape(1、-1) を使用してデータを整形します。

何が変更する必要があるのか​​、その理由は分かりません。私を教えてください!

ありがとうございます!

+1

は予測するために渡すデータのように見えますが、適合するために渡すデータと同じフォーマットである必要があります。 [0,1]の代わりに[[0,1]]を使用してください。 – MrE

答えて

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

clf.predictへの入力は、2Dアレイであるべきであろう。したがって、代わりにprint(clf.predict([0,1]))

を書くの警告メッセージが指摘したように、あなたがテストするために、単一のサンプルを持っている

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

0

このメソッドは、ベクトル(1D配列)ではなく行列(2D配列)で動作します。便宜上、古いコードは1xNの行列としてベクトルを受け入れました。これは、一部のユーザーがベクトルがどの方向に向いているかを忘れていたため、使用エラーにつながった(1xN対Nx1)。

この提案は、ベクトルを適切な行列形状に再構成する方法を示しています。一定のベクターは、ちょうど行列としてそれらを書く:

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