【机器学习】高斯分布 高斯混合模型

1. 高斯分布(Gaussian Distribution)

高斯分布,也就是我们熟悉的正态分布 ,它描述了一个最常见的自然规律:大多数数据会集中在一个平均值附近,偏离越远的数据出现的可能性越小。它的概率密度函数图像是一条对称的钟形曲线

N(x∣μ,Σ)=1(2π)d/2∣Σ∣1/2exp⁡(−12(x−μ)TΣ−1(x−μ)) N(x | \mu, \Sigma) = \frac{1}{(2\pi)^{d/2} |\Sigma|^{1/2}} \exp\left( -\frac{1}{2}(x - \mu)^T \Sigma^{-1} (x - \mu) \right) N(x∣μ,Σ)=(2π)d/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ))

这个分布由两个关键参数决定:

  • 均值(μ):决定了曲线的中心位置,也就是数据平均值的所在。
  • 方差(σ²):决定了曲线的形状,方差越大,曲线越"胖",数据越分散;方差越小,曲线越"瘦高",数据越集中。

在现实世界中,人的身高、考试成绩、测量误差等大量现象都近似服从高斯分布。

2. 高斯混合模型(Gaussian Mixture Model, GMM)

现实中的数据往往很复杂,单一的高斯分布无法很好地描述。比如,当我们统计一群人的身高时,由于男女身高各有自己的均值,整体数据会呈现出两个"钟形"叠加的形态。

高斯混合模型(GMM)正是为了解决这个问题而生的。它就是用多个高斯分布的加权组合来拟合复杂的数据分布

对于 d维 的数据,其概率密度函数为:

p(x)=∑k=1Kπk⋅N(x∣μk,Σk) p(x) = \sum_{k=1}^{K} \pi_k \cdot N(x | \mu_k, \Sigma_k) p(x)=k=1∑Kπk⋅N(x∣μk,Σk)

  • KKK:混合模型中高斯分量的个数。
  • πk\pi_kπk:第 kkk 个分量的混合系数 (即权重),相当于在生成数据时,随机选择这个分量的概率。它必须满足 ∑k=1Kπk=1\sum_{k=1}^{K} \pi_k = 1∑k=1Kπk=1 且 0≤πk≤10 \le \pi_k \le 10≤πk≤1。
  • N(x∣μk,Σk)N(x | \mu_k, \Sigma_k)N(x∣μk,Σk) :第 kkk 个高斯分量的概率密度函数,拥有自己独立的均值 μk\mu_kμk 和协方差 Σk\Sigma_kΣk。

因为可以组合多个高斯分布,GMM非常灵活,能平滑地近似任意形状的密度分布,因此在聚类、语音识别、图像分割等领域应用广泛。

3. EM算法(Expectation-Maximization Algorithm)

现在的问题来了:当我们使用GMM时,我们手头只有一堆数据点,却不知道这些数据点分别属于哪个高斯分布,也不知道每个分布的参数(均值、方差)和权重。这就好比一道菜已经做好了,但我们既不知道菜谱(模型参数),也不知道每种调料放了多少。EM算法就是用来在这样"信息不全"的情况下,反向推断出模型参数的"秘密武器"

EM算法的核心是一个迭代的过程,它通过两个步骤的交替进行来逼近最优解:

  1. E步(期望步) :基于当前对模型参数的猜测,来"补全"缺失的信息。具体来说,就是计算每个数据点属于各个高斯分布的可能性(即后验概率)
  2. M步(最大化步) :利用E步补全的信息(每个点属于谁的可能性),重新估计模型参数(即更新各个高斯分布的均值、方差和权重),使得整个模型拟合数据的能力达到最大。

这个过程会不断重复,直到模型参数不再发生明显变化(即收敛)。一个经典的比喻是:把一锅菜不均匀地分到两个碗里,不断从多的碗里舀一点到少的碗里,直到两个碗看起来一样多

好的,我们来看这三个概念的数学公式。这部分需要一点线性代数基础,我会尽量用文字解释清楚每个符号的含义。

E步(期望步)

计算每个数据点 xix_ixi 来自第 kkk 个高斯分量的后验概率 (即"责任"),记作 γik\gamma_{ik}γik:

