调整兰德系数-评估聚类效果的指标

调整兰德系数(Adjusted Rand Index, ARI)是一种用于评估聚类结果与真实标签之间相似度的指标。它在传统兰德系数(Rand Index, RI)的基础上进行了调整,考虑了随机聚类的期望值,因此能够更公平地评估聚类结果。

调整兰德系数的计算步骤

1. 构建混淆矩阵

给定两个聚类结果:真实标签 ( T ) 和聚类标签 ( C ),构建一个混淆矩阵 ( M ),其中 ( M_{ij} ) 表示真实标签为 ( i ) 且聚类标签为 ( j ) 的样本数量。

2. 计算组合数

  • ( a ):同属于一个簇且同属于一个真实类的样本对数。
  • ( b ):同属于一个簇但不属于一个真实类的样本对数。
  • ( c ):不属于一个簇但同属于一个真实类的样本对数。
  • ( d ):不属于一个簇且不属于一个真实类的样本对数。

3. 计算兰德系数

兰德系数 ( RI ) 的计算公式为:

RI = \\frac{a + d}{a + b + c + d}

4. 计算调整兰德系数

调整兰德系数 ( ARI ) 的计算公式为:

ARI = \\frac{\\text{Index} - \\text{Expected Index}}{\\text{Max Index} - \\text{Expected Index}}

其中:

  • (\text{Index} = a + d)
  • (\text{Expected Index}) 和 (\text{Max Index}) 的计算如下:

详细公式

混淆矩阵

假设有 ( n ) 个样本,真实标签 ( T ) 有 ( k ) 个类别,聚类标签 ( C ) 有 ( m ) 个簇。混淆矩阵 ( M ) 的元素 ( M_{ij} ) 表示真实标签为 ( i ) 且聚类标签为 ( j ) 的样本数量。

组合数计算

a = \\sum_{ij} \\binom{M_{ij}}{2}

b = \\sum_{i} \\binom{\\sum_{j} M_{ij}}{2} - a

c = \\sum_{j} \\binom{\\sum_{i} M_{ij}}{2} - a

d = \\binom{n}{2} - (a + b + c)

调整兰德系数计算

ARI = \\frac{\\sum_{ij} \\binom{M_{ij}}{2} - \\left\[ \\frac{\\sum_{i} \\binom{\\sum_{j} M_{ij}}{2} \\sum_{j} \\binom{\\sum_{i} M_{ij}}{2}}{\\binom{n}{2}} \\right\]}{\\frac{1}{2} \\left\[ \\sum_{i} \\binom{\\sum_{j} M_{ij}}{2} + \\sum_{j} \\binom{\\sum_{i} M_{ij}}{2} \\right\] - \\left\[ \\frac{\\sum_{i} \\binom{\\sum_{j} M_{ij}}{2} \\sum_{j} \\binom{\\sum_{i} M_{ij}}{2}}{\\binom{n}{2}} \\right\]}

示例计算

假设我们有以下数据:

真实标签 ( T ):[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]

聚类标签 ( C ):[1, 1, 0, 0, 2, 2, 1, 1, 3, 3]

构建混淆矩阵:

M = \\begin{bmatrix} 0 \& 2 \& 0 \& 0\\ 2 \& 0 \& 0 \& 0\\ 0 \& 0 \& 2 \& 0\\ 0 \& 2 \& 0 \& 0\\ 0 \& 0 \& 0 \& 2 \\end{bmatrix}

其中,( M_{ij} ) 表示真实标签为 ( i ) 且聚类标签为 ( j ) 的样本数量。

计算组合数:

( a ):同属于一个簇且同属于一个真实类的样本对数:

a = \\sum_{ij} \\binom{M_{ij}}{2} = \\binom{2}{2} + \\binom{2}{2} + \\binom{2}{2} + \\binom{2}{2} + \\binom{2}{2} = 1 + 1 + 1 + 1 + 1 = 5

( b ):同属于一个簇但不属于一个真实类的样本对数:

b = \\sum_{j} \\binom{\\sum_{i} M_{ij}}{2} - a = \\left( \\binom{4}{2} + \\binom{2}{2} + \\binom{2}{2} + \\binom{2}{2} \\right) - 5 = (6 + 1 + 1 + 1) - 5 = 4

( c ):不属于一个簇但同属于一个真实类的样本对数:

c = \\sum_{i} \\binom{\\sum_{j} M_{ij}}{2} - a = \\left( \\binom{2}{2} + \\binom{2}{2} + \\binom{2}{2} + \\binom{2}{2} + \\binom{2}{2} \\right) - 5 = (1 + 1 + 1 + 1 + 1) - 5 = 0

( d ):不属于一个簇且不属于一个真实类的样本对数:

d = \\binom{n}{2} - (a + b + c) = \\binom{10}{2} - (5 + 4 + 0) = 45 - 9 = 36

计算兰德系数:

RI = \\frac{a + d}{a + b + c + d} = \\frac{5 + 36}{5 + 4 + 0 + 36} = \\frac{41}{45} \\approx 0.9111

