Saya mengikuti contoh ini di situs scikit-learn untuk melakukan klasifikasi multioutput dengan model Random Forest.
from sklearn.datasets import make_classification
from sklearn.multioutput import MultiOutputClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.utils import shuffle
import numpy as np
X, y1 = make_classification(n_samples=5, n_features=5, n_informative=2, n_classes=2, random_state=1)
y2 = shuffle(y1, random_state=1)
Y = np.vstack((y1, y2)).T
forest = RandomForestClassifier(n_estimators=10, random_state=1)
multi_target_forest = MultiOutputClassifier(forest, n_jobs=-1)
multi_target_forest.fit(X, Y).predict(X)
print(multi_target_forest.predict_proba(X))
Dari ini predict_proba
saya mendapatkan 2 array 5x2:
[array([[ 0.8, 0.2],
[ 0.4, 0.6],
[ 0.8, 0.2],
[ 0.9, 0.1],
[ 0.4, 0.6]]), array([[ 0.6, 0.4],
[ 0.1, 0.9],
[ 0.2, 0.8],
[ 0.9, 0.1],
[ 0.9, 0.1]])]
Saya benar-benar mengharapkan n_sample
oleh n_classes
matriks. Saya berjuang untuk memahami bagaimana ini berhubungan dengan probabilitas kelas yang ada.
The docs untuk predict_proba
negara:
array of shape = [n_samples, n_classes], atau daftar n_outputs array tersebut jika n_outputs> 1.
Probabilitas kelas dari sampel input. Urutan kelas sesuai dengan yang ada di atribut class_.
Saya kira saya memiliki yang terakhir dalam deskripsi, tetapi saya masih berjuang untuk memahami bagaimana ini berkaitan dengan probabilitas kelas saya.
Lebih jauh, ketika saya mencoba mengakses classes_
atribut untuk forest
model saya mendapatkan AttributeError
dan atribut ini tidak ada di MultiOutputClassifier
. Bagaimana saya bisa menghubungkan kelas dengan output?
print(forest.classes_)
AttributeError: 'RandomForestClassifier' object has no attribute 'classes_'
Dalam
MultiOutputClassifier
, Anda memperlakukan kedua output sebagai tugas klasifikasi terpisah; dari dokumen yang Anda tautkan:Jadi dua array dalam daftar yang dihasilkan mewakili masing-masing dari dua classifiers / variabel dependen. Array kemudian adalah output klasifikasi biner (kolom yang merupakan probabilitas kelas 0, probabilitas kelas 1) yang disebutkan @ chrisckwong821, tetapi satu untuk setiap masalah.
Dengan kata lain, nilai balik dari
predict_proba
akan menjadi daftar yang panjangnya sama dengan lebar Anday
, yaitun_outputs
, dalam kasus Anda 2. Kutipan Anda daripredict_proba
referensi dokumentasin_outputs
, yang diperkenalkan dalam dokumentasi untukfit
:sumber
n_outputs
Untuk pertanyaan pertama:
Array 5x2 pertama memberi Anda probabilitas dari 5 sampel pengujian yang diklasifikasikan dalam kelas pertama. Selain itu, kolom pertama dari array 5x2 ini memberi tahu Anda "probabilitas bahwa sampel pengujian tidak diklasifikasikan sebagai kelas pertama" dan kolom kedua array 5x2 ini memberi tahu Anda "probabilitas bahwa sampel pengujian diklasifikasikan sebagai kelas pertama ".
Demikian pula, array 5x2 kedua memberi Anda probabilitas klasifikasi untuk menguji sampel di kelas kedua.
Jika Anda ingin memeriksa ini, Anda dapat membandingkan nilai dalam array tersebut dengan hasil dari
predict
.Terkadang, kembalinya
predict_proba
mungkin memberi Anda daftar yang berisi array Nx1 dan array Nx2. Jika demikian, tidak ada data pengujian yang diklasifikasikan ke dalam array Nx1 yang diwakili kelas.sumber