1. 程式人生 > >Matlab-bp神經網絡

Matlab-bp神經網絡

RR -o out leg 比較 標簽 ron bsp abs

一、工作流程

  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神經網絡