本次运行测试环境MATLAB2018b;
- 本次预测基本任务是回归,考虑了数据的行和列的特征提取,多变量输入,单变量输出;
- 主要研究问题不限于交通预测、负荷预测、气象预测等;
- 如果是交通的话,针对城市交通流序列具有时空相关性难以预测的问题,首先构建主成分分析( PCA) 和长短期记忆LSTM( Long Short-Term Memory) 网络相结合的交通流预测模型。以交通流数据为基础,采用PCA 提取与预测站点具有空间相关性的站点,将提取的站点交通流序列作为输入,利用LSTM 神经网络实现城市短时交通流量的预测。
- 与经典的预测算法相比,该方法预测效果具有良好的表现,对研究预测问题有一定的参考价值。
注:时间相关性指的是不同行之间,空间相关性指的是不同列之间。
- 整理原始矩阵Xm×n;
- 计算原始矩阵的协方差矩阵Sm×n =COV( X) ;
- 求解协方差矩阵的特征值和特征向量;
- 选取给定k 个特征值所对应的特征向量所构成的矩阵Wn×k;
- 计算筛选后的特征因子矩阵Zm×k =Xm×nWn×k。
- OU 等提出了基于偏差修正随机森林算法与数据驱动特征选择策略相结合的预测方法,对昆山市3 种城市道路的交通流量进行预测验证。
- 孙湘海等在考虑交通流日周期特性的基础上,提出了季节自回归求和移动平均模型,对城市的短时交通流进行预测。
- 秦鸣等采用改进的卡尔曼滤波算法来预测路段交通量,进一步将优化后的卡尔曼滤波与二次指数平滑法相结合来预测短时交通量。基于数据驱动模型包括但不限于非参数回归模型、支持向量回归( SVR) 以及神经网络等。
- 吴晋武等利用主成分分析法对预测数据进行降维处理,再进行非参数回归交通预测算法的构建。
- Zheng等提出了一种基于时空数据融合的交通流稀疏回归预测模型,并在城市和郊区2 种交通场景验证了模型的适用性。
- Cai 等提出了一种基于支持向量回归的交通流量预测方法,并通过重力搜索算法( GSA) 进行参数最优搜索。
- Ran 等建立了深度学习模型架构,使用交通门户实时的图像数据源来预测城市交通流拥堵状况。
- 钟等基于LSTM 构建短时交通流预测模型,并与传统预测方法进行比较,验证了LSTM 预测模型具有良好的准确性和泛化性。
clc;
clear;
warning off;
data = xlsread('data.xlsx', 'Sheet1', 'A3:M1250');
x=data(:,1:12);
y=data(:,13);
% 求因子维度
[r,c]=size(x);
% 求因子均值
aver=mean(x);
% 求因子标准差
stdcov=std(x);
% 求目标均值
y_aver=mean(y);
% 求目标方差
y_stdcov=std(y);
% 数据标准化
stdarr=(x-aver(ones(r,1),:))./stdcov(ones(r,1),:);
std_y=(y-y_aver(ones(r,1)))./y_stdcov(ones(r,1));
% 计算相关系数矩阵
covArr=cov(stdarr);
%% 相关系数矩阵进行主成分分析
[pc1,latent,explain]=pcacov(covArr);
d=repmat(sign(sum(pc1)),size(pc1,1),1);
pc=pc1.*d;
sumcontr=0;
i=1;
% 选取贡献率大于90%的主成分
er=90;
while sumcontr<er
sumcontr=sumcontr+explain(i);
i=i+1;
end
pcNum=i-1;
% 计算各个主成分
F=stdarr*pc(:,1:pcNum);
FF=[ones(r,1),F];
Fcoeff=regress(std_y,FF);
Recoeff=pc(:,1:pcNum)*Fcoeff(2:pcNum+1,:);
result(1)=Fcoeff(1);
result(2:c+1)=Recoeff;
y_p=Fcoeff(1)+stdarr*Recoeff;
y_p=y_p.*y_stdcov(ones(r,1))+y_aver(ones(r,1));
%% LSTM层设置,参数设置
inputSize = size(inputn_train,1); %数据输入x的特征维度
outputSize = size(outputn_train,1); %数据输出y的维度
numhidden_units=240;
%% lstm
%输入层设、学习层、全连接层
layers = [ ...
sequenceInputLayer(inputSize)
fullyConnectedLayer(2*inputSize)
lstmLayer(numhidden_units)
dropoutLayer(0.2)
fullyConnectedLayer(outputSize)
regressionLayer];
%% trainoption(lstm)
%优化算法、训练次数、梯度阈值、运行环境、学习率、学习计划
opts = trainingOptions('adam', ...
'MaxEpochs',800, ...
'MiniBatchSize',48,...
'GradientThreshold',1,...
'ExecutionEnvironment','gpu',...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',100, ...
'LearnRateDropFactor',0.8, ...
'Verbose',0, ...
'Plots','training-progress'...
);
%% LSTM网络训练
tic
LSTMnet = trainNetwork(inputn_train,outputn_train,layers,opts);
toc;
[LSTMnet,LSTMoutputr_train]= predictAndUpdateState(LSTMnet,inputn_train);
LSTMoutput_train = mapminmax('reverse',LSTMoutputr_train,outputps);
[1] https://blog.csdn.net/kjm13182345320/article/details/120498871?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/120525662?spm=1001.2014.3001.5501
[3] https://blog.csdn.net/kjm13182345320/article/details/120406657?spm=1001.2014.3001.5501
[4] https://mianbaoduo.com/o/bread/mbd-YZyblpxy