【数据预测】基于 BP+ELM+LSTM+BiLSTM+SAELSTM多种算法实现数据预测含Matlab源码(数据分析预测方法)

网友投稿 364 2022-09-07


【数据预测】基于 BP+ELM+LSTM+BiLSTM+SAELSTM多种算法实现数据预测含Matlab源码(数据分析预测方法)

1 简介

基于 BP+ELM+LSTM+BiLSTM+SAELSTM多种算法实现数据预测.

1.1 BP神经网络

BP神经网络模型是目前应用最为广泛神经网络之一。它的本质是通过对历史数据的学习找出数据变化趋势之间的非线性关系,并通过输出量与预期值之间的误差不断调整网络中各个单元的权重,使整个网络的误差最小。因此,为达到较好的预测精度,需要对网络预测模型自身的结构进行确定。

1)网络层数的设计。本文需要构建的预测模型,主要是用于研究在短时间交通流走势。在这种情况下,不需选择增加网络层数的办法而是选择增加隐含层神经元节点的数目来提高输出结果的精度。因此,本文选用单一隐层的 BP神经网络模型。

2)输入层神经节点的设计。在单因素预测中仅使用交通流作为原始数据.

3)传递函数和学习函数的设计。本文所设计的模型均采用了相同的隐含层传递函数tansig、输出层传递函数logsig和学习函数learngdm。

4)性能函数的确定。网络误差能直观的反映预测效果的好坏程度,是预测精度的具体反映。本文在构建 BP神经网络模型时选择均方误差来确定网络的误差情况。

5)隐含层神经节点的设计。在模型中其它参数值保持不变的情况下,本文通过调整隐含层神经节点的数目进行重复实验,通过对比输出误差,确定最佳隐含层神经元节点的数目。对于单因素 BP神经网络,当隐含层神经元节点的数目为24时,BP神经网络的均方误差最小,即对函数的逼近效果最好,此时的均方误差为1.1609;对于多因素 BP神经网络,隐含层神经元节点数目为5时,BP神经网络的均方误差达到最小,最小值为0.0126。根据以上分析,单因素 BP神经网络预测模型的结构为:单一隐含层和单一输出层;输入层神经节点数目为5 ;隐含层神经节点数目为24;输出层神经节点数目为1;隐含层传递函数、输出层传递函数、学习函数分别为tansig、logsig和learngdm;性能函数为 mse。

1.2 ELM

1.3 LSTM预测

2 部分代码

clcclear allDataSetName = 'magic04'; %以matlab格式存储的数据集名称TrainSamplesPartio = 0.5; %每类训练样本所占比例 C = 100; %正则化因子 DataSet = load(DataSetName, '-mat'); %加载文件到程序DataSet = getfield(DataSet, DataSetName);%获取文件中数据KindIdx = DataSet(:,1); %获取类别号,数据第1列为类别编号KindCount = length(unique(KindIdx)); %总类别数SortedDataSet = sortrows(DataSet, 1); %按类标号排列数据,按类标号从小到大重排数据,方便后面随机抽取数据clear DataSetEachKindCount = zeros(1,KindCount); %每类数据个数for i=1:KindCount EachKindCount(i) = sum(sum( i == SortedDataSet(:,1))); %第i类数据个数endKindData = cell(1,KindCount); %每类的数据以cell数组数据存储TempCount = 0; %前i类数据总数目计数for i=1:KindCount if i == 1 TempCount = EachKindCount(1,i); KindData{1,i} = SortedDataSet(1:TempCount,:); else %因为数据为按类标有序排列,故可以由每类数据数目直接获取每类数据 KindData{1,i} = SortedDataSet(TempCount+1:TempCount+EachKindCount(1,i),:); TempCount = TempCount + EachKindCount(1,i); endendclear SortedDataSetendclear TrainTemp TestTemp TrainDataEachKind TestDataEachKind %统计结果[TrainingTime, TestingTime, TrainingAccuracy, TestingAccuracy] = elm(TrainData, TestData, 1, KindCount, 'sig');%格式化输出相关信息,可根据自己需要修改fprintf('Run Information:\n')fprintf('+-----------------------------------------------+\n')fprintf('|KindIdx | EachKindCount | EachTrainKindCount |\n');fprintf('+-----------------------------------------------+\n')Msgemat='| %2d |%9d |%11d |\n';for i=1:KindCount fprintf(Msgemat, i, EachKindCount(i), TrainSamCountEachKind(i)); fprintf('+-----------------------------------------------+\n')endfprintf('+------------------------------------------------------+\n')fprintf('| TrainTime | TestTime | TrainAccuracy | TestAccuracy |\n')MsgMat= '| %0.2fs | %0.2fs | %0.2f | %0.2f |\n';fprintf('+------------------------------------------------------+\n')fprintf(MsgMat, TrainingTime, TestingTime, TrainingAccuracy, TestingAccuracy);fprintf('+------------------------------------------------------+\n')

3 仿真结果

4 参考文献

[1]刘启斌, 尹温硕, 胡卫华,等. 基于LSTM算法的电力谐波监测数据预测[J]. 电力电容器与无功补偿, 2019, 40(5):7.

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

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python无监督学习:机器学习算法的类型
下一篇:SpringBoot+Jpa项目配置双数据源的实现
相关文章

 发表评论

暂时没有评论,来抢沙发吧~