2

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% を下回ることはありません。

問題は、十分なデータ行を使用していないか、十分な機能 (列) を使用していないか、単にデータにパターンがないことだと思います。

許容可能なエラー率を達成するための推奨されるアプローチは何ですか?

4

1 に答える 1

1

別の説明があります。ニューラルネットワークから2つの出力がありますが、タスクの説明では、「最初の2つの数値列に基づいて最後の列を分類しようとしています」と言っています.2つの入力と1つの出力があるように聞こえます。なぜ別の出力があるのですか?別の提案は、もう 1 つの非表示レイヤーを追加することです。2 つ以上の非表示レイヤーを追加することはお勧めしません。その場合、エラー関数が発生するためです。

エラーがレイヤーからレイヤーに伝播するにつれて、エラーはレイヤーの数に応じて指数関数的に縮小します。前述のようにhttp://en.wikipedia.org/wiki/Deep_learning

于 2014-12-29T23:18:30.940 に答える