共计 1499 个字符,预计需要花费 4 分钟才能阅读完成。
背景介绍
聚类分析是机器学习中常见的无监督学习方法,广泛应用于客户分群、文本分类、图像分割等领域。AHC(Agglomerative Hierarchical Clustering,层次凝聚聚类)是一种自底向上的层次聚类算法,它通过逐步合并最相似的簇来构建树状图(dendrogram),特别适合需要可视化聚类过程或不确定簇数量的场景。

算法原理
- 自底向上的凝聚过程
- 初始时,每个样本点被视为一个独立的簇
- 计算所有簇之间的距离,合并距离最近的两个簇
-
重复上述过程,直到所有样本合并为一个簇或达到预设的簇数量
-
距离度量方法
- 欧式距离:最常用的距离度量,适合连续型数据
- 曼哈顿距离:对异常值更鲁棒,适用于高维数据
-
余弦相似度:常用于文本数据,衡量向量方向的相似性
-
连接准则
- 单连接(最小距离):以两个簇中最近样本的距离作为簇间距离
- 全连接(最大距离):以两个簇中最远样本的距离作为簇间距离
- 平均连接:以两个簇所有样本间距离的平均值作为簇间距离
- Ward 方法:合并后使总体方差增加最小的两个簇
Python 实现
以下是使用 scikit-learn 实现 AHC 的完整代码示例:
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
np.random.seed(42)
X = np.random.rand(15, 2)
# 1. 使用 scikit-learn 进行聚类
model = AgglomerativeClustering(
n_clusters=3, # 预设的簇数量
affinity='euclidean', # 距离度量方法
linkage='ward' # 连接准则
)
labels = model.fit_predict(X)
# 2. 绘制树状图
linked = linkage(X, 'ward') # 计算链接矩阵
plt.figure(figsize=(10, 6))
dendrogram(linked,
orientation='top',
distance_sort='descending',
show_leaf_counts=True)
plt.title('层次聚类树状图')
plt.xlabel('样本索引')
plt.ylabel('距离')
plt.show()
实战技巧
- 确定最佳聚类数
- 观察树状图中最长的垂直连线(距离突然增大的地方)
-
尝试不同 n_clusters 值,结合轮廓系数等评估指标
-
性能优化建议
- 大数据量时使用近似算法或采样
- 选择计算效率高的距离度量(如余弦相似度)
-
考虑使用 Mini-Batch 或分布式实现
-
常见问题排查
- 内存不足:减少样本量或使用稀疏矩阵
- 聚类效果不理想:尝试不同距离度量和连接准则
- 维度灾难:先进行降维处理(如 PCA)
延伸思考
- 与其他算法对比
- 相比 K -means:AHC 不需要预先指定簇数量,但计算复杂度更高
-
相比 DBSCAN:AHC 能处理不同密度的簇,但对噪声更敏感
-
应用案例
- 文本聚类:结合 TF-IDF 和余弦相似度进行文档分类
- 用户分群:基于行为特征对电商用户进行精细化运营
进一步学习
- 官方文档:scikit-learn AgglomerativeClustering
- 经典论文:《Algorithms for Clustering Data》
- 开源项目:scipy.cluster.hierarchy 模块
通过本文的学习,相信你已经掌握了 AHC 算法的基本原理和实现方法。在实际应用中,建议多尝试不同的参数组合,并结合业务场景选择合适的评估指标。
正文完
