MATLAB神經網路(六):GRNN
廣義回歸神經網路(GRNN, generalized regression neural network)是美國學者Specht在1991年提出的,是徑向基神經網路的一種,GRNN具有很強的非線性映射能力和柔性網路結構以及高度的容錯性和魯棒性,適用於解決非線性問題。GRNN在逼近能力和學習速度上較RBF網路有更強的優勢,網路最後收斂於樣本量積聚較多的優化回歸面,並且在樣本數據較少時,預測效果也較好。此外,網路還可以處理不穩定的數據。因此,GRNN在信號過程、結構分析、教育、能源、食品、藥物、金融、生物等各個領域得到了廣泛的應用。
GRNN由四層組成,分別為輸入層、模式層、求和層和輸出層。理論基礎是非線性回歸分析,Y相對於X的回歸分析實際上是計算具有最大概率值的y。
運輸系統作為社會經濟系統中的一個子系統,在受外界因素影響和作用的同時,對外部經濟也具有一定的反作用,使得運輸需求同時受到來自運輸系統內外兩方面的影響。運輸需求預測在國家和區域經濟發展規劃中具有十分重要的作用,其中,由於貨物運輸和地方經濟及企業發展的緊密聯繫,貨運需求預測成為貨運需求和經濟發展關係研究中的一個重要問題。因此,作為反映貨物運輸需求的一項重要指標,貨運量預測研究和分析具有較強的實際和理論意義。
常見的貨運量預測方法主要是時間序列方法和灰色預測方法。大都集中在對其因果關係回歸模型和時間序列模型的分析上,所建立的模型不能全面、科學和本質地反映所預測動態數據的內在結構和複雜特性,丟失了信息量。人工神經網路作為一種並行的計算模型,具有傳統建模方法所不具備的很多優點,有很好的非線性映射能力,對被建模對象的先驗知識要求不多,一般不必事先知道有關被建模對象的結構、參數、動態特性等方面的知識,只需給出對象的輸入、輸出數據,通過網路本身的學習功能就可以達到輸入與輸出的完全符合。
根據貨運量影響因素的分析,分別取GDP、IP、鐵路運輸線路長度、複線里程比重、公路運輸線路長度、等級公路比重、鐵路貨車數量和民用載貨汽車數量8項指標作為輸入,以貨運總量、鐵路貨運量和公路貨運量3項指標作為網路輸出,構建GRNN,由於訓練數據較少,採取交叉驗證方法訓練GRNN神經網路,並用循環找出最佳的SPREAD。
load data;np_train=p(1:12,:);nt_train=t(1:12,:);np_test=p(13,:);nt_test=t(13,:);n% %交叉驗證ndesired_spread=[];nmse_max=10e20;ndesired_input=[];ndesired_output=[];nresult_perfp=[];nindices=crossvalid(Kfold,length(p_train),4);nh=waitbar(0,正在尋找最優化參數......)nk=1;nfor i=1:4n perfp=[];n disp([以下為第,num2str(i),次交叉驗證結果])n test=(indices==i);train=~test;n p_cv_train=p_train(train,:);n t_cv_train=t_train(train,:);n p_cv_test=p_train(test,:);n t_cv_test=t_train(test,:);n p_cv_train=p_cv_train;n t_cv_train=t_cv_train;n p_cv_test=p_cv_test;n t_cv_test=t_cv_test;n n[p_cv_train,minp,maxp,t_cv_train,mint,maxt]=premnmx(p_cv_train,t_cv_train);np_cv_test=tramnmx(p_cv_test,minp,maxp);nfor spread=0.1:0.1:2;n net=newgrnn(p_cv_train,t_cv_train,spread);n waitbar(k/80,h);n disp([當前spread值為,num2str(spread)]);n test_Out=sim(net,p_cv_test);n test_Out=postmnmx(test_Out,mint,maxt);n error=t_cv_test-test_Out;n disp([當前網路的mse為,num2str(mse(error))])n perfp=[perfp mse(error)];n if mse(error)<mse_maxn mse_max=mse(error);n desired_spread=spread;n desired_input=p_cv_train;n desired_output=t_cv_train;n endn k=k+1;n endn result_perf(i,:)=perfp;nend;nclose(h)ndisp([最佳spread值為,num2str(desired_spread)])ndisp([此時最佳輸入值為,num2str(desired_input)])ndisp([此時最佳輸出值為,num2str(desired_output)])n%%採用最佳方法建立GRNN網路nnet=newgrnn(desired_input,desired_output,desired_spread);np_test=p_test;np_test=tramnmx(p_test,minp,maxp);ngrnn_prediction_result=sim(net,p_test);ngrnn_predictioin_result=postmnmx(grnn_prediction_result,mint,maxt);ngrnn_error=t_test-grnn_prediction_result;ndisp(GRNN神經網路三項流量預測的誤差為)nabs(grnn_error)nsave best desired_input desired_output p_test t_test grnn_error mint maxtnn n
SPREAD值越小,網路對樣本的逼近性就越強;SPREAD值越大,網路對樣本數據的逼近過程越平滑,但誤差也相應增大。因此選用最佳的SPREAD值非常重要。
GRNN神經網路和BP網路都可以用於貨運量等的預測,但對具體的網路訓練來說,GRNN需要調整的參數較少,只有一個SPREAD參數,因此可以更快的預測網路,具有較大的計算優勢。
下面將針對本案例數據,使用BP神經網路模型預測得出的流量數據。
load bestnn=13np=desired_inputnt=desired_outputnnet_bp=newff(minmax(p),[n,3],(tansig,purelin,trainlm));n%訓練網路nnet.trainParam.show=50;nnet.trainParam.epochs=2000;nnet.trainParam.goal=1e-3;n%調用trainlm演算法訓練BP網路nnet_bp=train(net_bp,p,t);nbp_prediction_result=sim(net_bp,p_test);nbp_prediction_result=postmnmx(bp_prediction_result,mint,maxt);nbp_error=t_test-bp_prediction_result;ndisp([BP神經網路三項流量預測的誤差為,num2str(abs(bp_error))])n
推薦閱讀:
※對函數的輸入進行檢查和解析
※MATLAB高級數據結構連載5: table 3
※Matlab2012a(32/64位)
※MATLAB神經網路(四):基於Adaboost的強分類器設計
※MATLAB和物聯網連載6: Thingspeak Tutorial 5