如何有效地执行神经网络建模?


13

观察数与变量数之比应为多少?如何在神经网络模型中检测过度拟合,以及避免过度拟合的方法是什么?如果我想使用神经网络进行分类,那么班级应该有相等的频率吗?请帮帮我。


1
您真的需要NN吗?这种方法被认为是过时的(部分原因是通常很难回答您的问题)。

1
@mbq:也许这应该是一个单独的问题,但是您能否进一步说明神经网络已经过时了呢?(和谁?)
naught101

1
@ naught101这是2010年的评论...如今,我们不幸地对此疯狂进行了复兴,因此我们将不得不等待几年,以便

1
@mbq:不能回答我的问题。但这也许是这样:stackoverflow.com/questions/683124/neural-networks-obsolete
naught101

Answers:


25

我的建议如下:

  1. 在继续使用神经网络之前,请先耗尽线性模型(例如逻辑回归)的可能性,尤其是在您具有许多功能而没有太多观察值的情况下。对于许多问题,神经网络并不能胜过简单的线性分类器,要找出问题所在的唯一方法就是尝试一下。

  2. 首先研究内核方法(例如,支持向量机(SVM),内核逻辑回归),然后是高斯过程模型。在这两种情况下,都可以通过调整少量超参数来有效控制过度拟合。对于核方法,这通常是通过交叉验证执行的;对于高斯过程模型,这是通过使边缘可能性(也称为模型的贝叶斯“证据”)最大化来执行的。我发现使用这些方法获得合理的模型比使用神经网络要容易得多,因为避免过度拟合的方法非常简单。

  3. 如果您真的想使用神经网络,请从(正规化的)径向基函数网络开始,而不是前馈多层感知器(MLP)类型的网络。

  4. 如果您确实使用MLP,请使用正则化。如果这样做,它将对架构选择不敏感,例如优化隐藏单元的数量。相反,您要做的就是为正则化参数选择一个合适的值。MacKay的贝叶斯“证据框架”提供了一种设置正则化参数的好方法。如果使用正则化,那么观察的数量和变量的数量将变得无关紧要。

要检测过度拟合,只需执行交叉验证即可测试泛化性能。

对于具有相同频率的班级,要记住的是,如果您使用平衡的训练集来训练模型,但是在运行数据中这些班级是不平衡的,那么该模型很可能会低估少数派。如果使用概率分类器(例如逻辑回归或神经网络),则始终可以在训练后更正估计的概率以解决该问题。如果您的数据集非常不平衡,我建议对正类和负类的模式进行加权加权,并通过交叉验证选择加权因子。

但是,当类别非常不平衡时,通常会出现假阴性和假阳性错误具有不同成本的情况(例如,在医学筛查测试中,假阴性比假阳性要差得多)。因此,通常您需要做的就是将分类错误的费用包括在用于训练网络的错误函数中。

如果您是MATLAB用户(像我一样),我强烈建议您使用NETLAB软件(Ian Nabney和Chris Bishop)或Rasmussen和Williams的《高斯机器学习过程》一书中附带的软件。我还可以强烈推荐Chris Bishop的《神经网络用于模式识别》一书,适合任何开始使用神经网络的人。这是一本非常出色的书,涵盖了非常清晰的材料和真正理解您正在做的工作所需的最低数学水平,并且大部分是在NETLAB软件(也可以在Octave下运行)中实现的。

高温超导

PS用神经网络建模的最佳方法可能是使用基于Radford Neal开发的Hybrid Monte Carlo(HMC)的贝叶斯方法。通常,当您尝试优化一些参数并最终导致过度拟合时,建模就会出现问题。最好的解决方案是永远不要优化任何东西,而要对参数进行边际化(集成)。遗憾的是,这种集成无法解析地执行,因此您需要使用基于采样的方法。但是,这是(a)计算上很昂贵,并且(b)有点“妖术”,需要深刻的理解和经验。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.