最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Matlab實現(xiàn)人工神經(jīng)網(wǎng)絡(luò)(ANN)回歸的示例詳解

 更新時間:2023年02月20日 14:39:17   作者:瘋狂學(xué)習(xí)GIS  
這篇文章主要為大家詳細(xì)介紹了Matlab實現(xiàn)人工神經(jīng)網(wǎng)絡(luò)(ANN)回歸的相關(guān)資料,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

在之前的文章MATLAB實現(xiàn)隨機森林(RF)回歸與自變量影響程度分析中,我們對基于MATLAB隨機森林(RF)回歸與變量影響程度(重要性)排序的代碼加以詳細(xì)講解與實踐。本次我們繼續(xù)基于MATLAB,對另一種常用的機器學(xué)習(xí)方法——神經(jīng)網(wǎng)絡(luò)方法加以代碼實戰(zhàn)。

首先需要注明的是,在MATLAB中,我們可以直接基于“APP”中的“Neural Net Fitting”工具箱實現(xiàn)在無需代碼的情況下,對神經(jīng)網(wǎng)絡(luò)算法加以運行。

基于工具箱的神經(jīng)網(wǎng)絡(luò)方法雖然方便,但是一些參數(shù)不能調(diào)整;同時也不利于我們對算法、代碼的理解。因此,本文不利用“Neural Net Fitting”工具箱,而是直接通過代碼將神經(jīng)網(wǎng)絡(luò)方法加以運行——但是,本文的代碼其實也是通過上述工具箱運行后生成的;而這種生成神經(jīng)網(wǎng)絡(luò)代碼的方法也是MATLAB官方推薦的方式。

另外,需要注意的是,本文直接進(jìn)行神經(jīng)網(wǎng)絡(luò)算法的執(zhí)行,省略了前期數(shù)據(jù)處理、訓(xùn)練集與測試集劃分、精度衡量指標(biāo)選取等。因此建議大家先將文章MATLAB實現(xiàn)隨機森林(RF)回歸與自變量影響程度分析閱讀后,再閱讀本文。

本文分為兩部分,首先是將代碼分段、詳細(xì)講解,方便大家理解;隨后是完整代碼,方便大家自行嘗試。

1 分解代碼

1.1 循環(huán)準(zhǔn)備

由于機器學(xué)習(xí)往往需要多次執(zhí)行,我們就在此先定義循環(huán)。

%% ANN Cycle Preparation

ANNRMSE=9999;
ANNRunNum=0;
ANNRMSEMatrix=[];
ANNrAllMatrix=[];
while ANNRMSE>400

其中,ANNRMSE是初始的RMSEANNRunNum是神經(jīng)網(wǎng)絡(luò)算法當(dāng)前運行的次數(shù);ANNRMSEMatrix用來存儲每一次神經(jīng)網(wǎng)絡(luò)運行后所得到的RMSE結(jié)果;ANNrAllMatrix用來存儲每一次神經(jīng)網(wǎng)絡(luò)運行后所得到的皮爾遜相關(guān)系數(shù)結(jié)果;最后一句表示當(dāng)所得到的模型RMSE>400時,則停止循環(huán)。

1.2 神經(jīng)網(wǎng)絡(luò)構(gòu)建

接下來,我們對神經(jīng)網(wǎng)絡(luò)的整體結(jié)構(gòu)加以定義。

%% ANN

x=TrainVARI';
t=TrainYield';
trainFcn = 'trainlm';
hiddenLayerSize = [10 10 10];
ANNnet = fitnet(hiddenLayerSize,trainFcn);

其中,TrainVARI、TrainYield分別是我這里訓(xùn)練數(shù)據(jù)的自變量(特征)與因變量(標(biāo)簽);trainFcn為神經(jīng)網(wǎng)絡(luò)所選用的訓(xùn)練函數(shù)方法名稱,其名稱與對應(yīng)的方法對照如下表:

hiddenLayerSize為神經(jīng)網(wǎng)絡(luò)所用隱層與各層神經(jīng)元個數(shù),[10 10 10]代表共有三層隱層,各層神經(jīng)元個數(shù)分別為10,1010

1.3 數(shù)據(jù)處理

接下來,對輸入神經(jīng)網(wǎng)絡(luò)模型的數(shù)據(jù)加以處理。

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.processFcnsANNnet.output.processFcns分別代表輸入模型數(shù)據(jù)的處理方法,'removeconstantrows'表示刪除在各樣本中數(shù)值始終一致的特征列,'mapminmax'表示將數(shù)據(jù)歸一化處理;divideFcn表示劃分?jǐn)?shù)據(jù)訓(xùn)練集、驗證集與測試集的方法,'dividerand'表示依據(jù)所給定的比例隨機劃分;divideMode表示對數(shù)據(jù)劃分的維度,我們這里選擇'sample',也就是對樣本進(jìn)行劃分;divideParam表示訓(xùn)練集、驗證集與測試集所占比例,那么在這里,因為是直接用了先前隨機森林方法(可以看這篇博客)中的數(shù)據(jù)劃分方式,那么為了保證訓(xùn)練集、測試集的固定,我們就將divideParam.testRatio設(shè)置為0.0,然后將訓(xùn)練集與驗證集比例劃分為0.60.4。