γik=πk⋅N(xi∣μk,Σk)∑j=1Kπj⋅N(xi∣μj,Σj) \gamma_{ik} = \frac{\pi_k \cdot N(x_i | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \cdot N(x_i | \mu_j, \Sigma_j)} γik=∑j=1Kπj⋅N(xi∣μj,Σj)πk⋅N(xi∣μk,Σk)

公式解读 :分子是"第k个分量自己生成xix_ixi的可能性",分母是所有K个分量生成xix_ixi的总可能性。两者的比值就是"这个点到底有多大程度上属于第k类"。

M步(最大化步)

利用E步算出的 γik\gamma_{ik}γik(视为已知),重新估计模型参数:

  1. 更新混合系数(权重)πk\pi_kπk (所有点的"责任"平均值):

    πknew=1N∑i=1Nγik \pi_k^{\text{new}} = \frac{1}{N} \sum_{i=1}^{N} \gamma_{ik} πknew=N1i=1∑Nγik

  2. 更新均值 μk\mu_kμk (用"责任"对数据点做加权平均):

    μknew=∑i=1Nγik⋅xi∑i=1Nγik \mu_k^{\text{new}} = \frac{\sum_{i=1}^{N} \gamma_{ik} \cdot x_i}{\sum_{i=1}^{N} \gamma_{ik}} μknew=∑i=1Nγik∑i=1Nγik⋅xi

  3. 更新协方差 Σk\Sigma_kΣk (用"责任"对偏离程度做加权平均):

    Σknew=∑i=1Nγik⋅(xi−μknew)(xi−μknew)T∑i=1Nγik \Sigma_k^{\text{new}} = \frac{\sum_{i=1}^{N} \gamma_{ik} \cdot (x_i - \mu_k^{\text{new}})(x_i - \mu_k^{\text{new}})^T}{\sum_{i=1}^{N} \gamma_{ik}} Σknew=∑i=1Nγik∑i=1Nγik⋅(xi−μknew)(xi−μknew)T

在EM算法收敛之后,对于任意一个数据点 xix_{i}xi,你只需要计算它属于每个高斯分量的后验概率 ,然后取使 γik\gamma_{ik}γik 最大 的那个 kkk 作为聚类标签

label(xi)=arg⁡max⁡k πk⋅N(xi∣μk,Σk)∑j=1Kπj⋅N(xi∣μj,Σj) \boxed{\text{label}(x_i) = \arg\max_{k} \ \frac{\pi_k \cdot N(x_i | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \cdot N(x_i | \mu_j, \Sigma_j)}} label(xi)=argkmax ∑j=1Kπj⋅N(xi∣μj,Σj)πk⋅N(xi∣μk,Σk)

4 与 K-Means 算法对比

对比维度 K-Means 聚类 GMM 聚类(基于EM)
归属方式 硬分类(非A即B) 软分类(70%是A,30%是B)
簇的形状 只能是圆形(各向同性) 可以是任意方向的椭圆(各向异性)
权衡依据 欧几里得距离(点到质心) 马氏距离(考虑协方差) + 先验概率权重
迭代步骤 分配点到最近质心 → 更新质心 E步 (算概率) → M步(更新参数)
对"异常值"的容忍度 敏感(离群点会拉动质心) 较鲁棒(离群点属于任何簇的概率都很低,贡献被削弱)
相关推荐
雾屿_Mistisle11 小时前
模型窃取与隐私泄露(二)模型反演与模型提取
机器学习·数据分析
别动我齐刘海11 小时前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
tellmewhoisi12 小时前
机器学习:集成学习2(GBDT算法)
机器学习
tellmewhoisi12 小时前
机器学习:朴素贝叶斯
机器学习
逻辑君12 小时前
MoreLogic RAG 个人免费版 · 产品宣传手册和产品白皮书
人工智能·机器学习
雾屿_Mistisle13 小时前
AI安全设计总结
人工智能·机器学习·数据分析
皇儒无上13 小时前
智慧矿山-关于推进山西省煤矿灾害差异化智能化建设强化 AI 风险防控的政策建议
人工智能·机器学习·区块链
雾屿_Mistisle14 小时前
对抗样本攻击(四)对抗训练
机器学习·数据分析
Rocky Ding*14 小时前
【三年面试五年模拟】阿里巴巴-千问技术部算法一面全解析
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·ai agent
xx_xxxxx_14 小时前
论文阅读-REINFORCE++与Lessons of Developing PRMs
人工智能·深度学习·机器学习·强化学习