层次聚类是一种无监督的机器学习算法,它通过合并或分裂数据点来构建树状结构,以发现数据中的层次结构。

基本原理

  1. 距离计算:首先,需要计算数据集中每个点之间的距离。
  2. 连接策略:选择一个连接策略(如最近邻、最远邻或组间平均)来合并最接近的聚类。
  3. 递归合并:重复步骤 1 和 2,直到满足特定条件(如达到预设的聚类数量或所有点都属于一个聚类)。

优点

  • 可视化:层次聚类可以生成树状图(Dendrogram),方便可视化数据中的层次结构。
  • 灵活性:无需预先指定聚类数量,可以根据需要调整。

缺点

  • 解释性:树状图可能难以解释,特别是对于大型数据集。
  • 性能:对于大型数据集,层次聚类可能需要较长时间。

应用场景

  • 市场细分:识别消费者群体。
  • 图像分割:将图像分割成不同的部分。
  • 文本聚类:将文本数据分组。

示例

假设我们有一组二维数据点,可以使用层次聚类将其分组。

import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering

# 生成数据
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [1, 2, 2, 3, 5, 6, 6, 7, 8, 9]

# 创建层次聚类对象
clustering = AgglomerativeClustering(n_clusters=3)

# 应用聚类
clustering.fit_predict([[x], [y]])

# 绘制结果
plt.scatter(x, y, c=clustering.labels_)
plt.show()

层次聚类示例

更多关于层次聚类的信息,请访问层次聚类教程