多种聚类算法对比
目录
- 引言
- K-Means 聚类
- 层次聚类
- DBSCAN 聚类
- 高斯混合模型 (GMM)
- 谱聚类
- 均值漂移聚类 (Mean Shift)
- Affinity Propagation 聚类
- BIRCH 聚类
- OPTICS 聚类
- 聚类算法比较
- 示例代码
- 结语
引言
聚类是机器学习中的一种无监督学习方法,旨在将数据集中的对象划分为若干个簇,使得同一簇内的对象相似度高,而不同簇之间的对象相似度低。聚类算法广泛应用于图像分割、市场细分、社交网络分析、生物信息学等领域。不同的聚类算法在处理数据的方式、适用场景以及计算复杂度等方面存在显著差异。本文将详细介绍几种常见的聚类算法,帮助读者理解它们的基本原理、数学基础和应用场景。
K-Means 聚类
原理与步骤
K-Means 是最常用的聚类算法之一,其目标是将数据分为 K 个簇,每个簇由其质心(即簇内所有点的均值)代表。算法的基本步骤如下:
- 初始化:随机选择 K 个初始质心。
- 分配步骤:将每个数据点分配到最近的质心所代表的簇。
- 更新步骤:重新计算每个簇的质心。
- 迭代:重复分配和更新步骤,直到质心不再发生显著变化或达到预设的迭代次数。
数学公式
K-Means 的目标是最小化以下目标函数:
J = ∑ i = 1 K ∑ x ∈ C i ∥ x − μ i ∥ 2 J = \sum_{i=1}^{K} \sum_{x \in C_i} \|x - \mu_i\|^2 J=i=1∑Kx∈Ci∑∥x−μi∥2
其中:
- K K K 为簇的数量。
- C i C_i Ci 表示第 i i i 个簇。
- μ i \mu_i μi 是第 i i i 个簇的质心,计算公式为:
μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i = \frac{1}{|C_i|} \sum_{x \in C_i} x μi=∣Ci∣1x∈Ci∑x
优缺点
优点:
- 简单易懂,计算效率高,适用于大规模数据集。
- 对于簇形状较为规则的数据效果良好。
缺点:
- 需要预先指定 K 值,且对 K 的选择敏感。
- 对初始质心敏感,容易陷入局部最优。
- 只能发现凸形簇,对于非凸形数据效果较差。
- 对噪声和异常值敏感。
层次聚类
凝聚层次聚类
层次聚类通过构建一个层次结构来组织数据,分为凝聚层次聚类(自底向上)和分裂层次聚类(自顶向下)。
凝聚层次聚类步骤:
- 初始化:将每个数据点视为一个独立的簇。
- 合并:每次合并距离最近的两个簇。
- 重复:直到所有数据点合并为一个簇或达到预定的簇数。
分裂层次聚类
- 初始化:将所有数据点视为一个簇。
- 分裂:每次将一个簇分裂为两个子簇。
- 重复:直到每个簇只包含一个数据点或达到预定的簇数。
数学公式
层次聚类的关键在于簇间距离的定义,常用的距离度量包括:
- 单链距离(Single Linkage):
d ( C i , C j ) = min x ∈ C i , y ∈ C j ∥ x − y ∥ d(C_i, C_j) = \min_{x \in C_i, y \in C_j} \|x - y\| d(Ci,Cj)=x∈Ci,y∈Cjmin∥x−y∥ - 完全链距离(Complete Linkage):
d ( C i , C j ) = max x ∈ C i , y ∈ C j ∥ x − y ∥ d(C_i, C_j) = \max_{x \in C_i, y \in C_j} \|x - y\| d(Ci,Cj)=x∈Ci,y∈Cjmax∥x−y∥ - 平均链距离(Average Linkage):
d ( C i , C j ) = 1 ∣ C i ∣ ∣ C j ∣ ∑ x ∈ C i ∑ y ∈ C j ∥ x − y ∥ d(C_i, C_j) = \frac{1}{|C_i||C_j|} \sum_{x \in C_i} \sum_{y \in C_j} \|x - y\| d(Ci,Cj)=∣C