R: 我可以将权重参数传递给 LightGBM 中的 params = list() 吗?

R: Can I pass the weight parameter into the params = list() in LightGBM

最近在学习LightGBM包,想调参数

我想尝试LightGBM中所有可以调整的参数。

一个问题是:当我使用函数 lightgbm(data, label = NULL, weight = NULL, params = list(), nrounds = 10, verbose = 1) 构建模型时,我可以将 weightnrounds 以及 many other parameters 放入列表对象中并且提供给 params 参数?

下面的代码是我用的:

# input data for lgb.Dataset() 
data_lgb <- lgb.Dataset(
  data = X_tr,
  label = y_tr
)

# can I put all parameters to be tuned into this list?
params_list <- list(weight = NULL, nrounds = 20, verbose = 1, learning_rate = 0.1)

# build lightgbm model using only: data_lgb and params_list
lgb_model <- lightgbm(data_lgb, params = params_list)

我可以使用上面的代码来实现吗?

我问是因为我有一个很大的训练数据集(200 万行和 700 个特征)。如果我将 lgb.Dataset() 放入 lightgbm 中,例如 lightgbm(data = lgb.Dataset(data = X_tr,label = y_tr), params = params_list),那么多模型构建需要时间。因此,我首先得到了用于lightgbm的数据集,并且对于每个模型,数据集是恒定的,我所做的只能关注不同的参数。

不过,我不确定,总共有多少个参数可以放入params_list?比如weight参数可以在params_list里面吗?当我查看帮助 ?lightgbm 时,我注意到 weight 参数和许多其他 parametersparams_list.

之外

你能帮我弄清楚:总共有哪些参数可以放入params_list?即最终模型仅使用 data 参数和 params 参数(其他参数放入 params 列表对象)构建,如上所示,是否可行?

谢谢。

Lightgbm 有许多您可以调整的参数。请阅读文档。

我正在粘贴我的模型脚本之一的一部分,其中显示了该过程。对你来说应该是一个很好的提示。

nthread <- as.integer(future::availableCores())
seed <- 1000
EARLY_STOPPING <- 50
nrounds <- 1000
param <- list(objective = "regression"
                    metric = "rmse",
                    max_depth = 3,
                    num_leaves = 5,
                    learning_rate = 0.1,
                    nthread = nthread,
                    bagging_fraction = 0.7,
                    feature_fraction = 0.7,
                    bagging_freq = 5,
                    bagging_seed = seed,
                    verbosity = -1,
                    min_data_in_leaf = 5)


dtrain <- lgb.Dataset(data = as.matrix(train_X),
                    label = train_y)

dval <- lgb.Dataset(data = as.matrix(val_X),
                    label = val_y)
valids <- list(val = dval)
bst <- lgb.train(param,
                 data = dtrain,
                 nrounds = nrounds,
                 data_random_seed = seed,
                 early_stopping_rounds = EARLY_STOPPING,
                 valids = valids)