项目:gmmTrain - 高斯混合模型参数训练
项目介绍
gmmTrain 是一个基于 MATLAB 开发的统计建模工具,专门用于高斯混合模型(GMM)的自动化参数估计。该项目通过实现经典的期望极大化算法(Expectation-Maximization Algorithm, EM),能够从多维观测数据中自动识别并拟合出多个高斯分布分量,从而实现对复杂数据分布的精确数学描述。
功能特性
- 自动化 EM 迭代:完整实现了从参数初始化到收敛判定的 EM 算法全过程。
- 稳健的数值计算:针对协方差矩阵奇异性问题设计了检测机制与正则化补丁,确保计算稳定性。
- 实时进度监控:训练过程中自动打印迭代次数与对数似然值,便于跟踪模型运行状态。
- 综合可视化效果:自动生成数据拟合等高线图与算法收敛曲线,直观展示训练成果。
- 参数高度可调:支持自定义高斯分量个数、最大迭代次数及收敛精度阈值。
系统要求
- 运行环境:MATLAB R2016b 或更高版本。
- 依赖功能:需支持基础矩阵运算及绘图功能;生成测试数据时需具备 Statistics and Machine Learning Toolbox。
核心实现逻辑与功能描述
本项目的主程序逻辑严密地遵循了统计学习中的参数估计流程:
- 实验数据构建
程序首先通过指定不同的均值向量和协方差矩阵,生成三组各 300 个样本的二维模拟数据。该步骤通过固定随机种子确保实验的可重复性,模拟了典型的高度重叠及非对称分布的复杂数据场景。
- 模型初始化
在训练启动阶段,程序对 GMM 的三个核心参数进行初始化:
- 权重初始化:各高斯分量赋予相等的初始权重。
- 均值初始化:从输入数据集中随机选取特定样本点作为各分量的初始中心。
- 协方差初始化:统一设为单位矩阵,为后续的迭代演化提供起点。
- EM 迭代核心过程
- E-Step(期望步):利用当前参数计算多元正态分布概率密度。程序会计算每个样本点由各个高斯分量生成的“响应度”(Responsibility),并处理边缘概率。
- M-Step(极大步):根据 E 步得到的响应度重新估计控制参数。通过样本加权平均更新各个分量的均值、协方差矩阵以及在混合模型中的权重占比。
- 收敛判定与稳定性保障
程序在每次迭代后计算当前的总对数似然估计值(Log-Likelihood)。若相邻迭代间的似然值变化量小于预设阈值(1e-6),则判定模型已收敛并提前跳出循环。为防止数值计算中出现奇异矩阵导致崩溃,程序在计算行列式及更新协方差时均加入了微小的正则项。
关键过程与算法细节分析
多元正态概率计算
在计算 E 步响应度时,程序实现了 D 维空间下的概率密度函数计算,涉及到协方差矩阵的求逆、行列式计算以及指数项求和。通过向量化操作,程序高效地完成了数以千计样本点的概率映射。
数值防崩机制
代码中包含两处关键的数值保护逻辑:
- 在计算响应度前,若发现协方差矩阵行列式过小(小于 1e-10),则为其对角线补偿 1e-3 的扰动。
- 在 M 步更新协方差矩阵后,统一添加 1e-6 的正则化因子,确保矩阵始终保持正定性,避免后续求逆运算失效。
计算图谱监控
训练完成后,程序通过双子图形式展现结果:
- 拟合图:在原始样本散点图上叠加 GMM 概率密度等高线。等高线图通过 meshgrid 构建的网格点实时计算总概率密度 Z 值,并利用 contour 函数绘制,准确勾勒出高斯分量的覆盖范围。
- 收敛图:以迭代次数为横轴、对数似然值为纵轴,绘制收敛曲线,清晰记录了算法从初始状态到最优解的演进轨迹。
归一化处理
在 E 步中,程序通过引入 eps(极小值)对响应度矩阵进行归一化,确保了数值计算中不会出现除零错误,同时保证了每个样本在所有分量上的概率和始终为 1。