机器学习(一):BP神经网络(含代码及注释)
生活随笔
收集整理的這篇文章主要介紹了
机器学习(一):BP神经网络(含代码及注释)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 人工神經(jīng)網(wǎng)絡
- 神經(jīng)網(wǎng)絡分類
- BP神經(jīng)網(wǎng)絡
- 代碼實現(xiàn)
人工神經(jīng)網(wǎng)絡
??????人們利用數(shù)學模型來模仿生物神經(jīng)元傳遞信息以及做出決策等等。
??????下圖神經(jīng)網(wǎng)絡數(shù)學模型可以等效為輸入矩陣X與系數(shù)矩陣W相乘并加上偏置項求和,并利用激活函數(shù) f() 進行映射,從而得到輸出。其中,系數(shù)矩陣W和偏置項是需要我們利用訓練集數(shù)據(jù)進行調(diào)整優(yōu)化,使得整個網(wǎng)絡能完成特定任務。
神經(jīng)網(wǎng)絡分類
BP神經(jīng)網(wǎng)絡
BP神經(jīng)網(wǎng)絡時人工神經(jīng)網(wǎng)絡的一種,屬于有監(jiān)督學習,主要流程:
正向傳播:
反向傳播,計算誤差
調(diào)整權(quán)值W ------> W’
代碼實現(xiàn)
利用MATLAB代碼(含詳細注釋)實現(xiàn)BP神經(jīng)網(wǎng)絡,其中最為核心的就是newff()函數(shù),大家可以看看源碼(在命令執(zhí)行窗口中輸入edit newff),其實就是上述流程的數(shù)學推導計算:
% I. 清空環(huán)境變量 clear all clc% II. 訓練集/測試集產(chǎn)生 % 1. 導入數(shù)據(jù)集,可以替換為自己的數(shù)據(jù)集 load spectra_data.mat% 2. 隨機產(chǎn)生訓練集和測試集 temp = randperm(size(NIR,1)); % 訓練集——50個樣本,P為輸入數(shù)據(jù),T為對應輸入數(shù)據(jù)的輸出結(jié)果 P_train = NIR(temp(1:50),:)'; T_train = octane(temp(1:50),:)'; % 測試集——10個樣本 P_test = NIR(temp(51:end),:)'; T_test = octane(temp(51:end),:)'; N = size(P_test,2);% III. 數(shù)據(jù)歸一化 [p_train, ps_input] = mapminmax(P_train,0,1); p_test = mapminmax('apply',P_test,ps_input);[t_train, ps_output] = mapminmax(T_train,0,1);% IV. BP神經(jīng)網(wǎng)絡創(chuàng)建、訓練及仿真測試 % 1. 創(chuàng)建網(wǎng)絡,[9,9]意思為網(wǎng)絡含有兩個隱藏層,每層有9個單元 net = newff(p_train,t_train,[9,9]);% 2. 設置訓練參數(shù) net.trainParam.epochs = 1000;%訓練批次 net.trainParam.goal = 1e-12;%訓練目標,誤差小于1e-12即結(jié)束訓練 net.trainParam.lr = 0.01;%設置學習率 %另外也可以設置其他訓練參數(shù),可看newff()函數(shù)介紹手冊% 3. 訓練網(wǎng)絡 net = train(net,p_train,t_train);% 4. 仿真測試 t_sim = sim(net,p_test);% 5. 數(shù)據(jù)反歸一化 T_sim = mapminmax('reverse',t_sim,ps_output);% V. 性能評價 % 1. 相對誤差error error = abs(T_sim - T_test)./T_test;% 2. 決定系數(shù)R^2 R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2)); % 3. 結(jié)果對比 result = [T_test' T_sim' error']% VI. 繪圖 figure plot(1:N,T_test,'b:*',1:N,T_sim,'r-o') legend('真實值','預測值') xlabel('預測樣本') ylabel('xxxx') string = {'xxxxxx預測結(jié)果對比';['R^2=' num2str(R2)]}; title(string)這是matlab中建立的網(wǎng)絡模型簡圖
結(jié)果圖:
總結(jié)
以上是生活随笔為你收集整理的机器学习(一):BP神经网络(含代码及注释)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php判断数组中的键是否是某个字符串,p
- 下一篇: sqlserver两个日期之间的年数_S