机器学习之MATLAB代码--基于VMD与SSA优化lssvm的功率预测(多变量)(七)

  • 代码
    • 数据
      • 结果

代码

先对外层代码的揭露,包括:顺序而下

1、

function s = Bounds( s, Lb, Ub)
% Apply the lower bound vector
temp = s;
I = temp < Lb;
temp(I) = Lb(I);% Apply the upper bound vector
J = temp > Ub;
temp(J) = Ub(J);
% Update this new move
s = temp;

2、

function [in,out]=data_process(data,num)
% 采用1-num的各种值为输入 第num+1的功率作为输出
n=length(data)-num;
for i=1:nx(i,:,:)=data(i:i+num,:);
end
in=x(1:end-1,:);
out=x(2:end,end);%功率是最后一列

3、

function y=fitness(x,train_x,train_y,test_x,test_y,typeID,kernelnamescell)gam=x(1);
sig2=x(2);
model=initlssvm(train_x,train_y,typeID,gam,sig2,kernelnamescell);
model=trainlssvm(model);
y_pre_test=simlssvm(model,test_x);
y=mse(test_y-y_pre_test);

4、

clc;clear;close all
%%
lssvm=load('lssvm.mat');
ssa_lssvm=load('ssa_lssvm.mat');
vmd_lssvm=load('vmd_lssvm.mat');
vmd_ssa_lssvm=load('vmd_ssa_lssvm.mat');disp('结果分析-lssvm')
result(lssvm.true_value,lssvm.predict_value)
fprintf('\n')disp('结果分析-ssa-lssvm')
result(ssa_lssvm.true_value,ssa_lssvm.predict_value)
fprintf('\n')disp('结果分析-vmd-lssvm')
result(vmd_lssvm.true_value,vmd_lssvm.predict_value)
fprintf('\n')disp('结果分析-vmd-ssa-lssvm')
result(vmd_ssa_lssvm.true_value,vmd_ssa_lssvm.predict_value)
figure
plot(lssvm.true_value)
hold on;grid on
plot(lssvm.predict_value)
plot(ssa_lssvm.predict_value)
plot(vmd_lssvm.predict_value)
plot(vmd_ssa_lssvm.predict_value)
legend('真实值','lssvm预测','ssa-lssvm预测','vmd-lssvm预测','vmd-ssa-lssvm预测')
title('各算法预测效果对比')
ylabel('功率值')
xlabel('测试集样本')

5、

%% 其他数据与功率数据一起作为输入,参看data_process.m
clc;clear;close all
addpath(genpath('LSSVMlabv1_8'));%%
data=xlsread('预测数据.xls','B2:K1000');
[x,y]=data_process(data,24);%前24个时刻 预测下一个时刻
%归一化
[xs,mappingx]=mapminmax(x',0,1);x=xs';
[ys,mappingy]=mapminmax(y',0,1);y=ys';
%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练,对最后30%进行预测
train_x=x(1:m,:);
test_x=x(m+1:end,:);
train_y=y(1:m,:);
test_y=y(m+1:end,:);
%% lssvm 参数
gam=10;
sig2=1000;typeID='function estimation';
kernelnamescell='RBF_kernel';model=initlssvm(train_x,train_y,typeID,gam,sig2,kernelnamescell);
model=trainlssvm(model);
y_pre_test=simlssvm(model,test_x);% 反归一化
predict_value=mapminmax('reverse',y_pre_test',mappingy);
true_value=mapminmax('reverse',test_y',mappingy);
save lssvm predict_value true_valuedisp('结果分析')
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])mape=mean(abs(true_value-predict_value)/true_value);
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])fprintf('\n')figure
plot(true_value,'-*','linewidth',3)
hold on
plot(predict_value,'-s','linewidth',3)
legend('实际值','预测值')
grid on
title('LSSVM')

6、

