基于MATLAB的AP亲和传播聚类算法实现与多场景应用系统
项目介绍
本项目是一个在MATLAB环境下开发的亲和传播(Affinity Propagation, AP)聚类分析系统。该系统实现了无监督学习中极具代表性的AP算法,通过在数据点之间相互传递“吸引度”和“归属度”消息来确定聚类中心(Exemplars)。与传统的K-means算法不同,该系统能够自动识别数据中的最佳聚类数量,无需用户预先指定簇数,从而有效避免了随机初始化带来的局部最优问题。
功能特性
- 自动聚类识别:通过计算相似度和消息传递,自动寻找数据中在该特征空间下的自然分布规律。
- 动态消息传递:实现了吸引度(Responsibility)和归属度(Availability)的双向迭代更新机制,模拟竞争学习过程。
- 阻尼优化机制:系统内置了阻尼因子(Damping Factor)调整功能,通过线性组合历史迭代值,有效减轻了数值计算中的振荡现象。
- 相似度矩阵自动构建:基于负欧式距离平方自动计算样点间的亲和力,并支持通过中值设定参考度(Preference)。
- 实时收敛判定:具备基于稳定性检测的收敛判定逻辑,当聚类中心在设定的周期内保持不变时,系统会自动提前终止迭代。
- 多维度结果可视化:提供双子图分析界面,同时展示空间聚类分布(含隶属关系连线)以及聚类中心数量随迭代变化的演变曲线。
使用方法
- 环境配置:将项目脚本文件放置在MATLAB的工作路径下。
- 运行计算:直接在MATLAB命令行窗口运行主脚本,系统将默认生成一组包含300个样本点的三簇模拟数据。
- 参数调节:用户可以根据需要在脚本中修改最大迭代次数、收敛判定周期、阻尼因子以及参考度。
- 数据替换:可以将脚本中的模拟数据生成部分替换为用户自有的数值特征矩阵,系统即可对特定领域的数据进行分类。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 硬件要求:通用办公或科研级别电脑,内存建议4GB以上。
- 依赖项:无需额外工具箱,系统采用标准矩阵算法实现。
实现逻辑分析
1. 数据准备与预处理
系统首先通过固定随机种子的方式生成三组不同中心的分布数据。随后计算所有点对之间的相似度矩阵,使用负欧式距离平方作为度量标准,距离越近的点相似度越高。对于相似度矩阵的对角线元素(即参考度),系统采用了相似度中值进行填充,这决定了算法寻找聚类中心的“积极程度”。
2. 核心迭代机制
算法的核心在于两个矩阵的交替更新:
- 吸引度矩阵更新:通过减去当前行中除目标点外的其他点的最大“归属度+相似度”之和,来衡量某点适合作为另一点的聚类中心的程度。为了提高效率,系统实现了寻找行最大值与次大值的逻辑。
- 归属度矩阵更新:通过对列求和并引入非负约束,来衡量某点选择该中心点的合理性。
- 阻尼处理:每次更新后,新值会按照0.9的比率与旧值进行加权融合,确保数值梯度的平滑性。
3. 收敛与判定逻辑
系统维护了一个滑动窗口(收敛判定周期),记录每一轮迭代中聚类中心点(Exemplars)的识别情况。当算法检测到连续50次迭代中的聚类方案完全一致,或者达到500次的最大迭代限制时,迭代停止。
4. 结果提取与可视化
- 聚类中心识别:提取吸引度和归属度矩阵之和对角线大于零的点作为聚类中心。
- 样点分配:计算每个样点到所有中心的相似度,并将其归类至最相似的中心。
- 可视化展示:绘图区域展示了各簇样点及其中心,并通过彩色连线展示了点与中心之间的归属逻辑;右侧收敛曲线清晰记录了在大约数百次迭代内,聚类簇数从初始态趋于稳态的过程。
关键算法细节分析
- 鲁棒性设计:通过计算负欧式距离平方,系统能够处理非球形分布的数据簇。
- 数值稳定性:手动实现的 R 更新公式包含对次大值的计算,增强了在大规模矩阵运算下的确定性。
- 阻尼因子(0.9):针对易产生振荡的计算序列进行了优化,虽然增加了迭代次数,但极大提升了收敛的成功率。
- 映射关系:系统最后通过索引映射,准确将隶属关系标签还原至原始数据顺序,方便后续的数据分析与统计。