200 行しかない非常に小さなデータセットがあります。列は 3 つしかありません。最初の 2 つは数値 (負と正) で、最後の 2 つは文字です。
最初の 2 つの数値列に基づいて最後の列を分類しようとしています。
コンマ区切りのデータは次のようになります (正規化前):
Home Team Line,Away Team Line,Winner
-6,0,H
-8,0,H
0,-21,A
etc...
正規化後のデータ例:
HomeTeamLine,AwayTeamLine,Winner-p0,Winner-p1
-0.40493939,1,-1,0
-0.22929292,1,-1,0
-1,-0.9233003,0,-1
Propagation や Simulated Neural Annealing など、考えられるすべての方法を試しましたが、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% を下回ることはありません。
問題は、十分なデータ行を使用していないか、十分な機能 (列) を使用していないか、単にデータにパターンがないことだと思います。
許容可能なエラー率を達成するための推奨されるアプローチは何ですか?