clc;clear;close all;format compact
addpath(genpath('LSSVMlabv1_8'));%%
data=xlsread('预测数据.xls','B2:K1000');
[x,y]=data_process(data,24);%前24个时刻 预测下一个时刻
%归一化
[xs,mappingx]=mapminmax(x',0,1);x=xs';
[ys,mappingy]=mapminmax(y',0,1);y=ys';
%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练,对最后30%进行预测
train_x=x(1:m,:);
test_x=x(m+1:end,:);
train_y=y(1:m,:);
test_y=y(m+1:end,:);
%% ssa优化lssvm 参数
typeID='function estimation';
kernelnamescell='RBF_kernel';
[x,trace]=ssa_lssvm(typeID,kernelnamescell,train_x,train_y,test_x,test_y);
figure;plot(trace);title('适应度曲线/mse')
%% 利用寻优得到的参数重新训练lssvm
disp('寻优得到的参数分别是:')
gam=x(1)
sig2=x(2)model=initlssvm(train_x,train_y,typeID,gam,sig2,kernelnamescell);
model=trainlssvm(model);
y_pre_test=simlssvm(model,test_x);% 反归一化
predict_value=mapminmax('reverse',y_pre_test',mappingy);
true_value=mapminmax('reverse',test_y',mappingy);
save ssa_lssvm predict_value true_value
disp('结果分析')
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])mape=mean(abs(true_value-predict_value)/true_value);
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])fprintf('\n')figure
plot(true_value,'-*','linewidth',3)
hold on
plot(predict_value,'-s','linewidth',3)
legend('实际值','预测值')
grid on
title('SSA-LSSVM')

7、

clc;clear;format compact;close all;tic
rng('default')
%% 数据预处理
data=xlsread('预测数据.xls','B2:K1000');
figure;plot(data(:,end),'-*','linewidth',3);title('原始功率曲线');grid on;ylabel('功率值')
alpha = 2000;        % moderate bandwidth constraint
tau = 0;            % noise-tolerance (no strict fidelity enforcement)
K = 5;              % 3 modes
DC = 0;             % no DC part imposed
init = 1;           % initialize omegas uniformly
tol = 1e-7;
[imf, u_hat, omega] = VMD(data(:,end), alpha, tau, K, DC, init, tol);figure
for i =1:size(imf,1)subplot(size(imf,1),1,i)plot(imf(i,:))ylabel(['imf',num2str(i)])
end
ylabel('残余')
suptitle('VMD')c=size(imf,1);
pre_result=[];
true_result=[];
%% 对每个分量建模
for i=1:c
disp(['对第',num2str(i),'个分量建模'])
[x,y]=data_process([data(:,1:end-1) imf(i,:)'],24);%每个序列和原始的几列数据合并 然后划分
%归一化
[xs,mappingx]=mapminmax(x',0,1);x=xs';
[ys,mappingy]=mapminmax(y',0,1);y=ys';
%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练,对最后30%进行预测
train_x=x(1:m,:);
test_x=x(m+1:end,:);
train_y=y(1:m,:);
test_y=y(m+1:end,:);
%%
gam=100;
sig2=1000;
typeID='function estimation';
kernelnamescell='RBF_kernel';
model=initlssvm(train_x,train_y,typeID,gam,sig2,kernelnamescell);
model=trainlssvm(model);
pred=simlssvm(model,test_x);
pre_value=mapminmax('reverse',pred',mappingy);
true_value=mapminmax('reverse',test_y',mappingy);
pre_result=[pre_result;pre_value];
true_result=[true_result;true_value];
end
%% 各分量预测的结果相加
true_value=sum(true_result);
predict_value=sum(pre_result);
save vmd_lssvm predict_value true_value%%
load vmd_lssvm
disp('结果分析')
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])mape=mean(abs(true_value-predict_value)/true_value);
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])fprintf('\n')
figure
plot(true_value,'-*','linewidth',3)
hold on
plot(predict_value,'-s','linewidth',3)
legend('实际值','预测值')
grid on
title('VMD-LSSVM')

8、

clc;clear;format compact;close all;tic
rng('default')
%% 数据预处理
data=xlsread('预测数据.xls','B2:K1000');
figure;plot(data(:,end),'-*','linewidth',3);title('原始功率曲线');grid on;ylabel('功率值')
alpha = 2000;        % moderate bandwidth constraint
tau = 0;            % noise-tolerance (no strict fidelity enforcement)
K = 5;              % 3 modes
DC = 0;             % no DC part imposed
init = 1;           % initialize omegas uniformly
tol = 1e-7;
[imf, u_hat, omega] = VMD(data(:,end), alpha, tau, K, DC, init, tol);figure
for i =1:size(imf,1)subplot(size(imf,1),1,i)plot(imf(i,:))ylabel(['imf',num2str(i)])
end
ylabel('残余')
suptitle('VMD')c=size(imf,1);
pre_result=[];
true_result=[];
%% 对每个分量建模
for i=1:c
disp(['对第',num2str(i),'个分量建模'])
[x,y]=data_process([data(:,1:end-1) imf(i,:)'],24);
%归一化
[xs,mappingx]=mapminmax(x',0,1);x=xs';
[ys,mappingy]=mapminmax(y',0,1);y=ys';
%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练,对最后30%进行预测
train_x=x(1:m,:);
test_x=x(m+1:end,:);
train_y=y(1:m,:);
test_y=y(m+1:end,:);
%%
typeID='function estimation';
kernelnamescell='RBF_kernel';
[x,trace]=ssa_lssvm(typeID,kernelnamescell,train_x,train_y,test_x,test_y);
gam=x(1);
sig2=x(2);
model=initlssvm(train_x,train_y,typeID,gam,sig2,kernelnamescell);
model=trainlssvm(model);
pred=simlssvm(model,test_x);
pre_value=mapminmax('reverse',pred',mappingy);
true_value=mapminmax('reverse',test_y',mappingy);
pre_result=[pre_result;pre_value];
true_result=[true_result;true_value];
end
%% 各分量预测的结果相加
true_value=sum(true_result);
predict_value=sum(pre_result);
save vmd_ssa_lssvm predict_value true_value%%
load vmd_ssa_lssvm
disp('结果分析')
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])mape=mean(abs(true_value-predict_value)/true_value);
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])fprintf('\n')
figure
plot(true_value,'-*','linewidth',3)
hold on
plot(predict_value,'-s','linewidth',3)
legend('实际值','预测值')
grid on
title('VMD-SSA-LSSVM')

9、

clear;
close all;
clc;
format compact
addpath('vmd-verify')
data=xlsread('预测数据.xls','B2:K1000');
f=data(:,end);
% some sample parameters for VMD
alpha = 2000;        % moderate bandwidth constraint
tau = 0;            % noise-tolerance (no strict fidelity enforcement)
K = 5;              % 3 modes
DC = 0;             % no DC part imposed
init = 1;           % initialize omegas uniformly
tol = 1e-7;
%--------------- Run actual VMD code[u, u_hat, omega] = VMD(f, alpha, tau, K, DC, init, tol);
figure
plot(f)
title('原始')figure
for i=1:Ksubplot(K,1,i)
plot(u(i,:))
ylabel(['IMF_',num2str(i)])
end
ylabel('res')

10、

function result(true_value,predict_value)
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])
mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])mape=mean(abs(true_value-predict_value)/true_value);
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])

