2016-09-08 7 views
0

シンプルなデシジョンツリークラシファイアを使用するためにsklearnを使用しようとしましたが、1D配列を使用するとX.reshape(1、-1)を使用する必要があります。だから私はやったが、ラベルリストを1つの要素だけのリストリストに変えたので、ラベルとサンプルの数は今一致していない。別の言葉私のラベルのリスト= [0,0,1,1]は[[0 0 1 1]]に変わります。あなたが間違ったことを再形成されているsklearnの1D配列でx.reshapeを使用する

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

あなたがこれを望んでいる可能性があります: 'labels = np.asarray(labels)[:, None]'? – Andrew

+0

これは(1、-1)の代わりにreshape(-1,1)を使うのと同じようです。それは正しい答えを与えるが、私はまだ1D配列の使用が完全に廃止されれば、廃止予定の警告 – kevbuntu

+0

を得るだろうと、sklearnの作者はそれを考慮に入れるためにその(そしておそらく他の)関数を変更する必要があるだろう。私は、 'xまたはy == 1 'であっても、常に' shape'(x、y)の配列が2Dであると理解しています。それは私が間違っていたと言いました。 – Andrew

答えて

1

:ありがとう

これは私が使用した簡単なコードです。あなたのラベルではなく、あなたが予測しているデータの形を変えてください。

ラベルはトレーニングデータ(機能)に合わせなければならないので、両方のアレイの長さは同じにする必要があります。ラベルが再構成されている場合は、長さが1であり、フィーチャーの長さと等しくないリストのリストです。

予測データにはトレーニングデータのような配列が必要であるため、テストデータの形状を変更する必要があります。すなわち、各指標は、訓練と同じ数の特徴を有する訓練例である必要がある。以下の2つのコマンドはリストのリストとリストだけを返します。

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

あなたは正しいです。警告と正しい結果はありません。いくつか余分な説明をいただければ幸いです。どうもありがとう。 – kevbuntu

+0

希望の編集は@kevbuntuに役立ちます – aberger

関連する問題