我有一个包含150行、45个特征和40个输出的数据集。我能够很好地过拟合数据,但无法在交叉验证集上获得可接受的结果。
使用25个隐藏层和相当多的迭代次数,我能够在训练集上获得约94%的准确率,这让我非常高兴。但交叉验证结果却不到15%。
为了减轻过拟合,我开始调整正则化参数(lambda)和隐藏层的数量。我能得到的最佳结果(CV)是在训练集上24%,在验证集上34%,使用lambda=1,70个隐藏层和14000次迭代。增加迭代次数反而使结果更差;我不明白为什么增加lambda和迭代次数无法改善CV结果?
以下是我尝试过的lambda-隐藏层-迭代组合:
https://docs.google.com/spreadsheets/d/11ObRTg05lZENpjUj4Ei3CbHOh5mVzF7h9PKHq6Yn6T4/edit?usp=sharing
有什么建议可以更聪明地尝试正则化参数-隐藏层-迭代的组合吗?或者有其他方法可以改进我的神经网络?我使用的是Andrew Ng的机器学习课程中的Matlab代码(使用反向传播算法)。
回答:
仅用150个训练样本和45个特征(如果你问题中的描述正确,还有40个可能的输出类别)很难学到任何东西。如果你想学习一个合理的分类器,你需要更多的标记训练样本——如果你有40个可能的类别,可能需要几十万或几百万个样本。即使是二元分类或回归,如果你有45个有意义的特征,你也可能需要数千个样本。