BP神經網路模型:Matlab
本文介紹了運用計量統計軟體Matlab(2017aMAC)建立BP神經網路模型的方法。主要運用的方程是feedforwardnet
整理數據
本例中的數據來自於Matalab提供的內置數據,可以通過代碼
1.load bodyfat_dataset
獲得,為方便其他軟體讀取,已經將數據複製粘貼到Excel中
本例中,1至13列為輸入變數,第14列為輸出變數,即輸入層包含13個神經元,輸出層有一個神經元。另外設定一個隱含層,包括20個神經元
每個神經元包含252個數據點,其中最後一個點不參與訓練,留作測試最終的模型,即利用前251個數據點訓練模型,利用最後一個點檢驗模型
在Matlab中輸入數據
1、點擊打開Matlab,確保保存的Excel文件和軟體路徑一致
2、在Editor界面中編輯代碼,其中clc清除Command Window,clear清除Workspace
1.clc
2.clear
Note 1:
選中代碼,點擊滑鼠右鍵,選擇Evaluate Selection執行選中代碼
3、利用xlsread函數讀取數據,其中第一格單引號內是文件名稱,第二格是工作表位置,第三格單引號內是數據範圍
1.clc
2.clear
3.
4.data=xlsread("bodyfat_dataset",1,"A1:N252");
5.
執行代碼後,新的變數出現在Workspace頁面中,其中,矩陣列表示各變數,行表示各數據
進行BP神經網路建模
數據錄入完成後,繼續在Editor界面進行操作
1、首先利用feedforwardnet函數建立模型,20表示隱含層包含20個神經元,輸入層至隱含層的傳遞函數為Hyperbolictangent函數,隱含層至輸出層的傳遞函數為Sigmoid函數
1.clc
2.clear
3.
4.data = xlsread("bodyfat_dataset",1," A1:N252");
5.
6.net = feedforwardnet(20);
9.
2、對原始數據進行拆分,前251個數據用來訓練,最後一個用來測試
1.clc
2.clear
3.
4.data = xlsread("bodyfat_dataset",1," A1:N252");
5.
6.net = feedforwardnet(20);
9.
10.input = data(1:251,1:13);
11.inputend = data(end,1:13);
12.target = data(1:251,14);
13.targetend = data(end,end);
14.
3、利用train對模型進行訓練,遵循反向修改權重的原則
1.clc
2.clear
3.
4.data = xlsread("bodyfat_dataset",1," A1:N252");
5.
6.net = feedforwardnet(20);
9.
10.input = data(1:251,1:13);
11.inputend = data(end,1:13);
12.target = data(1:251,14);
13.targetend = data(end,end);
14.
15.net = train(net,input",target");
16.
在跳出的訓練圖中,可以看出該模型輸入層個神經元,隱含層20個,輸出層1個。模型訓練17次就達到預期要求
4、最後,利用留置的數據進行測試,輸出值與目標值的偏差
1.clc
2.clear
3.
4.data = xlsread("bodyfat_dataset",1," A1:N252");
5.
6.net = feedforwardnet(20);
9.
10.input = data(1:251,1:13);
11.inputend = data(end,1:13);
12.target = data(1:251,14);
13.targetend = data(end,end);
14.
15.net = train(net,input",target");
16.
17.net(inputend")-targetend
18.
Note 2:
重複運行代碼,可以發現每次的結果並不相同,這是因為,初始權重是隨機設定的
Note 3 :
由於初始權重是隨機設定的,所以每次運行的結果可能有所不同,這也體現出神經網路模型的局限性,模型訓練找出的誤差最小權重可能只是局部上使誤差最小的權重,這樣的權重可能有很多個,所以結果有很多種。解決這種問題的一個方法是,留一部分數據不參加訓練,而是用來測試模型的輸出結果,當輸出與目標值較為接近時,再利用模型進行預測
TAG:全球大搜羅 |