BP神經網絡
- 一.原理
- 二.機器學習中的訓練集,驗證集和測試集
- 三.例題1:辛烷值的預測
-
- 1.題目
- 2.資料的導入
- 3.使用神經網絡進行預測
- 4.結果分析
- 5.儲存結果
- 6.儲存結果并對進行預測
- 四.例題2:神經網絡在多輸出中的運用
一.原理
神經網絡原理簡單介紹
神經網絡的應用
連結:https://pan.baidu.com/s/1hu7x_LC65Ez382725sqU4g (提取碼:dwla)
備用下載下傳連結:https://pan.baidu.com/s/1tHOA9rIMNYgFqHfIqCMwlQ
BP網絡是一種多層前饋神經網絡,它的名字源于在網絡訓練中,調整網絡權值的訓練算法是反向傳播算法(即BP學習算法).
BP網絡是一種具有三層或者三層以上神經元的神經網絡,包括輸入層,隐含層和輸出層,上下層之間實作全連接配接,而同一層的神經元之間無連接配接,輸入層神經元和隐含層神經元之間的是網絡的權值,即兩個神經元之間的連接配接強度.隐含層或輸出層任一神經元将前一層所有神經元傳來的資訊進行整合,通常還會在整合的資訊中添加一個門檻值.當一對學習樣本提供給輸入神經元後,神經元的激活值(該層神經元輸出值)從輸入層經過各隐含層向輸出層傳播,在輸出層的各神經元獲得網絡的輸入響應,然後按照減少網絡輸出與實際輸出樣本之間誤差的方向,從輸出層反向經過各隐含層回到輸入層,進而逐漸修正各隐含權值,這種算法稱為誤差反向傳播算法,即BP算法.
随着這種誤差逆向傳播修正的反複進行,網絡對輸入模式的正确率也不斷上升.BP算法的核心是數學中的負梯度下降理論,即BP算法總是沿着誤差下降最快的方向進行.
BP網絡求解過程
(1) 原始資料的輸入
(2) 資料歸一化
(3) 網絡訓練
(4) 對原始資料進行仿真
(5) 将原始資料仿真的結果與已知樣本進行對比
(6) 對新資料進行仿真
二.機器學習中的訓練集,驗證集和測試集
三.例題1:辛烷值的預測
1.題目
2.資料的導入
Excel操作小技巧:
選擇某個單元格的資料,同時按住鍵盤上的Ctrl和Shift兩個鍵不松手,然後按鍵盤上
方向鍵“→”,就可以選擇這個單元格所在的一行;然後再按鍵盤上的方向鍵“↓”,就
可以再選取這一行所在的一整列。
在工作區建立好上述三個變量後,我們将Excel的資料分别粘貼到變量中,然後在Matlab的工作區内按快捷鍵“Ctrl+S”(或者滑鼠右鍵點選儲存也可以),就可以将資料檔案儲存在本地。下次使用時,隻需要将資料加載到Matlab即可。
加載資料使用load指令,代碼、檔案以及目前Matlab的工作路徑需要在同一個檔案夾
3.使用神經網絡進行預測
訓練集測試集驗證集分區*(預設)
隐層神經元的個數,這個參數可以根據拟合的結果再次進行調整
訓練算法的選取,一般是選擇預設即可,選擇完成後點選按鈕後,Matlab就
會幫我們訓練出一個神經網絡模型。
萊文貝格-馬誇特方法(Levenberg–Marquardt algorithm)能提供數非線性最小化
(局部最小)的數值解。此算法能借由執行時修改參數達到結合高斯‐牛頓算法以
及梯度下降法的優點,并對兩者之不足作改善(比如高斯‐牛頓算法之反矩陣不存
在或是初始值離局部極小值太遠)
貝葉斯正則化方法(Bayesian‐regularization):
https://blog.csdn.net/sinat_38835380/article/details/86927943
量化共轭梯度法(Scaled Conjugate Gradient ):
《模式識别與智能計算——MATLAB技術實作》
4.結果分析
六次就收斂了不太好,可以再次訓練
發現和上一次沒啥差別
于是進行更改模型
epoch:1個epoch等于使用訓練集中的全部樣本訓練一次,每訓練一次,神經網絡
中的參數經過調整。 MSE: Mean Squared Error 均方誤差 MSE = SSE/n
一般來說,經過更多的訓練階段後,誤差會減小,但随着網絡開始過度拟合訓練數
據,驗證資料集的誤差可能會開始增加。在預設設定中,在驗證資料集的MSE連續
增加六次後,訓練停止,最佳模型對應于的最小的MSE。
這樣就ok了
圖上的圈圈:均方誤差最小的時刻
橫坐标:反過來修改多少次wb
均方誤差最小的時候是最優,我麼就可以用這裡的wb進行一個拟合
将拟合值對真實值回歸,拟合優度越高,說明拟合的的效果越好。 真實值和預測值回歸的結果
5.儲存結果
可以儲存神經網絡函數的代碼,以及神經網絡圖。
下一步
儲存好訓練出來的神經網絡模型和結果
6.儲存結果并對進行預測
殘差 + 拟合值 = 真實值
% 這裡要注意,我們要将名額變為列向量,然後再用sim函數預測
sim(net, new_X(1,:)')
% 寫一個循環,預測接下來的十個樣本的辛烷值
predict_y = zeros(10,1); % 初始化predict_y
for i = 1: 10
result = sim(net, new_X(i,:)');
predict_y(i) = result;
end
disp('預測值為:')
disp(predict_y)