使用鳶尾花(iris)數據集訓練BP神經網絡


數據集介紹

鳶尾花數據集一共有150個樣本,分為3個類別,每個樣本有4個特征,將數據集分為兩組,一組作為訓練集,另一組作為測試集,其中,測試集和訓練集樣本數均是75個。為了便於訓練,我們將鳶尾花的三種類別數分別設為1、2、3。

數據集下載路徑

鏈接:https://pan.baidu.com/s/1kCqUeadoFk2_6smcDmdSNQ
提取碼:gths

解題思路

我們使用這些數據訓練一個4輸入(分別對應4個特征)和3輸出(分別對應該樣本屬於某一品種的可能性大小)的前向網絡。

程序源碼

% 鳶尾花(iris)數據集訓練BP神經網絡
% Author: Mr.King
% Email: 18329960625@163.com

% Step1:讀取數據。采用textread函數讀取文本數據
[f1, f2, f3, f4, class] = textread('trainData.txt','%f%f%f%f%f',75);

% Step2:特征值歸一化。將數據映射至區間[0,1]或者[-1,-1]
[input, minI, maxI] = premnmx( [f1, f2, f3, f4 ]');

% Step3:構造輸出矩陣。用於對訓練數據的目標輸出結果進行存儲
s = length(class);
output = zeros(s, 3);
for i = 1:s
    output(i,class(i)) = 1;
end

% Step4:創建神經網絡。利用matlab自帶函數newff實現神經網絡的創建,第一層10個神經元,第二層3個神經元,其中第一層傳遞函數為logsig,輸出層的傳遞函數為linear,
% minmax()函數獲取數組中每一行的最小值和最大值,即s行2列,用於表示輸入向量的每個元素的范圍從min到max
net = newff(minmax(input),[10 3],{ 'logsig' 'purelin' },'traingdx');

% Step5:設置訓練參數。設置網絡訓練次數為1000次,顯示頻率為30次,訓練最小目標誤差0.01和學習率0.01
net.trainparam.epochs = 1000;
net.trainparam.show = 30 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;

% Step6:模型訓練
model = train(net, input, output');

% Step7:讀取測試數據,並將數據歸一化。
[t1 t2 t3 t4 c] = textread('testData.txt','%f%f%f%f%f',75);
testInput = tramnmx([t1, t2, t3, t4]',minI,maxI);

% Step8:使用訓練好的網絡model對測試數據進行仿真
Y = sim(model, testInput);

% Step9:統計識別測試結果的正確率
[s1, s2] = size(Y);
hitNum = 0;
for i=1:s2
    [m,Index] = max( Y(:,i)) ;
    if(Index == c(i)) 
        hitNum = hitNum + 1 ; 
    end
end
sprintf('模型識別率是 %3.3f%%',100 * hitNum / s2 )

% Step10:輸出顯示訓練后的權值和閾值,其中model.iw顯示網絡的權重,model.b顯示訓練后的神經網絡的偏置值
iw1 = model.IW{1};
b1 = model.b{1};
iw2 = model.IW{2};
b2 = model.b{2};

程序結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM