數據集介紹
鳶尾花數據集一共有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};
程序結果