数学原理
本章目标
- 理解高斯混合模型(GMM)的生成过程——
选分量 → 生成样本。 - 理解 EM 算法的两步迭代——E 步(计算责任)和 M 步(最大化参数)。
- 理解对数似然的下界保证——EM 保证对数似然单调不减。
重点方法与概念速览
| 名称 | 类型 | 作用 |
|---|---|---|
| 高斯混合模型 | 生成模型 | |
| 隐变量 | 概率框架 | 指示样本 |
| E 步 | 期望计算 | 计算后验责任 |
| M 步 | 参数最大化 | 用责任加权更新 |
| 对数似然下界 | 收敛保证 | |
| 协方差类型 | 模型假设 | full(完全协方差)允许椭圆形簇——比 KMeans 的球面假设更灵活 |
1. 高斯混合模型的生成过程
GMM 假设数据由
- 以概率
选择一个高斯分量: - 从所选分量的高斯分布中采样:
边缘分布为:
理解重点
是混合权重—— , 。当前数据 。 是第 个分量的均值(2 维)。 是 的协方差矩阵—— covariance_type="full"允许每个分量的协方差各不相同。
2. 最大似然的挑战
直接最大化对数似然:
困难在于:
理解重点
- 如果有标签(知道每个样本属于哪个分量),参数估计简化为加权样本均值和协方差——有闭式解。
- 无标签时,EM 通过迭代猜测(E 步)和用猜测更新参数(M 步)来绕过这个困难。
3. E 步:计算后验责任
给定当前参数
,且 ——每个样本对各分量的责任和为 1 - 高斯密度:
理解重点
- 责任
就是软赋值——样本 对三个分量各有部分归属。 - 与 KMeans 的硬赋值对比:KMeans 输出
,EM 输出 。 - 当前
covariance_type="full"使可以是任意正定矩阵——每个分量的高斯密度是倾斜的椭圆形。
4. M 步:最大化参数
用 E 步计算的责任
有效样本数:
均值更新:
协方差更新(covariance_type="full"):
混合权重更新:
理解重点
- 每个参数更新都是责任加权——
越大的样本对分量 的参数更新贡献越大。 - 这相当于"软计数"——不是每个点固定属于一个分量,而是按比例贡献于多个分量。
full协方差给每个分量最大自由度——可以学习任意方向的椭圆形状。
5. 对数似然的单调性
EM 算法保证对数似然在每次迭代中单调不减:
这是因为 EM 实际上在最大化对数似然的一个下界函数(ELBO):
理解重点
- 对数似然单调不减是 EM 收敛的保证——但只保证收敛到局部最大值,不保证全局最优。
- 当前源码中
model.lower_bound_记录了收敛时的对数似然下界值。 - 在实际中,初始化的均值和协方差可能会使 EM 收敛到不同的局部最优——这类似于 KMeans 的
n_init。
6. 协方差类型对比
covariance_type | 协方差约束 | 簇形状 | 参数数( |
|---|---|---|---|
full | 无约束 | 任意椭圆 | |
tied | 所有分量共享 | 相同椭圆 | |
diag | 对角矩阵 | 轴对齐椭圆 | |
spherical | 球形(同 KMeans) |
当前源码使用 full——每个分量有独立的
7. 数学原理如何映射到当前源码
| 数学概念 | 数学符号 | 代码实现 |
|---|---|---|
| 生成模型 | GaussianMixture(n_components=3, covariance_type="full") | |
| 隐变量 | 内部矩阵——E 步计算 | |
| 后验责任 | model.predict_proba(X) | |
| 混合权重 | model.weights_ | |
| 分量均值 | model.means_ | |
| 分量协方差 | model.covariances_ | |
| 对数似然下界 | model.lower_bound_ | |
| 最大迭代 | max_iter=200 | |
| 收敛判断 | 内部自动判断 | |
| 标准化 | StandardScaler |
8. EM vs KMeans 数学对比
| 维度 | KMeans | EM (GMM) |
|---|---|---|
| 目标函数 | ||
| 赋值 | 硬赋值 | 软赋值 |
| 簇形状 | 球形(等距离衰减各向同性) | 椭圆形(全协方差各向异性) |
| 不确定性 | 无 | 有—— |
| 参数数 |
常见坑
- 混淆 EM 与 KMeans——EM 输出概率归属(软聚类),KMeans 输出确定归属(硬聚类)。
- 在
covariance_type="spherical"下期待椭圆形簇——球形协方差等价于 KMeans 的簇形状假设。 - 忽略 EM 收敛到局部最优的风险——不同初始化可能导致不同的聚类结果。
- 认为
max_iter=200不够——200 次对于 2 维 3 分量数据通常足够收敛。
小结
- EM 算法的数学核心链:GMM 生成模型
→ 隐变量 → E 步计算责任 → M 步责任加权更新参数 → 对数似然单调递增 → 局部收敛。 - 与 KMeans 的根本区别:概率软赋值(
连续)vs 距离硬赋值( 离散)、椭圆协方差 vs 球形距离。 - 当前源码
GaussianMixture(n_components=3, covariance_type="full", max_iter=200)是 GMM 最灵活的教学配置——允许每个分量有独立的全协方差矩阵。