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