当前位置 : 主页 > 编程语言 > python >

【lssvm预测】基于麻雀算法优化最小二乘支持向量机实现数据预测含Matlab源码

来源:互联网 收集:自由互联 发布时间:2022-06-15
1 简介 本文提出一种麻雀算法优化基于最小二乘支持向量机的数据预测方法。LSSVM 是一种新型机器学习算法,其在传统支持向量机 SVM 基础上,将二次规划问题中的不等式约束改为等式

1 简介

本文提出一种麻雀算法优化基于最小二乘支持向量机的数据预测方法。LSSVM 是一种新型机器学习算法,其在传统支持向量机 SVM 基础上,将二次规划问题中的不等式约束改为等式约束,极大地方便了求解过程,克服了数据集粗糙、数据集波动性大等问题造成的异常回归,能有效避免 BP 神经网络等方法中出现的局部最优等问题。

麻雀搜索算法( sparrow search algorithm,SSA) 是新群智能优化算法,具有良好的全局搜索能力和 快速收敛性。与其他群智能算法一样来源于对生物体觅食情况的观察,麻雀种群在觅食过程中分为 两个部分: 发现者和加入者。发现者负责搜索食物 并为种群中的其他个体提供觅食区域和方向,通常 是具有高能源储备的个体,其所对应的适应度函数 值更优。加入者对应为适应度函数值较差的个体, 它们通过发现者留下的信息获得食物。适应度值 最差的部分麻雀找不到食物,为了寻找到食物它们 可能跳出当前的搜索区域,到其他的地方觅食。种 群中的每只麻雀都会监视其他同伴的行为,并且部 分麻雀会攻击摄取量较高的同伴争夺资源。当种 群中个别麻雀发现捕食者后发出报警信号,一旦报 警值大于安全值时发现者会把加入者带到其他安 全的区域觅食。种群中发现者和加入者的总数和比例不变,但 是两者的身份是动态变化的。寻找到更好的食物 来源的任何一只麻雀都可能变成发现者,此时其所 对应的适应度值变优,与此同时必然会有一只麻雀变成加入者,其适应度值变差。加入者的能量值越 低,在搜索范围内的位置对自己越不利越不容易找 到食物,这些极其渴望得到食物的麻雀可能飞到别的领域觅食,从而使自己获得能量。在整个觅食的过程中,加入者能搜索到能量更高的发现者,从而 获得食物或者伺机夺取食物。当意识到可能有危险时,为了获得更安全的位 置,种群边缘的麻雀快速向安全范围内移动,而在 种群中间的麻雀随机走动靠近其他的同伴。

算法流程如下:

步骤1,采集时间序列的样本数据;

步骤2,建立基于麻雀搜索算法优化参数的LSSVM数据预测模型;

步骤3,应用预测模型对训练样本进行预测,得到训练样本的相对误差和预测值;步骤4,预测模型对训练样本的相对误差进行预测,从而得到相对误差的预测值;步骤5,对相对误差的预测值进行校正,从而得到预测速率;解决了由于最小二乘支持向量机核函数参数和惩罚参数的经验性赋值而导致的预测精度不足的问题.

2 部分代码

function dist = codedist_loss(C1,C2,Ylat,loss)
% compute the distance using a loss function metric between 'C1' and 'C2'
%
% dist = codedist_loss(C1,C2,Ylatent)
% dist = codedist_loss(C1,C2,Ylatent, loss_fct)
%
% 'C1' contains the result code,
% 'C2' contains the codebooks prototype. An infine small number 'eps' represents the don't care
% 'loss_fct' is the loss function used in order to compute the loss
% between 2 codewords. By default the sum of squares is used.
% One can do 'winner-takes-all' decoding by using the
% loss function 'max'.
%
% An example:
% >> Ye = [1 1; 1 1; -1 -1; 1 -1];
% >> codebook = [1 2 3];
% >> old_codebook = [1 1 -1; 1 -1 -1];
% >> code(Ye, codebook, [],old_codebook,'codedist_loss',{'Ylatent','mse'})
%
% To use this distance measure in LS-SVMlab, the following
% procedure is to be followed, assume input data 'X' and multiclass
% output 'Y'
%
% % encode for training
% >> model = initlssvm(X,Y,'classification',gam,sig2,'preprocess','RBF_kernel');
% >> model = changelssvm(model,'codetype','code_OneVsOne');
% >> model = trainlssvm(model);
%
% % decode for simulating
% >> [Yhamming, Ylatent] = simlssvm(model,Xt);
% >> model = changelssvm(model,'codedist_fct','codedist_loss');
% >> model = changelssvm(model,'codedist_args',{Ylatent,'sse'});
% >> Yt = simlssvm(model,Xt);
%
% see also:
% bay_modoutClass, codedist_hamming, code_ECOC
% (c) SCD-KULeuven, rights & help @ http://www.esat.kuleuven.ac.be/sista/lssvmlab
if nargin<3,
warning('The latent variables should be used, proceeding with the binary classifiers...');
Ylat = C1;
end
eval('loss;','loss=''sse'';');
[nb,nbin] = size(Ylat);
[~,dim] = size(C2);
dist = zeros(nb,dim);
for d = 1:dim,
for n= 1:nb,
nondontcare = find(Ylat(n,:)~=eps & C2(:,d)'~=eps);
dist(n,d) = feval(loss, Ylat(n,nondontcare),C2(nondontcare,d)');
end
end
dist
function l = sse(X,Y)
l = sum(sum((X-Y).^2));
function l = winnertakesall(X,Y)
p = find(Y>0);
l = max(X(P));

3 仿真结果

 【lssvm预测】基于麻雀算法优化最小二乘支持向量机实现数据预测含Matlab源码_支持向量机

 【lssvm预测】基于麻雀算法优化最小二乘支持向量机实现数据预测含Matlab源码_搜索_02

4 参考文献

[1]马晨佩, 李明辉, 巩强令,等. 基于麻雀搜索算法优化支持向量机的滚动轴承故障诊断[J]. 科学技术与工程, 2021, 21(10):5.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

 【lssvm预测】基于麻雀算法优化最小二乘支持向量机实现数据预测含Matlab源码_支持向量机_03


网友评论