11、

function [bestX,Convergence_curve]=ssa_lssvm(typeID,Kernel_type,inputn_train,label_train,inputn_test,label_test)
%% 麻雀优化
pop=10; % 麻雀数
M=10; % Maximum numbef of iterations
c=1;
d=10000;
dim=2;P_percent = 0.2;    % The population size of producers accounts for "P_percent" percent of the total population size
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pNum = round( pop *  P_percent );    % The population size of the producers
lb= c.*ones( 1,dim );    % Lower limit/bounds/     a vector
ub= d.*ones( 1,dim );    % Upper limit/bounds/     a vector
%Initialization
for i = 1 : popx( i, : ) = lb + (ub - lb) .* rand( 1, dim );fit( i )=fitness(x(i,:),inputn_train,label_train,inputn_test,label_test,typeID,Kernel_type);
end
pFit = fit;
pX = x;                            % The individual's best position corresponding to the pFit
[ fMin, bestI ] = min( fit );      % fMin denotes the global optimum fitness value
bestX = x( bestI, : );             % bestX denotes the global optimum position corresponding to fMinfor t = 1 : M[ ans, sortIndex ] = sort( pFit );% Sort.[fmax,B]=max( pFit );worse= x(B,:);r2=rand(1);%%%%%%%%%%%%%5%%%%%%这一部位为发现者(探索者)的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%if(r2<0.8)%预警值较小,说明没有捕食者出现for i = 1 : pNum  %r2小于0.8的发现者的改变(1-20)                                                 % Equation (3)r1=rand(1);x( sortIndex( i ), : ) = pX( sortIndex( i ), : )*exp(-(i)/(r1*M));%对自变量做一个随机变换x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );%对超过边界的变量进行去除fit( sortIndex( i ) )=fitness(x(sortIndex( i ),:),inputn_train,label_train,inputn_test,label_test,typeID,Kernel_type); endelse   %预警值较大,说明有捕食者出现威胁到了种群的安全,需要去其它地方觅食for i = 1 : pNum   %r2大于0.8的发现者的改变x( sortIndex( i ), : ) = pX( sortIndex( i ), : )+randn(1)*ones(1,dim);x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );fit( sortIndex( i ) )=fitness(x(sortIndex( i ),:),inputn_train,label_train,inputn_test,label_test,typeID,Kernel_type); endend[ fMMin, bestII ] = min( fit );bestXX = x( bestII, : );%%%%%%%%%%%%%5%%%%%%这一部位为加入者(追随者)的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%for i = ( pNum + 1 ) : pop     %剩下20-100的个体的变换                % Equation (4)     A=floor(rand(1,dim)*2)*2-1;if( i>(pop/2))%这个代表这部分麻雀处于十分饥饿的状态(因为它们的能量很低,也是是适应度值很差),需要到其它地方觅食x( sortIndex(i ), : )=randn(1)*exp((worse-pX( sortIndex( i ), : ))/(i)^2);else%这一部分追随者是围绕最好的发现者周围进行觅食,其间也有可能发生食物的争夺,使其自己变成生产者x( sortIndex( i ), : )=bestXX+(abs(( pX( sortIndex( i ), : )-bestXX)))*(A'*(A*A')^(-1))*ones(1,dim);endx( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );%判断边界是否超出fit( sortIndex( i ) )=fitness(x(sortIndex( i ),:),inputn_train,label_train,inputn_test,label_test,typeID,Kernel_type); end%%%%%%%%%%%%%5%%%%%%这一部位为意识到危险(注意这里只是意识到了危险,不代表出现了真正的捕食者)的麻雀的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%c=randperm(numel(sortIndex));%%%%%%%%%这个的作用是在种群中随机产生其位置(也就是这部分的麻雀位置一开始是随机的,意识到危险了要进行位置移动,%处于种群外围的麻雀向安全区域靠拢,处在种群中心的麻雀则随机行走以靠近别的麻雀)b=sortIndex(c(1:10));for j =  1  : length(b)      % Equation (5)if( pFit( sortIndex( b(j) ) )>(fMin) ) %处于种群外围的麻雀的位置改变x( sortIndex( b(j) ), : )=bestX+(randn(1,dim)).*(abs(( pX( sortIndex( b(j) ), : ) -bestX)));else                       %处于种群中心的麻雀的位置改变x( sortIndex( b(j) ), : ) =pX( sortIndex( b(j) ), : )+(2*rand(1)-1)*(abs(pX( sortIndex( b(j) ), : )-worse))/ ( pFit( sortIndex( b(j) ) )-fmax+1e-50);endx( sortIndex(b(j) ), : ) = Bounds( x( sortIndex(b(j) ), : ), lb, ub );fit( sortIndex( b(j) ) )=fitness(x(sortIndex(b(j) ),:),inputn_train,label_train,inputn_test,label_test,typeID,Kernel_type); endfor i = 1 : popif ( fit( i ) < pFit( i ) )pFit( i ) = fit( i );pX( i, : ) = x( i, : );endif( pFit( i ) < fMin )fMin= pFit( i );bestX = pX( i, : );endendConvergence_curve(t,:)=[fMin mean(pFit)];
end

