Ich folge diesem Beispiel auf der Website von scikit-learn, um eine Multi-Output-Klassifizierung mit einem Random Forest-Modell durchzuführen.
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))
Daraus predict_proba
erhalte ich 2 5x2 Arrays:
[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]])]
Ich erwarte wirklich ein n_sample
von n_classes
Matrix. Ich kämpfe darum zu verstehen, wie dies mit der Wahrscheinlichkeit der anwesenden Klassen zusammenhängt.
Die Dokumente für predict_proba
Staaten:
array of shape = [n_samples, n_classes] oder eine Liste von n_outputs solcher Arrays, wenn n_outputs> 1.
Die Klassenwahrscheinlichkeiten der Eingabebeispiele. Die Reihenfolge der Klassen entspricht der im Attribut classes_.
Ich schätze, ich habe das letztere in der Beschreibung, aber ich habe immer noch Schwierigkeiten zu verstehen, wie dies mit meinen Klassenwahrscheinlichkeiten zusammenhängt.
Wenn ich versuche, auf das classes_
Attribut für das forest
Modell zuzugreifen, erhalte ich außerdem eine AttributeError
und dieses Attribut ist auf der nicht vorhanden MultiOutputClassifier
. Wie kann ich die Klassen mit der Ausgabe verknüpfen?
print(forest.classes_)
AttributeError: 'RandomForestClassifier' object has no attribute 'classes_'
In der
MultiOutputClassifier
behandeln Sie die beiden Ausgaben als separate Klassifizierungsaufgaben. aus den von Ihnen verlinkten Dokumenten:Die zwei Arrays in der resultierenden Liste repräsentieren also jeden der beiden Klassifizierer / abhängigen Variablen. Die Arrays sind dann die binären Klassifizierungsausgaben (Spalten, die Wahrscheinlichkeit der Klasse 0, Wahrscheinlichkeit der Klasse 1 sind), die @ chrisckwong821 erwähnte, aber eine für jedes Problem.
Mit anderen Worten, der Rückgabewert von
predict_proba
ist eine Liste, deren Länge der Breite Ihrery
, dhn_outputs
in Ihrem Fall 2, entspricht. Ihr Zitat aus denpredict_proba
Dokumentationsreferenzenn_outputs
, das in der Dokumentation für Folgendes eingeführt wirdfit
:quelle
n_outputs
Für die erste Frage:
Das erste 5x2-Array gibt Ihnen die Wahrscheinlichkeiten der 5 Testproben an, die in der ersten Klasse klassifiziert sind. Darüber hinaus gibt die erste Spalte dieses 5 x 2-Arrays an, "wie wahrscheinlich es ist, dass das Testmuster nicht als erste Klasse eingestuft wird", und die zweite Spalte dieses 5 x 2-Arrays gibt an, "wie wahrscheinlich es ist, dass das Testmuster als erste Klasse eingestuft wird ".
In ähnlicher Weise gibt Ihnen das zweite 5x2-Array die Klassifizierungswahrscheinlichkeit für das Testen von Stichproben in der zweiten Klasse.
Wenn Sie dies überprüfen möchten, können Sie den Wert in diesen Arrays mit den Ergebnissen von kontrastieren
predict
.In
predict_proba
einigen Fällen erhalten Sie bei der Rückkehr von möglicherweise eine Liste mit Nx1-Arrays und Nx2-Arrays. Wenn dies der Fall ist, werden keine Testdaten in die Nx1-Arrays klassifiziert, die Klassen darstellen.quelle