生活随笔
收集整理的這篇文章主要介紹了
如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
如何利用matlab做BP神經(jīng)網(wǎng)絡(luò)分析(包括利用matlab神經(jīng)網(wǎng)絡(luò)工具箱)
轉(zhuǎn)載:https://blog.csdn.net/xgxyxs/article/details/53265318
最近一段時間在研究如何利用預(yù)測其銷量個數(shù),在網(wǎng)上搜索了一下,發(fā)現(xiàn)了很多模型來預(yù)測,比如利用回歸模型、時間序列模型,GM(1,1)模型,可是自己在結(jié)合實際的工作內(nèi)容,發(fā)現(xiàn)這幾種模型預(yù)測的精度不是很高,于是再在網(wǎng)上進行搜索,發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)模型可以來預(yù)測,并且有很多是結(jié)合時間序列或者SVM(支持向量機)等組合模型來進行預(yù)測,本文結(jié)合實際數(shù)據(jù),選取了常用的BP神經(jīng)網(wǎng)絡(luò)算法,其算法原理,因網(wǎng)上一大堆,所以在此不必一一展示,并參考了bp神經(jīng)網(wǎng)絡(luò)進行交通預(yù)測的Matlab源代碼這篇博文,運用matlab 2016a,給出了下面的代碼,并最終進行了預(yù)測
clc clear all close all %bp 神經(jīng)網(wǎng)絡(luò)的預(yù)測代碼 %載入輸出和輸入數(shù)據(jù) load C:\Users\amzon\Desktop\p.txt; load C:\Users\amzon\Desktop\t.txt; %保存數(shù)據(jù)到matlab的工作路徑里面 save p.mat; save t.mat;%注意t必須為行向量 %賦值給輸出p和輸入t p=p; t=t; %數(shù)據(jù)的歸一化處理,利用mapminmax函數(shù),使數(shù)值歸一化到[-1.1]之間 %該函數(shù)使用方法如下:[y,ps] =mapminmax(x,ymin,ymax),x需歸化的數(shù)據(jù)輸入, %ymin,ymax為需歸化到的范圍,不填默認(rèn)為歸化到[-1,1] %返回歸化后的值y,以及參數(shù)ps,ps在結(jié)果反歸一化中,需要調(diào)用 [p1,ps]=mapminmax(p); [t1,ts]=mapminmax(t); %確定訓(xùn)練數(shù)據(jù),測試數(shù)據(jù),一般是隨機的從樣本中選取70%的數(shù)據(jù)作為訓(xùn)練數(shù)據(jù) %15%的數(shù)據(jù)作為測試數(shù)據(jù),一般是使用函數(shù)dividerand,其一般的使用方法如下: %[trainInd,valInd,testInd] = dividerand(Q,trainRatio,valRatio,testRatio) [trainsample.p,valsample.p,testsample.p] =dividerand(p,0.7,0.15,0.15); [trainsample.t,valsample.t,testsample.t] =dividerand(t,0.7,0.15,0.15); %建立反向傳播算法的BP神經(jīng)網(wǎng)絡(luò),使用newff函數(shù),其一般的使用方法如下 %net = newff(minmax(p),[隱層的神經(jīng)元的個數(shù),輸出層的神經(jīng)元的個數(shù)],{隱層神經(jīng)元的傳輸函數(shù),輸出層的傳輸函數(shù)},'反向傳播的訓(xùn)練函數(shù)'),其中p為輸入數(shù)據(jù),t為輸出數(shù)據(jù) %tf為神經(jīng)網(wǎng)絡(luò)的傳輸函數(shù),默認(rèn)為'tansig'函數(shù)為隱層的傳輸函數(shù), %purelin函數(shù)為輸出層的傳輸函數(shù) %一般在這里還有其他的傳輸?shù)暮瘮?shù)一般的如下,如果預(yù)測出來的效果不是很好,可以調(diào)節(jié) %TF1 = 'tansig';TF2 = 'logsig'; %TF1 = 'logsig';TF2 = 'purelin'; %TF1 = 'logsig';TF2 = 'logsig'; %TF1 = 'purelin';TF2 = 'purelin'; TF1='tansig';TF2='purelin'; net=newff(minmax(p),[10,1],{TF1 TF2},'traingdm');%網(wǎng)絡(luò)創(chuàng)建 %網(wǎng)絡(luò)參數(shù)的設(shè)置 net.trainParam.epochs=10000;%訓(xùn)練次數(shù)設(shè)置 net.trainParam.goal=1e-7;%訓(xùn)練目標(biāo)設(shè)置 net.trainParam.lr=0.01;%學(xué)習(xí)率設(shè)置,應(yīng)設(shè)置為較少值,太大雖然會在開始加快收斂速度,但臨近最佳點時,會產(chǎn)生動蕩,而致使無法收斂 net.trainParam.mc=0.9;%動量因子的設(shè)置,默認(rèn)為0.9 net.trainParam.show=25;%顯示的間隔次數(shù) % 指定訓(xùn)練參數(shù) % net.trainFcn = 'traingd'; % 梯度下降算法 % net.trainFcn = 'traingdm'; % 動量梯度下降算法 % net.trainFcn = 'traingda'; % 變學(xué)習(xí)率梯度下降算法 % net.trainFcn = 'traingdx'; % 變學(xué)習(xí)率動量梯度下降算法 % (大型網(wǎng)絡(luò)的首選算法) % net.trainFcn = 'trainrp'; % RPROP(彈性BP)算法,內(nèi)存需求最小 % 共軛梯度算法 % net.trainFcn = 'traincgf'; %Fletcher-Reeves修正算法 % net.trainFcn = 'traincgp'; %Polak-Ribiere修正算法,內(nèi)存需求比Fletcher-Reeves修正算法略大 % net.trainFcn = 'traincgb'; % Powell-Beal復(fù)位算法,內(nèi)存需求比Polak-Ribiere修正算法略大 % (大型網(wǎng)絡(luò)的首選算法) %net.trainFcn = 'trainscg'; % ScaledConjugate Gradient算法,內(nèi)存需求與Fletcher-Reeves修正算法相同,計算量比上面三種算法都小很多 % net.trainFcn = 'trainbfg'; %Quasi-Newton Algorithms - BFGS Algorithm,計算量和內(nèi)存需求均比共軛梯度算法大,但收斂比較快 % net.trainFcn = 'trainoss'; % OneStep Secant Algorithm,計算量和內(nèi)存需求均比BFGS算法小,比共軛梯度算法略大 % (中型網(wǎng)絡(luò)的首選算法) %net.trainFcn = 'trainlm'; %Levenberg-Marquardt算法,內(nèi)存需求最大,收斂速度最快 % net.trainFcn = 'trainbr'; % 貝葉斯正則化算法 % 有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm' %在這里一般是選取'trainlm'函數(shù)來訓(xùn)練,其算對對應(yīng)的是Levenberg-Marquardt算法 net.trainFcn='trainlm'; [net,tr]=train(net,trainsample.p,trainsample.t); %計算仿真,其一般用sim函數(shù) [normtrainoutput,trainPerf]=sim(net,trainsample.p,[],[],trainsample.t);%訓(xùn)練的數(shù)據(jù),根據(jù)BP得到的結(jié)果 [normvalidateoutput,validatePerf]=sim(net,valsample.p,[],[],valsample.t);%驗證的數(shù)據(jù),經(jīng)BP得到的結(jié)果 [normtestoutput,testPerf]=sim(net,testsample.p,[],[],testsample.t);%測試數(shù)據(jù),經(jīng)BP得到的結(jié)果 %將所得的結(jié)果進行反歸一化,得到其擬合的數(shù)據(jù) trainoutput=mapminmax('reverse',normtrainoutput,ts); validateoutput=mapminmax('reverse',normvalidateoutput,ts); testoutput=mapminmax('reverse',normtestoutput,ts); %正常輸入的數(shù)據(jù)的反歸一化的處理,得到其正式值 trainvalue=mapminmax('reverse',trainsample.t,ts);%正常的驗證數(shù)據(jù) validatevalue=mapminmax('reverse',valsample.t,ts);%正常的驗證的數(shù)據(jù) testvalue=mapminmax('reverse',testsample.t,ts);%正常的測試數(shù)據(jù) %做預(yù)測,輸入要預(yù)測的數(shù)據(jù)pnew pnew=[313,256,239]';pnewn=mapminmax(pnew);anewn=sim(net,pnewn);anew=mapminmax('reverse',anewn,ts);%絕對誤差的計算errors=trainvalue-trainoutput;%plotregression擬合圖figure,plotregression(trainvalue,trainoutput)%誤差圖figure,plot(1:length(errors),errors,'-b')title('誤差變化圖')%誤差值的正態(tài)性的檢驗figure,hist(errors);%頻數(shù)直方圖figure,normplot(errors);%Q-Q圖[muhat,sigmahat,muci,sigmaci]=normfit(errors);%參數(shù)估計 均值,方差,均值的0.95置信區(qū)間,方差的0.95置信區(qū)間[h1,sig,ci]= ttest(errors,muhat);%假設(shè)檢驗figure, ploterrcorr(errors);%繪制誤差的自相關(guān)圖figure, parcorr(errors);%繪制偏相關(guān)圖
運行之后的,結(jié)果如下:
BP神經(jīng)網(wǎng)絡(luò)的結(jié)果分析圖
訓(xùn)練數(shù)據(jù)的梯度和均方誤差之間的關(guān)系圖
驗證數(shù)據(jù)的梯度與學(xué)習(xí)次數(shù)
殘差的正態(tài)的檢驗圖(Q-Q圖)
?
?
在網(wǎng)上,發(fā)現(xiàn)可以通過神經(jīng)網(wǎng)絡(luò)工具箱這個GUI界面來創(chuàng)建神經(jīng)網(wǎng)絡(luò),其一般的操作步驟如下:
1:在輸入命令里面輸入nntool命令,或者在應(yīng)用程序這個選項下找到Netrual Net Fitting 這個應(yīng)用程序,點擊打開,就能看見如下界面
?
?
?
2:輸入數(shù)據(jù)和輸出數(shù)據(jù)的導(dǎo)入(在本文中選取了matlab自帶的案例數(shù)據(jù))
3:隨機選擇三種類型的數(shù)據(jù)所占的樣本量的比例,一般選取默認(rèn)即可
4:隱層神經(jīng)元的確定
?????????????????????????????????????????????????????????????????????????????
5:訓(xùn)練算法的選取,一般是選擇默認(rèn)即可,選擇完成后點擊<train>按鈕即可運行程序
6:根據(jù)得到的結(jié)果,一般是MSE的值越小,R值越接近1,其訓(xùn)練的效果比較,并第二張圖給出了神經(jīng)網(wǎng)絡(luò)的各參數(shù)的設(shè)置以及其最終的結(jié)果,其擬合圖R越接近1,模型擬合的更好
最終的結(jié)果圖
7:如果所得到的模型不能滿足你的需求,則需重復(fù)上述的步驟直至能夠得到你想要的精確度
8:將最終的得到的各種數(shù)據(jù)以及其擬合值進行保存,然后查看,就可以得到所要的擬合值
MATLAB 與神經(jīng)網(wǎng)絡(luò)相關(guān)的函數(shù)總結(jié)如下:
圖形用戶界面功能nnstart - 神經(jīng)網(wǎng)絡(luò)啟動GUI?nctool - 神經(jīng)網(wǎng)絡(luò)分類工具?nftool - 神經(jīng)網(wǎng)絡(luò)的擬合工具?nntraintool - 神經(jīng)網(wǎng)絡(luò)的訓(xùn)練工具?nprtool - 神經(jīng)網(wǎng)絡(luò)模式識別工具?ntstool - NFTool神經(jīng)網(wǎng)絡(luò)時間序列的工具?nntool - 神經(jīng)網(wǎng)絡(luò)工具箱的圖形用戶界面。?查看 - 查看一個神經(jīng)網(wǎng)絡(luò)。?網(wǎng)絡(luò)的建立功能cascadeforwardnet - 串級,前饋神經(jīng)網(wǎng)絡(luò)。?competlayer - 競爭神經(jīng)層。?distdelaynet - 分布時滯的神經(jīng)網(wǎng)絡(luò)。?elmannet - Elman神經(jīng)網(wǎng)絡(luò)。?feedforwardnet - 前饋神經(jīng)網(wǎng)絡(luò)。?fitnet - 函數(shù)擬合神經(jīng)網(wǎng)絡(luò)。?layrecnet - 分層遞歸神經(jīng)網(wǎng)絡(luò)。?linearlayer - 線性神經(jīng)層。?lvqnet - 學(xué)習(xí)矢量量化(LVQ)神經(jīng)網(wǎng)絡(luò)。?narnet - 非線性自結(jié)合的時間序列網(wǎng)絡(luò)。?narxnet - 非線性自結(jié)合的時間序列與外部輸入網(wǎng)絡(luò)。?newgrnn - 設(shè)計一個廣義回歸神經(jīng)網(wǎng)絡(luò)。?newhop - 建立經(jīng)常性的Hopfield網(wǎng)絡(luò)。?newlind - 設(shè)計一個線性層。?newpnn - 設(shè)計概率神經(jīng)網(wǎng)絡(luò)。?newrb - 徑向基網(wǎng)絡(luò)設(shè)計。?newrbe - 設(shè)計一個確切的徑向基網(wǎng)絡(luò)。?patternnet - 神經(jīng)網(wǎng)絡(luò)模式識別。?感知 - 感知。?selforgmap - 自組織特征映射。?timedelaynet - 時滯神經(jīng)網(wǎng)絡(luò)。?利用網(wǎng)絡(luò)網(wǎng)絡(luò) - 創(chuàng)建一個自定義神經(jīng)網(wǎng)絡(luò)。?SIM卡 - 模擬一個神經(jīng)網(wǎng)絡(luò)。?初始化 - 初始化一個神經(jīng)網(wǎng)絡(luò)。?適應(yīng) - 允許一個神經(jīng)網(wǎng)絡(luò)來適應(yīng)。?火車 - 火車的神經(jīng)網(wǎng)絡(luò)。?DISP鍵 - 顯示一個神經(jīng)網(wǎng)絡(luò)的屬性。?顯示 - 顯示的名稱和神經(jīng)網(wǎng)絡(luò)屬性?adddelay - 添加延遲神經(jīng)網(wǎng)絡(luò)的反應(yīng)。?closeloop - 神經(jīng)網(wǎng)絡(luò)的開放反饋轉(zhuǎn)換到關(guān)閉反饋回路。?formwb - 表格偏見和成單個向量的權(quán)重。?getwb - 將它作為一個單一向量中的所有網(wǎng)絡(luò)權(quán)值和偏差。?noloop - 刪除神經(jīng)網(wǎng)絡(luò)的開放和關(guān)閉反饋回路。?開環(huán) - 轉(zhuǎn)換神經(jīng)網(wǎng)絡(luò)反饋,打開封閉的反饋循環(huán)。?removedelay - 刪除延遲神經(jīng)網(wǎng)絡(luò)的反應(yīng)。?separatewb - 獨立的偏見和重量/偏置向量的權(quán)重。?setwb - 將所有與單個矢量網(wǎng)絡(luò)權(quán)值和偏差。?Simulink的支持gensim - 生成Simulink模塊來模擬神經(jīng)網(wǎng)絡(luò)。?setsiminit - 集神經(jīng)網(wǎng)絡(luò)的Simulink模塊的初始條件?getsiminit - 獲取神經(jīng)網(wǎng)絡(luò)Simulink模塊的初始條件?神經(jīng)元 - 神經(jīng)網(wǎng)絡(luò)Simulink的模塊庫。?trainb - 批具有重量與偏見學(xué)習(xí)規(guī)則的培訓(xùn)。?trainbfg - 的BFGS擬牛頓倒傳遞。?trainbr - 貝葉斯規(guī)則的BP算法。?trainbu - 與重量與偏見一批無監(jiān)督學(xué)習(xí)規(guī)則的培訓(xùn)。?trainbuwb - 與體重?zé)o監(jiān)督學(xué)習(xí)規(guī)則與偏見一批培訓(xùn)。?trainc - 循環(huán)順序重量/偏見的培訓(xùn)。?traincgb - 共軛鮑威爾比爾重新啟動梯度反向傳播。?traincgf - 共軛弗萊徹-里夫斯更新梯度反向傳播。?traincgp - 共軛波拉克- Ribiere更新梯度反向傳播。?traingd - 梯度下降反向傳播。?traingda - 具有自適應(yīng)LR的反向傳播梯度下降。?traingdm - 與動量梯度下降。?traingdx - 梯度下降瓦特/慣性與自適應(yīng)LR的反向傳播。?trainlm - 采用Levenberg -馬奎德倒傳遞。?trainoss - 一步割線倒傳遞。?trainr - 隨機重量/偏見的培訓(xùn)。?trainrp - RPROP反向傳播。?trainru - 無監(jiān)督隨機重量/偏見的培訓(xùn)。?火車 - 順序重量/偏見的培訓(xùn)。?trainscg - 規(guī)模化共軛梯度BP算法。?繪圖功能plotconfusion - 圖分類混淆矩陣。?ploterrcorr - 誤差自相關(guān)時間序列圖。?ploterrhist - 繪制誤差直方圖。?plotfit - 繪圖功能適合。?plotinerrcorr - 圖輸入錯誤的時間序列的互相關(guān)。?plotperform - 小區(qū)網(wǎng)絡(luò)性能。?plotregression - 線性回歸情節(jié)。?plotresponse - 動態(tài)網(wǎng)絡(luò)圖的時間序列響應(yīng)。?plotroc - 繪制受試者工作特征。?plotsomhits - 小區(qū)自組織圖來樣打。?plotsomnc - 小區(qū)自組織映射鄰居的連接。?plotsomnd - 小區(qū)自組織映射鄰居的距離。?plotsomplanes - 小區(qū)自組織映射重量的飛機。?plotsompos - 小區(qū)自組織映射重量立場。?plotsomtop - 小區(qū)自組織映射的拓?fù)浣Y(jié)構(gòu)。?plottrainstate - 情節(jié)訓(xùn)練狀態(tài)值。?plotwb - 圖寒春重量和偏差值圖。?列出其他神經(jīng)網(wǎng)絡(luò)實現(xiàn)的功能nnadapt - 適應(yīng)職能。?nnderivati??ve - 衍生功能。?nndistance - 距離函數(shù)。?nndivision - 除功能。?nninitlayer - 初始化層功能。?nninitnetwork - 初始化網(wǎng)絡(luò)功能。?nninitweight - 初始化權(quán)函數(shù)。?nnlearn - 學(xué)習(xí)功能。?nnnetinput - 凈輸入功能。?nnperformance - 性能的功能。?nnprocess - 處理功能。?nnsearch - 線搜索功能。?nntopology - 拓?fù)浣Y(jié)構(gòu)的功能。?nntransfer - 傳遞函數(shù)。?nnweight - 重量的功能。?nndemos - 神經(jīng)網(wǎng)絡(luò)工具箱的示威。?nndatasets - 神經(jīng)網(wǎng)絡(luò)工具箱的數(shù)據(jù)集。?nntextdemos - 神經(jīng)網(wǎng)絡(luò)設(shè)計教科書的示威。?nntextbook - 神經(jīng)網(wǎng)絡(luò)設(shè)計教科書的資訊。?
?
?
Save
?
總結(jié)
以上是生活随笔為你收集整理的如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。