Interpretación de salida de scikit predic_proba

12

Estoy trabajando con la biblioteca scikit-learn en python. En el siguiente código, estoy prediciendo la probabilidad, pero no sé cómo leer la salida.

Datos de prueba

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

Dividir el conjunto de datos

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

Calcular la probabilidad

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

La salida

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

La lista X_test contiene 3 matrices (tengo 6 muestras y test_size = 0,5), por lo que la salida también tiene 3.

Pero estoy prediciendo 3 valores (0,1,2), ¿por qué obtengo solo 2 elementos en cada matriz?

¿Cómo debo leer la salida?

También noté que cuando modifico el número de valores distintos en y, el número de columnas en la salida siempre es un recuento distinto de y -1.

HonzaB
fuente
Bienvenido a CrossValidated. ¿Viste mi respuesta a continuación? Si resolvió su pregunta, continúe y márquela como la respuesta correcta. De lo contrario, hágame saber lo que falta e intentaré aclararlo por usted.
Ben

Respuestas:

5

Echa un vistazo a y_train. Es array([0, 0, 1]). Esto significa que su división no tomó la muestra donde y = 2. Entonces, su modelo no tiene idea de que la clase y = 2 existe.

Necesita más muestras para que esto devuelva algo significativo.

Consulte también los documentos para comprender cómo interpretar la salida.

Ben
fuente
1
Esto es correcto. Si configura y = np.array([0,2,1,0,1,2])y random_state=2ahora verá 3 columnas de salida
tdc
La respuesta resolvió mi pregunta. Muchas gracias. ¿Y en qué orden están las columnas, por favor? ¿Siempre es ascendente?
HonzaB
Ejecutar clf.classes_. Las columnas estarán en ese orden.
Ben
Al igual que este: clf.fit(X_train,y_train).classes_?
HonzaB
1
Creo que eso funcionará, pero puedes correr clf.classes_ después de correrclf.fit(X_train,y_train)
Ben