如何改善神经网络输出?

时间:2015-04-17 17:08:33

标签: machine-learning neural-network cross-validation

我有一个包含150行,45个功能和40个输出的数据集。我可以很好地过度填充数据,但我的交叉验证集无法获得可接受的结果。

有25个隐藏层和相当多的迭代次数,我的训练集得到了~94%的准确率;在我脸上露出笑容。但交叉验证结果不到15%。

因此,为了减轻过度拟合,我开始使用正则化参数(lambda)以及隐藏层的数量。我得到的最好结果(CV)是训练集24%,训练集34%,lambda = 1,70个隐藏层和14000次迭代。增加it的数量也使情况变得更糟;我不明白为什么我不能用增加的lambda和iters来改善CV结果?

这是我尝试过的lambda-hiddenLayer-iter组合:

https://docs.google.com/spreadsheets/d/11ObRTg05lZENpjUj4Ei3CbHOh5mVzF7h9PKHq6Yn6T4/edit?usp=sharing

尝试更智能的规则任何建议的方式参数 - 隐藏层分组合?还是其他改善我NN的方法?我使用来自Andrew Ng的ML类的matlab代码(使用反向传播算法。)

3 个答案:

答案 0 :(得分:5)

很难从150个具有45个功能的训练样例中学到任何东西(如果我正确地阅读了你的问题,那么40个可能的输出类别)。如果你想学习一个合理的分类器,你需要更多标记的训练样例 - 如果你有40个可能的类,可能需要数十或数十万。即使对于二进制分类或回归,您可能需要数千个具有45个有意义功能的示例。

答案 1 :(得分:3)

一些建议:

  • 过度拟合主要发生在神经网络的结构太复杂而无法解决手头的问题时。如果NN的结构太复杂,增加迭代次数不应该降低预测的准确性

  • 70个隐藏层非常多,您可以尝试大幅减少隐藏层的数量(到3-15)并增加迭代次数。从您的文件中可以看出,与70个隐藏层相比,15个隐藏层是正常的

  • 在减少隐藏层数的同时,可以改变隐藏层中神经元的数量(增加/减少)并检查结果如何变化

答案 2 :(得分:2)

我同意洛根。您在数据集中看到的内容非常有意义。如果你只是训练一个具有40个类的45个特征的NN分类器,你将获得很高的准确性,因为你有比输出类更多的功能。因此,模型基本上可以将每个特征“分配”到输出classe之一,但是得到的模型将高度过度拟合,并且可能不代表您正在建模的任何内容。您的交叉验证结果显着降低似乎是正确的。

你应该重新思考你的方法:为什么你有40个班级?也许您可以将问题转变为回归问题而不是分类问题?还尝试查看其他算法,例如Random Forrest。或者显着减少功能的数量。