机器学习算法——高斯混合模型GMM
文章目录
一、高斯分布
1.1 单一高斯分布
1.1.1单一高斯(一维)
在统计学中,高斯分布(正态分布) 是描述 “单峰、对称、连续” 数据的经典工具,比如人的身高、考试成绩等。对于单个特征x,其概率密度函数为:
N ( x ∣ μ , σ 2 ) = 1 2 π σ 2 exp ( − ( x − μ ) 2 2 σ 2 ) \mathcal{N}(x \mid \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( -\frac{(x-\mu)^2}{2\sigma^2} \right) N(x∣μ,σ2)=2πσ21exp(−2σ2(x−μ)2)
其中:μ为均值(数据中心),σ2为方差(数据离散程度)。
全班 50 人,只看数学成绩。大多数人考中间分,少数人极高、极少数人极低。画成直方图,即中间高、两边低、对称。这就是高斯分布(标准正态分布)。
- x:某个人的数学成绩
- μ:平均分(78.18分)
- σ:标准差(分数散不散)
1.1.2单一高斯(二维)
现在同时看 数学成绩 + 语文成绩。不是看一门,而是两个维度一起建模,成绩组合这就变成了 二维高斯分布。50 个学生水平差不多,点会聚成一团,像一个椭圆云。
- 横轴为数学成绩
- 纵轴为语文成绩。
- 蓝色散点中每个点代表 1 位学生的(数学,语文)

- 边缘直方图验证了单变量高斯性:数学、语文各自都呈现 “中间高、两边低” 的钟形分布。
- 数据集中在中心区域(数学≈75–85,语文≈75–85),向两端逐渐稀疏,符合二维高斯分布的 “中间密、边缘稀” 特征。

二维高斯分布的概率密度函数:
N ( x ∣ μ , Σ ) = 1 ( 2 π ) D / 2 ∣ Σ ∣ 1 / 2 exp ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) \mathcal{N}(\mathbf{x} \mid \boldsymbol{\mu}, \boldsymbol{\Sigma}) = \frac{1}{(2\pi)^{D/2} |\boldsymbol{\Sigma}|^{1/2}} \exp\left( -\frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \boldsymbol{\Sigma}^{-1} (\mathbf{x} - \boldsymbol{\mu}) \right) N(x∣μ,Σ)=(2π)D/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ))
- x:随机变量向量; x = ( 数学成绩 语文成绩 ) x=\begin{pmatrix} 数学成绩 \\ 语文成绩\end{pmatrix} x=(数学成绩语文成绩)
- d:特征维度; d = 2 d=2 d=2(两科成绩)。
- μ:d维均值向量; μ 数学 ≈ 77.5 分 μ_{数学}≈77.5 分 μ数学≈77.5分、 μ 语文 ≈ 80.0 分 μ_{语文}≈80.0 分 μ语文≈80.0分。写成向量形式: μ = ( 77.5 80.0 ) μ=\begin{pmatrix} 77.5 \\ 80.0 \end{pmatrix} μ=(77.580.0)
- Σ:d×d协方差矩阵(描述特征间的相关性); ( σ 数 2 Cov ( 数 , 语 ) Cov ( 数 , 语 ) σ 语 2 ) \begin{pmatrix} \sigma_{\text{数}}^2 & \text{Cov}(\text{数}, \text{语}) \\ \text{Cov}(\text{数}, \text{语}) & \sigma_{\text{语}}^2 \end{pmatrix} (σ数2Cov(数,语)Cov(数,语)σ语2)
- 对角线元素:方差(σ2),数学、语文各自散得开不开
- 非对角线元素:协方差(Cov),数学和语文有没有相关性
- 正相关(数学好 → 语文也好)。散点图:从左下 → 右上倾斜的椭圆
- 负相关(数学好 → 语文差)。散点图:从左上 → 右下倾斜的椭圆
- 不相关。散点图:正椭圆 / 圆
1.2 混合高斯分布
混合高斯分布是由多个高斯分布组合而成的模型。它适用于那些不能仅用单一高斯分布来描述的数据集。比如,有些数据集可能包含多个不同的群体,每个群体的分布可能都是高斯分布,但整体来看,数据集的分布就是这些高斯分布的混合。
1.2.1混合高斯(一维)
假设你有 50 个学生的数学成绩,但这 50 人不是同一类人,而是三类混在一起,每一组单独看,都是一个单一高斯分布(一团点)。把三组混在一起,就是混合高斯分布。
- 学霸组(20 人):数学 90 左右
- 普通组(20 人):数学 70 左右
- 基础薄弱组(10 人):数学 50 左右

