【數(shù)據(jù)預(yù)測】基于 BP+ELM+LSTM+BiLSTM+SAELSTM多種算法實現(xiàn)數(shù)據(jù)預(yù)測含Matlab源碼
1 簡介
基于 BP+ELM+LSTM+BiLSTM+SAELSTM多種算法實現(xiàn)數(shù)據(jù)預(yù)測.
1.1 BP神經(jīng)網(wǎng)絡(luò)
BP神經(jīng)網(wǎng)絡(luò)模型是目前應(yīng)用最為廣泛神經(jīng)網(wǎng)絡(luò)之一。它的本質(zhì)是通過對歷史數(shù)據(jù)的學(xué)習(xí)找出數(shù)據(jù)變化趨勢之間的非線性關(guān)系,并通過輸出量與預(yù)期值之間的誤差不斷調(diào)整網(wǎng)絡(luò)中各個單元的權(quán)重,使整個網(wǎng)絡(luò)的誤差最小。因此,為達(dá)到較好的預(yù)測精度,需要對網(wǎng)絡(luò)預(yù)測模型自身的結(jié)構(gòu)進(jìn)行確定。
1)網(wǎng)絡(luò)層數(shù)的設(shè)計。本文需要構(gòu)建的預(yù)測模型,主要是用于研究在短時間交通流走勢。在這種情況下,不需選擇增加網(wǎng)絡(luò)層數(shù)的辦法而是選擇增加隱含層神經(jīng)元節(jié)點的數(shù)目來提高輸出結(jié)果的精度。因此,本文選用單一隱層的 BP神經(jīng)網(wǎng)絡(luò)模型。
2)輸入層神經(jīng)節(jié)點的設(shè)計。在單因素預(yù)測中僅使用交通流作為原始數(shù)據(jù).
3)傳遞函數(shù)和學(xué)習(xí)函數(shù)的設(shè)計。本文所設(shè)計的模型均采用了相同的隱含層傳遞函數(shù)tansig、輸出層傳遞函數(shù)logsig和學(xué)習(xí)函數(shù)learngdm。
4)性能函數(shù)的確定。網(wǎng)絡(luò)誤差能直觀的反映預(yù)測效果的好壞程度,是預(yù)測精度的具體反映。本文在構(gòu)建 BP神經(jīng)網(wǎng)絡(luò)模型時選擇均方誤差來確定網(wǎng)絡(luò)的誤差情況。
5)隱含層神經(jīng)節(jié)點的設(shè)計。在模型中其它參數(shù)值保持不變的情況下,本文通過調(diào)整隱含層神經(jīng)節(jié)點的數(shù)目進(jìn)行重復(fù)實驗,通過對比輸出誤差,確定最佳隱含層神經(jīng)元節(jié)點的數(shù)目。對于單因素 BP神經(jīng)網(wǎng)絡(luò),當(dāng)隱含層神經(jīng)元節(jié)點的數(shù)目為24時,BP神經(jīng)網(wǎng)絡(luò)的均方誤差最小,即對函數(shù)的逼近效果最好,此時的均方誤差為1.1609;對于多因素 BP神經(jīng)網(wǎng)絡(luò),隱含層神經(jīng)元節(jié)點數(shù)目為5時,BP神經(jīng)網(wǎng)絡(luò)的均方誤差達(dá)到最小,最小值為0.0126。根據(jù)以上分析,單因素 BP神經(jīng)網(wǎng)絡(luò)預(yù)測模型的結(jié)構(gòu)為:單一隱含層和單一輸出層;輸入層神經(jīng)節(jié)點數(shù)目為5 ;隱含層神經(jīng)節(jié)點數(shù)目為24;輸出層神經(jīng)節(jié)點數(shù)目為1;隱含層傳遞函數(shù)、輸出層傳遞函數(shù)、學(xué)習(xí)函數(shù)分別為tansig、logsig和learngdm;性能函數(shù)為 mse。
1.2 ELM

1.3 LSTM預(yù)測




2 部分代碼
clc
clear all
DataSetName = 'magic04'; ? ? ? ? ? ? ? ? %以matlab格式存儲的數(shù)據(jù)集名稱
TrainSamplesPartio = 0.5; ? ? ? ? ? ? ? ?%每類訓(xùn)練樣本所占比例 ?
C = 100; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %正則化因子
DataSet ?= load(DataSetName, '-mat'); ? ?%加載文件到程序
DataSet = getfield(DataSet, DataSetName);%獲取文件中數(shù)據(jù)
KindIdx = DataSet(:,1); ? ? ? ? ? ? ? ? ?%獲取類別號,數(shù)據(jù)第1列為類別編號
KindCount = length(unique(KindIdx)); ? ? %總類別數(shù)
SortedDataSet = sortrows(DataSet, 1); ? ?%按類標(biāo)號排列數(shù)據(jù),按類標(biāo)號從小到大重排數(shù)據(jù),方便后面隨機抽取數(shù)據(jù)
clear DataSet
EachKindCount = zeros(1,KindCount); ? ? ? ? %每類數(shù)據(jù)個數(shù)
for i=1:KindCount
? ?EachKindCount(i) = sum(sum( i == SortedDataSet(:,1))); ?%第i類數(shù)據(jù)個數(shù)
end
KindData = cell(1,KindCount); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %每類的數(shù)據(jù)以cell數(shù)組數(shù)據(jù)存儲
TempCount = 0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%前i類數(shù)據(jù)總數(shù)目計數(shù)
for i=1:KindCount
? ?if i == 1
? ? ? ?TempCount = EachKindCount(1,i);
? ? ? ?KindData{1,i} = SortedDataSet(1:TempCount,:);
? ?else
? ? ? ?%因為數(shù)據(jù)為按類標(biāo)有序排列,故可以由每類數(shù)據(jù)數(shù)目直接獲取每類數(shù)據(jù)
? ? ? ?KindData{1,i} = SortedDataSet(TempCount+1:TempCount+EachKindCount(1,i),:);
? ? ? ?TempCount = TempCount + EachKindCount(1,i);
? ?end
end
clear SortedDataSet
end
clear TrainTemp TestTemp TrainDataEachKind TestDataEachKind
%統(tǒng)計結(jié)果
[TrainingTime, TestingTime, TrainingAccuracy, TestingAccuracy] = elm(TrainData, TestData, 1, KindCount, 'sig');
%格式化輸出相關(guān)信息,可根據(jù)自己需要修改
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')
end
fprintf('+------------------------------------------------------+\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 仿真結(jié)果





4 參考文獻(xiàn)
[1]劉啟斌, 尹溫碩, 胡衛(wèi)華,等. 基于LSTM算法的電力諧波監(jiān)測數(shù)據(jù)預(yù)測[J]. 電力電容器與無功補償, 2019, 40(5):7.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
