我想用sklearn中的几个评估分数(NMI,ARI,F1)来评估一个带有一些合成数据的聚类方法。虽然NMI和ARI工作正常,但我确实存在有关F1分数的问题,其中标签被切换,例如,真正的标签是[0, 0, 0, 1, 1, 1]
,预测的标签是[1, 1, 1, 0, 0, 0]
。对于聚类来说,这是一个完美的结果,因为两个聚类都被正确识别,只有标签被切换:聚类1
有标签0
,反之亦然。F1分数似乎无法处理这个问题,因为我的代码生成了0.0
的F1分数。我假设发生这种情况是因为标签没有相同的名称/编号,但是我不能手动切换每个集群的标签名称,因为这是一种非常有效的方法,特别是对于大型数据集,那么有没有更通用的解决方案呢?你知道吗
示例代码:
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')
F1分数计算如下:
我相信你知道精度的定义是:
召回是:
在上述情况下,
TP=0
,FP=3
,FN=3
因此精确度和召回率都是0。这反过来又使你的F1成绩计算看起来像
事实上,我相信当你被0除的时候应该会出错,但是也许scikitlearn处理的方式不同。你知道吗
因此,在你的情况下,你将必须正确地标记预测,以符合地面真相,如果这是真正的情况。F1的分数永远不会知道这些信息。问题可能是如何将标签应用于簇,或者测试数据,而不是f1分数。你知道吗
相关问题 更多 >
编程相关推荐