Scikit predict_proba出力の解釈


12

Pythonでscikit-learnライブラリを使用しています。以下のコードでは、確率を予測していますが、出力の読み方がわかりません。

試験データ

from sklearn.ensemble import RandomForestClassifier as RF
from sklearn import cross_validation

X = np.array([[5,5,5,5],[10,10,10,10],[1,1,1,1],[6,6,6,6],[13,13,13,13],[2,2,2,2]])
y = np.array([0,1,1,0,1,2])

データセットを分割する

X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.5, random_state=0) 

確率を計算する

clf = RF()
clf.fit(X_train,y_train)
pred_pro = clf.predict_proba(X_test)
print pred_pro

出力

[[ 1.  0.]
 [ 1.  0.]
 [ 0.  1.]]

X_testリストには3つの配列(6つのサンプルとtest_size = 0,5がある)が含まれているため、出力にも3つあります。

しかし、3つの値(0、1、2)を予測しているのに、なぜ各配列で2つの要素しか取得しないのですか?

出力をどのように読み取る必要がありますか?

また、yの個別の値の数を変更すると、出力の列の数は常にy -1の個別のカウントになります。


CrossValidatedへようこそ。以下の私の答えを見ましたか?問題が解決した場合は、先に進んで正解としてマークしてください。それ以外の場合は、何が欠けているかをお知らせください。解決できるよう努めます。
ベン

回答:


5

見てくださいy_train。ですねarray([0, 0, 1])。これは、分割がy = 2のサンプルをピックアップしなかったことを意味します。したがって、モデルには、クラスy = 2が存在するという考えはありません。

意味のある何かを返すには、これにさらにサンプルが必要です。

また、ドキュメントをチェックし、出力の解釈方法を理解しください。


1
これは正しいです。設定するy = np.array([0,2,1,0,1,2])と、random_state=23列の出力が表示されます
tdc

答えは私の質問を解決しました。どうもありがとうございました。そして、列はどの順序でください?その常に上昇?
HonzaB 2015年

を実行しますclf.classes_。列はその順序になります。
ベン

このように:clf.fit(X_train,y_train).classes_
HonzaB 2015年

1
それはうまくいくと思いますが、走っclf.classes_ 直後に走ることができますclf.fit(X_train,y_train)
Ben
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.