Interprétation de sortie de Scikit Predict_Proba

12

Je travaille avec la bibliothèque scikit-learn en python. Dans le code ci-dessous, je prédis la probabilité mais je ne sais pas lire la sortie.

Test des données

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

Fractionner l'ensemble de données

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

Calculez la probabilité

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

Le résultat

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

La liste X_test contient 3 tableaux (j'ai 6 échantillons et test_size = 0,5) donc la sortie en a 3 aussi.

Mais je prédis 3 valeurs (0,1,2), alors pourquoi ne reçois-je que 2 éléments dans chaque tableau?

Comment lire la sortie?

J'ai également remarqué que lorsque je modifie le nombre de valeurs distinctes en y, le nombre de colonnes en sortie est toujours un nombre distinct de y -1.

HonzaB
la source
Bienvenue sur CrossValidated. Avez-vous vu ma réponse ci-dessous? Si cela a résolu votre question, allez-y et marquez-la comme la bonne réponse. Sinon, faites-moi savoir ce qui manque et je vais essayer de vous éclaircir.
Ben

Réponses:

5

Jetez un oeil à y_train. Ça l'est array([0, 0, 1]). Cela signifie que votre division n'a pas récupéré l'échantillon où y = 2. Donc, votre modèle n'a aucune idée que la classe y = 2 existe.

Vous avez besoin de plus d'échantillons pour que cela renvoie quelque chose de significatif.

Consultez également la documentation pour comprendre comment interpréter la sortie.

Ben
la source
1
C'est correct. Si vous définissez y = np.array([0,2,1,0,1,2])et random_state=2vous verrez maintenant 3 colonnes de sortie
tdc
La réponse a résolu ma question. Merci beaucoup. Et dans quel ordre sont les colonnes s'il vous plaît? C'est toujours ascendant?
HonzaB
Courez clf.classes_. Les colonnes seront dans cet ordre.
Ben
Juste comme ça clf.fit(X_train,y_train).classes_:?
HonzaB
1
Je pense que ça marchera mais vous pouvez juste courir clf.classes_ après avoir couruclf.fit(X_train,y_train)
Ben