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

时间:2019-03-24 17:31:34

标签: r lightgbm

最近,我正在学习LightGBM软件包,并希望调整它的参数。

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

一个问题是:当我使用函数lightgbm(data, label = NULL, weight = NULL, params = list(), nrounds = 10, verbose = 1)构建模型时,能否将weightnroundsmany 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参数和许多其他parameters不在params_list之外。

您能帮我弄清楚:总共可以在params_list中输入哪些参数?那就是仅使用data自变量和params自变量(其他参数放入params列表对象中)构建最终模型,是否可行?

谢谢。

1 个答案:

答案 0 :(得分:1)

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)