【问题标题】:Evaluate F-score for individual label by cross validation in multi-label classification通过多标签分类中的交叉验证评估单个标签的 F 分数
【发布时间】:2018-03-26 12:38:42
【问题描述】:

我有一个多标签数据集,我想通过交叉验证测试确定每个单独标签的 F 值。是否有在 sklearn 或 skmultilearn 中实现的示例代码?它的文档似乎只为整个数据集提供了价值。

【问题讨论】:

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


    【解决方案1】:

    你可以使用scikit-learn的分类报告,假设你有y和y_predict

    from sklearn.metrics import classification_report
    y = [0, 1, 2, 2, 2]
    y_pred = [1, 0, 2, 2, 1]
    classes = {'Banana':0,'Apple':1,'Orange':2}
    print(classification_report(y, y_pred,target_names=classes.keys()))
    

    输出

                 precision    recall  f1-score   support
    
         Banana       0.00      0.00      0.00         1
          Apple       0.00      0.00      0.00         1
         Orange       1.00      0.67      0.80         3
    
    avg / total       0.60      0.40      0.48         5
    

    你也可以使用

    print(f1_score(y, y_pred,average=None))
    

    你会得到一个列表中的标签分数

    [ 0.   0.   0.8]
    

    当然,您可以使用 KFolds iterator 并遍历所有折叠并获取每个标签的 f1,但我不明白您为什么要这样做这样做。

    在您使用交叉验证的情况下,您可以获得每次折叠的 f1 分数,这是因为评分用于评估模型并选择最佳模型。看下面的例子

    from sklearn import svm, datasets
    from sklearn.model_selection import cross_val_score
    iris = datasets.load_iris()
    X, y = iris.data, iris.target
    clf = svm.SVC()
    cross_val_score(model, X, y, cv=10, scoring='f1_weighted')
    

    将输出一个包含 10 个分数的数组,每折叠 1 个

    array([ 1.        ,  0.93265993,  1.        ,  1.        ,  1.        ,
            0.93265993,  0.93265993,  1.        ,  1.        ,  1.        ])
    

    【讨论】:

    • 感谢您的回答。但我真正问的是多标签数据(每个标签具有二进制类数据的多个输出(标签))而不是多类数据。因此,确定交叉验证分数的输入应该是多标签数据集的 X,y(标签集输出)。使用 score = cross_val_score(model, X, y, cv=10, score = 'f1_weighted') 将返回整个数据集的分数。有什么方法可以获取每个标签的分数吗?
    • 我能看到的唯一方法是对 y 中的每一列(即每组标签)使用交叉验证。像np.vstack([cross_val_score(model, X, y[:,i], cv=10, scoring='f1') for i in range(y.shape[1])]) 这样的东西会生成 n_label x 10 形状的数组
    猜你喜欢
    • 2020-08-21
    • 2015-07-07
    • 2019-10-13
    • 2020-11-06
    • 2013-12-20
    • 1970-01-01
    • 2020-06-01
    • 2016-06-12
    • 2018-09-03
    相关资源
    最近更新 更多