基于EM算法与最大似然估计的混合高斯分布拟合系统
项目简介
本项目是一个基于MATLAB开发的统计分析工具箱,专注于混合高斯分布(Gaussian Mixture Model, GMM)的参数估计。项目通过合成数据验证,深入对比了期望最大化(EM)算法与基于直方图的最小二乘估计(LSE)算法在参数拟合上的性能表现。该系统不仅实现了核心的迭代估计算法,还提供了完整的数据生成、收敛监测以及多维度的可视化分析功能,非常适合用于统计推断的学习、算法性能评估及数据分布分析。
功能特性
- 合成数据生成:能够根据预设的均值、标准差和权重,生成指定数量的单变量混合高斯分布随机样本。
- EM算法实现:完整实现了期望最大化算法,包括E-step(期望步)和M-step(最大化步),用于计算最大似然估计(MLE)。
- LSE算法实现:基于样本直方图密度,实现了最小二乘估计,作为EM算法的对比基准。
- 收敛性监测:实时记录并分析对数似然函数(Log-Likelihood)的变化,支持基于阈值的自动收敛判定。
- 多维度可视化:
* 拟合曲线对比(真实分布 vs EM拟合 vs LSE拟合)。
* 独立高斯分量分解展示。
* 算法收敛轨迹图。
* 参数估计误差(均值误差)的直方图对比。
- 鲁棒性设计:包含防止方差过小导致的数值不稳定处理,以及权重约束处理。
系统要求
- MATLAB R2016a 或更高版本(代码仅使用基础函数库,不强依赖统计工具箱,但推荐安装以获得更好性能)。
使用方法
直接在MATLAB环境中运行 main.m 脚本即可。程序将自动执行以下流程:
- 生成模拟数据。
- 运行EM算法进行参数迭代。
- 运行LSE算法进行优化求解。
- 在控制台输出参数对比表。
- 弹出一个包含三个子图的综合分析窗口。
核心逻辑与实现细节
本项目主要包含在 main.m 文件中,其具体实现逻辑如下:
1. 数据生成与初始化
程序首先定义了包含3个高斯分量的真实模型参数(均值、标准差、权重),并通过累积权重概率法(Inverse Transform Sampling思想)生成了2000个观测样本。这为后续评估算法准确性提供了“上帝视角”的基准数据。
2. 期望最大化 (EM) 算法
这是项目的核心部分,通过迭代方式逼近最大似然解:
- 初始化:为了演示收敛过程,采用在数据范围内随机选取均值、设定统一初始方差的方式。
- E-step (期望步):计算每个样本属于各个高斯分量的后验概率(即响应度
gamma),并进行行归一化。 - M-step (最大化步):由于数据是单变量的,代码通过向量化操作更新参数:
*
均值更新:利用响应度加权平均计算新的均值。
*
方差更新:计算加权均方差,并加入了
1e-4 的下限阈值,防止迭代过程中方差塌陷导致数值异常。
*
权重更新:计算各分量的平均响应度。
- 收敛判定:计算对数似然函数值 $sum ln(sum pi_k mathcal{N}(x))$,当相邻两次迭代的似然值增量小于
1e-6 时停止迭代。
3. 最小二乘估计 (LSE)
为了提供对比视角,项目实现了一个基于优化的估计方法:
- 直方图密度化:将连续的观测数据离散化为50个区间的直方图,并转化为概率密度估算。
- 目标函数:定义了损失函数,即“当前参数下的GMM理论概率密度曲线”与“直方图经验密度”之间的残差平方和(SSE)。
- 数值优化:使用
fminsearch(Nelder-Mead单纯形法)寻找使SSE最小的参数组合。 - 约束处理:在目标函数中强制对标准差取绝对值以保证非负,并通过 $1 - sum w_{1:K-1}$ 计算最后一个分量的权重,同时对非法权重施加惩罚以保证约束条件。
4. 辅助算法函数
- generate_gmm_data:自定义的数据生成逻辑,处理混合分布的采样。
- calc_gaussian:标准的单变量高斯概率密度函数计算。
- calc_total_prob:计算多个高斯分量的加权和,即混合模型的总概率密度。
- lse_objective:专门为LSE优化器设计的目标函数,封装了参数提取、约束校验和误差计算。
5. 可视化分析
绘图模块展示了算法的最终效果:
- 主视窗:叠加显示了原始数据的归一化直方图、真实分布曲线(绿色虚线)、EM算法拟合曲线(红色实线)和LSE拟合曲线(蓝色点线)。同时,用不同颜色绘制了EM结果分解后的每个独立高斯波峰。
- 收敛分析图:绘制了EM算法迭代次数与对数似然函数值的关系,展示算法如何一步步提升模型拟合度。
- 误差分析图:通过柱状图直观对比了EM算法和LSE算法在估计均值参数时的绝对误差,便于判断哪种方法更接近真值。