【问题标题】:Setting Tol for XGBoost Early Stopping设置 XGBoost 提前停止的 Tol
【发布时间】: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。谢谢你。

【问题讨论】:

    标签: python machine-learning xgboost


    【解决方案1】:

    我认为 xgboost 中没有参数tol,但您可以将early_stopping_round 设置得更高。这个参数意味着如果测试集的性能没有提高early_stopping_round 次,那么它就会停止。如果您知道在 1000 个 epoch 之后您的模型仍在改进但非常缓慢,例如将 early_stopping_round 设置为 50,这样它会更“容忍”性能的微小变化。

    【讨论】:

    • 您是说将early_stopping_round 设置得更低(而不是更高)?低值会比高值更早终止。
    【解决方案2】:

    issue 仍然在 XGBoost Github 的 repo 中打开,因此即使 sklearnh2o 等包装器似乎已经具有此功能,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],
              )
      

      【讨论】:

        猜你喜欢
        • 2020-05-19
        • 2017-08-17
        • 2016-10-20
        • 2017-09-18
        • 2018-09-13
        • 1970-01-01
        • 2016-03-29
        • 2021-03-09
        • 2018-03-24
        相关资源
        最近更新 更多