Comment calculer la matrice de confusion pour multiclasse en Scikit?

J'ai une tâche de classification multiclasse. Quand je lance mon script basé sur le scikit exemple comme suit:

classifier = OneVsRestClassifier(GradientBoostingClassifier(n_estimators=70, max_depth=3, learning_rate=.02))

y_pred = classifier.fit(X_train, y_train).predict(X_test)
cnf_matrix = confusion_matrix(y_test, y_pred)

J'obtiens cette erreur:

File "C:\ProgramData\Anaconda2\lib\site-packages\sklearn\metrics\classification.py", line 242, in confusion_matrix
    raise ValueError("%s is not supported" % y_type)
ValueError: multilabel-indicator is not supported

J'ai essayé de passer le labels=classifier.classes_ à confusion_matrix(), mais il n'aide pas.

y_test et y_pred sont que le suivi:

y_test =
array([[0, 0, 0, 1, 0, 0],
   [0, 0, 0, 0, 1, 0],
   [0, 1, 0, 0, 0, 0],
   ..., 
   [0, 0, 0, 0, 0, 1],
   [0, 0, 0, 1, 0, 0],
   [0, 0, 0, 0, 1, 0]])


y_pred = 
array([[0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0],
   ..., 
   [0, 0, 0, 0, 0, 1],
   [0, 0, 0, 0, 0, 1],
   [0, 0, 0, 0, 0, 0]])
Pourquoi avez-vous y_pred et y_test comme un chaud codé tableaux? Quelles sont les originaux de vos étiquettes de classe? Vous devriez donner à votre code, à partir de la façon dont vous avez la transformation de votre y.
Je binarized y_train et y_test comme y_test = label_binarize(y_test, classes=[0, 1, 2, 3, 4, 5]) pour OneVsRestClassifier().
Vous devriez mettre vos classes d'origine (pas binarized) dans le confusion_matrix. Vous avez besoin d'inverser transformer votre y_pred pour obtenir les classes d'origine.
Je vous remercie. J'ai utilisé de la non-binarized version et qu'il n'en résout.

OriginalL'auteur YNr | 2017-04-27