如何改进我的神经网络输出?

我有一个包含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个有意义的特征,你也可能需要数千个样本。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注