1、用BP人工神經網絡擬合函數 y=0.12e^(-0.23x)+0.54e^(-0.17x)sin(1.23x).要求給出真實數據點,用*表示,給出BP神經網絡擬合後的曲線。同時用CFTOOL和1stopt驗證。(提示:首先用函數產生若干真實數據點)
A、matlab BP神經擬合:
原始碼:
% 程序設計思路:構建樣本數據空間,構建網絡並繪製構建結果;
clear;%清空緩存;
x=-10:0.1:10;%樣本(自變量)空間;
%y為真實值(樣本空間大小基於x);
y=0.12*exp(-0.23.*x)+0.54*exp(-0.17.*x).*sin(1.23*x);
net=cascadeforwardnet(6);
% 創建隱含層含有6個「神經元」BP神經網絡;
% 或者使用語句:net=feedforwardnet(6);
net=train(net,x,y); %訓練網絡
Y=sim(net,x);%Y為網絡訓練值
plot(y,'r*');%用紅色*號繪製真實值;
hold on
plot(Y);%繼續繪製網絡訓練擬合值;
legend('真實值','訓練值')
實驗結果:
網絡結構以及訓練參數結果圖:
由於樣本空間大小不一樣,所以訓練次數有所不同,也可能的到不同的訓練結果,特別是在樣本空間較小的時候,訓練結果受訓練次數的影響更大。所以可以通過更改自變量x的取值空間大小,從而改變樣本空間y的大小,進而可以直觀的比較訓練結果。
如下為樣本空間大小分別為20、40和200(個取值)的訓練結果:
由上述訓練結果可知,樣本空間越大,訓練結果受訓練次數的影響就越小,訓練迭代結果也就越趨近於真實結果。
B、CFTOOL驗證:
通過存入待擬合數據,打開cftool窗口,選用待擬合數據以及擬合方法即可得到擬合結果。
實驗結果:
選用不同的擬合方法也會得到不同的擬合結果,下圖分別為線性插值擬合和傅立葉四次擬合的結果:
C、1stopt驗證:
原始碼:
//以下為部分代碼;
data;
-10 1.974997063
-9.5 3.161848789
-9 3.437890591
-8.5 2.811661272
-8.00 1.60
實驗結果:
由於數據空間不同,擬合結果也可能不同,下面為樣本空間大小為四十的擬合情況:
2、蠓蟲分類(美國1989年建模賽題) 兩種蠓蟲Apf和Af已由生物學家Grogan和Wirth於1981年根據他們的觸角長度和翅長加以區分. 現測得6隻Apf蠓蟲和9隻Af蠓蟲的觸長、翅長的數據如下:
Apf: (1.14,1.78), (1.18,1.96), (1.20,1.86),
(1.26,2.00), (1.28,2.00), (1.30,1.96);
Af: (1.24,1.72), (1.36,1.74), (1.38,1.64),
(1.38,1.82), (1.38,1.90), (1.40,1.70),
(1.48,1.82), (1.54,1.82), (1.56,2.08).
請用恰當的方法對3隻觸長、翅長分別為:(1.24,1.80), (1.28,1.84), (1.40,2.04)的蠓蟲進行識別。
A、matlab BP神經擬合:
原始碼:
% 程序設計思路:將蠓蟲的觸角長度和翅長數據存入變量中,
% 通過構建BP神經網絡擬分別擬合出兩種蠓蟲出觸角長度和翅長的關係,並繪製曲線;
% 進而標記出待識別的「蠓蟲數據」,根據接近程度初步判斷該蠓蟲屬於哪一種類別。
clear;%清空緩存;
% 下列變量___x和__y分別代表___蠓蟲的觸角長度(x)和翅長(y);
Apfx=[1.14,1.18,1.20,1.26,1.28,1.30];%樣本(自變量)空間;
Apfy=[1.78,1.96,1.86,2.00,2.00,1.96];%y為真實值;
Apfnet=cascadeforwardnet(6);
% 創建隱含層含有6個「神經元」BP神經網絡;
% 或者使用語句:net=feedforwardnet(6);
Apfnet=train(Apfnet,Apfx,Apfy); %訓練網絡
Y1=sim(Apfnet,Apfx);%Y為網絡訓練值
subplot(3,1,1);
plot(Apfy,'r*');%用紅色*號繪製真實值;
hold on
plot(Y1);%繼續繪製網絡訓練擬合值;
xlabel('觸角長度');
ylabel('翅長');
legend('Apf真實值','訓練值')
Afx=[1.24,1.36,1.38,1.38,1.38,1.40,1.48,1.54,1.56];
Afy=[1.72,1.74,1.64,1.82,1.90,1.70,1.82,1.82,2.08];
Afnet=cascadeforwardnet(6);
Afnet=train(Afnet,Afx,Afy);
Y2=sim(Afnet,Afx);
subplot(3,1,2);
plot(Afy,'r*');
hold on
plot(Y2);
xlabel('觸角長度');
ylabel('翅長');
legend('Af真實值','訓練值')
% 存入待識別的蠓蟲數據
% 繪製出測試數據以及兩種蠓蟲的擬合曲線,根據接近情況識別蠓蟲類別;
testx=[1.24,1.28,1.40];
testy=[1.80,1.84,2.04];
subplot(3,1,3)
plot(testx,testy,'rp','MarkerSize',5);
hold on
plot(Y1,'g');
hold on
plot(Y2,'b');
xlabel('觸角長度');
ylabel('翅長');
legend('測試點','Apf擬合曲線','Af擬合曲線')
實驗結果:
由於數據點(樣本空間)較少,對於BP網絡訓練結果有著較大的影響,準確性也有所降低,識別效果也顯得不容樂觀,所以以下為基於本思路的識別效果,僅用於參考。
由圖三可知,前兩個點更接近Apf的擬合曲線,後一個點更接近Af擬合曲線;即識別結果為:觸長、翅長分別為:(1.24,1.80), (1.28,1.84)的蠓蟲為Apf蠓蟲;觸長、翅長分別為:(1.40,2.04)的蠓蟲為Af蠓蟲。
感謝您的觀看,希望此文章對你有所幫助;查看更多精彩內容請關注微信公眾「理工科日記」。