基于类 lgb.Booster
的预测值
版本 4.0.0 新增
lgb.Booster
类的对象
一个 matrix
对象、dgCMatrix
、dgRMatrix
对象、dsparseVector
对象,或表示文本文件(CSV, TSV 或 LibSVM)路径的字符。
对于稀疏输入,如果只对单行进行预测,使用 CSR 格式会更快,在这种情况下,数据可以作为单行 CSR 矩阵(来自 Matrix
包的 dgRMatrix
类)或稀疏数值向量(来自 Matrix
包的 dsparseVector
类)传递。
如果频繁进行单行预测,建议通过函数 lgb.configure_fast_predict 预先配置模型对象以实现快速单行稀疏预测。
在版本 4.0.0 中从 'data' 更改
输出的预测类型。允许的类型为
"response"
: 将根据正在优化的目标函数(取决于目标函数使用的链接函数),在应用任何必要的转换后,输出预测分数 - 例如,对于 objective="binary"
,将输出类别概率。
"class"
: 对于分类目标,将输出预测概率最高的类别。对于其他目标,将输出与 "response" 相同的结果。请注意,lgb.configure_fast_predict 不支持 "class"
类型(有关详细信息,请参阅该函数的文档)。
"raw"
: 将输出非转换的数值(提升迭代结果预测的总和),给定目标函数通过这些数值生成 "response" 数值 - 例如,对于 objective="binary"
,这对应于对数几率。对于许多目标(如 "regression"),由于未应用转换,输出将与 "response" 相同。
"leaf"
: 将输出每个观测值在模型中每棵树中落入的终端节点/叶子的索引,以整数形式输出,每棵树一列。
"contrib"
: 将返回每个预测的每特征贡献,包括一个截距(每个特征将产生一列)。
请注意,如果使用自定义目标函数,"class" 和 "response" 类型将不可用,并将默认使用 "raw"。
如果模型是通过函数 lightgbm 拟合的,并且将因子作为标签传递,则通过 params
而非此参数传递预测类型可能会导致分类目标的因子水平未正确应用于结果输出。
版本 4.0.0 新增
int 或 None,可选 (默认=None) 预测开始迭代的索引。如果为 None 或 <= 0,则从第一次迭代开始。
int 或 None,可选 (默认=None) 限制预测中的迭代次数。如果为 None,并且存在最佳迭代且 start_iteration 为 None 或 <= 0,则使用最佳迭代;否则,使用从 start_iteration 开始的所有迭代。如果 <= 0,则使用从 start_iteration 开始的所有迭代(无限制)。
仅用于文本文件预测。如果文本文件包含头部行,则为 True
额外命名参数的列表。有关参数列表和有效值,请参阅文档的“预测参数”部分。如果这些参数与此函数的关键字参数值冲突,params
中的值优先。
忽略
对于旨在始终为每个观测返回一个输出的预测类型(例如,在二分类或回归目标上预测 type="response"
或 type="raw"
时),将返回一个向量,其中 newdata
中的每一行对应一个元素。
对于旨在为每个观测返回多个输出的预测类型(例如,在多分类目标上预测 type="response"
或 type="raw"
时,或预测 type="leaf"
时,无论目标如何),将返回一个矩阵,其中 newdata
中的每一行对应一个观测,每一列对应一个输出。
对于 type="leaf"
预测,将返回一个矩阵,其中 newdata
中的每一行对应一个观测,每棵树对应一列。请注意,对于多分类目标,LightGBM 在每次提升迭代中为每个类别训练一棵树。这意味着,例如,对于一个包含 3 个类别的多分类模型,第一个类别的叶子预测可以在第 1、4、7、10 等列中找到。
对于 type="contrib"
,将返回一个 SHAP 值矩阵,其中 newdata
中的每一行对应一个观测,列对应于特征。对于回归、排名、交叉熵和二分类目标,此矩阵包含每个特征一列,外加一列包含 Shapley 基值。对于多分类目标,此矩阵将代表 num_classes
个这样的矩阵,顺序为“第一个类别的特征贡献、第二个类别的特征贡献、第三个类别的特征贡献等”。
如果模型是通过函数 lightgbm 拟合的,并且将因子作为标签传递,则此函数返回的预测将保留因子水平(对于 type="class"
作为值,对于多分类目标的 type="response"
和 type="raw"
作为列名)。请注意,通过 params
而非 type
传递请求的预测类型可能会导致输出中不包含因子水平。
如果模型对象已通过 lgb.configure_fast_predict 配置为快速单行预测,此函数将使用为其配置的预测参数 - 因此,不应在此处传递额外的预测参数,否则配置将被忽略并采用较慢的路径。
# \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
)
#> [LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000748 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
#> [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
preds <- predict(model, test$data)
# pass other prediction parameters
preds <- predict(
model,
test$data,
params = list(
predict_disable_shape_check = TRUE
)
)
# }