1

我正在尝试使用sklearn的cross_val_score函数(http://scikit-learn.org/stable/modules/cross_validation.html)进行多标签分类。如何使用Sklearn的cross_valation(多标签分类)获得每个标签的F1分数

scores = cross_validation.cross_val_score(clf, X_train, y_train, 
     cv = 10, scoring = make_scorer(f1_score, average = None)) 

我希望F1-得分为每个标签返回。这种类型的第一个折叠的作品,但右后给出了一个错误:

ValueError: scoring must return a number, got [ 0.55555556 0.81038961 0.82474227 0.67153285 0.76494024 0.89087657 0.93502377 0.11764706 0.81611208] (<type 'numpy.ndarray'>) 

我认为这引发错误,因为cross_val_score预计要返回一个数字。是否有其他方式可以使用cross_val_score获得每个标签的F1分数?

+0

[多分类分类的每个分类的F1分数可能重复](http://stackoverflow.com/questions/37615544/f1-score-per-class-for-multi-class-classification) – ncfirth

回答

0

我通过在/ scikit-learn/sklearn/cross_validation.py中进行了一些更改来解决了该问题。更具体地我评论这些行:

1651  if not isinstance(score, numbers.Number): 
1652   raise ValueError("scoring must return a number, got %s (%s) instead." 
1653       % (str(score), type(score))) 

这消除了检查的类型是否是一个数字,从而允许numpy的阵列要传递。

0

我一般用

from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, classification_report, confusion_matrix 
metrics.classification_report(y_test, y_predicted2) 

通常这给了我所有的值需要评估我的模型性能。