第二章: 机器学习与神经网络概述
第一部分:聚类算法理论与实践
第四节:聚类算法的评价指标
内容:轮廓系数、轮廓图、纯度与互信息
-
轮廓系数(Silhouette Coefficient):衡量样本与本簇的紧密度与其他簇的分离度,值越高聚类效果越好。
-
纯度(Purity):评估聚类结果与真实类别的一致性。
-
归一化互信息(NMI):度量聚类结果与真实标签的相关性,值介于 0 到 1 之间,越接近 1 表示越一致。
聚类是无监督学习,其结果通常缺乏“正确答案”。因此需要借助一系列评价指标来衡量聚类的合理性与效果。指标分为两大类:
-
内在指标(Internal):不依赖真实标签,如轮廓系数。
-
外在指标(External):依赖真实标签,如纯度、互信息等。
一、轮廓系数(Silhouette Coefficient)
轮廓系数同时考虑簇内紧密度与簇间分离度,每个样本的轮廓系数定义如下:
其中:
-
a(i):样本 i 到本簇中其他样本的平均距离(簇内距离)
-
b(i):样本 i 到最近其他簇的所有样本的平均距离(最近簇间距离)
取值范围: [-1, 1]
-
越接近 1:聚类效果好(簇内距离小,簇间距离大)
-
接近 0:边界样本
-
小于 0:错误聚类
二、轮廓图(Silhouette Plot)
轮廓图直观展示每个样本的轮廓系数,按簇分类绘制。分析要点:
-
各簇的宽度应类似(样本分布均衡)
-
所有样本的轮廓系数越高越好
-
用于辅助选取最佳聚类数(如 KMeans)
scikit-learn 示例:
from sklearn.metrics import silhouette_score, silhouette_samples
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
score = silhouette_score(X, labels) # 全局平均
sample_values = silhouette_samples(X, labels) # 每个样本
这是根据 KMeans 聚类结果生成的轮廓图(Silhouette Plot):
-
每条水平条形表示一个样本的轮廓系数;
-
不同颜色代表不同簇;
-
红色虚线表示所有样本的平均轮廓系数(本例中约为 0.85);
-
条形越长、越靠近右侧,表示聚类越合理;
-
该图用于判断聚类结构清晰度及是否存在不合理聚类(如负轮廓系数)。
三、纯度(Purity)
外部指标,基于已知标签衡量聚类的准确性:
其中:
-
:第 k 个聚类
-
:第 j 个真实类别
-
n:样本总数
解释: 每个聚类中占比最多的类别作为该簇的“主类别”,然后计算所有正确分类样本所占的比例。
四、互信息与归一化互信息(NMI)
衡量聚类结果与真实标签之间的“信息重合度”。
互信息(MI)
归一化互信息(NMI)
-
H(C):聚类标签的熵
-
H(T):真实标签的熵
-
,越接近 1 表示聚类越贴合真实标签
scikit-learn 示例:
from sklearn.metrics import normalized_mutual_info_score
nmi = normalized_mutual_info_score(true_labels, predicted_labels)
五、综合比较
指标 | 类型 | 是否需真实标签 | 值域 | 解读方式 |
---|---|---|---|---|
轮廓系数 | 内部指标 | 否 | [−1,1][-1,1] | 越大表示越合理 |
轮廓图 | 内部指标 | 否 | 可视化 | 图形越高越宽越分明越好 |
纯度 | 外部指标 | 是 | [0,1][0,1] | 越大越接近真实标签 |
NMI | 外部指标 | 是 | [0,1][0,1] | 越接近 1 越说明聚类效果更好 |
总结建议
-
若无标签,优先使用轮廓系数和轮廓图;
-
若有标签,推荐使用 NMI 或 Adjusted Rand Index(ARI);
-
可组合多个指标对聚类结果进行综合评估;
-
可视化轮廓图、聚类图、混淆矩阵有助于直观判断效果。