【SVR预测】基于差分进化改进灰狼算法优化SVR预测matlab源码

一、灰狼算法

1.1 背景介绍

灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法,它具有较强的收敛性能、参数少、易实现等特点。近年来受到了学者的广泛关注,它己被成功地应用到了车间调度、参数优化、图像分类等领域中。

1.2 算法原理

狼群中有α、β、γ三只狼做头狼,其中α是狼王,β、γ分别排第二、第三,β、γ都要听α的,γ要听β的。这三匹狼指导者其他的狼寻找猎物。狼群寻找猎物的过程就是我们寻找最优解的过程。
GWO具体优化过程包含了社会等级分层、跟踪、包围和攻击猎物和寻找猎物。
但其核心行为只有捕猎。
为了模拟灰狼的搜索行为,假设α、β、γ具有较强识别潜在猎物的能力,因此,在每次迭代过程中,保留当前种群中最好的三只狼(α、β、γ),然后根据他们的位置信息来更新其他搜索代理的位置。
在这里插入图片描述

1.3 构建算法数学模型

1)社会等级分层
GWO的优化过程主要有每代种群中的最好三匹狼(具体构建时表示为三个最好的解)来指导完成。
2)包围猎物
灰狼捜索猎物时会逐渐地接近猎物并包围它,该行为的数学模型如下:
在这里插入图片描述
在这里插入图片描述
3)狩猎行为的数学模型在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
4)攻击猎物
5)寻找猎物

二、svr算法

  1. SVR的背景
    SVR做为SVM的分支从而被提出,一张图介绍SVR与SVM的关系
    SVR与SVM的联系
    这里两虚线之间的几何间隔r=d ∣ ∣ W ∣ ∣ \frac{d}{||W||}∣∣W∣∣d​,这里的d就为两虚线之间的函数间隔。
    (一图读懂函数间隔与几何间隔)
    在这里插入图片描述
    这里的r就是根据两平行线之间的距离公式求解出来的
    在这里插入图片描述

  2. SVR的原理

SVR与一般线性回归的区别

SVR一般线性回归
1.数据在间隔带内则不计算损失,当且仅当f(x)与y之间的差距的绝对值大于ϵ \epsilonϵ才计算损失1.只要f(x)与y不相等时,就计算损失
2.通过最大化间隔带的宽度与最小化总损失来优化模型2.通过梯度下降之后求均值来优化模型

在这里插入图片描述

原理:SVR在线性函数两侧制造了一个“间隔带”,间距为ϵ \epsilonϵ(也叫容忍偏差,是一个由人工设定的经验值),对所有落入到间隔带内的样本不计算损失,也就是只有支持向量才会对其函数模型产生影响,最后通过最小化总损失和最大化间隔来得出优化后的模型。

注:这里介绍一下支持向量的含义:直观解释,支持向量就是对最终w,b的计算起到作用的样本(a>0)

如下图所示, "管道"内样本对应a=0,为非支持向量;
位于“管壁”上的为边界支持向量,0<a<ϵ \epsilonϵ
位于"管道"之外的为非边界支持向量,a>ϵ \epsilonϵ(异常检测时,常从非边界支持向量中挑选异常点)
在这里插入图片描述

  1. SVR的数学模型

3.1线性硬间隔SVR

在这里插入图片描述
在这里插入图片描述

3.2线性软间隔SVR
原因:在现实任务中,往往很难直接确定合适的 ϵ \epsilonϵ ,确保大部分数据都能在间隔带内,而SVR希望所有训练数据都在间隔带内,所以加入松弛变量ξ \xiξ ,从而使函数的间隔要求变的放松,也就是允许一些样本可以不在间隔带内。
在这里插入图片描述

引入松弛变量后,这个时候,所有的样本数据都满足条件:

在这里插入图片描述

这就是映入松弛变量后的限制条件,所以也叫-------软间隔SVR

注:对于任意样本xi,如果它在隔离带里面或者边缘上,ξ \xiξ 都为0;在隔离带上方则为ξ > 0 , ξ ∗ = 0 \xi>0,\xi^*=0ξ>0,ξ∗=0
在隔离带下方则为ξ ∗ > 0 , ξ = 0 \xi^*>0,\xi=0ξ∗>0,ξ=0

在这里插入图片描述

在这里插入图片描述

三、部分代码

clear
clc
close all
load wndspd % 示例数据为风速(时间序列)数据,共144个样本\
addpath('./libsvm-3.1/')
%% HGWO-SVR
% 训练/测试数据准备(用前3天预测后一天),用前100天做训练数据
input_train(1,:)=wndspd(1:97);
input_train(2,:)=wndspd(2:98);
input_train(3,:)=wndspd(3:99);
output_train=[wndspd(4:100)]';
input_test(1,:)=wndspd(101:end-3);
input_test(2,:)=wndspd(102:end-2);
input_test(3,:)=wndspd(103:end-1);
output_test=(wndspd(104:end))';
para=[30,500,0.2,0.8,0.2];
[bestc,bestg,test_pre]=my_HGWO_SVR(para,input_train',output_train',input_test',output_test');
%% 预测结果图
err_pre=output_test'-test_pre;
figure('Name','测试数据残差图')
set(gcf,'unit','centimeters','position',[0.5,5,30,5])
plot(err_pre,'*-');
figure('Name','原始-预测图')
plot(test_pre,'*r-');hold on;plot(output_test,'bo-');
legend('预测','原始')
set(gcf,'unit','centimeters','position',[0.5,13,30,5])
toc

四、仿真结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值