用于训练 LightGBM 模型的高级 R 接口。与 lgb.train 不同,此函数侧重于与 R 中其他统计和机器学习接口的兼容性。这种对兼容性的侧重意味着此接口可能比 lgb.train 经历更频繁的破坏性 API 更改。对于对效率敏感的应用,或对于跨版本破坏性 API 更改成本高昂的应用,请使用 lgb.train

lightgbm(
  data,
  label = NULL,
  weights = NULL,
  params = list(),
  nrounds = 100L,
  verbose = 1L,
  eval_freq = 1L,
  early_stopping_rounds = NULL,
  init_model = NULL,
  callbacks = list(),
  serializable = TRUE,
  objective = "auto",
  init_score = NULL,
  num_threads = NULL,
  colnames = NULL,
  categorical_feature = NULL,
  ...
)

参数

data

一个 lgb.Dataset 对象,用于训练。某些函数(例如 lgb.cv)可能允许您传递其他类型的数据,如 matrix,然后单独以关键字参数形式提供 label

label

标签向量,当 data 不是 lgb.Dataset 时使用

weights

输入数据中行的样本/观测权重。如果为 NULL,则假定所有观测/行具有相同的权重。

从版本 4.0.0 起,参数名从 'weight' 改为 'weights'

params

一个参数列表。有关参数及其有效值的列表,请参阅文档的“Parameters”部分

nrounds

训练轮数

verbose

输出的详细程度,如果 <= 0 且已提供 valids,也将禁用训练期间的评估信息打印

eval_freq

评估输出频率,仅当 verbose > 0 且已提供 valids 时有效

early_stopping_rounds

int。激活提前停止。当此参数非空时,如果在 early_stopping_rounds 个连续的提升轮次中,任何验证集上的任何指标的评估结果都没有改善,则训练将停止。如果训练提前停止,返回的模型将具有属性 best_iter,其值设置为最佳迭代的迭代次数。

init_model

模型文件路径或 lgb.Booster 对象,将从此模型继续训练

callbacks

在每次迭代时应用的 callback 函数列表。

serializable

是否使结果对象可以通过诸如 savesaveRDS 之类的函数进行序列化(参见“模型序列化”部分)。

objective

优化目标(例如 `"regression"`、`"binary"` 等)。有关可接受目标的列表,请参阅文档的“Parameters”部分的“objective”项

如果传入 "auto"data 不是 lgb.Dataset 类型,则目标将根据为 label 传入的值确定

  • 如果传入一个包含两个变量的 factor,将使用目标 "binary"

  • 如果传入一个包含两个以上变量的 factor,将使用目标 "multiclass"(请注意,在这种情况下,参数 num_class 也将从 label 中自动确定)。

  • 否则(或如果传入 lgb.Dataset 作为输入),将使用目标 "regression"

版本 4.0.0 中新增

init_score

初始得分是 lightgbm 将基于其进行提升的基础预测值

版本 4.0.0 中新增

num_threads

要使用的并行线程数。为了获得最佳速度,应将其设置为 CPU 中的物理核心数——在典型的 x86-64 机器中,这相当于最大线程数的一半。

请注意,在较小的数据集上使用过多线程可能导致速度下降(有关更多详细信息,请参阅参数文档)。

如果传入零,将使用为 OpenMP 配置的默认线程数(通常通过环境变量 OMP_NUM_THREADS 控制)。

如果传入 NULL(默认值),将尝试使用系统中的物理核心数,但请注意,正确检测核心数需要安装 RhpcBLASctl 包。

如果在 params 中传入了 num_threads 及其别名,此参数将被覆盖。

版本 4.0.0 中新增

colnames

特征的字符向量。仅当 data 不是 lgb.Dataset 时使用。

categorical_feature

分类特征。可以是特征名称的字符向量,也可以是特征索引的整数向量(例如 c(1L, 10L) 表示“第一列和第十列”)。仅当 data 不是 lgb.Dataset 时使用。

...

传递给 lgb.train 的额外参数。例如

  • valids: lgb.Dataset 对象列表,用于验证

  • obj: 目标函数,可以是字符或自定义目标函数。示例包括 regressionregression_l1huberbinarylambdarankmulticlassmulticlass

  • eval: 评估函数,可以是字符(或列表)或自定义评估函数

  • record: 布尔值,TRUE 将把迭代信息记录到 booster$record_evals

  • reset_data: 布尔值,将其设置为 TRUE(非默认值)将把 booster 模型转换为预测器模型,从而释放内存和原始数据集

返回值

一个训练好的 lgb.Booster

提前停止

“提前停止”是指如果在给定验证集上模型的性能连续多个迭代没有改善,则停止训练过程。

如果为 eval 提供了多个参数,它们的顺序将保留。如果您通过在 params 中设置 early_stopping_rounds 来启用提前停止,默认情况下将考虑所有指标进行提前停止。

如果您只想考虑第一个指标进行提前停止,请在 params 中传入 first_metric_only = TRUE。请注意,如果您还在 params 中指定了 metric,该指标将被视为“第一个”指标。如果您省略 metric,将根据您对参数 obj(关键字参数)或 objective(传入 params 中)的选择使用默认指标。