我有一个非常小的数据集,只有 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 框架仍然找不到模式。
我的代码看起来与此类似(从内存中写入):
// 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%。
我假设问题是我没有使用足够的数据行,或者我没有使用足够的特征(列),或者数据中根本没有模式。
达到可接受的错误率的推荐方法是什么?