您好,登錄后才能下訂單哦!
這篇文章主要介紹了基于Matlab如何實現人工神經網絡回歸的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇基于Matlab如何實現人工神經網絡回歸文章都會有所收獲,下面我們一起來看看吧。
首先需要注明的是,在MATLAB中,我們可以直接基于“APP”中的“Neural Net Fitting”工具箱實現在無需代碼的情況下,對神經網絡算法加以運行。
基于工具箱的神經網絡方法雖然方便,但是一些參數不能調整;同時也不利于我們對算法、代碼的理解。因此,本文不利用“Neural Net Fitting”工具箱,而是直接通過代碼將神經網絡方法加以運行——但是,本文的代碼其實也是通過上述工具箱運行后生成的;而這種生成神經網絡代碼的方法也是MATLAB官方推薦的方式。
另外,需要注意的是,本文直接進行神經網絡算法的執行,省略了前期數據處理、訓練集與測試集劃分、精度衡量指標選取等。因此建議大家先將文章MATLAB實現隨機森林(RF)回歸與自變量影響程度分析閱讀后,再閱讀本文。
本文分為兩部分,首先是將代碼分段、詳細講解,方便大家理解;隨后是完整代碼,方便大家自行嘗試。
由于機器學習往往需要多次執行,我們就在此先定義循環。
%% ANN Cycle Preparation ANNRMSE=9999; ANNRunNum=0; ANNRMSEMatrix=[]; ANNrAllMatrix=[]; while ANNRMSE>400
其中,ANNRMSE
是初始的RMSE;ANNRunNum
是神經網絡算法當前運行的次數;ANNRMSEMatrix
用來存儲每一次神經網絡運行后所得到的RMSE結果;ANNrAllMatrix
用來存儲每一次神經網絡運行后所得到的皮爾遜相關系數結果;最后一句表示當所得到的模型RMSE>400
時,則停止循環。
接下來,我們對神經網絡的整體結構加以定義。
%% ANN x=TrainVARI'; t=TrainYield'; trainFcn = 'trainlm'; hiddenLayerSize = [10 10 10]; ANNnet = fitnet(hiddenLayerSize,trainFcn);
其中,TrainVARI
、TrainYield
分別是我這里訓練數據的自變量(特征)與因變量(標簽);trainFcn
為神經網絡所選用的訓練函數方法名稱,其名稱與對應的方法對照如下表:
hiddenLayerSize
為神經網絡所用隱層與各層神經元個數,[10 10 10]
代表共有三層隱層,各層神經元個數分別為10
,10
與10
。
接下來,對輸入神經網絡模型的數據加以處理。
ANNnet.input.processFcns = {'removeconstantrows','mapminmax'}; ANNnet.output.processFcns = {'removeconstantrows','mapminmax'}; ANNnet.divideFcn = 'dividerand'; ANNnet.divideMode = 'sample'; ANNnet.divideParam.trainRatio = 0.6; ANNnet.divideParam.valRatio = 0.4; ANNnet.divideParam.testRatio = 0.0;
其中,ANNnet.input.processFcns
與ANNnet.output.processFcns
分別代表輸入模型數據的處理方法,'removeconstantrows'
表示刪除在各樣本中數值始終一致的特征列,'mapminmax'
表示將數據歸一化處理;divideFcn
表示劃分數據訓練集、驗證集與測試集的方法,'dividerand'
表示依據所給定的比例隨機劃分;divideMode
表示對數據劃分的維度,我們這里選擇'sample'
,也就是對樣本進行劃分;divideParam
表示訓練集、驗證集與測試集所占比例,那么在這里,因為是直接用了先前隨機森林方法(可以看這篇博客)中的數據劃分方式,那么為了保證訓練集、測試集的固定,我們就將divideParam.testRatio
設置為0.0
,然后將訓練集與驗證集比例劃分為0.6
與0.4
。
接下來對模型運行過程中的主要參數加以配置。
ANNnet.performFcn = 'mse'; ANNnet.trainParam.epochs=5000; ANNnet.trainParam.goal=0.01;
其中,performFcn
為模型誤差衡量函數,'mse'
表示均方誤差;trainParam.epochs
表示訓練時Epoch次數,trainParam.goal
表示模型所要達到的精度要求(即模型運行到trainParam.epochs
次時或誤差小于trainParam.goal
時將會停止運行)。
這一部分代碼大多數與繪圖、代碼與GUI生成等相關,因此就不再一一解釋了,大家可以直接運行。需要注意的是,train
是模型訓練函數。
% For a list of all plot functions type: help nnplot ANNnet.plotFcns = {'plotperform','plottrainstate','ploterrhist','plotregression','plotfit'}; [ANNnet,tr] = train(ANNnet,x,t); y = ANNnet(x); e = gsubtract(t,y); performance = perform(ANNnet,t,y); % Recalculate Training, Validation and Test Performance trainTargets = t .* tr.trainMask{1}; valTargets = t .* tr.valMask{1}; testTargets = t .* tr.testMask{1}; trainPerformance = perform(ANNnet,trainTargets,y); valPerformance = perform(ANNnet,valTargets,y); testPerformance = perform(ANNnet,testTargets,y); % view(net) % Plots %figure, plotperform(tr) %figure, plottrainstate(tr) %figure, ploterrhist(e) %figure, plotregression(t,y) %figure, plotfit(net,x,t) % Deployment % See the help for each generation function for more information. if (false) % Generate MATLAB function for neural network for application % deployment in MATLAB scripts or with MATLAB Compiler and Builder % tools, or simply to examine the calculations your trained neural % network performs. genFunction(ANNnet,'myNeuralNetworkFunction'); y = myNeuralNetworkFunction(x); end if (false) % Generate a matrix-only MATLAB function for neural network code % generation with MATLAB Coder tools. genFunction(ANNnet,'myNeuralNetworkFunction','MatrixOnly','yes'); y = myNeuralNetworkFunction(x); end if (false) % Generate a Simulink diagram for simulation or deployment with. % Simulink Coder tools. gensim(ANNnet); end
%% Accuracy of ANN ANNPredictYield=sim(ANNnet,TestVARI')'; ANNRMSE=sqrt(sum(sum((ANNPredictYield-TestYield).^2))/size(TestYield,1)); ANNrMatrix=corrcoef(ANNPredictYield,TestYield); ANNr=ANNrMatrix(1,2); ANNRunNum=ANNRunNum+1; ANNRMSEMatrix=[ANNRMSEMatrix,ANNRMSE]; ANNrAllMatrix=[ANNrAllMatrix,ANNr]; disp(ANNRunNum); end disp(ANNRMSE);
其中,ANNPredictYield
為預測結果;ANNRMSE
、ANNrMatrix
分別為模型精度衡量指標RMSE與皮爾遜相關系數。結合本文1.1部分可知,我這里設置為當所得神經網絡模型RMSE在400
以內時,將會停止循環;否則繼續開始執行本文1.2部分至1.6部分的代碼。
這一部分就不再贅述了,大家可以參考文章MATLAB實現隨機森林(RF)回歸與自變量影響程度分析。
%% ANN Model Storage ANNModelSavePath='G:\CropYield\02_CodeAndMap\00_SavedModel\'; save(sprintf('%sRF0417ANN0399.mat',ANNModelSavePath),'TestVARI','TestYield','TrainVARI','TrainYield','ANNnet','ANNPredictYield','ANNr','ANNRMSE',... 'hiddenLayerSize');
完整代碼如下:
%% ANN Cycle Preparation ANNRMSE=9999; ANNRunNum=0; ANNRMSEMatrix=[]; ANNrAllMatrix=[]; while ANNRMSE>1000 %% ANN x=TrainVARI'; t=TrainYield'; trainFcn = 'trainlm'; hiddenLayerSize = [10 10 10]; ANNnet = fitnet(hiddenLayerSize,trainFcn); ANNnet.input.processFcns = {'removeconstantrows','mapminmax'}; ANNnet.output.processFcns = {'removeconstantrows','mapminmax'}; ANNnet.divideFcn = 'dividerand'; ANNnet.divideMode = 'sample'; ANNnet.divideParam.trainRatio = 0.6; ANNnet.divideParam.valRatio = 0.4; ANNnet.divideParam.testRatio = 0.0; ANNnet.performFcn = 'mse'; ANNnet.trainParam.epochs=5000; ANNnet.trainParam.goal=0.01; % For a list of all plot functions type: help nnplot ANNnet.plotFcns = {'plotperform','plottrainstate','ploterrhist','plotregression','plotfit'}; [ANNnet,tr] = train(ANNnet,x,t); y = ANNnet(x); e = gsubtract(t,y); performance = perform(ANNnet,t,y); % Recalculate Training, Validation and Test Performance trainTargets = t .* tr.trainMask{1}; valTargets = t .* tr.valMask{1}; testTargets = t .* tr.testMask{1}; trainPerformance = perform(ANNnet,trainTargets,y); valPerformance = perform(ANNnet,valTargets,y); testPerformance = perform(ANNnet,testTargets,y); % view(net) % Plots %figure, plotperform(tr) %figure, plottrainstate(tr) %figure, ploterrhist(e) %figure, plotregression(t,y) %figure, plotfit(net,x,t) % Deployment % See the help for each generation function for more information. if (false) % Generate MATLAB function for neural network for application % deployment in MATLAB scripts or with MATLAB Compiler and Builder % tools, or simply to examine the calculations your trained neural % network performs. genFunction(ANNnet,'myNeuralNetworkFunction'); y = myNeuralNetworkFunction(x); end if (false) % Generate a matrix-only MATLAB function for neural network code % generation with MATLAB Coder tools. genFunction(ANNnet,'myNeuralNetworkFunction','MatrixOnly','yes'); y = myNeuralNetworkFunction(x); end if (false) % Generate a Simulink diagram for simulation or deployment with. % Simulink Coder tools. gensim(ANNnet); end %% Accuracy of ANN ANNPredictYield=sim(ANNnet,TestVARI')'; ANNRMSE=sqrt(sum(sum((ANNPredictYield-TestYield).^2))/size(TestYield,1)); ANNrMatrix=corrcoef(ANNPredictYield,TestYield); ANNr=ANNrMatrix(1,2); ANNRunNum=ANNRunNum+1; ANNRMSEMatrix=[ANNRMSEMatrix,ANNRMSE]; ANNrAllMatrix=[ANNrAllMatrix,ANNr]; disp(ANNRunNum); end disp(ANNRMSE); %% ANN Model Storage ANNModelSavePath='G:\CropYield\02_CodeAndMap\00_SavedModel\'; save(sprintf('%sRF0417ANN0399.mat',ANNModelSavePath),'AreaPercent','InputOutput','nLeaf','nTree',... 'RandomNumber','RFModel','RFPredictConfidenceInterval','RFPredictYield','RFr','RFRMSE',... 'TestVARI','TestYield','TrainVARI','TrainYield','ANNnet','ANNPredictYield','ANNr','ANNRMSE',... 'hiddenLayerSize');
關于“基于Matlab如何實現人工神經網絡回歸”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“基于Matlab如何實現人工神經網絡回歸”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。