r 中的 lgb.train() 和 lightgbm() 有什么区别?

What's the difference between lgb.train() and lightgbm() in r?

我正在尝试使用 lightGBM 使用 R 构建回归模型, 我对某些功能有点困惑,when/how 无法使用它们。

第一个是我在标题中写的,lgb.train()和lightgbm()有什么区别?

文档中的描述(https://cran.r-project.org/web/packages/lightgbm/lightgbm.pdf)说 lgb.train 是 'Logic to train with LightGBM' 而 lightgbm 是 'Simple interface for training a LightGBM model',而它们的结果值都是 lgb.Booster ,训练有素的模型。 我发现的一个区别是 lgb.train() 不适用于 valids = ,而 lightgbm() 可以。

第二个是关于函数 lgb.cv(),关于 lightGBM 中的交叉验证。如何将 lgb.cv() 的输出应用于模型? 正如我从上面链接的文档中了解到的那样,lgb.cv 和 lgb.train 的输出似乎都是一个模型。 像下面的示例那样使用它是否正确?

lgbcv <- lgb.cv(params,
            lgbtrain,
            nrounds = 1000,
            nfold = 5, 
            early_stopping_rounds = 100,
            learning_rate = 1.0)

lgbcv <- lightgbm(params,
               lgbtrain,
               nrounds = 1000,
               early_stopping_rounds = 100,
               learning_rate = 1.0)

提前致谢!

what's the difference between lgb.train() and lightgbm()?

这些函数都是训练LightGBM模型,只是接口略有不同。最大的区别在于训练数据的准备方式。 LightGBM 训练需要特定于 LightGBM 的训练数据表示,称为 Dataset。要使用 lgb.train(),您必须事先使用 lgb.Dataset() 构造其中之一。另一方面,lightgbm() 可以接受数据框 data.table 或矩阵,并会为您创建 Dataset 对象。

选择您认为界面更友好的方法...两者都将生成一个训练有素的 LightGBM 模型 (class "lgb.Booster")。

that lgb.train() does not work with valids = , while lightgbm() does.

这是不正确的。这两个函数都接受关键字参数 valids。 运行 ?lgb.train?lightgbm 有关这些方法的文档。

How do you apply the output of lgb.cv() to a model?

我不确定你的意思,但你可以在 运行 ?lgb.cv.[= 时显示的文档中找到如何使用 lgb.cv() 的示例35=]

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

此 returns class "lgb.CVBooster" 的对象。该对象中有多个 "lgb.Booster" 个对象(lightgbm()lgb.train() 生成的训练模型)。

您可以从 model$boosters 中提取其中任何一个。但是,实际上我不建议直接使用 lgb.cv() 中的模型。交叉验证的目标是估计模型的泛化误差。因此,您可以使用 lgb.cv() 计算给定数据集 + 参数集的预期误差(通过查看 model$record_evalsmodel$best_score)。