首页 文章

如何使用Sklearn的cross_validation(多标签分类)获得每个标签的F1分数

提问于
浏览
2

我正在尝试使用sklearn的cross_val_score函数(http://scikit-learn.org/stable/modules/cross_validation.html)进行多标签分类 .

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分数?

2 回答

  • 1

    我一般用

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

    这通常为我提供了评估模型性能所需的所有值 .

  • 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数组 .

相关问题