首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多标签分类交叉验证法评价单个标签的F分

多标签分类交叉验证法评价单个标签的F分
EN

Stack Overflow用户
提问于 2017-10-14 14:45:32
回答 1查看 2.1K关注 0票数 1

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

EN

回答 1

Stack Overflow用户

发布于 2017-10-14 15:54:52

如果您有y和y_predict,可以使用scikit-learn的分类报告。

代码语言:javascript
复制
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()))

输出

代码语言:javascript
复制
             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

或者,您可以使用

代码语言:javascript
复制
print(f1_score(y, y_pred,average=None))

你就会得到标签上的分数

代码语言:javascript
复制
[ 0.   0.   0.8]

当然,您可以使用一个http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html,并通过所有的折叠,并得到他们的f1为每个标签,但我不明白你为什么要这样做。

在使用交叉验证的情况下,您可以获得每倍的f1分数,这是因为评分是用来评估模型并选择最佳的。参见下面的示例

代码语言:javascript
复制
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个。

代码语言:javascript
复制
array([ 1.        ,  0.93265993,  1.        ,  1.        ,  1.        ,
        0.93265993,  0.93265993,  1.        ,  1.        ,  1.        ])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46745787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档