层次聚类(Hierarchical Clustering)是一种将数据集划分成不同层次类别的聚类方法。它通过将数据集中的对象逐步合并成越来越大的簇,最终形成一棵树状结构,称为聚类树或Dendrogram。
基本原理
层次聚类算法的基本原理如下:
- 将每个数据点视为一个簇,开始时簇的数量等于数据点的数量。
- 计算所有簇之间的距离,选择距离最近的两个簇合并成一个簇。
- 重复步骤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()
扩展阅读
层次聚类示例