螃蟹的分類
這個例子的目的是根據螃蟹的品種、背殼的長寬等等屬性來判斷螃蟹的性別,雄性還是雌性。
訓練數據一共有六個屬性:
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一致,紅色表示兩者結果不一致。紅色區域內的百分數越小,說明分類器結果的誤差越小,分類結果越好。如果誤差過大,則需要增加樣本進再行訓練或者增加隱含層的神經元個數。

