一个参数列表。有关参数和有效值的列表,请参阅 文档的“Parameters”部分。
一个用于训练的 lgb.Dataset
对象。某些函数(例如 lgb.cv
)可能允许您传递其他类型的数据(如 matrix
),然后单独提供 label
作为关键字参数。
训练轮数
一个 lgb.Dataset
对象列表,用于验证
目标函数,可以是字符或自定义目标函数。示例包括 regression
, regression_l1
, huber
, binary
, lambdarank
, multiclass
, multiclass
评估函数。可以是字符向量、函数或包含字符串和函数的混合列表。
a. 字符向量: 如果为此参数提供字符向量,它应包含有效的评估指标字符串。有关有效指标列表,请参阅 文档的“metric”部分。
b. 函数: 您可以提供自定义评估函数。此函数应接受关键字参数 preds
和 dtrain
,并应返回一个包含三个元素的命名列表
name
: 包含指标名称的字符串,用于打印和存储结果。
value
: 表示给定预测值和真实值对应的指标值的单个数字
higher_better
: 一个布尔值,指示值越大是否表示拟合效果越好。例如,对于 MAE 或 RMSE 等指标,这将是 FALSE
。
c. 列表: 如果给定列表,它应仅包含字符向量和函数。这些应遵循上述描述中的要求。
输出的详细程度,如果 <= 0 并且已提供 valids
,也将禁用训练期间的评估输出
布尔值,TRUE 将把迭代消息记录到 booster$record_evals
中
评估输出频率,仅在 verbose > 0 且已提供 valids
时有效
模型文件路径或 lgb.Booster
对象,将从此模型继续训练
整数。激活提前停止。当此参数非空时,如果在任何验证集上的任何指标评估连续 early_stopping_rounds
次提升轮次都未能改进,训练将停止。如果训练提前停止,返回的模型将具有属性 best_iter
,其值设置为最佳迭代的迭代编号。
在每次迭代时应用的 callback 函数列表。
布尔值,将其设置为 TRUE(非默认值)将把 booster 模型转换为 predictor 模型,从而释放内存和原始数据集
是否通过 save
或 saveRDS
等函数使结果对象可序列化(参见“模型序列化”部分)。
一个训练好的 booster 模型 lgb.Booster
。
“提前停止”是指如果在给定验证集上模型的性能连续几次迭代没有改进,则停止训练过程。
如果为 eval
提供多个参数,它们的顺序将保留。如果在 params
中设置 early_stopping_rounds
启用提前停止,默认情况下所有指标都将用于提前停止。
如果您只想考虑第一个指标进行提前停止,请在 params
中传递 first_metric_only = TRUE
。请注意,如果您也在 params
中指定了 metric
,该指标将被视为“第一个”指标。如果您省略 metric
,将根据您为参数 obj
(关键字参数)或 objective
(传递到 params
中)的选择使用默认指标。
# \donttest{
data(agaricus.train, package = "lightgbm")
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label = train$label)
data(agaricus.test, package = "lightgbm")
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label = test$label)
params <- list(
objective = "regression"
, metric = "l2"
, min_data = 1L
, learning_rate = 1.0
, num_threads = 2L
)
valids <- list(test = dtest)
model <- lgb.train(
params = params
, data = dtrain
, nrounds = 5L
, valids = valids
, early_stopping_rounds = 3L
)
#> [LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000710 seconds.
#> You can set `force_row_wise=true` to remove the overhead.
#> And if memory is not enough, you can set `force_col_wise=true`.
#> [LightGBM] [Info] Total Bins 232
#> [LightGBM] [Info] Number of data points in the train set: 6513, number of used features: 116
#> [LightGBM] [Info] Start training from score 0.482113
#> [LightGBM] [Warning] No further splits with positive gain, best gain: -inf
#> [1]: test's l2:6.44165e-17
#> Will train until there is no improvement in 3 rounds.
#> [LightGBM] [Warning] No further splits with positive gain, best gain: -inf
#> [2]: test's l2:1.97215e-31
#> [LightGBM] [Warning] No further splits with positive gain, best gain: -inf
#> [3]: test's l2:0
#> [LightGBM] [Warning] No further splits with positive gain, best gain: -inf
#> [LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements
#> [4]: test's l2:0
#> [LightGBM] [Warning] No further splits with positive gain, best gain: -inf
#> [LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements
#> [5]: test's l2:0
#> Did not meet early stopping, best iteration is: [3]: test's l2:0
# }