2015-06-12 45 views
0

我参加了Coursera的ML课程并修改了其中一个作业,以构建“通用”神经网络以用于我的项目。随机数量的隐藏单位提高了测试集的准确性/ F分数

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

例如一个隐藏单元的F-score是0.79,2,3和4是〜0.83,但如果我突然增加到100,我会得到一个完美的1.0。在某个时候,我得到的最低F-score是0.99。

我敢肯定在代码中没有错误,因为预测反映了所获得的F分数(加上当我将它作为家庭作业提交时,没有任何错误)。

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

您对此有何想法/参考?它只是更多的神经元,你扔在它更好?

谢谢。

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

回答

0

我发现代码过多,很难看到全貌的分区,但我想这对你的课程有一定意义。我想澄清一些事情,我还不能发表评论 - 你的学习规则是什么?如有必要,我会根据澄清调整我的答案,但这是以Levenberg-Marquardt为基准方法。

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

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

+0

嗨roganjosh,谢谢你的回应。 网络在训练和测试集上表现良好的事实应该表明没有过度配合。它缺乏CV集,因为我手动执行迭代,检查精度/ F分数,调整参数并重复(我知道这是一种快速而肮脏的方法,原谅我的懒惰)。 我不明白你所提的一些观点,正如我所说的,我知道Coursera的一点点ML,就是这样。但是如果你可以自己测试网络,我很乐意听到你得到的结果。 谢谢! –

+0

你能澄清你不明白的部分吗?否则我无法解决它们。 – roganjosh

+0

通过阅读你的其他答案,我明白我的“测试”集和你的“验证”集是一回事。我所做的就是针对两组测试模型,并检查是否没有过度拟合(即错误不会在测试集中增加)。所以我们称之为“验证集”。所以重点是:我越增加神经元的数量,**两个**组的错误越少,所以在这里没有过度拟合(据我所知)。希望我使情况更清楚。谢谢。 –