VMD-LSTM的数据回归预测(主要应用于风速,负荷,功率)

%% VMD-LSTM预测
clc
clear all
close all
warning off
% restoredefaultpath
tic
%% 导入数据
ff=xlsread('windspeed.xls','B2:B1001'); 
ff=ff';
data=ff;
len=length(data);
f=data(1:len);

%--------- some sample parameters forVMD:对于VMD样品参数进行设置---------------
alpha = 2000;      % moderate bandwidth constraint:适度的带宽约束/惩罚因子
tau = 0;           % noise-tolerance (no strict fidelity enforcement):噪声容限(没有严格的保真度执行)
K = 7;             % modes:分解的模态数
DC = 0;            % no DC part imposed:无直流部分
init = 1;          % initialize omegas uniformly  :omegas的均匀初始化?
tol = 1e-7;         
%--------------- Run actual VMD code:数据进行vmd分解---------------------------
[u, u_hat, omega] = VMD(f, alpha, tau, K, DC, init, tol);
%[m,~]=size(u);   %程序中omega就是中心频率,k为多少,分解的个数就为几个,
%omega就有几列,然后就每列的均值,程序里面有。
%% 浣滃浘
figure
subplot(size(u,1)+1,1,1);
plot(f,'k');grid on;
title('原始数据');
for i = 1:size(u,1)
    subplot(size(u,1)+1,1,i+1);
    plot(u(i,:),'k');
end

%% 预测模型
L=15; %嵌入维度
imf=u;
c=size(imf,1);
tre_result=[];
pre_result=[];
%% 对每个分量建模
for i=1:c
disp(['对第',num2str(i),'个分量建模'])
[x,y]=data_process(imf(i,:),L);
%归一化
[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%进行预测
XTrain=x(1:m,:)';
XTest=x(m+1:end,:)';
YTrain=y(1:m,:)';
YTest=y(m+1:end,:)';

numFeatures = size(XTrain,1);
numResponses = 1;
numHiddenUnits = 200;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits)
    fullyConnectedLayer(numResponses)
    regressionLayer];

你可能感兴趣的:(算法)