2015-10-25 1 views
1

Je suis en train de calculer macro-F1 avec scikit dans multi-label classificationscikit Calculons F1 dans le classement multilabel

from sklearn.metrics import f1_score 

y_true = [[1,2,3]] 
y_pred = [[1,2,3]] 

print f1_score(y_true, y_pred, average='macro') 

Cependant, il échoue avec le message d'erreur

ValueError: multiclass-multioutput is not supported 

Comment puis-je calculer macro-F1 avec plusieurs classification des étiquettes?

Répondre

3

Dans le scikit-learn version actuelle, vos résultats de code dans l'avertissement suivant:

DeprecationWarning: Direct support for sequence of sequences multilabel 
    representation will be unavailable from version 0.17. Use 
    sklearn.preprocessing.MultiLabelBinarizer to convert to a label 
    indicator representation. 

suivant ces conseils, vous pouvez utiliser sklearn.preprocessing.MultiLabelBinarizer pour convertir cette classe multilabel à une forme acceptée par f1_score. Par exemple:

from sklearn.preprocessing import MultiLabelBinarizer 
from sklearn.metrics import f1_score 

y_true = [[1,2,3]] 
y_pred = [[1,2,3]] 

m = MultiLabelBinarizer().fit(y_true) 

f1_score(m.transform(y_true), 
     m.transform(y_pred), 
     average='macro') 
# 1.0 
+0

Vous vous demandez comment résoudre ce problème pour un problème de régression multiple. – TheNastyOne