多目标函数 matlab 粒子群_【LIBSVM】基于群智能优化算法的支持向量机 (SVM) 参数优化...

275a8988d2a25dbb288db32fc0611e3a.png

前言

支持向量机 (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类样本(二维高斯分布)

2cdeedd81036f65e1683fcd336cbc255.png
数据集(3类的二维高斯分布数据)

2. 优化问题

主要设置目标函数(函数句柄形式),优化参数的个数以及对应取值的上下限。

%% 优化问题

目标函数是一个非显式过程,唯一的传参是参数(或参数向量),输出参数为目标函数的值,由于示例是一个多分类任务,采用最大化准确率(最小化错误率)的目标函数。由于在训练过程中需要读取训练数据以及对应的标签,因此在目标函数内部读取数据,有三种方式:

  1. 定义训练数据和标签的全局变量
  2. 利用load函数读取训练数据和标签
  3. 利用evalin函数读取主函数空间的训练数据和标签

对于第1种方式,全局变量是一种不太推荐的方式;第2种方式是一个将数据从本地读到内存的过程,迭代次数多的时候耗时较大;第3种方式是直接从内存读取,效率较高,因此示例中将采取第3种方式。目标函数代码如下:

function

3. 优化算法设置(以PSO为例)

粒子群个数设置为5,最大迭代次数设置为30。其他参数可以通过MATLAB官方文档来设置。

%% PSO 参数设置

4. 寻找参数的最优值

%% 优化

9a2bdfb90196ec7595ea054d1f4c2bbe.png
目标函数变化情况

最优值为:

>> 

另外,第3,4步对应的GA算法代码为:

PopulationSize 

5. 利用参数的最优值重新训练SVM模型

%% 利用最优参数重新训练SVM模型

训练集的准确率:

Accuracy 

6. 可视化最优参数下的SVM边界

%% SVM边界可视化

边界可视化结果

b295e42d82c955a0a1814bf5a1d22d2e.png
SVM边界

完整的代码

clc

注意

  1. 虽然利用PSO获取了最优参数,但是从边界可视化结果来看,SVM模型已经过拟合了,原因是训练过程中是利用全部的数据集,较为合理的方式应该是结合K折交叉验证、留出法和自助法等来训练。
  2. 对应其他的优化算法工具箱,优化过程基本是一致的,核心是构建目标函数。

小尾巴

如果这篇文章对您有所帮助,欢迎点赞、关注、收藏,同时也欢迎专注我的个人专栏,分享与交流机器学习算法和编程实践心得。

机器学习与编程实践​zhuanlan.zhihu.com
5ddc2033c0821d1a4fc80a23688e8815.png
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值