次优停止不是最理想的方法,可以防止机器学习过度适应吗?

时间:2018-08-16 02:45:53

标签: machine-learning modeling cross-validation xgboost

我一直在使用xgboost的早期停止功能处理各种问题陈述,主要是分类问题。但是在处理几个不同域的数据集时,我有以下观察见

  • 在最小评估误差点处,但是训练和测试(用于评估以停止训练回合)之间的差异相对较大时,该模型的行为似乎表现为过度拟合。 / p>

  • 在这种情况下,当我考虑在训练和测试(训练期间的评估数据)误差相当相似(尽管评估误差并非最小)的点停止训练回合时,模型表现更好,并且按照错误项估计。

因此,问题是:训练轮次的数量是否应该比最佳点(在训练和测试(评估)之间存在很高的发散误差,而验证误差更低)的最佳点更早地停止?

请确保已采取一切措施正确分割数据集以进行训练,测试,验证等。

谢谢。

2 个答案:

答案 0 :(得分:2)

如果您提前停止,则您的参数将无法很好地适合您的训练数据。另一方面,如果拟合过度,则验证集将失败。您可以做的(完美的经验法则)是在验证误差最小的参数处停止。假定训练误差总是随着迭代次数的增加而下降,但对于验证集而言,训练误差却先下降然后上升。 对于项目,这应该足够好。对于更高级的应用程序,您需要搜索诸如交叉验证之类的验证技术。但是这个想法是相似的。

答案 1 :(得分:2)

在xgboost中提前停止的工作方式如下:

  • 它会在其中查看“监视列表”的最后一个元组(通常将验证/测试集放在其中)
  • 它将根据您的评估指标来评估此设置
  • 如果此评估连续x次(其中x = early_stopping_rounds次)没有改变
  • 模型停止训练,并知道最佳迭代在哪里(对测试/验证集进行最佳评估)

是的,将使用x不必要的迭代(增强器)构建模型。但是,假设您在xgboost.Booster

中有受过训练的clf
# Will give you the best iteration
best_iteration = clf.best_ntree_limit

# Will predict only using the boosters untill the best iteration
y_pred = clf.predict(dtest, ntree_limit=best_iteration)

对您的问题的回答