我想使用sklearn的几个评估得分(NMI,ARI,F1)使用一些综合数据评估聚类方法。当NMI和ARI正常工作时,我确实遇到了有关F1得分的问题,其中标签被切换,例如,真实标签为[0, 0, 0, 1, 1, 1]
,预测标签为[1, 1, 1, 0, 0, 0]
。对于集群来说,这是一个完美的结果,因为已正确识别了两个集群,仅切换了标签:集群1
的标签为0
,反之亦然。 F1分数似乎无法处理,因为我的代码产生的{1}的F1分数。我认为发生这种情况是因为标签没有相同的名称/编号,但是我无法手动为每个群集切换标签名称,因为这是很多工作的方法,尤其是对于大型数据集,因此是否有更通用的解决方案? / p>
示例代码:
0.0
答案 0 :(得分:1)
F1分数的计算公式为:
2*((precision*recall)/(precision+recall))
我确信您知道精度定义为:
TP/(TP+FP)
回想是:
TP/(TP+FN)
因此,在以上TP=0
,FP=3
,FN=3
因此,精度和查全率均为0。这又使F1得分计算看起来像
2*((0*0)/(0+0))
实际上,我认为应该出错,因为您被零除,但是scikit学习的处理方式可能有所不同。
因此,在您的情况下,如果确实是这样,则必须正确标记预测以匹配基本事实。 F1分数永远不会知道该信息。问题可能是标签如何应用于您的集群,或者是您的测试数据,而不是f1分数。