Skip to content

数学原理

本章目标

  1. 理解高斯混合模型(GMM)的生成过程——πk 选分量 → N(μk,Σk) 生成样本。
  2. 理解 EM 算法的两步迭代——E 步(计算责任)和 M 步(最大化参数)。
  3. 理解对数似然的下界保证——EM 保证对数似然单调不减。

重点方法与概念速览

名称类型作用
高斯混合模型生成模型p(x)=k=1KπkN(xμk,Σk)——K 个高斯分布的加权和
隐变量 zik概率框架指示样本 i 是否由分量 k 生成——GMM 的"未观测变量"
E 步期望计算计算后验责任 γ(zik)——"在当前参数下,样本 i 属于分量 k 的概率"
M 步参数最大化用责任加权更新 μkΣkπk——最大化完全数据对数似然的期望
对数似然下界收敛保证logp(XΘ) 在每次 EM 迭代中单调不减
协方差类型模型假设full(完全协方差)允许椭圆形簇——比 KMeans 的球面假设更灵活

1. 高斯混合模型的生成过程

GMM 假设数据由 K=3 个高斯分量按以下过程生成:

  1. 以概率 πk 选择一个高斯分量:p(zk=1)=πk,k=1Kπk=1
  2. 从所选分量的高斯分布中采样:p(xzk=1)=N(xμk,Σk)

边缘分布为:

p(x)=k=1KπkN(xμk,Σk)

理解重点

  • πk混合权重——πk0kπk=1。当前数据 π=[0.5,0.3,0.2]
  • μk=[μk1,μk2]T 是第 k 个分量的均值(2 维)。
  • Σk2×2 的协方差矩阵——covariance_type="full" 允许每个分量的协方差各不相同。

2. 最大似然的挑战

直接最大化对数似然:

logp(XΘ)=i=1Nlogk=1KπkN(xiμk,Σk)

困难在于:log 内部有求和——导数为零的方程没有闭式解,因为隐变量 zik 未被观测。

理解重点

  • 如果有标签(知道每个样本属于哪个分量),参数估计简化为加权样本均值和协方差——有闭式解。
  • 无标签时,EM 通过迭代猜测(E 步)和用猜测更新参数(M 步)来绕过这个困难。

3. E 步:计算后验责任

给定当前参数 Θ(t),计算每个样本属于每个分量的后验概率(责任):

γ(zik)(t+1)=πk(t)N(xiμk(t),Σk(t))j=1Kπj(t)N(xiμj(t),Σj(t))
  • γ(zik)[0,1],且 kγ(zik)=1——每个样本对各分量的责任和为 1
  • 高斯密度:N(xμ,Σ)=1(2π)d/2|Σ|1/2exp(12(xμ)TΣ1(xμ))

理解重点

  • 责任 γ(zik) 就是软赋值——样本 i 对三个分量各有部分归属。
  • 与 KMeans 的硬赋值对比:KMeans 输出 γik{0,1},EM 输出 γik[0,1]
  • 当前 covariance_type="full" 使 Σk 可以是任意正定矩阵——每个分量的高斯密度是倾斜的椭圆形。

4. M 步:最大化参数

用 E 步计算的责任 γik 作为权重,重新估计参数:

有效样本数

Nk=i=1Nγ(zik)

均值更新

μk(t+1)=1Nki=1Nγ(zik)xi

协方差更新covariance_type="full"):

Σk(t+1)=1Nki=1Nγ(zik)(xiμk(t+1))(xiμk(t+1))T

混合权重更新

πk(t+1)=NkN

理解重点

  • 每个参数更新都是责任加权——γik 越大的样本对分量 k 的参数更新贡献越大。
  • 这相当于"软计数"——不是每个点固定属于一个分量,而是按比例贡献于多个分量。
  • full 协方差给每个分量最大自由度——可以学习任意方向的椭圆形状。

5. 对数似然的单调性

EM 算法保证对数似然在每次迭代中单调不减

logp(XΘ(t+1))logp(XΘ(t))

这是因为 EM 实际上在最大化对数似然的一个下界函数(ELBO):

L(Θ,q)=ikγiklogπkN(xiμk,Σk)γiklogp(XΘ)

理解重点

  • 对数似然单调不减是 EM 收敛的保证——但只保证收敛到局部最大值,不保证全局最优。
  • 当前源码中 model.lower_bound_ 记录了收敛时的对数似然下界值。
  • 在实际中,初始化的均值和协方差可能会使 EM 收敛到不同的局部最优——这类似于 KMeans 的 n_init

6. 协方差类型对比

covariance_type协方差约束簇形状参数数(K 分量、d 维)
full无约束任意椭圆K×d(d+1)2
tied所有分量共享相同椭圆d(d+1)2
diag对角矩阵轴对齐椭圆K×d
sphericalσk2I球形(同 KMeans)K×1

当前源码使用 full——每个分量有独立的 2×2 协方差矩阵(3 个参数每个)。

7. 数学原理如何映射到当前源码

数学概念数学符号代码实现
生成模型p(x)=kπkN(xμk,Σk)GaussianMixture(n_components=3, covariance_type="full")
隐变量zik内部矩阵——E 步计算
后验责任γ(zik)model.predict_proba(X)
混合权重πkmodel.weights_
分量均值μkmodel.means_
分量协方差Σkmodel.covariances_
对数似然下界logp(XΘ)model.lower_bound_
最大迭代tmaxmax_iter=200
收敛判断|Θ(t+1)Θ(t)|<ϵ内部自动判断
标准化zj=(xjμj)/σjStandardScaler

8. EM vs KMeans 数学对比

维度KMeansEM (GMM)
目标函数minikrik|xiμk|2maxilogkπkN(xiμk,Σk)
赋值硬赋值 rik{0,1}软赋值 γik[0,1]
簇形状球形(等距离衰减各向同性)椭圆形(全协方差各向异性)
不确定性有——1maxkγik 量化置信度
参数数K×d(均值)K×(1+d+d(d+1)/2)(权重 + 均值 + 协方差)

常见坑

  1. 混淆 EM 与 KMeans——EM 输出概率归属(软聚类),KMeans 输出确定归属(硬聚类)。
  2. covariance_type="spherical" 下期待椭圆形簇——球形协方差等价于 KMeans 的簇形状假设。
  3. 忽略 EM 收敛到局部最优的风险——不同初始化可能导致不同的聚类结果。
  4. 认为 max_iter=200 不够——200 次对于 2 维 3 分量数据通常足够收敛。

小结

  • EM 算法的数学核心链:GMM 生成模型 p(x)=kπkN(xμk,Σk) → 隐变量 → E 步计算责任 γ(zik) → M 步责任加权更新参数 → 对数似然单调递增 → 局部收敛。
  • 与 KMeans 的根本区别:概率软赋值(γik 连续)vs 距离硬赋值(rik 离散)、椭圆协方差 vs 球形距离。
  • 当前源码 GaussianMixture(n_components=3, covariance_type="full", max_iter=200) 是 GMM 最灵活的教学配置——允许每个分量有独立的全协方差矩阵。