【第二章:机器学习与神经网络概述】01.聚类算法理论与实践-(4)聚类算法的评价指标

第二章: 机器学习与神经网络概述

第一部分:聚类算法理论与实践

第四节:聚类算法的评价指标

内容:轮廓系数、轮廓图、纯度与互信息

  • 轮廓系数(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 示例:

python 复制代码
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 示例:

python 复制代码
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);

  • 可组合多个指标对聚类结果进行综合评估;

  • 可视化轮廓图、聚类图、混淆矩阵有助于直观判断效果。