Python 实现分类数据的 Accuracy 【ACC】外部评估指标

目前有两组向量:

predict label = [1,1,2,1,1,2,2,3,3,3]

true label = [2,2,3,2,2,3,3,1,1,1]

如果你此时在做Categorical数据的聚类分析,遇到准确度的度量时,你可能使用了Python的ACC库函数, 他得到的结果却是 ACC = 0.0.

以我们的肉眼也可得知 predict label中 ‘1’是与 true label中 ‘2’ 对应,‘2’ 与 ‘3’对应, ‘3’ 与 ‘1’ 对应。

因此,对应于分类数据的准确度评估,我们还需要做一个最佳匹配的工作,使用的算法是匈牙利算法。链接跳转到我之前介绍匈牙利算法的博客,非常详细!

这里不再赘述,直接上代码:

def CA(labels_true, labels_pre):
    from scipy.optimize import linear_sum_assignment
    nData = len(labels_pre)

    nC = len(np.unique(labels_true)) + 1

    E = np.zeros((nC, nC), int)
    for m in range(nData):
        i1 = labels_pre[m]
        i2 = labels_true[m]
        E[i1, i2] = E[i1, i2] + 1
    E = -E
    cost_matrix = E.T
    # 开销矩阵对应的行索引row_ind;对应行索引的最优指派列索引col_ind
    row_ind, col_ind = linear_sum_assignment(cost_matrix)
    nMatch = 0
    for i in range(nC):
        if i == 0:
            continue
        nMatch = nMatch - E[col_ind[i], i]
    accuracy = nMatch / nData
    return accuracy

代码经过了多次实验的验证,可以放心使用哈~

传入参数:真实标签,聚类分类结果

整理不易,欢迎一键三连~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值