天天看點

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

大家好,又見面了,我是你們的朋友全棧君。

最近一段時間在研究如何利用預測其銷量個數,在網上搜尋了一下,發現了很多模型來預測,比如利用回歸模型、時間序列模型,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);%繪制偏相關圖           

複制

運作之後的,結果如下:

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

BP神經網絡的結果分析圖

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

訓練資料的梯度和均方誤差之間的關系圖

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

驗證資料的梯度與學習次數

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

殘差的正态的檢驗圖(Q-Q圖)

在網上,發現可以通過神經網絡工具箱這個GUI界面來建立神經網絡,其一般的操作步驟如下:

1:在輸入指令裡面輸入nntool指令,或者在應用程式這個選項下找到Netrual Net Fitting 這個應用程式,點選打開,就能看見如下界面

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]
如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

2:輸入資料和輸出資料的導入(在本文中選取了matlab自帶的案例資料)

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

3:随機選擇三種類型的資料所占的樣本量的比例,一般選取預設即可

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

4:隐層神經元的确定

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

5:訓練算法的選取,一般是選擇預設即可,選擇完成後點選<train>按鈕即可運作程式

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

6:根據得到的結果,一般是MSE的值越小,R值越接近1,其訓練的效果比較,并第二張圖給出了神經網絡的各參數的設定以及其最終的結果,其拟合圖R越接近1,模型拟合的更好

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]
如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]
如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]
如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

最終的結果圖

7:如果所得到的模型不能滿足你的需求,則需重複上述的步驟直至能夠得到你想要的精确度

8:将最終的得到的各種資料以及其拟合值進行儲存,然後檢視,就可以得到所要的拟合值

如何利用matlab做BP神經網絡分析(利用matlab神經網絡工具箱)[通俗易懂]

最後參考了網上和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 – 神經網絡設計教科書的資訊。

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/151486.html原文連結:https://javaforall.cn