Agnes聚类算法实战:从原理到Python实现的全流程指南

1次阅读
没有评论

共计 1914 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

初识聚类与层次聚类

聚类是机器学习中的无监督学习任务,目标是将相似的数据点自动分组。常见的聚类算法包括:

Agnes 聚类算法实战:从原理到 Python 实现的全流程指南

  • 划分式聚类 :如 K -means,需要预先指定簇的数量
  • 密度聚类 :如 DBSCAN,基于数据密度发现任意形状的簇
  • 层次聚类 :如 Agnes,通过构建树状结构展现多层次的聚类结果

层次聚类又分为两种方法:

  1. 自底向上(Agglomerative):从单个数据点开始,逐步合并最相似的簇
  2. 自顶向下(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)是一种自底向上的层次聚类算法,其工作流程如下:

  1. 初始化 :将每个数据点视为一个单独的簇
  2. 计算距离矩阵 :存储所有簇对之间的距离
  3. 合并最近簇 :找到距离最近的两个簇并合并
  4. 更新距离矩阵 :根据连接标准重新计算新簇与其他簇的距离
  5. 重复步骤 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()

大数据量优化

对于大规模数据集:

  1. 使用近似算法如 Mini-Batch Agnes
  2. 采样部分数据进行初步分析
  3. 考虑使用更高效的距离计算方法

处理噪声点

  • 设置最小簇大小阈值
  • 使用鲁棒的距离度量
  • 预处理阶段进行异常值检测

进阶思考

  1. 如何将 Agnes 应用于文本聚类?
  2. 当数据维度很高时应该注意什么?
  3. 怎样评估聚类结果的质量?

结语

Agnes 算法为探索数据的内在结构提供了强大工具。通过本文的实践指南,希望你能掌握这一算法的核心思想和实现方法。在实际应用中,记得根据数据特点和业务需求灵活调整参数和策略。

正文完
 0
评论(没有评论)