基于基础粒子群算法(PSO)的数据聚类演示系统
项目简介
这是一个面向初学者的MATLAB教学项目,旨在演示如何利用基础的粒子群优化(Particle Swarm Optimization, PSO)算法解决数据聚类问题。不同于传统的K-Means算法,本项目将聚类过程转化为一个多维空间内的全局寻优问题。代码逻辑清晰,剥离了复杂的改进策略,仅保留PSO最核心的机制,非常适合用于理解群智能算法与聚类分析结合的基本原理。
功能特性
- 高斯分布数据生成:系统自动生成由三个不同高斯分布组成的二维测试数据集,模拟真实的聚类场景。
- 基础PSO实现:实现了标准的粒子群算法,包含速度更新、位置更新、个体最优(Pbest)与全局最优(Gbest)的追踪。
- 空间编码策略:采用扁平化编码方式,将K个聚类中心的所有坐标压缩在一个粒子向量中。
- 双重视化反馈:提供直观的结果展示,包括带有簇颜色区分的聚类散点图和算法迭代的适应度收敛曲线。
- 可复现性:通过固定随机种子,确保每次演示的数据生成和结果具有可比性。
核心算法与实现逻辑
本项目在
main.m 中利用面向过程的方式实现了完整的聚类流程,具体逻辑如下:
1. 聚类问题的粒子化表征
在传统的PSO中,一个粒子代表解空间的一个点。在本项目的聚类问题中,一个“粒子”代表了 $K$ 个聚类中心的集合。
- 假设数据维度为 $Dim$(本例为2),聚类簇数为 $K$(本例为3)。
- 单个粒子的维度被设计为 $K times Dim$。粒子位置向量的前2位代表第1个聚类中心,接下来的2位代表第2个,以此类推。
- 这样做使得算法可以同时优化所有聚类中心的位置。
2. 适应度函数设计(目标函数)
算法的目标是使聚类结果最紧凑。适应度函数计算逻辑如下:
- 将粒子的位置向量重塑(Reshape)为 $K times Dim$ 的矩阵,还原出 $K$ 个中心坐标。
- 计算所有 $NumData$ 个样本点到这 $K$ 个中心的欧氏距离。
- 将每个样本点分配给距离最近的中心。
- 适应度值(Cost) 定义为所有样本点到其归属中心的距离平方和(最小化类内距离和)。
3. 标准PSO迭代过程
算法采用固定权重的标准PSO更新公式,未引入自适应调整,以保持代码的纯粹性:
- 速度更新:$V = w cdot V + c_1 cdot r_1 cdot (P_{best} - X) + c_2 cdot r_2 cdot (G_{best} - X)$
* $w$ (惯性权重) 设为 0.729。
* $c_1, c_2$ (学习因子) 设为 1.49445。
* 引入了最大速度限制 (
VelMax) 防止粒子飞出搜索空间。
* 引入了位置边界限制,确保聚类中心始终保持在数据的数据边界范围内。
关键函数与代码细节分析
主程序文件包含了完整的逻辑,主要由以下几个部分组成:
主流程 (Main Loop)
- 参数配置:定义了种群规模(50)、最大迭代次数(100)等关键参数。
- 数据生成:使用
mvnrnd 基于设定的均值和协方差生成三组数据,并合并计算出搜索空间的上下界(LB_Data, UB_Data)。 - 初始化:随机初始化粒子的位置和速度,并计算初始的全局最优解。
- 迭代更新:双重循环结构(外层为迭代次数,内层为种群遍历),严格执行标准PSO公式。每10次迭代在命令行输出当前最优适应度。
可视化模块
- 散点图:根据最终优化出的聚类中心,重新计算每个点的标签,并使用不同的颜色绘制所属簇。聚类中心用黄色五角星高亮显示。
- 收敛曲线:绘制随迭代次数变化的最小类内距离平方和,展示算法的收敛速度和稳定性。
辅助函数
- Func_Fitness:适应度计算接口。负责调用具体的距离计算逻辑,并返回单一的数值(Cost)供PSO评估。
- Func_AssignClusters:核心计算单元。利用矩阵运算高效计算 $N times Dim$ 数据与 $K times Dim$ 中心之间的距离矩阵,并找出每个点的最小距离及其索引。
环境要求与使用方法
系统要求
- MATLAB R2016a 或更高版本。
- 需要安装 Statistics and Machine Learning Toolbox(用于
mvnrnd 数据生成函数)。
使用方法
- 确保MATLAB的工作路径已包含本项目的文件夹。
- 直接运行
main.m 文件。 - 程序将自动清理工作区,生成数据,运行优化过程。
- 运行结束后,控制台将输出最终的适应度值,并弹出一个包含两幅子图的窗口展示聚类结果和收敛曲线。
结果示例
运行程序后,您将看到:
- 命令行:显示迭代进度,如
迭代次数: 100, 最小类内距离和: 245.1234。 - 图形窗口:
* 左侧图显示三个自然分开的数据簇被三种颜色正确标记,且黄色中心点位于各簇的几何中心。
* 右侧图显示适应度值在最初的几十次迭代中迅速下降,随后趋于平稳,证明了算法的收敛性。