Ich arbeite mit der Scikit-Learn-Bibliothek in Python. Im folgenden Code prognostiziere ich die Wahrscheinlichkeit, weiß aber nicht, wie ich die Ausgabe lesen soll.
Daten testen
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])
Teilen Sie den Datensatz
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.5, random_state=0)
Berechnen Sie die Wahrscheinlichkeit
clf = RF()
clf.fit(X_train,y_train)
pred_pro = clf.predict_proba(X_test)
print pred_pro
Die Ausgabe
[[ 1. 0.]
[ 1. 0.]
[ 0. 1.]]
Die X_test-Liste enthält 3 Arrays (ich habe 6 Samples und test_size = 0,5), also hat die Ausgabe auch 3.
Aber ich sage 3 Werte (0,1,2) voraus. Warum bekomme ich nur 2 Elemente in jedem Array?
Wie soll ich die Ausgabe lesen?
Ich habe auch festgestellt, dass beim Ändern der Anzahl der unterschiedlichen Werte in y die Anzahl der Spalten in der Ausgabe immer die Anzahl der unterschiedlichen Werte von y -1 ist.
python
scikit-learn
HonzaB
quelle
quelle
Antworten:
Schau es dir an
y_train
. Es istarray([0, 0, 1])
. Dies bedeutet, dass Ihr Split die Stichprobe mit y = 2 nicht aufgenommen hat. Ihr Modell hat also keine Ahnung, dass die Klasse y = 2 existiert.Sie benötigen mehr Beispiele, um etwas Sinnvolles zurückzugeben.
Lesen Sie auch die Dokumente, um zu verstehen, wie die Ausgabe interpretiert wird.
quelle
y = np.array([0,2,1,0,1,2])
undrandom_state=2
Sie werden sehen , jetzt 3 Spalten von Ausgangclf.classes_
. Die Spalten werden in dieser Reihenfolge angezeigt.clf.fit(X_train,y_train).classes_
?clf.classes_
nachdem du gelaufen bistclf.fit(X_train,y_train)