我有一個非常小的數據集,只有200行。我只有3列;前兩個是數字(負值和正值),最後一個是字母。Encog框架沒有給可接受的誤差率
我試圖根據前兩個數字列在最後一列分類。
我的逗號分隔的數據看起來類似這樣(前正常化):
HomeTeamLine,AwayTeamLine,Winner-p0,Winner-p1
-0.40493939,1,-1,0
-0.22929292,1,-1,0
-1,-0.9233003,0,-1
我已經試過我能想到的,包括傳播與模擬神經的每一個方法:歸一化後
Home Team Line,Away Team Line,Winner
-6,0,H
-8,0,H
0,-21,A
etc...
示例數據退火,但Encog框架仍然找不到模式。
我的代碼類似於此(從內存中寫入):
// build network
BasicNetwork network = new BasicNetwork();
network.AddLayer(new BasicLayer(new ActivationTANH(), true, 2));
network.AddLayer(new BasicLayer(new ActivationTANH(), true, 14));
network.AddLayer(new BasicLayer(new ActivationTANH(), true, 2));
network.Structure.FinalizeStructure();
network.Reset();
// train network
var trainingSet = // load training CSV
ITrain train = new ResilientPropagation(network, trainingSet);
do
{
train.Iteration();
Console.WriteLine("Epoch #" + epoch + " Error:" + train.Error);
epoch++;
} while (train.Error > 0.001);
我的錯誤率從未低於去74%。
我假設問題是我沒有使用足夠的數據行,或者我沒有使用足夠的功能(列),或者數據中沒有任何模式。
什麼是推薦的方法來實現可接受的錯誤率是多少?
你是如何爲您創造trainingSet理想值?因爲你有2個輸出神經元,所以你可以使用具有二進制值的double [] []'創建'理想'值,例如:對於'H':'new double [] {1,0 }'和'A':'new double [] {0,1}'。 –
謝謝。規範化數據使用兩列:「H = -1,0」和「A = 0,-1」或反之亦然。我不確定這是不是你的意思?我將此列指定爲「OneOf」操作方法。 – user1477388
是的,你明白我想說什麼。由於您使用ActivationTANH作爲激活函數,因此應該將輸出標準化爲與ActivationTANH,'-1'和'1'兼容的正確時間間隔。 –