聚类算法

6 minIntermediate2026/6/14

K-Means、DBSCAN、层次聚类原理与对比,聚类评估指标。

1. 聚问题概述

是将数据集划分为若干组(簇),使得同组内样本相似度高,不同组间相似度低。

1.1 聚

说明代表
划分聚预先指定K个簇K-Means
密度聚基于密度连通性DBSCAN
层次聚树状结构聚Agglomerative
模型聚假设数据由混合模型生成GMM
谱聚基于拉普拉斯Spectral

2. K-Means算法

2.1 算法流程

1. 随机选择K个初始质心 μ1, μ2, ..., μK
2. 重复:
   a. 分配: 将每个样本分配到最近质心
      c_i = argmin_k ||x_i - μ_k||²
   b. 更新: 重新计算每个簇的质心
      μ_k = (1/|C_k|) Σ_{x_i ∈ C_k} x_i
3. 直到质心不再变化或达到最大迭代次数

2.2 目标函数

最小化簇内平方和(WCSS)

J=k=1KxiCkxiμk2J = \sum_{k=1}^{K} \sum_{\mathbf{x}_i \in C_k} \|\mathbf{x}_i - \boldsymbol{\mu}_k\|^2

2.3 K值选择

肘部法则(Elbow Method)

绘制 KK vs JJ,选择拐点处的 KK

轮廓系数(Silhouette Score)

s(i)=b(i)a(i)max(a(i),b(i))s(i) = \frac{b(i) - a(i)}{\max(a(i), b(i))}

其中 a(i)a(i) 为样本 ii 到同簇其他样本的平均距离,b(i)b(i) 为样本 ii 到最近其他簇的平均距离。

  • s(i)[1,1]s(i) \in [-1, 1]
  • s(i)1s(i) \to 1:聚效果好
  • s(i)0s(i) \to 0:簇边界重叠
  • s(i)<0s(i) < 0:样本可能被分错簇

Gap Statistic

Gap(K)=E[logWK]logWK\text{Gap}(K) = \mathbb{E}^*[\log W_K] - \log W_K

选择使 Gap 统计量最大的 KK

2.4 K-Means++初始化

  1. 随机选择第一个质心
  2. 对于每个后续质心,以概率 P(x)D(x)2P(\mathbf{x}) \propto D(\mathbf{x})^2 选择
    • D(x)D(\mathbf{x})x\mathbf{x} 到最近已选质心的距离
  3. 重复直到选出 KK 个质心

效果:避免初始质心过于集中,加速收敛。

2.5 K-Means变体

变体改进适用场景
Mini-Batch K-Means小批量更新质心大规模数据
K-Medoids用实际样本点作为中心对异常值鲁棒
Fuzzy C-Means软聚,样本属于多个簇重叠簇
K-Modes用众数代替均值别数据

3. DBSCAN算法

3.1 核心概念

| 概念 | 定义 | | :------- | :---------------------------------------------------------------------------------- | ----------------------- | ------------------- | | ε-邻域 | Nϵ(x)={y:d(x,y)ϵ}N_\epsilon(\mathbf{x}) = \{\mathbf{y} : d(\mathbf{x}, \mathbf{y}) \leq \epsilon\} | | 核心点 | N_ϵ(x)MinPts | N\_\epsilon(\mathbf{x}) | \geq \text{MinPts} | | 边界点 | 非核心点但在某核心点的ε-邻域内 | | 噪声点 | 既非核心点也非边界点 | | 密度直达 | 核心点p的ε-邻域内包含q | | 密度可达 | 通过核心点链可达 | | 密度相连 | 存在点o使p和q都从o密度可达 |

3.2 算法流程

1. 对每个未访问点p:
   a. 标记p为已访问
   b. 找到p的ε-邻域 N
   c. 如果 |N| < MinPts:
      - 标记p为噪声点
   d. 否则:
      - 创建新簇C
      - 扩展簇: 将N中所有点加入C
      - 对N中每个未访问点q:
        · 标记q为已访问
        · 找到q的ε-邻域N'
        · 如果 |N'| ≥ MinPts: 将N'加入N
        · 如果q未属于任何簇: 将q加入C

3.3 参数选择

ε选择:k-distance图

  • 计算每个点到其第k近邻的距离(k=MinPts1k = \text{MinPts} - 1
  • 按距离排序绘
  • 选择”拐点”对应的距离作为ε

MinPts选择

MinPtsd+1\text{MinPts} \geq d + 1

通常取 MinPts=2d\text{MinPts} = 2ddd 为数据维度。

3.4 DBSCAN优缺点

优点缺点
无需指定簇数对ε和MinPts敏感
发现任意形状簇密度不均匀时效果差
自动识别噪声点高维空间距离区分度低
不假设簇形状计算复杂度 O(n2)O(n^2)(可用KD树优化到 O(nlogn)O(n \log n)

4. 层次聚

4.1 凝聚层次聚

自底向上,逐步合并最近的簇:

初始: 每个样本一个簇

  ├── 合并最近的两个簇
  ├── 合并最近的两个簇
  ├── ...
  └── 所有样本合并为一个簇

4.2 簇间距离

方法定义特点
单链接最近点距离发现链状结构,但可能链式效应
全链接最远点距离倾向紧凑球形簇
平均链接所有点对平均距离折中方案
Ward方法合并后WCSS增量最小倾向等大小簇

Ward方法

ΔJ=CiCjCi+Cjμiμj2\Delta J = \frac{|C_i||C_j|}{|C_i|+|C_j|} \|\boldsymbol{\mu}_i - \boldsymbol{\mu}_j\|^2

4.3 树状(Dendrogram)

          ┌───────┐
      ┌───┤       │
  ┌───┤   │       │
──┤   │   │       │
  A   B   C   D   E
  • 横轴:样本
  • 纵轴:合并距离
  • 在指定高度水平切割,得到对应数量的簇

5. 聚评估

5.1 内部指标(无标签)

指标公式思想值域越大越好
轮廓系数簇内紧密度 vs 簇间分离度[-1, 1]
Calinski-Harabasz簇间方差/簇内方差[0, +∞)
Davies-Bouldin簇内散度/簇间距离比[0, +∞)

5.2 外部指标(有标签)

指标说明
Adjusted Rand Index调整兰德指数,[1,1][-1, 1]
Normalized Mutual Info归一化互信息,[0,1][0, 1]
Purity纯度,[0,1][0, 1]
V-measure同质性和完整性的调和平均