【问题标题】:Need help understanding the MLPClassifier需要帮助了解 MLPClassifier
【发布时间】:2021-01-18 20:21:48
【问题描述】:

我使用 MLPClassifier 已经有一段时间了,我认为我一直对函数的作用有错误的解释,我想我现在明白了,但我不确定。所以我会总结一下我的理解,如果你能在正确的理解上加上你的想法,那就太好了。

因此,我们正在使用 MLPClassifier 构建基于训练数据集的神经网络。设置early_stopping = True 可以在训练过程中使用验证数据集,以检查网络是否也在处理新数据集。如果early_stopping = False,则不会在他的过程中进行验证。完成构建后,如果我们愿意,我们可以使用拟合模型来预测第三个数据集。 我之前的想法是,在整个训练过程中,一个验证数据集被搁置一边,在每个 epoch 之后进行验证。

我不确定我的问题是否可以理解,但如果你能帮助我理清思路就好了。

【问题讨论】:

  • 我重新提出了这个问题。我认为您要了解的是 early_stopping 参数如何精确地使用验证集。如果设置了参数,则算法 90/10 在整个过程开始时将训练数据集拆分为训练和验证数据集(因此不是每个训练步骤)。在每一步之后,中间模型都会在验证集上进行评估,如果改进低于tol,则该过程会提前停止。使用的指标始终是“准确度”,这对于可能的多类分类器来说是非常糟糕的(受限于)。

标签: scikit-learn training-data test-data mlp


【解决方案1】:

sklearn.neural_network.MLPClassifier 默认使用(一种变体)随机梯度下降 (SGD)。您的问题可以更笼统地描述为如何使用 SGD 来优化监督学习环境中的参数值。这里没有特定于多层感知器 (MLP) 的内容。

因此,我们正在使用 MLPClassifier 构建基于训练数据集的神经网络。设置early_stopping = True可以在训练过程中使用验证数据集

正确,不过需要注意的是,这个验证集是从原始训练集中拿走的。

为了检查网络是否也在新的集合上工作。

不完全是。提前停止的目的是在训练过程中跟踪验证分数,一旦验证分数不再显着提高就停止训练。

如果early_stopping = False,则在[t]过程中没有验证完成。完成构建后,如果我们愿意,我们可以使用拟合模型在第三个数据集上进行预测。

正确。

我之前的想法是,在整个训练过程中,一个验证数据集被搁置一边,在每个 epoch 之后进行验证。

您现在可能知道,事实并非如此。将学习过程划分为 epoch 有点武断,与验证无关。

【讨论】:

  • 非常感谢您的回答!我也阅读了很多关于神经网络的内容,并且经常解释说使用过程中的验证集来验证模型并避免过度训练。这是否仅适用于其他功能,还是 MLPClassifier 中也有选项?
  • @AnnaLee 提前停止选项确实用于避免过度拟合,但如果您正在寻找调整超参数意义上的验证,那么您将需要添加另一层复杂性,例如通过交叉验证。当然也有 scikit-learn 类,您可以将它们与 MLPClassifier 结合使用。
  • 好的,非常感谢!我目前的计划是在第一步中组合不同的层大小(使用训练和验证损失),然后使用网格搜索和交叉验证调整所有其他超参数,以获得第一步中最成功的层大小。你怎么看?
  • @AnnaLee Gridsearch 与交叉验证是一个不错的选择,如果它不需要太长时间。不过,你计划的第一部分对我来说听起来很奇怪。根据您的标准,具有最大层大小的模型不总是最好的吗?
  • 不,我不这么认为,因为较大的网络往往会过度拟合训练数据并且在验证集上表现不佳。我总是会检查验证集的损失是否明显高于(更糟)训练损失
猜你喜欢
  • 2017-06-19
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
相关资源
最近更新 更多