PSO-SVM 粒子群算法优化支持向量机参数系统
项目介绍
本项目是一款基于 MATLAB 开发的参数自动化寻优系统,旨在通过粒子群优化算法(PSO)解决支持向量机(SVM)建模中惩罚因子 C 和核函数参数 g 难以确定的问题。传统的参数选择通常依赖经验或耗时的网格搜索,而本项目通过模拟群体智能协作,能够在预设的参数空间内高效搜索最优组合,从而提升 SVM 模型的泛化能力与预测精度。
功能特性
- 自动化寻优:利用 PSO 算法在多维空间中自主迭代,寻找使模型分类准确率最高的参数 C 和 g。
- 数据标准化:系统自动完成特征缩放,将原始数据归一化至 [0, 1] 区间,避免量纲差异对距离计算的影响。
- 稳健的评估机制:内置 5 折交叉验证(K-Fold Cross-Validation)作为适应度函数,确保寻找出的参数具有良好的泛化性能,防止过拟合。
- 全流程可视化:系统提供从收敛曲线到决策边界的完整可视化分析图表。
- 适应性强:本代码架构采用通用的 RBF 核函数建模方式,不仅适用于模拟的环形非线性数据,也可扩展至各类分类与回归任务。
使用方法
- 环境准备:确保安装了 MATLAB 软件,并安装了“Statistics and Machine Learning Toolbox(统计与机器学习工具箱)”。
- 执行计算:直接运行主脚本。系统将自动生成模拟数据集并启动 PSO 寻优主循环。
- 查看过程:命令行窗口将实时输出每一次迭代的最佳准确率。
- 结果分析:运行结束后,系统会弹出包含四项分析结果的可视化窗口,并打印最终的最优参数报告。
系统要求
- 软件版本:MATLAB R2016b 及以上版本(需包含统计与机器学习工具箱)。
- 硬件资源:具备基础计算能力的个人电脑即可流畅运行。
详细功能实现逻辑
本项目的核心逻辑严格遵循机器学习建模的标准流程:
- 模拟数据构造:
系统生成了 200 个样本的混合环形数据。这两类数据在空间上表现为大圆环嵌套小圆的分布,属于典型的非线性分类任务,通过这种方式验证 SVM 处理非线性问题的有效性。
- 预处理与划分:
数据集按 70% 训练、30% 测试的比例进行随机划分。使用 mapminmax 函数对训练集进行归一化,并利用训练集的缩放参数(ps)对测试集进行同步处理。
- PSO 算法初始化:
设置种群规模为 20,最大迭代次数为 50。将惩罚因子 C 的搜索范围设定在 [0.1, 100],将核函数参数 g 的范围设定在 [0.01, 20]。每个粒子的位置信息代表一个 [C, g] 组合。
- 寻优主循环:
- 自适应权重更新:惯性权重 w 随迭代次数增加线性从 0.9 递减至 0.4,平衡了全局探索与局部开发能力。
- 速度与位置更新:粒子根据个体最优经验和群体最优经验不断调整飞行轨迹。
- 边界约束:对越界的粒子位置进行强制截断,确保其始终在合理的参数搜索范围内。
- 适应度评估子系统:
每一个粒子都会进入适应度函数进行测试。该函数通过 5 折交叉验证将训练数据拆分,训练 fitcsvm 模型。特别地,代码将 PSO 搜索的参数 g 转换为 MATLAB 官方函数 fitcsvm 所需的 KernelScale(对应比例为 1/sqrt(g)),从而实现 RBF 核函数的精确控制。
- 模型验证与评估:
寻优结束后,提取全局最优的 C 和 g,在完整的训练集上重新训练最终模型,并对未参与训练的测试集进行预测,计算最终的分类准确率。
关键细节分析
*
进化曲线:展示准确率随迭代次数的提升过程。
*
空间分布:展示原始样本在 2D 特征空间中的混杂状态。
*
对照图:直观展示每一个测试样本的真实标签与预测标签的吻合程度。
*
决策边界:通过密集网格采样,绘制出 SVM 生成的非线性分类界面及其在测试数据上的表现。
- 健壮性设计:适应度函数内部采用了 try-catch 机制,能够自动捕获并处理因参数极端导致模型无法收敛的异常情况,保证寻优过程不中断。
- 搜索效率:相比于盲目遍历的网格搜索,PSO 通过粒子间的相互引导,能在更短的时间内定位到全局最优解附近。