我一直在使用xgboost的早期停止功能处理各种问题陈述,主要是分类问题。但是在处理几个不同域的数据集时,我有以下观察见
在最小评估误差点处,但是训练和测试(用于评估以停止训练回合)之间的差异相对较大时,该模型的行为似乎表现为过度拟合。 / p>
在这种情况下,当我考虑在训练和测试(训练期间的评估数据)误差相当相似(尽管评估误差并非最小)的点停止训练回合时,模型表现更好,并且按照错误项估计。
因此,问题是:训练轮次的数量是否应该比最佳点(在训练和测试(评估)之间存在很高的发散误差,而验证误差更低)的最佳点更早地停止?
请确保已采取一切措施正确分割数据集以进行训练,测试,验证等。
谢谢。
答案 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)
对您的问题的回答否。