| clc;clear; %匯入300組資料alldata = load(‘alldata.txt‘);alldata = alldata(:,:); %輸入輸出資料input = alldata(:,2:33);outputtemp = alldata(:,1);%輸出資料需要處理一下output = zeros(300,2);%預先分配記憶體for i=1:300 switch outputtemp(i) case 0 output(i,:) = [1 0];%意思是如果資料結果是0,則輸出層的狀態是[1 0],或者用第一個輸出節點表示 case 1 %能直接識別帶小數位的資料 output(i,:) = [0 1]; endend %從中隨機抽取280組資料作為訓練資料,20組資料作為預測資料k = rand(1,300);[m,n] = sort(k); input_train = input(n(1:280),:)‘;output_train = output(n(1:280),:)‘; input_test = input(n(281:300),:)‘;output_test = output(n(281:300),:)‘; %輸入輸出資料進行歸一化處理[inputn,inputps] = mapminmax(input_train);[outputn,outputps] = mapminmax(output_train); %網路結構構建32-6-2net=newff(inputn,outputn,6); %網路參數配置(迭代次數,學習率,目標)net.trainParam.epochs=100;net.trainParam.lr=0.1;net.trainParam.goal=0.0004; %網路訓練net=train(net,inputn,outputn); %BP網路預測%預測資料歸一化inputn_test=mapminmax(‘apply‘,input_test,inputps); %網路預測輸出an=sim(net,inputn_test); %網路輸出反歸一化BPoutput=mapminmax(‘reverse‘,an,outputps); %結果分析figure(1)plot(BPoutput,‘:og‘)hold onplot(output_test,‘-*‘);legend(‘預測輸出‘,‘期望輸出‘)title(‘BP網路預測輸出‘,‘fontsize‘,12)ylabel(‘函數輸出‘,‘fontsize‘,12)xlabel(‘樣本‘,‘fontsize‘,12)%預測誤差error=BPoutput-output_test; figure(2)plot(error,‘-*‘)title(‘BP網路預測誤差‘,‘fontsize‘,12)ylabel(‘誤差‘,‘fontsize‘,12)xlabel(‘樣本‘,‘fontsize‘,12) figure(3)plot((output_test-BPoutput)./BPoutput,‘-*‘);title(‘神經網路預測誤差百分比‘) errorsum = sum(abs(error)) |