目前有两组向量:
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 查看本文章