机器学习的模型随机打印标签,ACC和NMI计算方法?

机器学习的模型随机打印标签,ACC和NMI计算方法?

机器学习中实现了一个简单的神经网络,但发现在验证的时候,模型对数据打的标签很随意,比如一个四分类问题,groundtruth(简称gt)是gt = [0,0,0,1,2,3,3],而模型在验证集上打的标签是lb = [3,3,3,0,1,2,2],但acc(准确度)是100%,明明标签的数字都对不上,我很好奇它使怎么识别的?

具体代码:

def clustering_acc(y_true, y_pred):
y_true = y_true.astype(np.int64)
assert y_pred.size == y_true.size
D = max(y_pred.max(), y_true.max()) + 1
w = np.zeros((D, D), dtype=np.int64)
for in range(y_pred.size):
w[y_pred[i], y_true[i]] += 1
ind = linear_assignment(w.max() - w)

return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size

acc = clustering_acc(gt,lb)

输出结果为: 1.0

 

如果在分类问题中,gt = [0,0,0,1,2,3,3]和lb = [3,3,3,0,1,2,2]的准确率是0,因为在分类问题中哪个样本属于哪个类别都是一一对应好的。而在聚类问题中,我们的目的只是把样本分成若干个簇而每个簇不一定要一一对应。

举个例子:现有三个簇A、B、C,且簇中的样本数分别为20、30、50个。

经过聚类算法聚类后得到了三个簇,样本数分别为25、40和35。那这三个簇分别对应A、B和C哪个簇呢? 这时我们就按各个簇中哪个类别的样本数最多,就把它归为哪个簇,然后计算准确率。具体的,假设上诉聚类结果详细情况为第一簇25(其中最多的20个为B)、第二个簇40(最多的28个为C)和第三个簇35(最多的18个A),因此我们就可以认为这三个簇分别对应B、C和A。

则最终准确率为:(20+28+18)/100=0.66

一个极端例子:gt = [0,0,0,0,1,1,1]和lb = [1,1,1,1,0,0,0],如果是分类的结果,那么准确率为0;但如果是聚类的结果那么准确率为1

 

既然机器学习的模型打标签很随机,那么ACC和NMI是怎么计算的? - 空字符的回答 - 知乎 https://www.zhihu.com/question/372713634/answer/1022964929

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值