在 R 中使用 LightGBM; lgb.Dataset.construct 的目的是什么?

Using LightGBM in R; what is the purpose of lgb.Dataset.construct?

我已经使用官方包在 R 中使用 LightGBM 几个星期了。最近我在查看他们的指南中的 API 时遇到了我没有使用过的函数 lgb.Dataset.construct。但我一直在做的事情似乎工作正常,所以也许这个电话是不必要的?手册页 (https://lightgbm.readthedocs.io/en/latest/R/reference/lgb.Dataset.construct.html) 不是特别有用,只是说 'Construct[s] Dataset explicitly' 并给出示例:

data(agaricus.train, package = "lightgbm")
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label = train$label)
lgb.Dataset.construct(dtrain)

我的代码看起来很像,但是没有最后一行,而且正如我所说的那样工作正常(据我所知)

LightGBM 会在训练前进行一些 one-time 预处理,例如将连续特征分桶到直方图中并丢弃不可分割的特征。有关更详细的说明,请参阅 this answer

在 R 包中创建一个 Dataset object 告诉 LightGBM 在哪里可以找到原始(未处理的)数据以及在进行预处理时要使用的参数,但实际上并没有做那个工作。

预处理工作只有在 Dataset 被“构建”后才会真正发生。

But the stuff I've been doing seems to work fine, so maybe this call is unnecessary

如果您使用 lightgbm::lgb.cv()lightgbm::lightgbm()lightgbm::lgb.train(),则无需事先调用 lgb.Dataset.construct()。它将在这些函数中被 {lightgbm} 调用。

例如,您可以 运行 下面的代码来查看 lgb.train() 的训练不需要显式调用 lgb.Dataset.construct().

library(lightgbm)
data(agaricus.train, package = "lightgbm")
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label = train$label)
model <- lgb.train(
    params = list(
        objective = "regression"
        , metric = "l2"
    )
    , data = dtrain
    , nrounds = 5L
)

鉴于上述背景,针对标题中的问题。

what is the purpose of lgb.Dataset.construct?

此函数可用于 运行 Dataset 训练过程之外的构造。在大多数情况下,您不需要这样做,但如果您想要测量训练过程需要多长时间以及您希望从该时间中删除数据集构建,这可能会有用。