接下来是内嵌代码,就是下面两个文件夹的代码,实在是太多,想要的留言吧!

数据

数据是由时间、风速、风向等等因素组成的文件。

结果






结果图太多,就先给出这么多,如有需要代码和数据的同学请在评论区发邮箱,一般一天之内会回复,请点赞+关注谢谢!!

机器学习之MATLAB代码--基于VMD与SSA优化lssvm的功率预测(多变量)(七)相关推荐

  1. 【Matlab风电功率预测】麻雀算法优化LSSVM风电功率预测(多输入单输出)【含源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]麻雀算法优化LSSVM风电功率预测(多输入单输出)[含源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 ...

  2. 【风电功率预测】基于matlab麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】

    ⛄一.麻雀算法优化LSSVM简介 1 标准麻雀算法 算法运算过程由探索者.追随者与预警者3部分构成,其中探索者与追随者的总数量与比例不变,根据适应度数值的改变,两者可以相互转化.通过觅食和反捕食行为来 ...

  3. 【风电功率预测】麻雀算法优化LSSVM风电功率预测(多输入单输出)【含Matlab源码 1718期】

    ⛄一.麻雀算法优化LSSVM简介 1 标准麻雀算法 算法运算过程由探索者.追随者与预警者3部分构成,其中探索者与追随者的总数量与比例不变,根据适应度数值的改变,两者可以相互转化.通过觅食和反捕食行为来 ...

  4. VMD结合ISSA优化LSSVM功率预测

    0.前言 本文测试VMD结合ISSA优化LSSVM的功率预测方法:①VMD实现多尺度分解,以获取细节信息:②采用改进的SSA算法(ISSA算法)用于优化LSSVM的参数,实现功率预测. ISSA简介: ...

  5. 机器学习之MATLAB代码--CEEMDAN+EEMD+EMD+VMD+IMF重构络(十八)

    机器学习之MATLAB代码--CEEMDAN+EEMD+EMD+VMD+IMF重构络(十八) 压缩分量的EEMD代码 压缩分量的EEMD数据 压缩分量的EEMD结果 CEEMDAN代码 CEEMDAN ...

  6. 机器学习之MATLAB代码--IWOA_BILSTM(基于改进鲸鱼算法优化的BiLSTM预测算法)(十六)

    机器学习之MATLAB代码--IWOA_BILSTM基于改进鲸鱼算法优化的BiLSTM预测算法(十六) 代码 数据 结果 代码 1. %% 基于改进鲸鱼算法优化的BiLSTM预测算法 clear;cl ...

  7. 机器学习之MATLAB代码--SMA_LSSVM(十一)

    机器学习之MATLAB代码--SMA_LSSVM(十一) 代码 数据 结果 代码 以下代码按照图中顺序依次: 1. clc; clear all; close all addpath addpath% ...

  8. 机器学习之MATLAB代码--SSA-CNN-BiLSTM做电池容量预测(十)

    机器学习之MATLAB代码--SSA-CNN-BiLSTM做电池容量预测(十) 代码 数据 结果 代码 代码按照如下顺序: 1. clc close all clear alldata=xlsread ...

  9. 开源机器学习之MATLAB代码--LSTM-SVRNN(五)

    机器学习之MATLAB代码--LSTM-SVRNN(五) 代码 数据 结果 代码 1.cdmnn.m文件 %% 组合模型 %% %% 数据导入 clc;clear;warning off; data= ...

  10. 机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)

    机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三) 代码 数据 结果 代码 代码按照下列顺序依次: 1. function result(true_value,pr ...

最新文章

  1. 如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)
  2. Nginx压缩输出配置
  3. server之后安装ssms失败 安装sql_关于SQL安装失败的解决方法
  4. (部分来自windows核心编程)远程注入dll
  5. 【JVM】通过javap命令分析Java汇编指令
  6. 中科院遗传所钱文峰组发表新冠病毒源于自然界的科学证据
  7. bzoj1426 收集邮票
  8. 根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
  9. python鼠标移动_python自动化之鼠标移动
  10. 中国互联网二十四年红黑史
  11. 机器学习项目的实例分析设计(附源码)
  12. c语言中sqrt与pow的区别,实现sqrt和pow函数
  13. 安徒生---海的女儿
  14. 基于Linux系统的边界网关协议的设计与实现
  15. SiamFC++笔记
  16. 3、说说amp;和amp;amp;的区别。
  17. Gson详解--入门篇
  18. 戏说python模块
  19. 【摄影教程】拍出酷照有什么摄影技…
  20. 使用光泵磁力仪(OPMs)非接触测量视网膜活动

热门文章

  1. python合并视频(mp4+mp3)
  2. 微软扩大与Meta的AI合作,强强联合,友商岌岌可危?
  3. 什么情况下选用mysql_在MySQL中,‘%’可以用在什么情况下?
  4. 计算机如何安装无线网络适配器,无线网卡驱动怎么安装,教您怎么给电脑安装无线网卡驱动...
  5. 谷歌google搜索打不开、谷歌gmail邮箱及相关服务无法登录的解决的方法
  6. MySQL 的 MRR 到底是什么?
  7. 执行fadein追加css,基于CSS3完成淡入(fadeIn)淡出(fadeOut)结果
  8. 解决Firefox3下Flashgot的”AddRef”问题
  9. 软件测试面试题:所有的软件缺陷都能修复吗?所有的软件缺陷都要修复吗?
  10. bgp高防-服务器单线、双线、三线、BGP线路哪个更好?