Scikit predict_proba interpretasi keluaran

12

Saya bekerja dengan perpustakaan scikit-learn dengan python. Dalam kode di bawah ini, saya memprediksi probabilitas tetapi saya tidak tahu cara membaca output.

Menguji data

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

Pisahkan dataset

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

Hitung probabilitasnya

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

Hasil

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

Daftar X_test berisi 3 array (saya punya 6 sampel dan test_size = 0,5) sehingga output memiliki 3 juga.

Tapi saya memprediksi 3 nilai (0,1,2) jadi mengapa saya hanya mendapatkan 2 elemen di setiap array?

Bagaimana saya harus membaca hasilnya?

Saya juga memperhatikan, ketika saya memodifikasi jumlah nilai yang berbeda dalam y, jumlah kolom dalam output selalu berbeda dengan y -1.

HonzaB
sumber
Selamat datang di CrossValidated. Apakah Anda melihat jawaban saya di bawah ini? Jika itu memecahkan pertanyaan Anda, silakan dan tandai sebagai jawaban yang benar. Kalau tidak, beri tahu saya apa yang hilang dan saya akan mencoba menjernihkannya untuk Anda.
Ben

Jawaban:

5

Lihatlah y_train. Itu array([0, 0, 1]). Ini berarti pemisahan Anda tidak mengambil sampel di mana y = 2. Jadi, model Anda tidak tahu bahwa kelas y = 2 ada.

Anda memerlukan lebih banyak sampel untuk mengembalikan sesuatu yang berarti.

Periksa juga dokumen untuk memahami bagaimana menafsirkan output.

Ben
sumber
1
Ini benar. Jika Anda mengatur y = np.array([0,2,1,0,1,2])dan random_state=2sekarang Anda akan melihat 3 kolom output
tdc
Jawabannya menjawab pertanyaan saya. Terima kasih banyak. Dan bagaimana urutan kolomnya? Selalu naik?
HonzaB
Lari clf.classes_. Kolom akan berada dalam urutan itu.
Ben
Sama seperti ini clf.fit(X_train,y_train).classes_:?
HonzaB
1
Saya pikir itu akan berhasil tetapi Anda bisa berlari clf.classes_ setelah berlariclf.fit(X_train,y_train)
Ben