【问题标题】:Using LightGBM in R; what is the purpose of lgb.Dataset.construct?在 R 中使用 LightGBM; lgb.Dataset.construct 的目的是什么?
【发布时间】:2021-08-27 20:46:10
【问题描述】:

几周以来,我一直在使用官方软件包在 R 中使用 LightGBM。最近我在他们的指南中查看 API 并遇到了我没有使用过的函数 lgb.Dataset.construct。但我一直在做的事情似乎工作正常,所以也许这个电话是不必要的?手册页 (https://lightgbm.readthedocs.io/en/latest/R/reference/lgb.Dataset.construct.html) 并不是特别有用,只是说它“明确地构造 [s] 数据集”并给出示例:

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

我的代码看起来很像这样,但没有最后一行,就像我说的那样一直运行良好(据我所知)

【问题讨论】:

    标签: r lightgbm


    【解决方案1】:

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

    在 R 包中创建一个Dataset 对象会告诉 LightGBM 在哪里可以找到原始(未处理的)数据以及在进行该预处理时要使用哪些参数,但它实际上并没有这样做。

    只有在“构造”Dataset 时才会真正进行预处理工作。

    但我一直在做的事情似乎工作正常,所以也许这个电话是不必要的

    如果您使用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
    )
    

    鉴于这个背景,标题中的问题。

    lgb.Dataset.construct 的目的是什么?

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

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2021-10-25
      • 2022-07-26
      • 2019-06-24
      • 2018-08-26
      • 1970-01-01
      • 2018-11-19
      • 2020-07-09
      • 2019-09-27
      相关资源
      最近更新 更多