层次狄利克雷过程 (HDP) MATLAB 实现项目说明
项目介绍
本项目提供了一个完整的层次狄利克雷过程(Hierarchical Dirichlet Process, HDP)算法架构,专门用于处理分组观测数据的非参数贝叶斯聚类问题。该实现的核心在于利用中国餐馆特许经营(Chinese Restaurant Franchise, CRF)模型来构建一个多层随机过程。这种结构允许不同组别的数据(例如不同文档或不同实验组)共享同一组潜在的主题或聚类中心(原子),同时能够根据数据分布自动推断出这些潜在类别的实际数量,而无需预先设定。
功能特性
- 非参数自动化聚类:系统不需要用户定义类别的数量,而是通过浓度参数与数据的交互,动态增减全局主题的数量。
- 层次化共享机制:通过 CRF 模型实现“桌子”与“菜品”的隐喻,允许各组数据在保持本地分布的同时,共享全局分布的特征。
- 连续数据支持:代码实现了正态-逆Wishart(Normal-Inverse-Wishart, NIW)共轭先验,能够高效处理多维高斯分布的连续观测数据。
- 鲁棒的推断算法:采用坍缩吉布斯采样(Collapsed Gibbs Sampling)作为数值推断手段,有效估计模型的后验分布。
- 可视化分析:内置了收敛曲线监控和聚类结果的散点图呈现功能。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱需求:统计与机器学习工具箱(Statistics and Machine Learning Toolbox),用于调用多元正态分布生成等函数。
- 硬件建议:建议 8GB RAM 以上,以便处理大规模采样迭代。
实际实现的功能逻辑
项目的主入口函数完整演示了从模型配置到结果可视化的全流程:
- 模拟数据生成
程序首先模拟生成了 5 组二维高斯数据。这 5 组数据并不是独立的,而是共同从 3 个预定义的高斯分布(全局主题)中按不同权重抽样得出。这为验证 HDP 是否能识别出跨组共享的主题提供了基准测试环境。
- 状态初始化
系统对每组点进行了本地初始化,最初将所有观测值分配到默认的桌子和主题上。通过设置固定种子确保了实验的可重复性。
- 吉布斯采样循环
核心采样过程分为两个主要阶段:
- 个体/桌子采样:遍历每个组中的每个观测点,计算其留在当前桌子、搬到已有桌子或开启新桌子的概率。这一概率由本地分配密度和全局主题的预测似然共同决定。
- 桌子/主题采样:遍历每张活跃的桌子,为其重新采样关联的全局主题(菜品)。如果选择了新主题,全局主题总数 K 将会自动增加。
- 索引管理与压缩
在每次迭代结束时,程序会自动清理没有任何观测点指向的空桌子和没有任何桌子指向的空主题,并对主题索引进行重排,确保模型在采样过程中保持紧凑。
- 收敛监控
每个迭代步都会计算当前的对数似然值,用于评估采样器是否已进入平稳分布状态。
- 结果输出与映射
采样结束后,程序将本地的桌子分配映射回全局主题索引,并输出每个数据点的最终聚类归属。
关键算法与实现细节分析
- 中国餐馆特许经营 (CRF) 逻辑
代码通过层级概率体现了 HDP 的核心:
- 在本地组内,选择现有桌子的概率正比于该桌子的人数,开启新桌子的概率正比于浓度参数 Alpha。
- 在全局层面,开启新桌子时选择现有主题的概率正比于该主题在全餐厅的流行程度,选择新主题(菜品)的概率正比于浓度参数 Gamma。
- 正态-逆Wishart (NIW) 后验预测分布
为了计算数据点属于某个主题的似然概率,代码通过 gaussian_predictive 函数实现了多变量学生 t 分布(Student's t-distribution)。这是因为在使用 NIW 先验并消去均值和协方差参数后,后验预测分布呈现为 t 分布。实现中精确更新了后验超参数,包括均值先验强度 Kappa、自由度 V 和比例矩阵 Psi。
- 采样概率的归一化处理
在采样过程中,程序计算了每个候选类别(现有或新建)的非归一化对数似然。为了提高效率,该实现对于预测分布的 PDF 计算省略了常数项,而仅专注于与采样权重相关的变量部分。
- 浓度参数的影响
- Gamma 设置为 1.5:控制全局灵活性,较大的值倾向于产生更多的全局主题。
- Alpha 设置为 2.0:控制组内灵活性,较大的值倾向于让每组数据分布在更多的桌子上。
- 数据结构说明
项目利用 MATLAB 的 Cell Array 处理变长的分组数据,这使得系统可以轻松处理每组观测值数量不等的非平衡数据集。
使用方法
将代码置于 MATLAB 工作路径下,直接在命令行运行主函数名即可启动程序。程序将自动执行以下操作:
- 在控制台实时显示当前模拟数据的生成背景。
- 启动吉布斯采样并在后台进行 100 次迭代。
- 弹出窗口,左侧显示 Log-Likelihood 的上升与收敛情况,右侧显示不同颜色标注的聚类点阵图。
- 在控制台输出 HDP 最终自动识别出的主题总数。
- 自动打印算法设计手册,解释内部运行机制。