深度聚类中ARI、AMI以及ACC指标解析

ARI(Adjusted Rand Index)

调整兰德指数,用于度量聚类结果与真实类别之间的相似度。它考虑了随机分配的影响,值越大表示聚类结果与真实类别越相似。ARI的取值范围为-1到1,值越大表示聚类结果越好.

计算公式:

ARI = (sum_ij(C(n_ij, 2)) - [sum_i(C(a_i, 2)) * sum_j(C(b_j, 2)) / C(n, 2)]) / (1/2 * [sum_i(C(a_i, 2)) + sum_j(C(b_j, 2))] - [sum_i(C(a_i, 2)) * sum_j(C(b_j, 2)) / C(n, 2)])

其中,C(n, k)表示组合数,即从n个元素中选取k个元素的组合数。

其中,n_{ij}表示聚类结果中第 i 类与真实类别中第 j 类共同包含的样本数量,a_i 表示聚类结果中第 i 类的样本数量,b_j 表示真实类别中第 j 类的样本数量,n 表示总样本数。
实例:

样本序列真实类别聚类结果
1AA
2AC
3AC
4BC
5BB
6BC
7CB
8CB
9CC

计算聚类结果中相同类别和不同类别的样本数量

  • 如果两个样本属于同一真实类别,同时也属于同一聚类结果,那么它们就是一个共现项,对应的共现矩阵中该项的值加1。
  • 如果两个样本属于同一真实类别,但属于不同的聚类结果,那么它们也是一个共现项,对应的共现矩阵中该项的值加1。
  • 如果两个样本属于不同的真实类别,但属于同一聚类结果,那么它们也是一个共现项,对应的共现矩阵中该项的值加1。
  • 如果两个样本属于不同的真实类别,且属于不同的聚类结果,那么它们不是一个共现项,对应的共现矩阵中该项的值不变。
ABC
A102
B012
C021

接下来,我们需要计算每个类别的样本数量。根据真实类别和聚类结果的分布情况,可以得到:

  • 真实类别A有3个样本,聚类结果A有1个样本。
  • 真实类别B有2个样本,聚类结果B有2个样本。
  • 真实类别C有4个样本,聚类结果C有3个样本。

因此,我们可以得到每个类别的样本数量:

  • 省略
  • 省略
from sklearn import metrics
labels_true = ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C']
labels_pred = ['A', 'C', 'C', 'C', 'B', 'C', 'B', 'B', 'C']
ari = metrics.adjusted_rand_score(labels_true, labels_pred)
print("ARI: {:.3f}".format(ari))
ARI: -0.032

AMI(Adjusted Mutual Information)

调整互信息,用于度量聚类结果与真实类别之间的相似度。它考虑了随机分配和类别不平衡的影响,值越大表示聚类结果与真实类别越相似。AMI的取值范围为0到1,值越大表示聚类结果越好。
计算公式:

AMI = (MI - E[MI]) / (max(H(U), H(V)) - E[MI])

其中,MI表示互信息,H(U)H(V)分别表示聚类结果和真实类别的熵,E[MI]表示随机分配时的期望互信息。

其中,MI 表示聚类结果与真实类别之间的互信息,H(U) 和 H(V) 分别表示聚类结果和真实类别的熵,E[MI]` 表示随机分配时聚类结果与真实类别之间的期望互信息。

from sklearn.metrics import adjusted_mutual_info_score
labels_true = ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C']
labels_pred = ['A', 'C', 'C', 'C', 'B', 'C', 'B', 'B', 'C']
ami = adjusted_mutual_info_score(labels_true, labels_pred)
print("AMI: {:.3f}".format(ami))
AMI:, -0.001

ACC(Accuracy)

准确率,用于度量聚类结果中被正确分类的样本占总样本数的比例。它只考虑了样本分类是否正确,不考虑分类的精度和召回率。ACC的取值范围为0到1,值越大表示聚类结果越好。

计算公式:

ACC = sum_i(n_ii) / n

其中,n_ii表示聚类结果中第i类中被正确分类的样本数量,n表示总样本数。

其中,n_{ii} 表示聚类结果中第 i 类中被正确分类的样本数量,n 表示总样本数。

from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score
labels_true = ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'] # 原始标签
le = LabelEncoder() # 实例化 LabelEncoder
labels_true = le.fit_transform(labels_true) # 将标签转换为数字编码
labels_pred = ['A', 'C', 'C', 'C', 'B', 'C', 'B', 'B', 'C']  # 聚类结果 
labels_pred = le.transform(labels_pred) # 将聚类结果转换为数字编码
acc = accuracy_score(labels_true, labels_pred) # 计算ACC 
print(acc)  # 输出:0.3333333333333333
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值