共计 1975 个字符,预计需要花费 5 分钟才能阅读完成。
在无监督学习的聚类分析中,确定最佳聚类数目是一个关键问题。传统的 ” 肘部法则 ” 依赖主观判断,而内部评估指标如 Calinski-Harabasz(CH)指数提供了更客观的量化标准。本文将详细介绍如何使用 CH 指数解决这一难题。

为什么需要评估聚类质量
- 无监督学习没有明确的标签作为评估基准
- 聚类算法 (如 K -Means) 需要预先指定簇数 K
- 主观判断 (如可视化) 在大规模数据上不可行
- 不同算法、不同数据集的最优 K 值差异很大
主流内部评估指标对比
- 轮廓系数(Silhouette Coefficient)
- 衡量样本与同簇和其他簇的距离关系
- 范围在[-1,1],越大越好
-
计算复杂度高,适合中小数据集
-
Davies-Bouldin 指数(DBI)
- 基于簇内距离与簇间距离的比值
- 越小表示聚类效果越好
-
对凸形簇效果较好
-
Calinski-Harabasz 指数
- 通过簇间离散度与簇内离散度的比值评估
- 值越大表示聚类效果越好
- 计算效率高,适合大规模数据
CH 指数的数学原理
CH 指数的计算公式为:
CH(k) = [B(k)/(k-1)] / [W(k)/(n-k)]
其中:
– B(k)是簇间离散度矩阵的迹
– W(k)是簇内离散度矩阵的迹
– n是样本总数
– k是当前聚类数目
本质上,CH 指数衡量的是簇间方差与簇内方差的比值,这个比值越大说明聚类结构越明显。
Python 实现示例
以下是使用 scikit-learn 计算 CH 指数的完整代码:
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score
import matplotlib.pyplot as plt
# 生成示例数据
X, _ = make_blobs(n_samples=500, centers=4, cluster_std=1.0, random_state=42)
# 测试不同 K 值
ch_scores = []
k_range = range(2, 10)
for k in k_range:
kmeans = KMeans(n_clusters=k, random_state=42)
labels = kmeans.fit_predict(X)
ch_score = calinski_harabasz_score(X, labels)
ch_scores.append(ch_score)
print(f"K={k}, CH 指数 ={ch_score:.2f}")
# 可视化结果
plt.plot(k_range, ch_scores, 'bo-')
plt.xlabel('Number of clusters (K)')
plt.ylabel('Calinski-Harabasz Score')
plt.title('CH 指数法确定最佳 K 值')
plt.show()
实际应用案例
我们使用 UCI 的葡萄酒数据集进行测试:
-
加载并标准化数据
from sklearn.datasets import load_wine from sklearn.preprocessing import StandardScaler data = load_wine() X = StandardScaler().fit_transform(data.data) -
计算不同 K 值的 CH 指数
for k in range(2, 8): kmeans = KMeans(n_clusters=k, random_state=42) labels = kmeans.fit_predict(X) print(f"K={k}, CH 指数 ={calinski_harabasz_score(X, labels):.2f}") -
结果分析
K=2, CH 指数 =230.36 K=3, CH 指数 =207.57 K=4, CH 指数 =195.43 K=5, CH 指数 =185.32 K=6, CH 指数 =177.82 K=7, CH 指数 =172.34
从结果可见,K= 2 时 CH 指数最大,这与葡萄酒数据集的实际类别数 (3) 不完全一致,说明 CH 指数也有其局限性。
使用注意事项
- 数据规模影响
- CH 指数计算涉及协方差矩阵,对高维数据可能不太稳定
-
建议先进行降维处理
-
聚类形状假设
- CH 指数假设簇是凸形的且大小相近
-
对于不规则形状的簇效果可能不佳
-
与其他指标结合
-
建议同时计算轮廓系数等指标进行交叉验证
-
归一化处理
- 使用前应对数据进行标准化
- 不同量纲的特征会影响距离计算
总结与思考
CH 指数作为确定最佳聚类数目的方法,具有计算高效、解释性强的优点,特别适合处理大规模数据集。但它并非完美无缺:
- 倾向于选择较大的 K 值
- 对簇密度差异大的数据敏感
- 不适用于非凸形状的簇
建议读者在自己的数据集上尝试该方法,同时结合可视化和其他评估指标进行综合判断。未来可以探索结合多种评估指标的集成方法,或者开发更鲁棒的评估标准。
你最近在聚类分析中遇到哪些挑战?欢迎分享你的经验和见解。
正文完
