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

标签 python scikit-learn cross-validation multilabel-classification

我正在尝试使用 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 分数?

最佳答案

我通过对 .../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 数组。

关于python - 如何使用 Sklearn 的 cross_validation(多标签分类)获得每个标签的 F1 分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814952/

相关文章:

python - 迭代从 excel 文件列创建的 pandas 数据框时出错

python - 通过遍历 Pandas 数据框中的行来创建新列

python - (重新)在 Python 中加权随机 CSV 样本

python - Numpy矩阵组合

python - 安装 scikit-learn python3 时出错

python - 如何解决 ValueError : The number of classes has to be greater than one; got 1 class

python - 从python中的sklearn线性回归获取置信区间

python - 使用 Scikit-Learn GridSearchCV 与 PredefinedSplit 进行交叉验证 - 交叉验证结果非常好

r - R 中的循环函数

python - 交叉验证网格搜索背后的理论