共计 1914 个字符,预计需要花费 5 分钟才能阅读完成。
初识聚类与层次聚类
聚类是机器学习中的无监督学习任务,目标是将相似的数据点自动分组。常见的聚类算法包括:

- 划分式聚类 :如 K -means,需要预先指定簇的数量
- 密度聚类 :如 DBSCAN,基于数据密度发现任意形状的簇
- 层次聚类 :如 Agnes,通过构建树状结构展现多层次的聚类结果
层次聚类又分为两种方法:
- 自底向上(Agglomerative):从单个数据点开始,逐步合并最相似的簇
- 自顶向下(Divisive):从所有数据点开始,逐步分裂成更小的簇
为什么选择 Agnes?
与 K -means 相比,Agnes 具有以下优势:
- 不需要预先指定簇的数量
- 可以发现非球形簇结构
- 通过树状图可以直观观察不同层次的聚类结果
下面是一个二维数据的对比示例:
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
# 生成半月形数据
X, _ = make_moons(n_samples=200, noise=0.05)
# 绘制原始数据分布
plt.scatter(X[:,0], X[:,1])
plt.title('Non-convex Data Distribution')
plt.show()
Agnes 算法核心原理
Agnes(AGglomerative NESting)是一种自底向上的层次聚类算法,其工作流程如下:
- 初始化 :将每个数据点视为一个单独的簇
- 计算距离矩阵 :存储所有簇对之间的距离
- 合并最近簇 :找到距离最近的两个簇并合并
- 更新距离矩阵 :根据连接标准重新计算新簇与其他簇的距离
- 重复步骤 3 -4:直到所有数据点合并为一个簇
关键选择:距离度量和连接标准
距离度量
- 欧式距离 :最常用的距离度量,适合连续数值数据
- 曼哈顿距离 :对异常值更鲁棒,适合高维数据
- 余弦相似度 :适合文本等方向重要的数据
连接标准
- 单链接(Single Linkage):取两个簇中最近点之间的距离
- 全链接(Complete Linkage):取两个簇中最远点之间的距离
- 平均链接(Average Linkage):取两个簇所有点对之间的平均距离
Python 完整实现
数据准备
from sklearn.preprocessing import StandardScaler
from scipy.cluster.hierarchy import dendrogram, linkage
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
聚类实现
# 使用 scipy 实现 Agnes
linked = linkage(X_scaled, method='average', metric='euclidean')
# 绘制树状图
plt.figure(figsize=(10, 6))
dendrogram(linked, orientation='top', distance_sort='descending')
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
plt.show()
获取聚类结果
from scipy.cluster.hierarchy import fcluster
# 根据距离阈值获取聚类标签
labels = fcluster(linked, t=0.8, criterion='distance')
# 可视化聚类结果
plt.scatter(X[:,0], X[:,1], c=labels, cmap='viridis')
plt.title('Clustering Result')
plt.show()
实战建议与优化
确定最佳聚类数
使用手肘法观察距离变化:
# 计算每次合并的距离
last = linked[-10:, 2]
# 观察拐点
plt.plot(range(1,11), last[::-1])
plt.xlabel('Number of Clusters')
plt.ylabel('Distance')
plt.title('Elbow Method')
plt.show()
大数据量优化
对于大规模数据集:
- 使用近似算法如 Mini-Batch Agnes
- 采样部分数据进行初步分析
- 考虑使用更高效的距离计算方法
处理噪声点
- 设置最小簇大小阈值
- 使用鲁棒的距离度量
- 预处理阶段进行异常值检测
进阶思考
- 如何将 Agnes 应用于文本聚类?
- 当数据维度很高时应该注意什么?
- 怎样评估聚类结果的质量?
结语
Agnes 算法为探索数据的内在结构提供了强大工具。通过本文的实践指南,希望你能掌握这一算法的核心思想和实现方法。在实际应用中,记得根据数据特点和业务需求灵活调整参数和策略。
正文完
