%% 导入数据
addpath('E:\Download\cnn-lstm\2022'); %文件存放路径
opts = detectImportOptions('2022.csv');
preview('2022.csv',opts);
for i =8:14
opts.VariableTypes{i}='categorical';
end
%
opts.SelectedVariableNames = [1:15];
opts.DataLines = [2,17520];
load=readtable('2022.csv',opts);
clearvars -except load
% 预处理
load.month =dummyvar(load.month);
%
load.hour=dummyvar(load.hour);
load.day_of_week =dummyvar(load.day_of_week);
load.weekend =double(load.weekend)-1;
load.holiday =double(load.holiday)-1;
load.holiday_name =[];
load.day_of_year=[];
load.date=[];
load.year=[];
load.zone=[];
% 数据集划分
corrplot(load(:,2:4))
% 添加特征 (交互影响)
load.crossmonth =load.drybulb.*load.month;
load.crosshourweekday =load.hour.*load.weekend;
load.crossdewpnt = load.dewpnt.*load.month;
load.drybulb2 =load.drybulb.^2;
load.dewpnt2 =load.dewpnt.^2;
load =movevars(load,{'drybulb2','dewpnt2','trend'},'Before','month');
% 预测
ypred =CnnLstm(load);
%% CNN+LSTM
function ypred =CnnLstm(load)
% 划分时间步长
for i =1:size(load,1)-24
x{i,1} = reshape(load{i:24+i-1,2:end}',11,9,1,24);
y(i,1) = load.demand(i+24-1);
end
a =mean(y);
b=std(y);
y = (y-mean(y))/std(y);
n =floor(0.8*17495);
xtrain = x(1:n);
ytrain =y(1:n);
xtest = x(n+1:end);
ytest = y(n+1:end);
clear i n x y
%% CNN+LSTM
% 模型结构设置
inputSize = [11 9 1];
filterSize = 6;
numFilters = 6;
numHiddenUnits = 200;
outputsize=1;
layers = [ ...
sequenceInputLayer(inputSize,'Name','input','Normalization','zerocenter')
sequenceFoldingLayer('Name','fold')
convolution2dLayer(filterSize,numFilters,'Name','conv')
maxPooling2dLayer(3,'Stride',1,'Name','pool')
batchNormalizationLayer('Name','bn')
reluLayer('Name','relu')
sequenceUnfoldingLayer('Name','unfold')
flattenLayer('Name','flatten')
lstmLayer(100,'OutputMode','sequence','Name','lstm1')
lstmLayer(50,'OutputMode','last','Name','lstm2')
%concatenationLayer(1,2,'name','concat')
fullyConnectedLayer(outputsize, 'Name','fc')
regressionLayer('Name','regression')];
lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');
% layer2 = [imageInputLayer([1,2,1],'name','input2')];
% lgraph = addLayers(lgraph,layer2);
% lgraph = connectLayers(lgraph,'input2/out','concat/in2');
figure
plot(lgraph)
analyzeNetwork(lgraph)
%% 模型参数设置
opts = trainingOptions('adam', ...
'MaxEpochs',12, ...
'GradientThreshold',1,...
'ExecutionEnvironment','cpu',...
'InitialLearnRate',0.01, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',2, ... %2个epoch后学习率更新
'LearnRateDropFactor',0.9, ...
'ValidationData',{xtest,ytest},...
'Shuffle','every-epoch',... % 时间序列长度
'SequenceLength',24,...
'MiniBatchSize',24*30,...
'Verbose',0, ...
'Plots','training-progress'...
);
%net = assembleNetwork(lgraph)
%% 训练
tic
trainperiod =24;
net = trainNetwork(xtrain,ytrain,lgraph,opts);
% 滚动预测
toc;
%% 预测下一天
ypred =net.predict(xtest(1:24));
plot(ypred)
hold on
plot(ytest(1:24))
legend('预测','实际')
end
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
CNN-LSTM.rar (2个子文件)
cnn-lstm
2022.csv 115.2MB
cnn_lstm.m 3KB
共 2 条
- 1
weixin_49015812
- 粉丝: 12
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页