观察数和变量数的比例应该是多少?如何检测神经网络模型中的过拟合以及避免过拟合的方法有哪些?如果我想用神经网络进行分类,这些类应该有相同的频率吗?请帮帮我。
如何有效地执行神经网络建模?
我会给出的建议如下:
在进入神经网络之前,用尽线性模型(例如逻辑回归)的可能性,特别是如果你有很多特征并且没有太多的观察。对于许多问题,神经网络的性能并没有超过简单的线性分类器,而确定你的问题是否属于这一类的唯一方法就是尝试一下。
首先研究核方法(例如支持向量机 (SVM)、核逻辑回归)、高斯过程模型。在这两种情况下,过度拟合都可以通过调整少量超参数来有效控制。对于核方法,这通常通过交叉验证来执行,对于高斯过程模型,这是通过最大化边际似然(也称为模型的贝叶斯“证据”)来执行的。我发现使用这些方法比使用神经网络更容易获得合理的模型,因为避免过度拟合的方法要简单得多。
如果您真的想使用神经网络,请从(正则化的)径向基函数网络开始,而不是前馈多层感知器(MLP)类型的网络。
如果您确实使用 MLP,则使用正则化。如果这样做,它将对架构的选择不那么敏感,例如优化隐藏单元的数量。相反,您所要做的就是为正则化参数选择一个好的值。MacKay 的贝叶斯“证据框架”提供了一种设置正则化参数的好方法。如果你使用正则化,那么观察的数量和变量的数量就不是什么问题了。
要检测过拟合,只需执行交叉验证来测试泛化性能。
至于频率相等的类,要记住的是,如果你用一个平衡的训练集训练一个模型,但这些类在操作数据中不平衡,那么该模型很可能低估了少数类。如果您使用概率分类器(例如逻辑回归或神经网络),则始终可以在训练后纠正估计的概率以解决该问题。如果您的数据集非常不平衡,我建议对正类和负类的模式进行差异加权,并通过交叉验证选择权重因子。
然而,当类别非常不平衡时,通常情况下,假阴性和假阳性错误具有不同的成本(例如,在医学筛查测试中,假阴性比假阳性更糟糕)。所以通常你需要做的就是将错误分类成本包含在用于训练网络的误差函数中。
如果您是 MATLAB 用户(像我一样),我强烈推荐 NETLAB 软件(Ian Nabney 和 Chris Bishop)或与 Rasmussen 和 Williams 的 Gaussian Process for Machine Learning 一书配套的软件。我还可以向任何刚开始接触神经网络的人强烈推荐 Chris Bishop 的《用于模式识别的神经网络》一书。这是一本很棒的书,内容非常清晰,涵盖了真正理解您在做什么所需的最低数学水平,并且大部分内容都是在 NETLAB 软件中实现的(也可以在 Octave 下运行)。
高温高压
PS 使用神经网络建模的最佳方法可能是使用基于 Radford Neal 开发的基于混合蒙特卡罗 (HMC) 的贝叶斯方法。通常,当您尝试优化某些参数并最终导致过度拟合时,问题就始于建模。最好的解决方案是永远不要优化任何东西,而是边缘化(整合)参数。遗憾的是,这种集成无法通过分析执行,因此您需要改用基于采样的方法。然而,这是 (a) 计算量大, (b) 有点“黑魔法”,需要深入的理解和经验。