⛄一、鲸鱼算法优化支持向量机SVM
1 鲸鱼优化算法
WOA是由Mirjalili和Lewis在2016年提出的一种较为新颖的元启发式群体智能优化算法,该算法模仿座头鲸的“螺旋气泡网”捕食策略,如图1所示。
图1 座头鲸“螺旋起泡网”捕食策略
WOA算法寻优步骤如下。
步骤1圈记猎物。
座头鲸可识别猎物的位置,并将它们圈记。以当前最佳鲸鱼位置作为最佳搜索代理,其位置更新的数学表达式为
式中:t为当前迭代;A和C为系数;L*(t)为目前所得到的最佳鲸鱼位置向量,在每一次迭代中会随着适应度的大小被更新;L(t)为当前鲸鱼位置向量;D为当前鲸鱼位置向目前最佳鲸鱼位置逼近的迭代距离。A和C的更新公式为
式中:a为参数,在搜索迭代过程中从2到0线性减少;r1和r2为[0,1]中的随机数。
步骤2螺旋式捕猎。
座头鲸在1个收缩的圆圈内同时沿着螺旋形的路径游向猎物,对这种同时行为进行建模。假设有50%的概率可在收缩圆圈或螺旋模型之间选择,以更新鲸鱼的位置。此过程用数学公式模拟为
式中:p为[0,1]的随机数;q∈(-1,1);D′为每个鲸鱼与当前最佳鲸鱼位置的距离,D′=|L*(t)-L(t)|;b为常数,用于描述螺旋形状。
攻击猎物时,在数学上设定靠近猎物时a会减小。由式(3)知,随着a线性减小,A在[-a,a]范围内波动;当A为[-1,1]范围时,鲸鱼的下一个位置可以是它现在位置和猎物位置之间的任意位置,算法设定A<1时,鲸鱼向猎物发起攻击,根据式(5)靠近猎物位置。
步骤3搜索猎物。
搜索猎物时根据A的大小判断是否选取随机搜索机制。当A≥1时,采用的搜索模型为
式中,Lrand为随机选择的鲸鱼位置向量。当A≥1时,随机选择1个搜索代理,以该随机选择的鲸鱼位置向量来更新其他鲸鱼的位置,迫使鲸群偏离猎物,搜索其他更合适的猎物,借此增强算法的全局搜索能力。
最后得到的位置向量L*,即优化选择的参数。本文采用WOA算法优化SVM中学习参数惩罚系数c和核参数g的选择进行优化过程。
⛄二、部分源代码
%% 清空环境变量
tic;
close all;
clear;
clc;
format compact;
%% 数据的提取和预处理
% 载入测试数据上证指数(1990.12.19-2009.08.19)
% 数据是一个4579*6的double型的矩阵,每一行表示每一天的上证指数
% 6列分别表示当天上证指数的开盘指数,指数最高值,指数最低值,收盘指数,当日交易量,当日交易额.
load chapter_sh.mat;
% 提取数据
[m,n] = size(sh);
ts = sh(2:m,1);
tsx = sh(1:m-1,:);
% 画出原始上证指数的每日开盘数
figure;
plot(ts,‘LineWidth’,2);
title(‘上证指数的每日开盘数(1990.12.20-2009.08.19)’,‘FontSize’,12);
xlabel(‘交易日天数(1990.12.19-2009.08.19)’,‘FontSize’,12);
ylabel(‘开盘数’,‘FontSize’,12);
grid on;
% 数据预处理,将原始数据进行归一化
ts = ts’;
tsx = tsx’;
% mapminmax为matlab自带的映射函数
% 对ts进行归一化
[TS,TSps] = mapminmax(ts,1,2);
% 画出原始上证指数的每日开盘数归一化后的图像
figure;
plot(TS,‘LineWidth’,2);
title(‘原始上证指数的每日开盘数归一化后的图像’,‘FontSize’,12);
xlabel(‘交易日天数(1990.12.19-2009.08.19)’,‘FontSize’,12);
ylabel(‘归一化后的开盘数’,‘FontSize’,12);
grid on;
% 对TS进行转置,以符合libsvm工具箱的数据格式要求
TS = TS’;
% mapminmax为matlab自带的映射函数
% 对tsx进行归一化
[TSX,TSXps] = mapminmax(tsx,1,2);
% 对TSX进行转置,以符合libsvm工具箱的数据格式要求
TSX = TSX’;
%% 利用鲸鱼搜索算法选择回归预测分析最佳的SVM参数c&g
%% 鲸鱼参数设置
% 定义优化参数的个数,在该场景中,优化参数的个数dim为2 。
% 定义优化参数的上下限,如c的范围是[0.01, 1], g的范围是[2^-5, 2^5],那么参数的下限lb=[0.01, 2^-5];参数的上限ub=[1, 2^5]。
%目标函数
fobj = @(x) fun(x,TS,TSX);
% 优化参数的个数 (c、g)
dim = 2;
% 优化参数的取值下限
lb = [1,15];
ub = [1,15];
%% 参数设置
pop =10; %数量
Max_iteration=30;%最大迭代次数
%% 优化(这里主要调用函数)
[Best_pos,Best_score,curve]=WOA(pop,Max_iteration,lb,ub,dim,fobj);
c = Best_pos(1, 1);
g = Best_pos(1, 2);
figure
plot(curve,‘linewidth’,1.5);
title(‘WOA-SVM收敛曲线’)
xlabel(‘迭代次数’)
ylabel(‘适应度值’)
grid on;
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]岳晓宇,彭显刚,林俐.鲸鱼优化支持向量机的短期风电功率预测[J].电力系统及其自动化学报. 2020,32(02)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
转载:https://blog.csdn.net/TIQCmatlab/article/details/128096818