基于中餐馆过程(CRP)的狄利克雷混合过程模型仿真系统
项目介绍
本系统是一个基于MATLAB开发的非参数贝叶斯聚类仿真框架。系统实现了狄利克雷混合过程(DPMM),并利用中餐馆过程(Chinese Restaurant Process, CRP)的随机过程隐喻来解决数据聚类中“类簇数量未知”的核心难题。
在实际应用中,许多数据集的潜在类别数量在建模前是不可知的。本系统通过模拟顾客进入餐馆选择桌子的行为,动态地为数据分配类簇,实现了在无需预设K值的情况下自动推断数据分布结构的功能。
功能特性
- 自动聚类发现:利用CRP的特性,系统能根据数据本身的分布特征自动决定增加或减少类簇数量。
- 贝叶斯后验推断:采用吉布斯采样(Gibbs Sampling)算法,通过迭代更新每个数据点的归属概率。
- 共轭先验数学模型:内置高斯-正态逆威沙特(Normal-Inverse-Wishart, NIW)共轭先验,确保了数学推导的闭式解,提高了计算效率。
- 动态过程可视化:实时展示聚类结果、类簇数量的演化轨迹以及模型对数似然值的收敛曲线。
- 稳健的数值计算:在概率计算中采用了Log-Sum-Exp技巧,有效防止了多维高斯分布计算中常见的数值溢出问题。
核心实现逻辑
程序运行遵循以下标准化流程:
- 环境初始化:生成模拟数据,通过三个不同均值和协方差矩阵的高斯分布合成300个二维样本点,作为算法的输入。
- 参数配置:设定分散参数Alpha和NIW基分布的超参数(包括均值先验、标量因子、自由度以及比例矩阵)。
- 状态初始化:初始状态下将所有数据点分配至同一个类簇。
- 吉布斯采样循环:
- 遍历每一个采样点,将其从当前簇中暂时移除。
- 检查并清理因点移出而产生的空集簇,并重新整理簇索引。
- 计算条件概率:根据CRP公式,计算该采样点加入现有各簇的概率(与簇内人数成正比,与簇内数据似然度相关)以及创建新簇的概率(与Alpha成正比,与基分布似然度相关)。
- 随机采样:根据归一化后的概率分布,为采样点分配新的簇标签。
- 结果评估与绘图:记录每轮迭代后的类簇总数和全数据集的对数似然度,并在迭代完成后生成多维度分析图表。
关键函数与算法分析
1. 更新后验参数模块
该模块负责计算给定簇内数据后的NIW后验参数。它通过向量化计算各簇的均值向量和散点矩阵,并应用贝叶斯更新公式叠加先验信息,从而得出最新的参数化描述。
2. 多元T分布预测密度计算
由于系统采用了共轭先验,数据的边际似然服从多元T分布。该模块实现了对数域下的概率密度计算,考虑了自由度校正和缩放矩阵的修正,是决定数据点归属的核心判据。
3. 吉布斯采样逻辑
利用采样技术模拟后验分布。在每一轮迭代中,每个点都会根据其他点的当前分配状态重新选择自己的“桌子”,这一过程体现了“富者更富”的CRP聚类效应。
4. 对数似然评估
通过累加各簇点在其后验预测分布下的对数概率,量化模型的拟合程度,用于监控算法是否达到平稳分布。
使用方法
- 配置环境:确保您的计算机已安装MATLAB R2016b或更高版本。
- 运行脚本:在MATLAB命令行窗口运行主程序脚本。
- 交互观察:
- 程序会在命令行实时输出当前迭代次数及探测到的簇数量。
- 运行结束后会自动弹出图形窗口,展示聚类分布、数量演化和收敛走势。
- 参数调整:用户可以通过修改脚本顶部的Alpha参数来改变模型对生成新簇的敏感度。
系统要求
- 操作系统:Windows, macOS, 或 Linux
- 运行环境:MATLAB (推荐 R2020a 及以上版本)
- 必备工具箱:Statistics and Machine Learning Toolbox (用于生成正态随机数及概率采样)