设置 XGBoost 提前停止的 Tol
Posted
技术标签:
【中文标题】设置 XGBoost 提前停止的 Tol【英文标题】:Setting Tol for XGBoost Early Stopping 【发布时间】:2017-10-02 00:39:45 【问题描述】:我正在使用带有提前停止功能的 XGBoost。在大约 1000 个 epoch 之后,模型仍在改进,但改进的幅度非常低。即:
clf = xgb.train(params, dtrain, num_boost_round=num_rounds, evals=watchlist, early_stopping_rounds=10)
是否可以为提前停止设置“tol”?即:不触发提前停止所需的最低改进水平。
Tol 是 SKLearn 模型中的常用参数,例如 MLPClassifier 和 QuadraticDiscriminantAnalysis。谢谢你。
【问题讨论】:
【参考方案1】:我认为 xgboost 中没有参数tol
,但您可以将early_stopping_round
设置得更高。这个参数意味着如果测试集的性能没有提高early_stopping_round
次,那么它就会停止。如果您知道在 1000 个 epoch 之后您的模型仍在改进但非常缓慢,例如将 early_stopping_round
设置为 50,这样它会更“容忍”性能的微小变化。
【讨论】:
您是说将early_stopping_round
设置得更低(而不是更高)?低值会比高值更早终止。【参考方案2】:
issue 仍然在 XGBoost Github 的 repo 中打开,因此即使 sklearn
和 h2o
等包装器似乎已经具有此功能,xgboost
本身仍然缺少 stopping_tolerance
超参数。 .
让我们投票it here 以加快速度,好吗?
【讨论】:
【参考方案3】:这个选项has been implemented。
只需将值传递给tolerance
:
early_stop = xgb.callback.EarlyStopping(tolerance=1e5)
booster = xgb.train(
'objective': 'binary:logistic',
'eval_metric': ['error', 'rmse'],
D_train,
evals=[(D_train, 'Train'), (D_valid, 'Valid')],
callbacks=[early_stop],
)
【讨论】:
以上是关于设置 XGBoost 提前停止的 Tol的主要内容,如果未能解决你的问题,请参考以下文章
XGBoost 提前停止给出 KeyError: 'best_msg'
在 SciKit-Learn 中使用 XGBoost 交叉验证进行网格搜索和提前停止