项目介绍
本项目是一个基于 MATLAB 的统计计算工具,专注于实现最大期望(EM)算法。该工具主要用于解决高斯混合模型(GMM)中的数据聚类问题。在处理包含不可观测隐变量的概率模型时,该算法通过迭代优化,能够有效寻找参数的最大似然估计,从而将复杂的数据集自动划分为不同的统计簇。
功能特性
- 模拟数据自动生成:程序能够基于预设的多维高斯分布参数(均值、协方差、权重)自动合成测试数据集。
- 完整的 EM 迭代框架:实现了从初始化到期望步(E-Step)再到极大步(M-Step)的完整循环逻辑。
- 参数动态估计:在迭代过程中实时更新混合成分的权重、均值向量以及协方差矩阵。
- 收敛性智能监控:通过计算对数似然函数的变化率,自动判断算法是否达到最优解并触发停止机制。
- 多维度可视化:提供对数似然函数收敛曲线图以及直观的聚类结果分布图(包含簇中心和分布椭圆)。
系统要求
- MATLAB R2016b 或更高版本。
- 统计与机器学习工具箱(Statistics and Machine Learning Toolbox),用于调用多元正态随机数生成函数。
使用方法
- 环境准备:确保 MATLAB 工作路径包含当前脚本文件。
- 运行程序:启动脚本后,程序将按照预设参数(400个样本,3个聚类中心)自动开始执行。
- 查看输出:
- 命令行窗口将实时显示算法是否收敛以及最终优化的混合权重和均值坐标。
- 自动弹出“EM收敛曲线”分析图,展示对数似然值的上升趋势。
- 自动弹出“GMM聚类结果”可视化窗口,观察数据分类效果。
算法实现逻辑
程序逻辑严密遵循标准 EM 算法流程,具体步骤如下:
- 初始化阶段:
- 设置数据集参数,包括 400 个样本和 3 个待识别的聚类簇。
- 手动定义真实的统计分布参数用于生成实验数据。
- 算法启动前,通过随机选择现有样本点初始化均值向量,将协方差矩阵设为单位矩阵,混合权重设为均匀分布。
- 数据合成:
- 利用多元正态分布生成器构建具有重叠特征的模拟数据集,增加了聚类任务的挑战性。
- 期望步(E-Step)处理:
- 针对每个样本,利用多元正态分布的概率密度函数公式(包含矩阵行列式与逆矩阵运算)计算其属于各个分布的概率。
- 计算响应矩阵,即每个观测值归属于特定簇的后验概率。
- 计算当前的对数似然值,作为衡量模型拟合优度的核心指标。
- 极大步(M-Step)处理:
- 根据 E-Step 计算出的响应度,重新加权计算每个簇的新均值。
- 通过样本差值的转置乘法累加,更新每个分布的协方差矩阵。
- 重新估算混合权重,反映各组件在整体模型中的占比。
- 收敛判定与输出:
- 对比前后两次迭代的对数似然值差。
- 当差值小于 epsilon(1e-6)时,认为计算结果已趋于稳定,结束迭代。
核心代码细节分析
- 概率计算:程序内部通过公式手动构建了多元正态分布的计算算子,精确处理了特征维度引起的常数项缩放。
- 响应度归一化:在 E-Step 中,程序通过对行求和并进行除法运算,确保了每个样本对所有簇的响应度总和为 1。
- 协方差估算:在 M-Step 中使用循环遍历样本的方式,细致地计算了加权后的样本散度阵,从而更新二阶统计特征。
- 图形化展示技术:
-
收敛图:以对数似然函数为纵轴,观察算法如何平滑地逼近局部最优解。
-
分布椭圆:利用特征值分解(eig)计算协方差矩阵的主成分方向和长度,绘制出代表各簇分布范围的 2 倍标准差椭圆,使聚类物理意义更加直观。
-
维度兼容:逻辑中保留了 3D 散点可视化的扩展接口,增强了程序对高维数据的兼容潜力。