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.
python
scikit-learn
HonzaB
la source
la source
Réponses:
Jetez un oeil à
y_train
. Ça l'estarray([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.
la source
y = np.array([0,2,1,0,1,2])
etrandom_state=2
vous verrez maintenant 3 colonnes de sortieclf.classes_
. Les colonnes seront dans cet ordre.clf.fit(X_train,y_train).classes_
:?clf.classes_
après avoir couruclf.fit(X_train,y_train)