计算调整兰德系数:

期望指数 ( \text{Expected Index} ):

\\text{Expected Index} = \\frac{\\left( \\sum_{i} \\binom{\\sum_{j} M_{ij}}{2} \\right) \\left( \\sum_{j} \\binom{\\sum_{i} M_{ij}}{2} \\right)}{\\binom{n}{2}} = \\frac{5 \\times 9}{45} = 1

最大指数 ( \text{Max Index} ):

\\text{Max Index} = \\frac{1}{2} \\left( \\sum_{i} \\binom{\\sum_{j} M_{ij}}{2} + \\sum_{j} \\binom{\\sum_{i} M_{ij}}{2} \\right) = \\frac{1}{2} (5 + 9) = 7

调整兰德系数 ( ARI ):

ARI = \\frac{\\text{Index} - \\text{Expected Index}}{\\text{Max Index} - \\text{Expected Index}} = \\frac{41 - 1}{45 - 1} = \\frac{40}{44} \\approx 0.9091

调整兰德系数示例

调整兰德系数(Adjusted Rand Index, ARI)是一种用于评估聚类结果与真实标签之间一致性的指标。它考虑了聚类中的随机性,提供了一个校正后的分数,使得即使在随机标签的情况下,ARI的期望值也接近于零。

调整兰德系数的计算

调整兰德系数的公式如下:

A R I = R I − E [ R I ] max ⁡ ( R I ) − E [ R I ] ARI = \frac{{RI - E[RI]}}{{\max(RI) - E[RI]}} ARI=max(RI)−E[RI]RI−E[RI]

其中,RI 是兰德系数(Rand Index), E [ R I ] E[RI] E[RI] 是期望的兰德系数。

示例

假设我们有一个包含真实标签和聚类结果的数据集。我们将使用 sklearn 库来计算调整兰德系数。

示例数据

python 复制代码
from sklearn.metrics import adjusted_rand_score

# 真实标签
true_labels = [0, 0, 1, 1, 2, 2, 3, 3]

# 聚类结果 1
cluster_labels_1 = [0, 0, 1, 1, 2, 2, 3, 3]

# 聚类结果 2
cluster_labels_2 = [0, 0, 1, 1, 3, 3, 2, 2]

# 聚类结果 3
cluster_labels_3 = [0, 1, 0, 1, 2, 3, 2, 3]

# 计算调整兰德系数
ari_1 = adjusted_rand_score(true_labels, cluster_labels_1)
ari_2 = adjusted_rand_score(true_labels, cluster_labels_2)
ari_3 = adjusted_rand_score(true_labels, cluster_labels_3)

print(f"ARI for cluster_labels_1: {ari_1:.2f}")
print(f"ARI for cluster_labels_2: {ari_2:.2f}")
print(f"ARI for cluster_labels_3: {ari_3:.2f}")

输出结果

plaintext 复制代码
ARI for cluster_labels_1: 1.00
ARI for cluster_labels_2: 0.57
ARI for cluster_labels_3: 0.00

解释
ARI for cluster_labels_1: 1.00
这个结果表明聚类结果与真实标签完全一致,调整兰德系数为1,表示完美匹配。

ARI for cluster_labels_2: 0.57
这个结果表明聚类结果与真实标签有一定的一致性,但并不完美。调整兰德系数为0.57,表示中等的一致性。

ARI for cluster_labels_3: 0.00
这个结果表明聚类结果与真实标签几乎没有一致性,调整兰德系数为0,表示随机分配。
相关推荐
生信碱移2 小时前
大语言模型时代,单细胞注释也需要集思广益(mLLMCelltype)
人工智能·经验分享·深度学习·语言模型·自然语言处理·数据挖掘·数据可视化
88号技师2 小时前
【1区SCI】Fusion entropy融合熵,多尺度,复合多尺度、时移多尺度、层次 + 故障识别、诊断-matlab代码
开发语言·机器学习·matlab·时序分析·故障诊断·信息熵·特征提取
硅谷秋水3 小时前
通过模仿学习实现机器人灵巧操作:综述(上)
人工智能·深度学习·机器学习·计算机视觉·语言模型·机器人
仙人掌_lz3 小时前
人工智能与机器学习:Python从零实现性回归模型
人工智能·python·机器学习·线性回归
量子-Alex3 小时前
【遥感图像分类】【综述】遥感影像分类:全面综述与应用
人工智能·分类·数据挖掘
阡之尘埃3 小时前
Python数据分析案例73——基于多种异常值监测算法探查内幕交易信息
人工智能·python·机器学习·数据分析·异常检测·无监督学习
极小狐4 小时前
极狐GitLab 如何 cherry-pick 变更?
人工智能·git·机器学习·gitlab
旧故新长5 小时前
支持Function Call的本地ollama模型对比评测-》开发代理agent
人工智能·深度学习·机器学习
一只可爱的小猴子6 小时前
2022李宏毅老师机器学习课程笔记
人工智能·笔记·机器学习
爱研究的小陈6 小时前
Day 4:机器学习初探——从监督学习到无监督学习
机器学习