Encog Framework没有给出可接受的错误率

时间:2014-02-10 18:25:14

标签: c# machine-learning neural-network classification encog

我有一个非常小的数据集,只有200行。我只有3列;前两个是数字(负数和正数),最后一个是字母。

我正在尝试根据前两个数字列对最后一列进行分类。

我的逗号分隔数据与此类似(在规范化之前):

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

我已经尝试过各种我能想到的方法,包括传播和模拟神经退火,但是Encog Framework仍然无法找到模式。

我的代码与此类似(从内存写入):

// 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%。

我认为问题在于我没有使用足够的数据行,或者我没有使用足够的功能(列),或者数据中没有模式。

达到可接受的错误率的推荐方法是什么?

1 个答案:

答案 0 :(得分:1)

我还有另一个澄清。您有两个来自神经网络的输出,但在任务描述中,您说“我正在尝试根据前两个数字列对最后一列进行分类”,这对我来说有两个输入和一个输出。为什么你有另一个输出?另一个建议是再添加一个隐藏层。我不建议添加两个以上的隐藏层,因为在这种情况下错误函数

  

当错误从一层传播到另一层时,它们会随着层数呈指数级缩小。如上所述http://en.wikipedia.org/wiki/Deep_learning