基于多算法融合的支持向量机参数自动优化系统
项目简介
本项目开发了一套高效的机器学习辅助工具,旨在解决支持向量机(SVM)模型构建过程中核心超参数——惩罚因子(C)和核函数参数(Gamma)难以确定的问题。系统集成了网格搜索(Grid Search)、遗传算法(GA)以及粒子群优化算法(PSO)三种主流的全局寻优策略。
通过内置的数据生成模块和K折交叉验证(K-CV)机制,本系统能够自动在指定参数空间内寻找最优参数组合,并生成可视化图表以展示寻优过程和结果,最终自动构建最优模型并在测试集上进行验证。
功能特性
- 多算法融合寻优:集成了网格搜索、遗传算法、粒子群算法三种不同的参数优化策略,用户可直观对比不同算法的效率与精度。
- 自动化数据流:包含从合成数据生成、噪声注入、数据集划分到数据归一化(MapMinMax)的全自动预处理流程。
- 鲁棒的评估机制:在寻优过程中严格使用5折交叉验证(5-Fold CV)计算适应度,有效防止模型过拟合。
- 可视化监控:提供原始样本分布图、网格搜索等高线图、GA与PSO进化收敛曲线对比图。
- 智能决策:自动从三种算法中选择准确率最高的一组参数,用于构建最终的SVM预测模型。
系统要求
- MATLAB R2016b 或更高版本
- Statistics and Machine Learning Toolbox
使用方法
直接运行主程序即可启动整个流程。程序将自动执行以下步骤:
- 生成带有噪声的二分类模拟数据。
- 依次运行网格搜索、遗传算法和粒子群算法进行参数寻优。
- 弹出窗口显示数据分布和优化过程图表。
- 在命令行窗口输出各算法的最优参数、准确率及耗时,并输出最终测试集的预测结果。
---
核心实现逻辑与细节
本系统的核心逻辑完全包含在主程序中,实现了从数据准备到模型评估的端到端流程。以下是基于代码实现的详细功能解析:
1. 数据准备与预处理
程序首先构建了一个二分类的合成数据集。
- 数据生成:使用高斯分布生成的随机数构造两类样本,并将它们分别平移至不同的坐标中心。为了增加分类难度,模拟真实场景,程序随机选取30个样本点翻转其标签(注入噪声),使数据变为非线性可分。
- 数据集划分:采用留出法(Hold-Out),将70%的数据用于训练与参数寻优,30%的数据作为独立的测试集用于最终评估。
- 归一化处理:使用
mapminmax 算法将训练集特征缩放到 [0, 1] 区间,并利用训练集的归一化参数对测试集进行同构处理,保证数据分布的一致性。
2. 参数寻优空间设置
系统对SVM的两个关键参数 $C$ 和 $Gamma$ 采用对数尺度进行搜索,以覆盖更广的数量级范围:
- C (惩罚因子):搜索范围定义为 $2^{-5}$ 到 $2^{10}$。
- Gamma (核参数):搜索范围定义为 $2^{-5}$ 到 $2^{5}$。
3. 三大优化算法实现
#### A. 网格搜索 (Grid Search, GS)
- 实现逻辑:通过双重循环遍历参数空间网格。
- 评估方式:对每一个坐标点 $(C, Gamma)$,调用K折交叉验证函数计算准确率。
- 结果记录:保存全局最高准确率及其对应的参数组合,并记录算法运行耗时。
- 可视化:生成填充等高线图,直观展示参数空间中准确率的峰值分布,并标记出全局最优点。
#### B. 遗传算法 (Genetic Algorithm, GA)
采用实数编码方式进行进化搜索,通过模拟自然选择过程寻找最优解。
- 初始化:随机生成包含20个个体的初始种群,基因对应的参数在界定的搜索范围内。
- 进化过程:迭代30代。
*
选择:基于轮盘赌算法(Roulette Wheel Selection),适应度(CV准确率)高的个体有更大概率被保留。
*
交叉:采用算术交叉法,以一定概率(Pc=0.8)在两个个体间进行线性组合生成新个体。
*
变异:采用高斯变异,并引入自适应步长机制(随迭代次数增加,变异幅度sigma逐渐减小),兼顾初期的全局搜索与后期的局部精细搜索。且包含边界约束,防止参数越界。
#### C. 粒子群优化算法 (Particle Swarm Optimization, PSO)
基于群体智能的迭代搜索算法。
- 初始化:初始化20个粒子,每个粒子拥有位置(参数组合)和速度。
- 更新机制:迭代30次。
*
惯性权重:采用线性递减策略(从0.9线性降低至0.4),平衡算法的全局探测能力与局部开发能力。
*
速度更新:结合个体历史最优位置(p_best)和全局历史最优位置(g_best)更新当前速度,学习因子 $c1=c2=1.5$。
*
位置更新:根据新速度更新位置,并强制执行边界检查。
- 输出:记录每次迭代后的全局最优解,用于后续对比分析。
4. 结果可视化与对比
程序生成专门的对比图表,将遗传算法(GA)和粒子群算法(PSO)的适应度进化曲线绘制在同一坐标系中。
- GA曲线:展示种群每一代的最优个体适应度变化。
- PSO曲线:展示群体每一次迭代的全局最优适应度变化。
这使得用户可以清晰地比较两种启发式算法的收敛速度和跳出局部最优的能力。
5. 最终模型构建
在所有优化过程结束后,系统执行决策逻辑:
- 自动择优:自动比较GS、GA、PSO三者得到的最佳交叉验证准确率,选择表现最好的一组参数 $(C_{final}, Gamma_{final})$。
- 模型训练:利用全量训练集(不再进行CV划分)和最优参数构建最终的SVM模型。代码中正确处理了MATLAB
fitcsvm 函数中 KernelScale 与 $Gamma$ 的数学关系($KernelScale = 1/sqrt{Gamma}$)。 - 测试评估:将预留的30%测试集输入模型进行预测,计算并输出最终的测试集准确率,作为衡量系统泛化能力的最终指标。
---
注意:本系统的运行依赖于辅助函数
svm_k_cv(在代码逻辑中被调用),该函数负责执行具体的K折交叉验证逻辑并返回准确率。