Matlab-bp神經網絡
一、工作流程
1、加載數據,產生訓練集與測試集(驗證集)
首先加載樣本,其中樣本的輸入叫做:特征(變量),其輸出值叫做:理想值,將樣本分為訓練樣本(學習所用)和測試樣本(效果測試仿真所用)
需要註意的是樣本矩陣的列代表的是樣本的個數,行代表每個樣本的數據
代碼如下:
load spectra_data.mat
%% 隨機產生訓練集測試集序列
temp = randperm(size(attributes,2));
%產生訓練集樣本
P_train = attributes(:,temp(1:80));%選取前80個作為訓練集樣本
T_train = strength(:,temp(1:80));
%產生測試集樣本
P_test = attributes(:,temp(81:end));%將80之後的樣本作為測試集樣本
T_test = strength(:,temp(81:end));
%保存測試集的樣本個數
N = size(P_test,2);
2、數據歸一化處理
由於輸入數據的單位不一樣,所以有些數據的範圍可能比較大,導致的結果可能是神經網絡收斂慢、訓練時間長
代碼如下:
%% 數據歸一化處理
%訓練集歸一化
[p_train,ps_input] = mapminmax(P_train,0,1);
[t_train,ps_output] = mapminmax(T_train,0,1);
%測試集輸入數據歸一化
p_test = mapminmax(‘apply‘,P_test,ps_input); %將訓練集的歸一化的“標準”應用在測試集的歸一化上
3、神經網絡的創建、神經網絡的參數調整、神經網絡的訓練、神經網絡的仿真、仿真結果的反歸一化
代碼如下:
%% BP神經網絡創建、訓練及仿真測試
%創建網絡
net = newff(p_train,t_train,9);%創建一個具有9個神經元的bp神經網絡
%設置訓練參數
net.trainParam.epochs = 1000;%最多循環次數為1000次
net.trainParam.goal = 1e-3;%目標誤差小於。。。
net.trainParam.lr = 0.01;%學習率設定為0.01
%訓練網絡
net = train(net,p_train,t_train);
%仿真測試
t_sim = sim(net,p_test);
%數據反歸一化
T_sim = mapminmax(‘reverse‘,t_sim,ps_output);
4、神經網絡的性能評價(相對誤差計算、決定系數計算)
代碼如下:
%% 性能評價
%相對誤差
error = abs(T_sim - T_test)./T_test;
%決定系數
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));
5、結果對比、繪圖處理
代碼如下:
%% 結果對比
result = [T_test‘ T_sim‘ error‘]
%% 繪圖
figure
plot(1:N,T_test,‘b:*‘,1:N,T_sim,‘r-o‘)
legend(‘標簽‘,‘標簽‘)
xlabel(‘標簽‘)
ylabel(‘標簽‘)
string = {‘標題‘};
title(string)
Matlab-bp神經網絡