回归预测 基于ELMAN递归神经网络预测及其matlab代码实现
文章目錄
- 1. ELMAN神經網絡的簡介和算法描述
- 1.1 Elman網絡介紹
- 1.2 Elman結構組成
- 1.3 ELMAN訓練界面的參數解讀
- 2. 建立ELMAN神經網絡的步驟
- 3. 編寫MATLAB代碼
- 4. ELMAN程序運行結果
- 4.1 各層的神經元個數的確定過程
- 4.2 預測值和真實值的誤差計算(SSE、MAE、MSE、RMSE、MAPE)
- 4.3 Elman網絡預測的分析圖像
- 5. 小結
- 6. MATLAB代碼與數據下載地址
1. ELMAN神經網絡的簡介和算法描述
1.1 Elman網絡介紹
神經網絡是一個龐大的體系和概念,根據處理信息的不同方式來區分不同的network。比如根據處理信息結果的傳遞方向,分前饋型與反饋型。前饋型網絡會根據輸出數值來調整網絡的參數,反饋型網絡的輸入會存在輸入或者輸出數值的反饋,可以對運算處理過程不斷地進行優化。網絡的反饋形式決定了網絡的動態運算特點,遞歸神經網絡ELMAN和前面所介紹的三層BP神經網絡相比,增加了一個承接層,可以理解成延時算子,作用是讓網絡存在記憶功能,更好地適應數據輸入的動態變化。
1.2 Elman結構組成
ELMAN的構造分為四層神經元:輸入層、隱含層、承接層以及輸出層(在使用智能算法優化ELMAN的參數時,理解ELMAN的結構將有所幫助)。
a). 輸入層、輸出層的神經元節點個數:
輸入層的神經元數量與輸入數據特征的維數是相等的,輸出層的神經元節點數量也等同于輸出數據標簽的維度,這與BP神經網絡一樣。
b). 隱含層的神經元節點個數:
不管在BP還是ELMAN,或者其他的神經網絡,隱含層的神經元個數都不是固定的。如果選擇的隱含層神經元個數較少時,就會導致網絡的學習程度減小甚至無法學習。節點個數較多時,則會導致網絡訓練的過程變慢,也很難得出預計的情況。只有當隱含層神經元數量只有控制在一個合理的范圍內,才能使得網絡模型好的進行學習運算。
通常的做法是根據以下公式來推出隱含層節點數目的范圍,在范圍之內根據訓練誤差最小(分類問題則取準確率最高或者誤差率最低)的原則來確定最佳的隱含層節點數目。
h=m+n+ah=\sqrt{m+n}+a h=m+n?+a
式中,h為隱含層節點個數,m為輸入層節點個數,n為輸出層節點個數,a一般取為1-10之間的常數。BP神經網絡確定隱含層節點也通常采用該式。
c). 承接層的神經元節點個數:
承接層也叫做上下文層和狀態層,主要功能是用來記憶隱含層上一個時間點的輸出數值。所以承接層的神經元個數與隱含層相同,確定方法為:先根據訓練誤差最小確定最佳的隱含層神經元節點,再得到承接層的神經元節點個數。
1.3 ELMAN訓練界面的參數解讀
2. 建立ELMAN神經網絡的步驟
1.讀取數據
2. 劃分訓練集、測試集
3. 數據歸一化
4. 獲取輸入層節點、輸出層節點個數
5. 確定網絡層與層之間的傳遞函數和訓練算法
6. 構建最佳隱含層節點(承接層節點)的ELMAN神經網絡
7. 訓練網絡
8. 網絡測試
9. 對ELMAN的預測值與實際值進行誤差分析
10. 打印預測結果和誤差表格
3. 編寫MATLAB代碼
3.1 讀取數據
采用深度學習常用的建筑物能源數據集進行預測實驗,數據是EXCEL格式,形式為:
| 1 | - | – | – | – |
| 2 | - | – | – | – |
| … | - | – | – | – |
| n | - | – | – | – |
EXCEL的讀取命令為(對應EXCEL的工作簿名,工作表Sheet名,單元格范圍):
%% 讀取數據 data=xlsread('數據.xlsx','Sheet1','A1:N252'); %%使用xlsread函數讀取EXCEL中對應范圍的數據即可 %輸入輸出數據 input=data(:,1:end-1); %data的第一列-倒數第二列為特征指標 output=data(:,end); %data的最后面一列為輸出的指標值3.2 劃分訓練集測試集
分層抽取即可,通過程序獲取樣本總數N,設置測試樣本數目testNum,訓練樣本數為N-testNum。
3.3 數據歸一化
采用MATLAB自帶的mapminmax函數,可以很方便的設置歸一化的范圍為[-1,1],[0,1]等(注意如果MATLAB安裝了LSSVM的工具包,會與mapminmax函數發生沖突,在添加的路徑中去掉LSSVM路徑即可)
3.4 獲取輸入層輸出層節點的個數
使用size函數,用法為[M,N]=size(A),M對應A的行數,N對應A的列數,size(A,1)返回的M值,size(A,2)返回的N值。指標是列的方向,所以采用N=size(A,2)的寫法。
3.5 確定網絡的傳遞函數與訓練算法
string={'tansig','purelin'}; %傳遞函數 func_str='traingdx'; %訓練算法3.6 使用循環遍歷范圍內的隱含層節點與訓練誤差情況
因為要找最小的誤差,所以初始化訓練誤差時,將MSE設置較大的數字,用于在循環中確定最佳的隱含層節點。
3.7 訓練網絡
%% 構建最佳隱含層節點(承接層節點)的ELMAN神經網絡 net=newelm(inputn,outputn,hiddennum_best,string,func_str);% 網絡參數 net.trainParam.epochs=1000; % 訓練次數 net.trainParam.lr=0.01; % 學習速率 net.trainParam.goal=0.0001; % 訓練目標最小誤差%% 訓練網絡 net=train(net,inputn,outputn);3.8 網絡測試與誤差分析
%% 網絡測試 an=sim(net,inputn_test); %用訓練好的模型進行仿真 test_simu=mapminmax('reverse',an,outputps); % 預測結果反歸一化%% 對ELMAN的預測值與實際值進行誤差分析 error=test_simu-output_test; %預測值和真實值的誤差%% 計算誤差指標 SSE=sum(error.^2); %誤差平方和 MAE=sum(abs(error))/len; %平均絕對誤差 MSE=error*error'/len; %均方誤差 RMSE=MSE^(1/2); %均方誤差根 MAPE=mean(abs(error./output_test)); %平均百分比誤差4. ELMAN程序運行結果
4.1 各層的神經元個數的確定過程
4.2 預測值和真實值的誤差計算(SSE、MAE、MSE、RMSE、MAPE)
4.3 Elman網絡預測的分析圖像
注:小圓圈位置代表終止的訓練次數(即代數)處的均方誤差
對三個圖的解釋:(1)梯度隨訓練的進行而發生減小,(2)在后期(149代)發生過擬合現象,連續6次過擬合,終止網絡訓練,(3)學習速率lr隨訓練的進行發生變化,減小。從前面3的train、test、validation來看,三個部分的訓練性能變化一致,在134代訓練達到最佳的訓練效果(performance最小為0.04517),說明訓練是合格的。過擬合現象在訓練中無法避免,MATLAB進行Elman訓練時,默認發生連續6次過擬合則停止訓練,可設置過擬合連續的最大次數停止準則。
5. 小結
6. MATLAB代碼與數據下載地址
見博客主頁
總結
以上是生活随笔為你收集整理的回归预测 基于ELMAN递归神经网络预测及其matlab代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 基础 —— 模拟实现拨打
- 下一篇: 【预测模型】基于蝙蝠算法优化最小二乘支持