随机数量的隐藏单位可提高测试集的准确度/ F值

时间:2015-06-12 22:33:48

标签: machine-learning neural-network

我在Coursera上学了ML课程并修改了其中一个作业,以构建一个“通用”神经网络,用于我的项目。

当我在同一个数据集上测试NN(5个输入,2个输出)时,调整我发现的参数,通过任意为唯一隐藏层选择隐藏单元的数量,交叉验证中的F分数/测试集显着改善。

例如,对于1个隐藏单位,F得分为~0.79,2,3和4为〜0.83但是如果我突然将其增加到100,我得到一个完美的1.0。在某些时候,我得到的最低F分数是0.99。

我确信代码中没有错误,因为预测反映了获得的F分数(加上我作为家庭作业提交时没有任何错误)。

这件事让我抓狂,因为据我所知,“良好做法”是将隐藏单位的数量保持在输入和输出的数量之间(在我的情况下是5到2)。

您对发生这种情况的原因有什么想法/参考吗?是不是你投入的神经元越多越好?

谢谢。

链接到源代码和示例数据: https://github.com/mardurhack/NN_question_stackoverflow

1 个答案:

答案 0 :(得分:0)

我发现该代码的分区过多而且很难看到完整的图片,但我想这对你的课程有一些意义。我想澄清一些事情,我还不能发表评论 - 你的学习规则是什么?如果有必要,我会根据澄清调整我的答案,但这是假设Levenberg-Marquardt作为基线方法。

在“train.m”中,您只将数据划分为训练和测试集。因此,这意味着您缺少任何验证数据,我最近在答案here中写了一个外行人对此的描述。您添加的隐藏神经元越多,您允许网络扭曲其输出以匹配您尝试映射输入的内容越多,并且它越容易过度拟合。因此,我预计在具有更多神经元的网络上预测准确性会增加,但这绝不会导致您创建“更好”模型的结论。

我认为下一部分相当不太可能,因为它需要相对大量的节点来获得合适的答案 - 但可能是系统响应实际上遵循一套非常简单的规则(受过良好训练的暗示)即使在没有验证数据的情况下,模型也可以很好地对抗您问题中的测试数据。在那种情况下,作为一名工程师,我会寻找这个问题的机械模型,而不是作为最终目标的现象学模型。我目前无法建立自己的模型来进一步研究。