次优提前停止可防止机器学习中的过度拟合?
Suboptimal Early Stopping prevents overfitting in Machine Learning?
我一直在使用 xgboost 的早期停止功能来处理各种问题陈述,主要是分类问题。但是我在处理不同领域的几个数据集时有以下观察
在最小评估误差点,但训练和测试之间的差异(用于评估以停止训练轮次)误差相对较高,模型的行为似乎已经结束-配件。
在这种情况下,当我考虑在训练和测试(训练期间的评估数据)错误相当相似(尽管评估错误不是最小值)的点停止训练轮时,模型执行更好,根据误差项估计。
因此问题是:是否应该比最佳点(训练和测试(eval)之间存在非常高的发散误差,尽管验证误差较低)更早地停止训练轮数?
请假设已采取一切措施正确拆分训练、测试、验证等数据集
谢谢。
如果你提前停止,你的参数将无法很好地适应你的训练数据。另一方面,如果你过度拟合,你将无法通过验证集。您可以做的(完美的经验法则)是在验证错误最小的参数处停止。这是假设训练误差总是随着迭代次数的增加而下降,但验证集的误差先下降后上升。
对于项目,这应该足够好。而对于更高级的应用程序,您可能希望搜索交叉验证等验证技术。但想法是相似的。
xgboost 提前停止的工作原理如下:
- 它查看你的 "watchlist" 的最后一个元组(通常你把 validation/testing 集合)放在那里
- 它根据你的评价指标评价这个集合
- 如果此评估
x
次(其中 x = early_stopping_rounds
)没有更改
- 模型停止训练,并知道最好的迭代在哪里(对你的 test/validation 集进行最好的评估)
是的,您的模型将使用 x
不必要的迭代(助推器)构建。但假设你在 clf
中训练有素 xgboost.Booster
# 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)
你的问题否。
我一直在使用 xgboost 的早期停止功能来处理各种问题陈述,主要是分类问题。但是我在处理不同领域的几个数据集时有以下观察
在最小评估误差点,但训练和测试之间的差异(用于评估以停止训练轮次)误差相对较高,模型的行为似乎已经结束-配件。
在这种情况下,当我考虑在训练和测试(训练期间的评估数据)错误相当相似(尽管评估错误不是最小值)的点停止训练轮时,模型执行更好,根据误差项估计。
因此问题是:是否应该比最佳点(训练和测试(eval)之间存在非常高的发散误差,尽管验证误差较低)更早地停止训练轮数?
请假设已采取一切措施正确拆分训练、测试、验证等数据集
谢谢。
如果你提前停止,你的参数将无法很好地适应你的训练数据。另一方面,如果你过度拟合,你将无法通过验证集。您可以做的(完美的经验法则)是在验证错误最小的参数处停止。这是假设训练误差总是随着迭代次数的增加而下降,但验证集的误差先下降后上升。 对于项目,这应该足够好。而对于更高级的应用程序,您可能希望搜索交叉验证等验证技术。但想法是相似的。
xgboost 提前停止的工作原理如下:
- 它查看你的 "watchlist" 的最后一个元组(通常你把 validation/testing 集合)放在那里
- 它根据你的评价指标评价这个集合
- 如果此评估
x
次(其中x = early_stopping_rounds
)没有更改 - 模型停止训练,并知道最好的迭代在哪里(对你的 test/validation 集进行最好的评估)
是的,您的模型将使用 x
不必要的迭代(助推器)构建。但假设你在 clf
xgboost.Booster
# 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)
你的问题否。