1.4 模型訓(xùn)練參數(shù)配置

接下來對模型運行過程中的主要參數(shù)加以配置。

ANNnet.performFcn = 'mse';
ANNnet.trainParam.epochs=5000;
ANNnet.trainParam.goal=0.01;

其中,performFcn為模型誤差衡量函數(shù),'mse'表示均方誤差;trainParam.epochs表示訓(xùn)練時Epoch次數(shù),trainParam.goal表示模型所要達(dá)到的精度要求(即模型運行到trainParam.epochs次時或誤差小于trainParam.goal時將會停止運行)。

1.5 神經(jīng)網(wǎng)絡(luò)實現(xiàn)

這一部分代碼大多數(shù)與繪圖、代碼與GUI生成等相關(guān),因此就不再一一解釋了,大家可以直接運行。需要注意的是,train是模型訓(xùn)練函數(shù)。

% 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

1.6 精度衡量

%% 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為預(yù)測結(jié)果;ANNRMSE、ANNrMatrix分別為模型精度衡量指標(biāo)RMSE與皮爾遜相關(guān)系數(shù)。結(jié)合本文1.1部分可知,我這里設(shè)置為當(dāng)所得神經(jīng)網(wǎng)絡(luò)模型RMSE400以內(nèi)時,將會停止循環(huán);否則繼續(xù)開始執(zhí)行本文1.2部分至1.6部分的代碼。

1.7 保存模型

這一部分就不再贅述了,大家可以參考文章MATLAB實現(xiàn)隨機森林(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');

2 完整代碼

完整代碼如下:

%% 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實現(xiàn)人工神經(jīng)網(wǎng)絡(luò)(ANN)回歸的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Matlab人工神經(jīng)網(wǎng)絡(luò)ANN回歸的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C語言實現(xiàn)字符串字符反向排列的方法詳解

    C語言實現(xiàn)字符串字符反向排列的方法詳解

    這篇文章主要為大家分享了幾種通過C語言實現(xiàn)字符串字符反向排列(不是逆序打?。┑姆椒?,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-05-05
  • 詳解C語言中typedef和#define的用法與區(qū)別

    詳解C語言中typedef和#define的用法與區(qū)別

    這篇文章主要給大家介紹了關(guān)于C語言中typedef和#define的的用法、區(qū)別,以及陷阱。文中通過示例進(jìn)行了詳細(xì)講解,感興趣的小伙伴可以了解一下
    2022-07-07
  • C語言中的指針新手初階指南

    C語言中的指針新手初階指南

    指針是C語言的靈魂,精華之所在,指針強大而危險,用得好是一大利器,用得不好是一大潛在危害,下面這篇文章主要給大家介紹了C語言中指針的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • C語言深入回顧講解結(jié)構(gòu)體對齊

    C語言深入回顧講解結(jié)構(gòu)體對齊

    C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對齊
    2022-06-06
  • C語言代碼實現(xiàn)俄羅斯方塊

    C語言代碼實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Qt中正則表達(dá)式的常見用法(QRegularExpression類)

    Qt中正則表達(dá)式的常見用法(QRegularExpression類)

    正則表達(dá)式即一個文本匹配字符串的一種模式,Qt中使用QRegExp類進(jìn)行模式匹配,下面這篇文章主要給大家介紹了關(guān)于Qt中正則表達(dá)式的常見用法,文中介紹的是QRegularExpression類的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • C++ 函數(shù)重載詳情介紹

    C++ 函數(shù)重載詳情介紹

    這篇文章主要介紹了C++ 函數(shù)重載詳情,函數(shù)重載還有一個別名叫函數(shù)多態(tài),函數(shù)多態(tài)是C++在C語言基礎(chǔ)上的新特性,它可以讓我們使用多個同名函數(shù),下面來看看文章具體內(nèi)容的介紹
    2021-11-11
  • C語言位運算符的具體使用

    C語言位運算符的具體使用

    位運算是指按二進(jìn)制進(jìn)行的運算。在系統(tǒng)軟件中,常常需要處理二進(jìn)制位的問題。本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-09-09
  • OpenCV霍夫變換(Hough Transform)直線檢測詳解

    OpenCV霍夫變換(Hough Transform)直線檢測詳解

    這篇文章主要為大家詳細(xì)介紹了OpenCV霍夫變換直線檢測的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C++實現(xiàn)屏幕截圖

    C++實現(xiàn)屏幕截圖

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)屏幕截圖功能,截圖自動保存為png格式文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

新巴尔虎左旗| 巴东县| 东平县| 涞水县| 壤塘县| 华阴市| 仁寿县| 鹿泉市| 麦盖提县| 德惠市| 锦州市| 中超| 盐津县| 凤台县| 清徐县| 安溪县| 龙山县| 三明市| 开江县| 葵青区| 鄂托克旗| 利辛县| 思茅市| 新巴尔虎左旗| 沂水县| 重庆市| 彩票| 汪清县| 荥阳市| 鹤峰县| 庆元县| 涪陵区| 定结县| 宣恩县| 洞头县| 淮滨县| 南陵县| 烟台市| 桂阳县| 吴桥县| 贡山|