【问题标题】:R Xgboost validation error as stopping metricR Xgboost 验证错误作为停止指标
【发布时间】:2018-10-17 09:16:18
【问题描述】:

我在 xgboost 二元分类模型上使用训练和验证数据集。

params5 <- list(booster = "gbtree", objective = "binary:logistic", 
            eta=0.0001, gamma=0.5, max_depth=15, min_child_weight=1, subsample=0.6,
            colsample_bytree=0.4,seed =2222)


xgb_MOD5 <- xgb.train (params = params5, data = dtrain, nrounds = 4000,
                   watchlist = list(validation = dvalid,train = dtrain), 
                   print_every_n =30,early_stopping_rounds = 100
                  maximize = F ,serialize = TRUE)

它会自动选择训练误差作为停止指标。这导致模型在过度拟合时继续训练。

Multiple eval metrics are present. Will use train_error for early stopping.
Will train until train_error hasn't improved in 100 rounds.

如何将验证错误指定为停止指标?

【问题讨论】:

  • 试试xgb_MOD5 &lt;- xgb.train (params = params5, data = dtrain, nrounds = 4000, watchlist = list(validation = dvalid), print_every_n =30,early_stopping_rounds = 100 maximize = F ,serialize = TRUE)
  • 谢谢,成功了!

标签: r xgboost


【解决方案1】:

我不使用 xgboost 的 R 绑定,并且 R-package 文档没有具体说明它。但是,python-API documentation(参见early_stopping_rounds 参数文档)对此问题进行了相关说明:

至少需要evals 中的一项。如果有多个,将使用最后一个。

这里,evals 是评估指标的样本列表,即类似于您的 watchlist 参数。所以我猜,可能你只需要交换作为该参数提供的列表中的项目顺序

【讨论】:

  • 谢谢。 @abhiieor 的建议解决了它。由于我在监视列表中有 dvalid 和 dtrain(我猜这相当于 python xgboost 中的 evals),所以它选择了训练错误。
【解决方案2】:

感谢@abhiieor 的解决方案。从我观察到的补充,当我们只使用观察列表中的验证时:

xgb_MOD5 <- xgb.train (params = params5, data = dtrain, nrounds = 400,watchlist = list(validation = dvalid),
                   print_every_n =30,early_stopping_rounds = 100, maximize = F ,serialize = TRUE)

在运行时记录结果:

     [1]    validation-error:0.222037 
     Will train until validation_error hasn't improved in 100 rounds.

       [31] validation-error:0.201712 
       [61] validation-error:0.201635 

如果我们想在它运行时同时查看训练错误和验证错误,

将验证作为观察列表中的第二个参数添加,同时使用验证错误作为停止指标

xgb_MOD5 <- xgb.train (params = params5, data = dtrain, nrounds = 400,watchlist = list(train =dtrain,validation = dvalid),
                  print_every_n =30,early_stopping_rounds = 100, maximize = F ,serialize = TRUE)

       [1]  train-error:0.202131    validation-error:0.232341 
       Multiple eval metrics are present. Will use validation_error for early stopping.
      Will train until validation_error hasn't improved in 100 rounds.
       [31] train-error:0.174278    validation-error:0.202871 
       [61] train-error:0.173909    validation-error:0.202288 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多