回歸預(yù)測 | MATLAB實現(xiàn)GA-APSO-IBP改進遺傳-粒子群算法優(yōu)化雙層BP神經(jīng)網(wǎng)絡(luò)多輸入單輸出回歸預(yù)測
效果一覽
基本介紹
MATLAB實現(xiàn)GA-APSO-IBP改進遺傳-粒子群算法優(yōu)化雙層BP神經(jīng)網(wǎng)絡(luò)多輸入單輸出回歸預(yù)測;
程序包含:單隱含層BP神經(jīng)網(wǎng)絡(luò)、雙層隱含層IBP神經(jīng)網(wǎng)絡(luò)、遺傳算法優(yōu)化IBP神經(jīng)網(wǎng)絡(luò)、改進遺傳-粒子群算法優(yōu)化IBP神經(jīng)網(wǎng)絡(luò),結(jié)果顯示改進的遺傳-粒子群算法優(yōu)化結(jié)果更佳。運行環(huán)境2018及以上。
模型描述
BP(Back-propagation,反向傳播)神經(jīng)網(wǎng)絡(luò)是最傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)。也就是使用了Back-propagation算法的神經(jīng)網(wǎng)絡(luò)。請注意他不是時下流行的那一套深度學習。要訓練深度學習level的網(wǎng)絡(luò)你是不可以使用這種算法的。原因我們后面解釋。而其實機器學習的bottleneck就是成功的突破了非常深的神經(jīng)網(wǎng)絡(luò)無法用BP算法來訓練的問題。文章來源:http://www.zghlxwxcb.cn/news/detail-684861.html
程序設(shè)計
- 完整源碼和數(shù)據(jù)獲取方式:私信回復(fù)MATLAB實現(xiàn)GA-APSO-IBP改進遺傳-粒子群算法優(yōu)化雙層BP神經(jīng)網(wǎng)絡(luò)多輸入單輸出回歸預(yù)測(多指標,多圖)。
%% 清空環(huán)境變量
warning off % 關(guān)閉報警信息
close all % 關(guān)閉開啟的圖窗
clear % 清空變量
clc % 清空命令行
%% 導(dǎo)入數(shù)據(jù)
res = xlsread('data.xlsx');
%% 劃分訓練集和測試集
temp = randperm(103);
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);
%% 提取權(quán)值和閾值
w1 = pop(1 : inputnum * hiddennum);
B1 = pop(inputnum * hiddennum + 1 : inputnum * hiddennum + hiddennum);
w2 = pop(inputnum * hiddennum + hiddennum + 1 : ...
inputnum * hiddennum + hiddennum + hiddennum * outputnum);
B2 = pop(inputnum * hiddennum + hiddennum + hiddennum * outputnum + 1 : ...
inputnum * hiddennum + hiddennum + hiddennum * outputnum + outputnum);
%% 網(wǎng)絡(luò)賦值
net.Iw{1, 1} = reshape(w1, hiddennum, inputnum );
net.Lw{2, 1} = reshape(w2, outputnum, hiddennum);
net.b{1} = reshape(B1, hiddennum, 1);
net.b{2} = B2';
%% 網(wǎng)絡(luò)訓練
net = train(net, p_train, t_train);
%% 仿真測試
t_sim1 = sim(net, p_train);
————————————————
版權(quán)聲明:本文為CSDN博主「機器學習之心」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/kjm13182345320/article/details/129869457
%% 仿真測試
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);
%% 相關(guān)指標計算
% 決定系數(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(['訓練集數(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(['訓練集數(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(['訓練集數(shù)據(jù)的MBE為:', num2str(mbe1)])
disp(['測試集數(shù)據(jù)的MBE為:', num2str(mbe2)])
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718文章來源地址http://www.zghlxwxcb.cn/news/detail-684861.html
到了這里,關(guān)于回歸預(yù)測 | MATLAB實現(xiàn)GA-APSO-IBP改進遺傳-粒子群算法優(yōu)化雙層BP神經(jīng)網(wǎng)絡(luò)多輸入單輸出回歸預(yù)測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!