国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MATLAB第57期】基于MATLAB的雙隱含層BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型(無工具箱版本及工具箱版本對比)

這篇具有很好參考價值的文章主要介紹了【MATLAB第57期】基于MATLAB的雙隱含層BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型(無工具箱版本及工具箱版本對比)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

【MATLAB第57期】基于MATLAB的雙隱含層BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型(無工具箱版本及工具箱版本對比)

一、無工具箱版本

1.數(shù)據(jù)設(shè)置

數(shù)據(jù)為案例數(shù)據(jù) 。103行樣本,7輸入1輸出數(shù)據(jù)。

2.參數(shù)設(shè)置

訓(xùn)練函數(shù) 梯度下降
HiddenUnit1Num=10;%隱層1結(jié)點(diǎn)數(shù)
HiddenUnit2Num=10;%隱層2節(jié)點(diǎn)數(shù)
MaxEpochs=20000;%最大訓(xùn)練次數(shù)
TF1 = 'logsig';TF2 = 'logsig'; TF3 = 'purelin';%各層傳輸函數(shù),TF3為輸出層傳輸函數(shù)
lr=0.003;%學(xué)習(xí)率
E0=0.05;%目標(biāo)誤差

3.代碼展示

%--------------兩個隱層的BP算法-------------%
clear all;
%%  清空環(huán)境變量
warning off             % 關(guān)閉報警信息
close all               % 關(guān)閉開啟的圖窗
clear                   % 清空變量
clc                     % 清空命令行

%%  導(dǎo)入數(shù)據(jù)
res = xlsread('數(shù)據(jù)集.xlsx');

%%  劃分訓(xùn)練集和測試集
temp = randperm(103);
save temp temp
P_train = res(temp(1: 80), 1: 7)';
T_train = res(temp(1: 80), 8)';
M = size(P_train, 2);

P_test = res(temp(81: end), 1: 7)';
T_test = res(temp(81: end), 8)';
N = size(P_test, 2);

%%  數(shù)據(jù)歸一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);

[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);


SamNum=size(p_train,2);%樣本數(shù)
TestSamNum=size(p_test,2);%測試樣本
HiddenUnit1Num=10;%隱層1結(jié)點(diǎn)數(shù)
HiddenUnit2Num=10;%隱層2節(jié)點(diǎn)數(shù)
InDim=size(p_train,1);%樣本輸入維數(shù)
OutDim=size(t_train,1);%樣本輸出維數(shù)
%根據(jù)目標(biāo)函數(shù)獲得樣本輸入輸出

