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
Je binarized
Vous devriez mettre vos classes d'origine (pas binarized) dans le
Je vous remercie. J'ai utilisé de la non-binarized version et qu'il n'en résout.
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
Vous devez vous connecter pour publier un commentaire.
Vous devez d'abord créer l'étiquette sur le tableau de sortie.
Disons que vous avez de 3 classes: 'chat', 'chien', 'maison' indexé: 0,1,2 .
Et la prédiction pour 2 échantillons est: "chien", "maison".
Votre sortie sera:
exécuter y_pred.argmax(1) pour obtenir: [1,2]
Ce tableau représente l'étiquette originale index, qui signifie:
['chien', 'maison']
OriginalL'auteur Naomi Fridman
Cela a fonctionné pour moi:
où
y_test
ety_predict
sont variables catégorielles comme un chaud vecteurs.OriginalL'auteur ak2205
Je viens soustrait les sorties
y_test
de la matrice à partir de la prédictiony_pred
de la matrice tout en gardant l'catégorique format. En cas de-1
, j'ai pris un faux négatif, alors que dans le cas de1
, un faux positif.Suivante:
De se retrouver avec la notation suivante:
Enfin, effectuer un peu naïf de comptage, vous pouvez produire toute confusion métrique.
OriginalL'auteur mcchran