CHAPTER 9
✓ 已完成
🎯

聚类

Clustering

学习目标

🎯
  • 理解聚类的基本概念和无监督学习的特点
  • 掌握K-means算法的原理和实现
  • 了解层次聚类和密度聚类的思想
  • 理解聚类性能评估指标
9.1

聚类任务

什么是聚类

聚类(Clustering)是一种无监督学习任务,目标是将数据集中的样本划分为若干个组(簇),使得:

  • 簇内相似度高:同一簇内的样本尽可能相似
  • 簇间相似度低:不同簇之间的样本尽可能不同

聚类与分类的区别:分类有已知的类别标签(监督学习),而聚类没有预先定义的类别(无监督学习),需要自动发现数据中的内在结构。

聚类的性能度量

聚类性能度量分为两类:

外部指标(External Index)

将聚类结果与参考模型(真实标签)比较:

  • Jaccard系数(JC):JC = a / (a + b + c)
  • FM指数(FMI):FMI = √(a/(a+b) · a/(a+c))
  • Rand指数(RI):RI = 2(a + d) / (m(m-1))

其中 a: 同簇同类, b: 同簇不同类, c: 不同簇同类, d: 不同簇不同类

内部指标(Internal Index)

不依赖外部参考,直接考察聚类结果:

  • DB指数(Davies-Bouldin Index):簇内距离小、簇间距离大
  • Dunn指数(DI):簇间最小距离 / 簇内最大距离
  • 轮廓系数(Silhouette Coefficient):[-1, 1],越接近1越好
🎮

聚类性能度量演示

可视化不同聚类性能指标的计算过程

🚧 开发中...

9.2

原型聚类

k均值算法(k-means)

k均值算法是最常用的聚类算法,基于原型的划分方法:

算法步骤

  1. 随机选择 k 个样本作为初始簇中心 μ₁, μ₂, ..., μₖ
  2. 计算每个样本到各簇中心的距离,划分到最近的簇
  3. 根据划分结果,重新计算每个簇的中心(簇内样本均值)
  4. 重复步骤2-3,直到簇中心不再变化或达到最大迭代次数

目标函数(最小化平方误差)

E = Σᵢ₌₁ᵏ Σₓ∈Cᵢ ||x - μᵢ||²

优点:简单高效、易于实现、适合大规模数据

缺点:需要预先指定k、对初始中心敏感、只能发现凸形簇、对噪声敏感

学习向量量化(LVQ)

LVQ(Learning Vector Quantization)是一种有监督的原型聚类方法,结合了聚类和分类:

LVQ算法流程

  1. 初始化一组原型向量 {p₁, p₂, ..., pq}
  2. 随机选取样本 xⱼ,找到最近的原型向量 pᵢ*
  3. 如果 xⱼ 和 pᵢ* 类别相同,将 pᵢ* 向 xⱼ 靠近:pᵢ* ← pᵢ* + η(xⱼ - pᵢ*)
  4. 如果类别不同,将 pᵢ* 远离 xⱼ:pᵢ* ← pᵢ* - η(xⱼ - pᵢ*)
  5. 重复2-4直到满足停止条件

其中 η ∈ (0,1) 是学习率

LVQ的关键:利用样本的类别标签信息来调整原型向量,使得同类原型更接近、异类原型更远离。

高斯混合聚类(GMM)

高斯混合模型(Gaussian Mixture Model, GMM)采用概率模型进行聚类:

混合模型定义

p(x) = Σᵢ₌₁ᵏ αᵢ·𝒩(x | μᵢ, Σᵢ)

其中 αᵢ 是混合系数(Σαᵢ = 1),𝒩 是高斯分布

EM算法求解GMM

迭代执行两步:

  • E步:根据当前参数计算每个样本属于各簇的后验概率 γⱼᵢ
  • M步:根据后验概率更新模型参数(μᵢ, Σᵢ, αᵢ)

GMM相比k-means的优势:能够捕捉簇的形状和大小(协方差矩阵),输出样本属于各簇的概率(软划分)。

k-means聚类交互演示

通过交互式可视化理解k-means算法的迭代过程,观察质心如何移动以及簇如何形成

26
迭代次数
0
簇内平方和
-

图例说明

数据点(按簇着色)
质心(簇中心)
点到质心的距离

