Interpretação de saída Scikit predict_proba

12

Estou trabalhando com a biblioteca scikit-learn em python. No código abaixo, estou prevendo probabilidade, mas não sei ler a saída.

Testando dados

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 o conjunto de dados

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

Calcular a probabilidade

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

A saída

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

A lista X_test contém 3 matrizes (eu tenho 6 amostras e test_size = 0,5), portanto a saída também possui 3.

Mas estou prevendo 3 valores (0,1,2), por que estou recebendo apenas 2 elementos em cada matriz?

Como devo ler a saída?

Também notei que, quando modifico o número de valores distintos em y, o número de colunas na saída é sempre uma contagem distinta de y -1.

HonzaB
fonte
Bem-vindo ao CrossValidated. Você viu minha resposta abaixo? Se a sua pergunta foi resolvida, prossiga e marque-a como a resposta correta. Caso contrário, deixe-me saber o que está faltando e tentarei esclarecê-lo.
Ben

Respostas:

5

Dê uma olhada y_train. É array([0, 0, 1]). Isso significa que sua divisão não pegou a amostra em que y = 2. Portanto, seu modelo não tem idéia de que a classe y = 2 existe.

Você precisa de mais amostras para que isso retorne algo significativo.

Verifique também os documentos para entender como interpretar a saída.

Ben
fonte
1
Isto está correto. Se você definir y = np.array([0,2,1,0,1,2])e random_state=2agora verá 3 colunas de saída
tdc
A resposta resolveu minha pergunta. Muito obrigado. E em que ordem as colunas estão por favor? Está sempre ascendendo?
HonzaB #
Corra clf.classes_. As colunas estarão nessa ordem.
Ben
Assim clf.fit(X_train,y_train).classes_:?
HonraB #
1
Eu acho que vai funcionar, mas você pode simplesmente executar clf.classes_ depois de executarclf.fit(X_train,y_train)
Ben