Je suis cet exemple sur le site Web scikit-learn pour effectuer une classification multi-sorties avec un modèle de forêt aléatoire.
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))
De cela, predict_proba
j'obtiens un 2 tableaux 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]])]
Je m'attendais vraiment à une matrice n_sample
par n_classes
. J'ai du mal à comprendre comment cela se rapporte à la probabilité des classes présentes.
Les documents pour les predict_proba
états:
tableau de forme = [n_échantillons, n_classes], ou une liste de n_sorties de tels tableaux si n_sorties> 1.
Les probabilités de classe des échantillons d'entrée. L'ordre des classes correspond à celui de l'attribut classes_.
Je suppose que j'ai ce dernier dans la description, mais j'ai toujours du mal à comprendre comment cela se rapporte à mes probabilités de classe.
De plus, lorsque j'essaie d'accéder à l' classes_
attribut du forest
modèle, j'obtiens un AttributeError
et cet attribut n'existe pas sur le MultiOutputClassifier
. Comment relier les classes à la sortie?
print(forest.classes_)
AttributeError: 'RandomForestClassifier' object has no attribute 'classes_'
Dans le
MultiOutputClassifier
, vous traitez les deux sorties comme des tâches de classification distinctes; à partir des documents que vous avez liés:Ainsi, les deux tableaux de la liste résultante représentent chacun des deux classificateurs / variables dépendantes. Les tableaux sont alors les sorties de classification binaire (colonnes qui sont une probabilité de classe 0, une probabilité de classe 1) que @ chrisckwong821 a mentionnées, mais une pour chaque problème.
En d'autres termes, la valeur de retour de
predict_proba
sera une liste dont la longueur est égale à la largeur de votrey
, c'estn_outputs
-à- dire dans votre cas 2. Votre citation despredict_proba
références de la documentationn_outputs
, qui est introduite dans la documentation pourfit
:la source
n_outputs
Pour la première question:
Le premier tableau 5x2 vous donne les probabilités des 5 échantillons de test classés dans la première classe. De plus, la première colonne de ce tableau 5x2 vous indique "la probabilité que l'échantillon de test ne soit pas classé comme première classe" et la deuxième colonne de ce tableau 5x2 vous indique "la probabilité que l'échantillon de test soit classé comme première classe ".
De même, le deuxième tableau 5x2 vous donne la probabilité de classification de tester des échantillons dans la deuxième classe.
Si vous souhaitez vérifier cela, vous pouvez comparer la valeur de ces tableaux avec les résultats de
predict
.Parfois, le retour de
predict_proba
peut vous donner une liste qui contient des tableaux Nx1 et des tableaux Nx2. Si tel est le cas, aucune donnée de test n'est classée dans les classes représentées par les tableaux Nx1.la source