层次聚类(Hierarchical Clustering)是一种将数据集划分成不同层次类别的聚类方法。它通过将数据集中的对象逐步合并成越来越大的簇,最终形成一棵树状结构,称为聚类树或Dendrogram。

基本原理

层次聚类算法的基本原理如下:

  1. 将每个数据点视为一个簇,开始时簇的数量等于数据点的数量。
  2. 计算所有簇之间的距离,选择距离最近的两个簇合并成一个簇。
  3. 重复步骤2,直到所有数据点都合并成一个簇。

算法类型

层次聚类算法主要分为两种类型:

  • 自底向上(凝聚层次聚类):从单个数据点开始,逐步合并成更大的簇。
  • 自顶向下(分裂层次聚类):从所有数据点构成的一个簇开始,逐步分裂成更小的簇。

应用场景

层次聚类算法在以下场景中非常有用:

  • 数据探索:通过层次聚类可以初步了解数据的分布情况。
  • 图像分割:将图像分割成不同的区域。
  • 基因聚类:将基因数据聚类,以便于分析基因的功能。

示例

以下是一个简单的层次聚类算法示例:

import numpy as np
import matplotlib.pyplot as plt

# 创建一些数据点
data = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])

# 计算距离矩阵
distance_matrix = np.sqrt(((data - data[:, np.newaxis])**2).sum(axis=2))

# 层次聚类
from scipy.cluster.hierarchy import linkage, dendrogram
linked = linkage(distance_matrix, 'ward')
dendrogram(linked)

# 绘制结果
plt.show()

扩展阅读

层次聚类示例