思路与直觉
本章目标
- 用直观方式理解 EM 算法的核心思路——"猜分属,再调整"的循环迭代。
- 理解软赋值(责任)与硬赋值(标签)的直觉差异——概率归属 vs 确定归属。
- 通过与 KMeans 的对比,建立 GMM 在聚类谱系中的定位——概率生成模型。
重点方法与概念速览
| 名称 | 类型 | 作用 |
|---|---|---|
| 鸡生蛋蛋生鸡 | 核心困境 | 知道样本属于哪个分量 → 可以算分量参数;知道分量参数 → 可以判断样本属于哪个分量 |
| E 步(责任分配) | 迭代操作 | "在当前参数下,这个点大概是哪个分量生成的?"——给每个点对各分量的归属概率 |
| M 步(参数更新) | 迭代操作 | "按这个归属概率,每个分量的最佳中心在哪?椭圆该长什么样?" |
| 软赋值 | 核心特征 | 每个点对 3 个分量各有归属概率—— |
| 对数似然下界 | 收敛保证 | 每次迭代后"数据在当前参数下的概率"都在上升——不会变差 |
1. 为什么需要 EM
假设你要把 500 个点分成 3 个椭圆簇——但你没有标签。如果你知道每个点的分量归属:
可以很容易算出每个分量的中心(加权平均)和形状(加权协方差)。
反过来,如果你知道 3 个分量的中心和椭圆形状:
可以很容易算出每个点属于哪个分量(看它在哪个椭圆的正下方)。
但两样都没有——这就是"鸡生蛋蛋生鸡"。
EM 的解决思路:先猜参数 → 凭参数猜归属 → 凭归属更新参数 → 凭新参数重新猜归属 → ... 直到稳定。
2. 用"分类垃圾"理解 EM
想象你把 500 颗不同颜色的珠子混在一起,想让机器自动按颜色分成 3 堆:
- 先乱猜 3 堆的中心和范围(初始化
、 ) - 看每颗珠子离哪堆更近(E 步——但 EM 不是"最近的堆",而是"最可能来自哪堆"——考虑到每堆的大小和形状)
- 重新计算每堆的中心和范围(M 步——加权平均,因为有些珠子可能"有点属于堆 A,也有点属于堆 B")
- 重复 2-3 步直到每堆的中心不再移动
理解重点
- EM 比 KMeans 多考虑了形状——如果一个簇是细长的椭圆,靠近椭圆长轴末端的点可能离另一个簇的球心更近,但它实际上属于这个椭圆簇。
- 这就是马氏距离 vs 欧氏距离的核心差异——EM 衡量的是"在椭圆坐标系下的距离"。
3. 软赋值 vs 硬赋值的直觉
KMeans(硬赋值):
"这个点离 A 最近,它就是 A 的人,跟 B 和 C 一点关系都没有。"
EM(软赋值):
"这个点 70% 可能是 A 的,20% 可能是 B 的,10% 可能是 C 的——但我不确定,所以三个分量都参考它,只是权重不同。"
理解重点
- 软赋值在边界模糊处最有价值——两个椭圆重叠区域的点,KMeans 可能武断地划给一方,EM 会"分担责任"。
model.predict_proba(X)返回的就是这个软赋值矩阵——(500, 3),每行和为 1.0。- 不确定性 =
——值越大说明这个点"在分量间摇摆不定"。
4. E 步和 M 步的直觉对比
| 步骤 | 直觉 | 输入 | 输出 |
|---|---|---|---|
| E 步 | "在当前参数下,猜测每个点属于各分量" | 当前 | 责任矩阵 |
| M 步 | "根据每个点的分量归属,重新计算参数" | 责任矩阵 | 新 |
理解重点
- E 步用的是当前的模型参数——"模型现在长这样,你说这些点是谁的?"
- M 步用的是 E 步的输出——"既然你们觉得这些点大概是 A 的,那 A 的中心应该在...这个位置,椭圆应该长...这个形状。"
- 每次迭代,
都在增加——EM 永远不会"变差"。
5. 用"猜考试分数"理解协方差类型
3 个班的学生考了两门试(数学和物理):
spherical:假设每个班的数学和物理分数独立且方差相同——等价于 KMeansdiag:假设每个班的数学和物理分数独立但方差不同——横平竖直的椭圆full:每个班的数学和物理分数可能相关(数学好的物理也好)——任意方向的椭圆
当前数据使用 full——因为分量 1 在
6. EM vs KMeans 直觉对比
| 维度 | KMeans | EM (GMM) |
|---|---|---|
| 核心问题 | 如何把点分成 K 个球形簇? | 这些点最可能由哪 K 个椭圆高斯生成? |
| 赋值 | 硬——每个点只属于一个簇 | 软——每个点对各分量有归属概率 |
| 距离度量 | 欧氏距离(到质心) | 马氏距离(考虑协方差的加权距离) |
| 簇形状 | 圆形(各向同性) | 任意椭圆(各向异性) |
| 不确定性 | 无——每个点只有一个标签 | 有——边界模糊的点有混合归属 |
| 输出 | labels_(整数标签) | labels_ ∩ predict_proba()(概率归属) |
| 极限关系 | — | KMeans 是 GMM 在 spherical 协方差 + 硬赋值下的极限 |
理解重点
- GMM 是 KMeans 的"概率升级版"——保持了"把点分组"的目标,但增加了椭圆形状和软归属。
- 损失:GMM 的参数更多(
full下每个分量要估计 3 个协方差参数),在小样本上可能过拟合。 - 收益:GMM 能正确拟合非球形簇,并提供归属概率的置信度。
可视化

常见坑
- 把 EM 当成 KMeans 的"精确版"——EM 收敛更慢、对初始化更敏感,不保证全局最优。
- 认为软赋值"更高级所以总是更好"——如果数据确实是球形等权簇(
make_blobs),GMM 的全协方差反而包含冗余参数。 - 忽略协方差类型的含义——在
spherical下 GMM 退化为 KMeans 的概率版,椭圆簇建模能力为零。 - 期待 EM 每次收敛到相同结果——EM 是局部优化,不同初始化的结果可能不同。
小结
- EM 的直觉核心是"猜-改"循环:用当前参数猜归属(E 步)→ 用归属更新参数(M 步)→ 重复。每步保证数据似然不降。
- 软赋值是 EM 与 KMeans 最核心的直觉差异——概率归属允许"一个点同时部分属于多个分量"。
- 全协方差(
full)使 GMM 能拟合任意方向的椭圆——这是相对于 KMeans 球面簇假设的最大优势。