- 红色曲线:整体混合高斯分布,由三个子群体叠加而成,呈现出三峰形态。
- 蓝色曲线:三个独立的单一高斯分布,分别对应三类学生群体:
- 基础薄弱组:成绩集中在低分区间(对应左侧峰)。
- 普通组:成绩集中在中等区间(对应中间峰)。
- 学霸组:成绩集中在高分区间(对应右侧峰)。
红色曲线是三个单一高斯分布按权重叠加的结果,代表异质混合群体的整体成绩分布:整体呈现多峰形态,每个峰对应一个子群体。可以通过拟合算法,将整体数据拆分为原始的子群体分布,还原出不同水平学生的成绩特征。
1.2.2混合高斯(二维)
假设你有 50 个学生的成绩(数学、语文),但这 50 人不是同一类人,而是三类混在一起,每一组单独看,都是一个单一高斯分布(一团点)。把三组混在一起,就是混合高斯分布。
- 学霸组(20 人):数学 90 左右,语文 90 左右
- 普通组(20 人):数学 70 左右,语文 70 左右
- 基础薄弱组(10 人):数学 50 左右,语文 50 左右

三组点云叠加后,整体呈现三团点云的分布形态。等高线图会显示为三个嵌套椭圆,分别对应三类学生的成绩聚集区。
p ( x ) = ∑ k = 1 K α k ⋅ N ( x ; μ k , σ k 2 ) p(x) = \sum_{k=1}^{K} \alpha_k \cdot \mathcal{N}(x; \mu_k, \sigma_k^2) p(x)=k=1∑Kαk⋅N(x;μk,σk2)其中:
- K K K:混合成分个数(这里 K=3,对应三类学生)
- α k α_k αk:第 k 个成分的权重
- N ( x ; μ k , σ k 2 ) N(x;μ_k,σ_k^2) N(x;μk,σk2):第 k 个一维高斯分布的概率密度函数
p ( x ) = ∑ k = 1 K α k ⋅ N ( x ; μ k , ∑ k ) p(x) = \sum_{k=1}^{K} \alpha_k \cdot \mathcal{N}(x; \mu_k, \sum{k}) p(x)=k=1∑Kαk⋅N(x;μk,∑k)其中:
- K K K:混合成分个数(这里 K=3,对应三类学生)
- α k α_k αk:第 k 个成分的权重
- N ( x ; μ k , ∑ k ) N(x;μ_k,\sum{k}) N(x;μk,∑k):第 k 个二维高斯分布的概率密度函数
- x = ( x 1 , x 2 ) x=(x1,x2) x=(x1,x2):二维向量(数学成绩、语文成绩)
- μ k = ( μ k 1 , μ k 2 ) μ_k=(μk1,μk2) μk=(μk1,μk2):第 k 组的均值向量
- Σ k Σk Σk:第 k 组的2×2 协方差矩阵
1.3总结
单一高斯分布:所有数据都来自 “同一群人”,服从同一个正态分布。- 一维:只有一个变量的正态分布,用平均值和宽度,描述数据中间多、两头少的分布形态。
- 二维:两个变量共同服从同一个正态分布,用中心点 + 椭圆形状,描述它们的平均水平、分散程度和相关性。
- 多维:多个变量共同服从同一个正态分布,用一个中心点、一个协方差矩阵,描述她们的的平均水平、分散程度和变量之间的相关性。
混合高斯分布:数据不是来自一群人,而是来自好几群人,每群各自是高斯,合在一起就是混合高斯。- 一维:把多个一维高斯(钟形曲线)加在一起,用来描述由多组人混合而成的单变量数据。
- 二维:把多个二维高斯(椭圆分布)加在一起,用来描述由多组人混合而成的双变量数据。
- 多维:把多个多维高斯(高维椭球分布)加在一起,用来描述由多组人混合而成的多变量数据。
| 高斯分布 | 举例说明 | 图像 |
|---|---|---|
| 单一一维高斯 | 50 个学生水平相近,只看数学成绩 | 一条单峰钟形曲线 |
| 混合一维高斯 | 50 个学生分为差生、普通、学霸三组,只看数学成绩 | 一条多峰总曲线,由多条钟形曲线叠加 |
| 单一二维高斯 | 50 个学生水平相近,同时看数学 + 语文成绩 | 一个椭圆(一团点) |
| 混合二维高斯 | 50 个学生分为差生、普通、学霸三组,同时看数学 + 语文成绩 | 多个椭圆(多团点),整体为混合轮廓 |
| 单一多维高斯 | 50 个学生水平相近,同时看多科成绩 | 高维空间中一个椭球(一团点) |
| 混合多维高斯 | 50 个学生分为多组,同时看多科成绩 | 高维空间中多个椭球(多团点) |
二、高斯混合模型
高斯混合模型(Gaussian Mixture Model,GMM)是一种基于概率的无监者学习模型,通过假设数据由多个高斯分布组成来进行数据建模,在机器学习、统计学和信号处理等领域有广泛的应用。
2.1求解困境
高斯混合模型 GMM = 用 “多个高斯分布加起来” 去拟合复杂数据,并自动把数据分成几类的概率模型。
问题:你有 50 个学生的成绩(一维二维都适用),但不知道谁是哪一类,只看到一堆分数。GMM 的任务:自动把他们分成 差生、普通、学霸,并且算出每一类的:平均分、成绩波动、人数占比。核心假设:数据集由 K 个高斯分布混合生成(对应 K=3 类学生:差生 / 普通 / 学霸),每个样本由其中一个高斯组件生成。模型构建:GMM 概率密度函数。
p ( x ) = ∑ k = 1 K α k ⋅ N ( x ; μ k , ∑ k ) p(x) = \sum_{k=1}^{K} \alpha_k \cdot \mathcal{N}(x; \mu_k, \sum{k}) p(x)=k=1∑Kαk⋅N(x;μk,∑k)
目标函数:最大化对数似然。
求解困境:无法直接求导。
2.2 EM算法
EM 算法是 GMM 能落地的核心,它通过 “两步迭代” 绕开隐藏变量的问题,最终拟合出最优参数。
2.2.1 模型构建
模型:
p ( x i ) = ∑ k = 1 K α k N ( x i ; μ k , σ k 2 ) p(x_i) = \sum_{k=1}^K \alpha_k \mathcal{N}(x_i;\mu_k,\sigma_k^2) p(xi)=k=1∑KαkN(xi;μk,σk2)
待求参数:
θ = { α k , μ k , σ k 2 } , k = 1 , … , K \theta = \{\alpha_k,\mu_k,\sigma_k^2\},\quad k=1,\dots,K θ={αk,μk,σk2},k=1,…,K
定义一个关键量(E 步要算的东西):
γ i k = p ( z i = k ∣ x i ; θ ) \gamma_{ik} = p(z_i=k \mid x_i;\theta) γik=p(zi=k∣xi;θ)
含义:第 i 个样本,属于第 k 个高斯组件的后验概率(可以理解成:这个成绩有多大可能是第 k 组学生考出来的)
E 步(期望步):固定当前参数,计算每个样本属于每个高斯组件的后验概率(即 “推断隐藏变量zi的分布”);M 步(最大化步):基于 E 步的后验概率,更新参数(αk,μk,Σk),使对数似然函数最大化;
2.2.2 E 步:求后验概率 γᵢₖ
公式(这就是 E 步唯一要做的事):
γ i k = α k ⋅ N ( x i ; μ k , σ k 2 ) ∑ j = 1 K α j ⋅ N ( x i ; μ j , σ j 2 ) \gamma_{ik} = \frac{\alpha_k \cdot \mathcal{N}(x_i;\mu_k,\sigma_k^2)}{\sum_{j=1}^K \alpha_j \cdot \mathcal{N}(x_i;\mu_j,\sigma_j^2)} γik=∑j=1Kαj⋅N(xi;μj,σj2)αk⋅N(xi;μk,σk2)
- 分子:这个样本来自第 k 组的概率
- 分母:这个样本来自所有组的概率总和
- 结果:归一化后的属于第 k 组的概率
阶段 4:EM 算法 ——GMM 参数的求解过程(GMM 的 “训练逻辑”)
2.2.3 M 步:用 γᵢₖ 更新 3 组参数
M 步就是用 E 步算出来的 γ 重新算 α、μ、σ²。
- ① 更新权重 αₖ
α k new = 1 N ∑ i = 1 N γ i k \alpha_k^{\text{new}} = \frac{1}{N}\sum_{i=1}^N \gamma_{ik} αknew=N1i=1∑Nγik - ② 更新均值 μₖ
μ k new = ∑ i = 1 N γ i k x i ∑ i = 1 N γ i k \mu_k^{\text{new}} = \frac{\sum_{i=1}^N \gamma_{ik}x_i}{\sum_{i=1}^N \gamma_{ik}} μknew=∑i=1Nγik∑i=1Nγikxi - ③ 更新方差 σₖ²
σ k 2 new = ∑ i = 1 N γ i k ( x i − μ k new ) 2 ∑ i = 1 N γ i k \sigma_k^{2\,\text{new}} = \frac{\sum_{i=1}^N \gamma_{ik}(x_i-\mu_k^{\text{new}})^2}{\sum_{i=1}^N \gamma_{ik}} σk2new=∑i=1Nγik∑i=1Nγik(xi−μknew)2
2.2.4 收敛判断
重复 E 步和 M 步,直到满足以下条件之一:
- 对数似然函数logp(X)的变化小于ϵ(比如10−6);
- 参数{αk,μk,Σk}的变化小于ϵ。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)