💡 K-means算法步骤

  1. 初始化:随机选择K个点作为初始质心(使用K-means++改进初始化)
  2. 分配:将每个点分配到最近的质心,形成K个簇
  3. 更新:计算每个簇的均值,更新质心位置
  4. 重复:重复步骤2-3直到质心不再移动(收敛)
9.3

密度聚类

DBSCAN算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)基于密度的聚类方法,能发现任意形状的簇并识别噪声点。

核心概念

  • ε-邻域:Nε(x) = {x′ ∈ D | dist(x, x′) ≤ ε}
  • 核心对象:若 |Nε(x)| ≥ MinPts,则x是核心对象
  • 密度直达:若x′在x的ε-邻域内且x是核心对象
  • 密度可达:存在样本序列使得密度直达传递
  • 密度相连:存在核心对象o使得x、x′均密度可达于o

DBSCAN算法步骤

  1. 标记所有核心对象
  2. 随机选取一个未访问的核心对象,生成新簇
  3. 找到所有与该核心对象密度相连的样本,加入当前簇
  4. 重复步骤2-3,直到所有核心对象都被访问
  5. 将未被划入任何簇的样本标记为噪声点

✓ 优点

  • • 能发现任意形状的簇
  • • 能识别噪声点
  • • 不需要预先指定簇数量

✗ 缺点

  • • 参数ε和MinPts难以确定
  • • 对不同密度的簇效果不佳
  • • 高维数据性能下降
🎮

DBSCAN聚类可视化

交互式调整ε和MinPts参数,观察聚类结果变化

🚧 开发中...

9.4

层次聚类

层次聚类方法

层次聚类(Hierarchical Clustering)在不同层次上对数据集进行划分, 形成树形的聚类结构(树状图/dendrogram)。

凝聚层次聚类(AGNES)

自底向上的策略:

  1. 初始:每个样本作为一个簇
  2. 找到距离最近的两个簇
  3. 合并这两个簇
  4. 重复2-3直到达到预设簇数

分裂层次聚类(DIANA)

自顶向下的策略:

  1. 初始:所有样本在一个簇
  2. 选择某个簇进行分裂
  3. 将该簇分为两个子簇
  4. 重复2-3直到达到预设簇数

簇间距离计算

  • 最小距离(单链接):dₘᵢₙ(Cᵢ, Cⱼ) = min{dist(x, x′) | x∈Cᵢ, x′∈Cⱼ}
  • 最大距离(全链接):dₘₐₓ(Cᵢ, Cⱼ) = max{dist(x, x′) | x∈Cᵢ, x′∈Cⱼ}
  • 平均距离:dₐᵥ𝓰(Cᵢ, Cⱼ) = (1/|Cᵢ||Cⱼ|) Σₓ∈Cᵢ Σₓ′∈Cⱼ dist(x, x′)

优势:不需要预先指定簇数量,可以通过树状图选择合适的层次。劣势:计算复杂度高(O(n²)或O(n³)),不适合大规模数据。

🎮

层次聚类树状图

可视化AGNES算法的聚类过程和树状图结构

🚧 开发中...

9.5

谱聚类

谱聚类基本思想

谱聚类(Spectral Clustering)从图论角度进行聚类, 将聚类问题转化为图的划分问题,利用图的谱(特征值和特征向量)进行聚类。

核心步骤

  1. 构建相似度图:计算样本间相似度,构建相似度矩阵 W
  2. 计算拉普拉斯矩阵:L = D - W(D是度矩阵)
  3. 特征分解:计算L的前k个最小特征值对应的特征向量
  4. k-means聚类:对特征向量矩阵的行进行k-means聚类

常用的拉普拉斯矩阵

  • 未归一化:L = D - W
  • 对称归一化:Lₛᵧₘ = D⁻¹/²LD⁻¹/² = I - D⁻¹/²WD⁻¹/²
  • 随机游走归一化:Lᵣw = D⁻¹L = I - D⁻¹W

💡 为什么有效?

谱聚类在降维后的特征空间中进行聚类,能够发现非凸形状的簇。 拉普拉斯矩阵的特征向量保留了图的连通性信息,使得同簇样本在特征空间中更接近。

优点:能处理任意形状的簇、只需要相似度矩阵、对初始值不敏感

缺点:计算复杂度高、需要预先指定簇数、相似度矩阵构建方式影响结果

🎮

谱聚类可视化

展示谱聚类如何处理非凸形状的簇(如双月形数据)

🚧 开发中...