Matlab神經網絡工具箱學習之二


螃蟹的分類

這個例子的目的是根據螃蟹的品種、背殼的長寬等等屬性來判斷螃蟹的性別,雄性還是雌性。

訓練數據一共有六個屬性:

  species, frontallip, rearwidth, length, width and depth.

這里每個屬性所對應的是螃蟹哪一部分的真實性狀並不是關鍵。我們關心的只是已知樣本是6維的向量,輸出是0/1值,

求分類效果最好的網絡模型。

 

首先載入樣本數據

[x,t] = crab_dataset;
% size(x) = [6, 200];
% size(t) = [2, 200];

然后初始化神經網絡

例子里使用含有一層隱含層的模型,隱含層有10個神經元。調用Matlab的patternnet()函數。

net = patternnet(10);
view(net)
----------------------------

patternnet()函數的參數有(hiddenSizes,trainFcn,performFcn)三個。hiddenSizes默認值是10,可以用數組表示多個隱含層。trainFcn默認值是'trainscg',Performance function默認值是'crossentropy'。如果想要有兩個隱含層,每層的神經元都是10個,則可以寫成

net = patternnet([10,10]);

接下去是訓練網絡。把網絡模型、訓練樣本和測試樣本作為參數傳入train()函數。系統自動將數據分為training和validation.

[net,tr] = train(net,x,t);
nntraintool
--------------------------

可以在窗口點擊Performance或者調用PLOTPERFORM查看訓練的過程。

plotperform(tr)
------------------------

測試分類器

testX = x(:,tr.testInd);
testT = t(:,tr.testInd);

testY = net(testX);
testIndices = vec2ind(testY);

plotconfusion(testT,testY);

下圖表示的是分類器的效果。綠色表示分類器的分類結果和測試數據的label一致,紅色表示兩者結果不一致。紅色區域內的百分數越小,說明分類器結果的誤差越小,分類結果越好。如果誤差過大,則需要增加樣本進再行訓練或者增加隱含層的神經元個數。


免責聲明!

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



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