首页 > 解决方案 > mlr 中的警告“NA 用作学习器参数缺失的默认值”是什么意思?

问题描述

我正在通过 mlr 包运行分类 xgboost。我的数据中有缺失值,我想保留这些值(也就是说,我想保留这些观察结果并且我想避免插补)。我了解 mlr 中的 xgboost 实现可以处理缺失值。但是,我不明白 mlr 的 makeLearner 函数提供的警告。

我试图阅读文档并在其他人的代码中发现了这个警告。但是我没有看到以对我有意义的方式解决的警告。

例如,我已经阅读了这个关于警告的讨论,但它并没有为我澄清事情: https ://github.com/mlr-org/mlr/pull/1225

调用 makeLearner 函数时出现警告:

xgb_learner <- makeLearner(
  "classif.xgboost",
  predict.type = "prob",
  par.vals = list(
    objective = "binary:logistic",
    eval_metric = "error",
    nrounds = 200,
    missing = NA,
    max_depth = 6,
    eta = 0.1,
    gamma = 5,
    colsample_bytree = 0.5,
    min_child_weight = 1,
    subsample = 0.7

  )
)
Warning in makeParam(id = id, type = "numeric", learner.param = TRUE, lower = lower,  :
  NA used as a default value for learner parameter missing.
ParamHelpers uses NA as a special value for dependent parameters.

我的缺失值目前被编码为缺失值(即 NA)。很明显,R 从以下方面识别它们:

> sum(is.na(training$day))
[1] 58

从 getParamSet 函数看来,缺少的参数似乎采用从 -Inf 到 Inf 的数值。因此,也许 NA 不是有效值?

> getParamSet("classif.xgboost")
Warning in makeParam(id = id, type = "numeric", learner.param = TRUE, lower = lower,  :
  NA used as a default value for learner parameter missing.
ParamHelpers uses NA as a special value for dependent parameters.
                                Type  len             Def               Constr Req Tunable Trafo
booster                     discrete    -          gbtree gbtree,gblinear,dart   -    TRUE     -
watchlist                    untyped    -          <NULL>                    -   -   FALSE     -
eta                          numeric    -             0.3               0 to 1   -    TRUE     -
gamma                        numeric    -               0             0 to Inf   -    TRUE     -
max_depth                    integer    -               6             1 to Inf   -    TRUE     -
min_child_weight             numeric    -               1             0 to Inf   -    TRUE     -
subsample                    numeric    -               1               0 to 1   -    TRUE     -
colsample_bytree             numeric    -               1               0 to 1   -    TRUE     -
colsample_bylevel            numeric    -               1               0 to 1   -    TRUE     -
num_parallel_tree            integer    -               1             1 to Inf   -    TRUE     -
lambda                       numeric    -               1             0 to Inf   -    TRUE     -
lambda_bias                  numeric    -               0             0 to Inf   -    TRUE     -
alpha                        numeric    -               0             0 to Inf   -    TRUE     -
objective                    untyped    - binary:logistic                    -   -   FALSE     -
eval_metric                  untyped    -           error                    -   -   FALSE     -
base_score                   numeric    -             0.5          -Inf to Inf   -   FALSE     -
max_delta_step               numeric    -               0             0 to Inf   -    TRUE     -
missing                      numeric    -                          -Inf to Inf   -   FALSE     -

我是否需要将这些重新编码为特定值,然后传递给 mlr(通过 makeLearner 中的缺失 = [特定值])?做点别的吗?或者这个警告是否值得关注?

非常感谢您的澄清。

标签: rxgboostmlr

解决方案


此警告来自 ParamHelpers,在这种情况下是无害的。这是一项标准检查,不考虑特定情况。


推荐阅读