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

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

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

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

扫描二维码关注公众号,回复: 15576017 查看本文章

猜你喜欢

转载自blog.csdn.net/fangqi100/article/details/130368812