MaxEpochs=20000;%最大訓(xùn)練次數(shù)
lr=0.003;%學(xué)習(xí)率
E0=0.05;%目標(biāo)誤差
%產(chǎn)生擴(kuò)展向量,及擴(kuò)展樣本輸入%
W1Ex=[W1 B1];
W2Ex=[W2 B2];
W3Ex=[W3 B3];
SamInEx=[p_train' ones(SamNum,1)]';
for i=1:MaxEpochs
    %正向傳播時第一隱層,第二隱層,及網(wǎng)絡(luò)輸出值%
    u=W1Ex*SamInEx;
    Hidden1Out=1./(1+exp(-u));
    Hidden1OutEx=[Hidden1Out' ones(SamNum,1)]';    %停止學(xué)習(xí)判斷條件
    Error=t_train-NetworkOut;%是一個1*M的向量
    SSE=sum(Error.^2);%所有樣本產(chǎn)生的誤差之和
    if SSE<E0,break,end
    %計(jì)算反向傳播誤差
    Delta3=Error;%是一個橫向量,包含樣本的誤差
    Dw3Ex=Delta3*Hidden2OutEx';
    for n=1:SamNum %對每一個樣本分別計(jì)算
        Delta2=(W3'*Delta3(n)).*Hidden2Out(:,n).*(1-Hidden2Out(:,n));
        Delta2Store(:,n)=Delta2;
        Dw2Ex=Dw2Ex+Delta2*Hidden1OutEx(:,n)'; 
    end
    %更新權(quán)值

end
%% 測試集預(yù)測
v=size(p_test);
TestSamInEx=[p_test' ones(v(2),1)]';
u=W1Ex*TestSamInEx;
Hidden1Out=1./(1+exp(-u));
Hidden1OutEx=[Hidden1Out' ones(v(2),1)]';
u=W2Ex*Hidden1OutEx;
Hidden2Out=1./(1+exp(-u));
Hidden2OutEx=[Hidden2Out' ones(v(2),1)]';
TestNetworkOut=W3Ex*Hidden2OutEx;   %網(wǎng)絡(luò)輸出值
T_sim2 = mapminmax('reverse', TestNetworkOut, ps_output);

%%  均方根誤差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);

%%  繪圖
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真實(shí)值','預(yù)測值')
xlabel('預(yù)測樣本')
ylabel('預(yù)測結(jié)果')
string = {'訓(xùn)練集預(yù)測結(jié)果對比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid

figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真實(shí)值','預(yù)測值')
xlabel('預(yù)測樣本')
ylabel('預(yù)測結(jié)果')
string = {'測試集預(yù)測結(jié)果對比';['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid

%%  相關(guān)指標(biāo)計(jì)算
% 決定系數(shù) R2
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test -  T_sim2)^2 / norm(T_test -  mean(T_test ))^2;

disp(['訓(xùn)練集數(shù)據(jù)的R2為:', num2str(R1)])
disp(['測試集數(shù)據(jù)的R2為:', num2str(R2)])

% 平均絕對誤差 MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M ;
mae2 = sum(abs(T_sim2 - T_test )) ./ N ;

disp(['訓(xùn)練集數(shù)據(jù)的MAE為:', num2str(mae1)])
disp(['測試集數(shù)據(jù)的MAE為:', num2str(mae2)])

% 平均相對誤差 MBE
mbe1 = sum(T_sim1 - T_train) ./ M ;
mbe2 = sum(T_sim2 - T_test ) ./ N ;

disp(['訓(xùn)練集數(shù)據(jù)的MBE為:', num2str(mbe1)])
disp(['測試集數(shù)據(jù)的MBE為:', num2str(mbe2)])

4.效果展示

【MATLAB第57期】基于MATLAB的雙隱含層BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型(無工具箱版本及工具箱版本對比),matlab,神經(jīng)網(wǎng)絡(luò),回歸,BP,雙隱含層,多層,回歸預(yù)測
【MATLAB第57期】基于MATLAB的雙隱含層BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型(無工具箱版本及工具箱版本對比),matlab,神經(jīng)網(wǎng)絡(luò),回歸,BP,雙隱含層,多層,回歸預(yù)測
訓(xùn)練集數(shù)據(jù)的R2為:0.9022
測試集數(shù)據(jù)的R2為:0.87266
訓(xùn)練集數(shù)據(jù)的MAE為:1.8189
測試集數(shù)據(jù)的MAE為:2.1658
訓(xùn)練集數(shù)據(jù)的MBE為:-0.00088469
測試集數(shù)據(jù)的MBE為:0.3059

二、有工具箱版本

1.數(shù)據(jù)設(shè)置

數(shù)據(jù)與無工具版本相同,數(shù)據(jù)順序也相同。

2.參數(shù)設(shè)置

訓(xùn)練函數(shù) trainlm
NodeNum1 = 10; % 隱層第一層節(jié)點(diǎn)數(shù)
NodeNum2=10; % 隱層第二層節(jié)點(diǎn)數(shù)
net.trainParam.epochs=20000;%訓(xùn)練次數(shù)設(shè)置
net.trainParam.goal=0.05;%訓(xùn)練目標(biāo)設(shè)置
net.trainParam.lr=0.003;%學(xué)習(xí)率設(shè)置,應(yīng)設(shè)置為較少值,太大雖然會在開始加快收斂速度,但臨近最佳點(diǎn)時,會產(chǎn)生動蕩,而致使無法收斂
TF1 = 'logsig';TF2 = 'logsig'; TF3 = 'purelin';%各層傳輸函數(shù),TF3為輸出層傳輸函數(shù)
%如果訓(xùn)練結(jié)果不理想,可以嘗試更改傳輸函數(shù),以下這些是各類傳輸函數(shù)

3.代碼展示

%--------------兩個隱層的BP算法-------------%

% BP 神經(jīng)網(wǎng)絡(luò)用于預(yù)測
%網(wǎng)絡(luò)為7輸入,1輸出
% 103組數(shù)據(jù),其中80組為正常訓(xùn)練數(shù)據(jù),23組為測試數(shù)據(jù)
clear all;
%%  清空環(huán)境變量
warning off             % 關(guān)閉報警信息
close all               % 關(guān)閉開啟的圖窗
clear                   % 清空變量
clc                     % 清空命令行

%%  導(dǎo)入數(shù)據(jù)
res = xlsread('數(shù)據(jù)集.xlsx');

%%  劃分訓(xùn)練集和測試集
temp = randperm(103);
load temp
P_train = res(temp(1: 80), 1: 7)';
T_train = res(temp(1: 80), 8)';
M = size(P_train, 2);

P_test = res(temp(81: end), 1: 7)';
T_test = res(temp(81: end), 8)';
N = size(P_test, 2);

%%  數(shù)據(jù)歸一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);

[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);

%---------------------------------------------------
%數(shù)據(jù)歸一化處理
%mapminmax函數(shù)默認(rèn)將數(shù)據(jù)歸一化到[0,1],調(diào)用形式如下
%[y,ps] =%mapminmax(x,ymin,ymax)
%x需歸化的數(shù)據(jù)輸入
%ymin,ymax為需歸化到的范圍,不填默認(rèn)為歸化到[-1,1]
%y歸一化后的樣本數(shù)據(jù)
%ps處理設(shè)置,ps主要在結(jié)果反歸一化中需要調(diào)用,或者使用同樣的settings歸一化另外一組數(shù)據(jù)
%---------------------------------------------------
%---------------------------------------------------
% 設(shè)置網(wǎng)絡(luò)參數(shù)
%--------------------------------------------------- 
NodeNum1 = 10; % 隱層第一層節(jié)點(diǎn)數(shù)
NodeNum2=10; % 隱層第二層節(jié)點(diǎn)數(shù)
TypeNum = 1; % 輸出維數(shù)

TF1 = 'logsig';TF2 = 'logsig'; TF3 = 'purelin';%各層傳輸函數(shù),TF3為輸出層傳輸函數(shù)
%如果訓(xùn)練結(jié)果不理想,可以嘗試更改傳輸函數(shù),以下這些是各類傳輸函數(shù)
%TF1 = 'tansig';TF2 = 'logsig';
%TF1 = 'logsig';TF2 = 'purelin';
%TF1 = 'tansig';TF2 = 'tansig';
%TF1 = 'logsig';TF2 = 'logsig';
%TF1 = 'purelin';TF2 = 'purelin'; 

%注意創(chuàng)建BP網(wǎng)絡(luò)函數(shù)newff()的參數(shù)調(diào)用

%---------------------------------------------------
% 設(shè)置訓(xùn)練參數(shù)
%--------------------------------------------------- 
net.trainParam.epochs=20000;%訓(xùn)練次數(shù)設(shè)置
net.trainParam.goal=0.05;%訓(xùn)練目標(biāo)設(shè)置
net.trainParam.lr=0.003;%學(xué)習(xí)率設(shè)置,應(yīng)設(shè)置為較少值,太大雖然會在開始加快收斂速度,但臨近最佳點(diǎn)時,會產(chǎn)生動蕩,而致使無法收斂
%---------------------------------------------------
% 指定訓(xùn)練函數(shù)
%---------------------------------------------------
% net.trainFcn = 'traingd'; % 梯度下降算法
% net.trainFcn = 'traingdm'; % 動量梯度下降算法
%
% net.trainFcn = 'traingda'; % 變學(xué)習(xí)率梯度下降算法
% net.trainFcn = 'traingdx'; % 變學(xué)習(xí)率動量梯度下降算法
%
% (大型網(wǎng)絡(luò)的首選算法)
% net.trainFcn = 'trainrp'; % RPROP(彈性BP)算法,內(nèi)存需求最小
%
% (共軛梯度算法)
% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法
% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,內(nèi)存需求比Fletcher-Reeves修正算法略大
% net.trainFcn = 'traincgb'; % Powell-Beal復(fù)位算法,內(nèi)存需求比Polak-Ribiere修正算法略大
%
% (大型網(wǎng)絡(luò)的首選算法)
%net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,內(nèi)存需求與Fletcher-Reeves修正算法相同,計(jì)算量比上面三種算法都小很多
% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,計(jì)算量和內(nèi)存需求均比共軛梯度算法大,但收斂比較快
% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,計(jì)算量和內(nèi)存需求均比BFGS算法小,比共軛梯度算法略大
%
% (中型網(wǎng)絡(luò)的首選算法)
%net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,內(nèi)存需求最大,收斂速度最快
% net.trainFcn = 'trainbr'; % 貝葉斯正則化算法
%
% 有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm'

%%  訓(xùn)練網(wǎng)絡(luò)
net = train(net, p_train, t_train);

%%  仿真測試
t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test);

%%  數(shù)據(jù)反歸一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);

%%  均方根誤差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);

%%  繪圖
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真實(shí)值','預(yù)測值')
xlabel('預(yù)測樣本')
ylabel('預(yù)測結(jié)果')
string = {'訓(xùn)練集預(yù)測結(jié)果對比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid

figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真實(shí)值','預(yù)測值')
xlabel('預(yù)測樣本')
ylabel('預(yù)測結(jié)果')
string = {'測試集預(yù)測結(jié)果對比';['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid

%%  相關(guān)指標(biāo)計(jì)算
% 決定系數(shù) R2
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test -  T_sim2)^2 / norm(T_test -  mean(T_test ))^2;

disp(['訓(xùn)練集數(shù)據(jù)的R2為:', num2str(R1)])
disp(['測試集數(shù)據(jù)的R2為:', num2str(R2)])

% 平均絕對誤差 MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M ;
mae2 = sum(abs(T_sim2 - T_test )) ./ N ;

disp(['訓(xùn)練集數(shù)據(jù)的MAE為:', num2str(mae1)])
disp(['測試集數(shù)據(jù)的MAE為:', num2str(mae2)])

% 平均相對誤差 MBE
mbe1 = sum(T_sim1 - T_train) ./ M ;
mbe2 = sum(T_sim2 - T_test ) ./ N ;

disp(['訓(xùn)練集數(shù)據(jù)的MBE為:', num2str(mbe1)])
disp(['測試集數(shù)據(jù)的MBE為:', num2str(mbe2)])

4.效果展示

【MATLAB第57期】基于MATLAB的雙隱含層BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型(無工具箱版本及工具箱版本對比),matlab,神經(jīng)網(wǎng)絡(luò),回歸,BP,雙隱含層,多層,回歸預(yù)測
【MATLAB第57期】基于MATLAB的雙隱含層BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型(無工具箱版本及工具箱版本對比),matlab,神經(jīng)網(wǎng)絡(luò),回歸,BP,雙隱含層,多層,回歸預(yù)測
訓(xùn)練集數(shù)據(jù)的R2為:1
測試集數(shù)據(jù)的R2為:0.94759
訓(xùn)練集數(shù)據(jù)的MAE為:3.6159e-07
測試集數(shù)據(jù)的MAE為:1.0637
訓(xùn)練集數(shù)據(jù)的MBE為:-2.0744e-07
測試集數(shù)據(jù)的MBE為:-0.43051

三、總結(jié)

因工具箱版本和無工具箱版本訓(xùn)練方法不同,以及有工具箱版本內(nèi)置默認(rèn)參數(shù)較為豐富 ,如連續(xù)驗(yàn)證最大失敗數(shù)量、訓(xùn)練集再劃分樣本等等參數(shù) ,且trainlm函數(shù)功能強(qiáng)大,用代碼編寫比較復(fù)雜 。故有工具版計(jì)算結(jié)果較好,收斂速度較快,使用方便,而無工具箱版本則更能直觀的觀察數(shù)據(jù)變化以及能夠更直觀體現(xiàn)BP神經(jīng)網(wǎng)絡(luò)計(jì)算原理。

四、代碼獲取

私信回復(fù)“57期”即可獲取下載鏈接。文章來源地址http://www.zghlxwxcb.cn/news/detail-599856.html

到了這里,關(guān)于【MATLAB第57期】基于MATLAB的雙隱含層BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型(無工具箱版本及工具箱版本對比)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包