MATLAB實作BP神經網路預測汽油辛烷值
今天學習的新內容,在這里記錄一下便于日后復習
1.清空變數,做好準備作業
%% I. 清慷訓境變數
clear all
clc
2.匯入資料,劃分前50個為訓練樣本,后10個是預測樣本
%% II. 訓練集/測驗集產生
%%
% 1. 匯入資料
load spectra_data.mat
%%
% 2. 隨機產生訓練集和測驗集
% randperm(60)隨機產生1到60中的數字產生60個
temp = randperm(size(NIR,1));
% 訓練集——50個樣本
P_train = NIR(temp(1:50),:)';
T_train = octane(temp(1:50),:)';
% 測驗集——10個樣本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);
3.資料前期的預處理,進行歸一化
%% III. 資料歸一化
[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);
4.創建神經網路
%% IV. BP神經網路創建、訓練及仿真測驗
%%
% 1. 創建網路
% 9是隱含層個數
net = newff(p_train,t_train,9);
%%
% 2. 設定訓練引數
% 設定迭代次數
net.trainParam.epochs = 1000;
% 設定誤差目標
net.trainParam.goal = 1e-3;
% 設定學習率
net.trainParam.lr = 0.01;
%%
% 3. 訓練網路
net = train(net,p_train,t_train);
%%
% 4. 仿真測驗
t_sim = sim(net,p_test);
%%
% 5. 資料反歸一化
T_sim = mapminmax('reverse',t_sim,ps_output);


5.檢測訓練效果
%% V. 性能評價
%%
% 1. 相對誤差error
error = abs(T_sim - T_test)./T_test;
%%
% 2. 決定系數R^2
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));
%%
% 3. 結果對比
result = [T_test' T_sim' error']
6.畫圖可視化結果
%% VI. 繪圖
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真實值','預測值')
xlabel('預測樣本')
ylabel('辛烷值')
string = {'測驗集辛烷值含量預測結果對比';['R^2=' num2str(R2)]};
title(string)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/94569.html
標籤:其他
