首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换标签的F1分数

切换标签的F1分数
EN

Stack Overflow用户
提问于 2019-10-26 20:30:47
回答 1查看 262关注 0票数 0

我想使用sklearn的几个评估分数(NMI,ARI,F1),使用一些合成数据来评估一种聚类方法。虽然NMI和ARI工作得很好,但在标签被交换的地方,我确实遇到了关于F1分数的问题,例如,真实标签是[0, 0, 0, 1, 1, 1],而预测标签是[1, 1, 1, 0, 0, 0]。对于集群,这是一个完美的结果,因为两个集群都被正确识别,只有标签被切换:集群1具有标签0,反之亦然。F1分数似乎无法处理此问题,因为我的代码生成的F1分数为0.0。我假设发生这种情况是因为标签不具有相同的名称/编号,但是我不能手动为每个集群切换标签名称,因为这是一种很大的工作方式,特别是对于大型数据集,那么有没有更通用的解决方案?

示例代码:

代码语言:javascript
复制
from sklearn.metrics import f1_score

if __name__ == '__main__':
    labels = [0, 0, 0, 1, 1, 1]
    pred = [1, 1, 1, 0, 0, 0]
    print(f1_score(labels, pred, average='micro')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-26 22:58:38

F1分数的计算方法为:

代码语言:javascript
复制
2*((precision*recall)/(precision+recall))

我相信你们都知道精度是这样定义的:

代码语言:javascript
复制
TP/(TP+FP)

召回是:

代码语言:javascript
复制
TP/(TP+FN)

所以在上面的例子中,TP=0FP=3FN=3

因此,准确率和召回率都为0。这反过来使您的F1分数计算看起来像这样

代码语言:javascript
复制
2*((0*0)/(0+0))

实际上,我认为应该是错误的,因为你是除以零,但也许scikit learn会以不同的方式处理它。

因此,在您的情况下,如果真的是这样,您必须正确地标记预测以匹配基本事实。F1分数永远不会知道这些信息。问题可能是标签如何应用于您的集群,或者您的测试数据而不是f1分数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58570781

复制
相关文章

相似问题

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