Interpretazione dell'output di Scikit predict_proba


12

Sto lavorando con la libreria scikit-learn in Python. Nel codice seguente, sto predicendo la probabilità ma non so come leggere l'output.

Test dei dati

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

Dividi il set di dati

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

Calcola la probabilità

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

Il risultato

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

L'elenco X_test contiene 3 array (ho 6 campioni e test_size = 0,5), quindi anche l'output ne ha 3.

Ma sto prevedendo 3 valori (0,1,2), quindi perché ottengo solo 2 elementi in ciascun array?

Come devo leggere l'output?

Ho anche notato, quando modifico il numero di valori distinti in y, il numero di colonne nell'output è sempre un conteggio distinto di y -1.


Benvenuto in CrossValidated. Hai visto la mia risposta qui sotto? Se ha risolto la tua domanda, vai avanti e contrassegnalo come la risposta corretta. Altrimenti, fammi sapere cosa manca e cercherò di risolverlo.
Ben

Risposte:


5

Dai un'occhiata y_train. Lo è array([0, 0, 1]). Questo significa che la tua divisione non ha prelevato il campione dove y = 2. Quindi, il tuo modello non ha idea dell'esistenza della classe y = 2.

Hai bisogno di più campioni per questo per restituire qualcosa di significativo.

Consulta anche i documenti per capire come interpretare l'output.


1
Questo è corretto. Se imposti y = np.array([0,2,1,0,1,2])e random_state=2vedrai ora 3 colonne di output
tdc

La risposta ha risolto la mia domanda. Grazie mille. E in quale ordine sono le colonne per favore? Sta salendo sempre?
HonzaB,

Corri clf.classes_. Le colonne saranno in questo ordine.
Ben

Proprio così clf.fit(X_train,y_train).classes_:?
HonzaB,

1
Penso che funzionerà, ma puoi correre clf.classes_ dopo aver corsoclf.fit(X_train,y_train)
Ben
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.