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.
python
scikit-learn
HonzaB
fuente
fuente
Respuestas:
Echa un vistazo a
y_train
. Esarray([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.
fuente
y = np.array([0,2,1,0,1,2])
yrandom_state=2
ahora verá 3 columnas de salidaclf.classes_
. Las columnas estarán en ese orden.clf.fit(X_train,y_train).classes_
?clf.classes_
después de correrclf.fit(X_train,y_train)