
前言
支持向量机 (Support Vector Machines,SVM) 有两个重要参数:一个是正则化系数(c),一个是核参数(g,高斯核函数)。针对这两个参数的优化,在libsvm工具箱的基础上,本文介绍基于群智能优化算法的SVM 参数优化。
优化算法(均为MATLAB的内置函数)
- 粒子群算法(Particle Swarm Optimization,PSO)
- 遗传算法(Genetic Algorithm,GA)
软件版本
- PSO算法的MATLAB最低版本为 R2014b
- GA算法的MATLAB最低版本为 R2006a
实现流程
1. 数据集(以3类二维高斯分布数据为例)
% 生成3类样本(二维高斯分布)

2. 优化问题
主要设置目标函数(函数句柄形式),优化参数的个数以及对应取值的上下限。
%% 优化问题
目标函数是一个非显式过程,唯一的传参是参数(或参数向量),输出参数为目标函数的值,由于示例是一个多分类任务,采用最大化准确率(最小化错误率)的目标函数。由于在训练过程中需要读取训练数据以及对应的标签,因此在目标函数内部读取数据,有三种方式:
- 定义训练数据和标签的全局变量
- 利用load函数读取训练数据和标签
- 利用evalin函数读取主函数空间的训练数据和标签
对于第1种方式,全局变量是一种不太推荐的方式;第2种方式是一个将数据从本地读到内存的过程,迭代次数多的时候耗时较大;第3种方式是直接从内存读取,效率较高,因此示例中将采取第3种方式。目标函数代码如下:
function
3. 优化算法设置(以PSO为例)
粒子群个数设置为5,最大迭代次数设置为30。其他参数可以通过MATLAB官方文档来设置。
%% PSO 参数设置
4. 寻找参数的最优值
%% 优化

最优值为:
>>
另外,第3,4步对应的GA算法代码为:
PopulationSize
5. 利用参数的最优值重新训练SVM模型
%% 利用最优参数重新训练SVM模型
训练集的准确率:
Accuracy
6. 可视化最优参数下的SVM边界
%% SVM边界可视化
边界可视化结果

完整的代码
clc
注意
- 虽然利用PSO获取了最优参数,但是从边界可视化结果来看,SVM模型已经过拟合了,原因是训练过程中是利用全部的数据集,较为合理的方式应该是结合K折交叉验证、留出法和自助法等来训练。
- 对应其他的优化算法工具箱,优化过程基本是一致的,核心是构建目标函数。
小尾巴
如果这篇文章对您有所帮助,欢迎点赞、关注、收藏,同时也欢迎专注我的个人专栏,分享与交流机器学习算法和编程实践心得。
机器学习与编程实践zhuanlan.zhihu.com