lightgbm.Booster
- class lightgbm.Booster(params=None, train_set=None, model_file=None, model_str=None)[source]
基类:
object
LightGBM 中的 Booster。
- __init__(params=None, train_set=None, model_file=None, model_str=None)[source]
初始化 Booster。
- 参数:
params (dict 或 None, 可选 (默认=None)) – Booster 的参数。
train_set (Dataset 或 None, 可选 (默认=None)) – 训练数据集。
model_file (str, pathlib.Path 或 None, 可选 (默认=None)) – 模型文件的路径。
model_str (str 或 None, 可选 (默认=None)) – 将从该字符串加载模型。
方法
__init__
([params, train_set, model_file, ...])初始化 Booster。
add_valid
(data, name)添加验证数据。
获取当前迭代的索引。
dump_model
([num_iteration, start_iteration, ...])将 Booster 导出为 JSON 格式。
eval
(data, name[, feval])评估数据。
eval_train
([feval])评估训练数据。
eval_valid
([feval])评估验证数据。
feature_importance
([importance_type, iteration])获取特征重要性。
获取特征名称。
释放 Booster 的数据集。
释放 Booster 的网络。
get_leaf_output
(tree_id, leaf_id)获取叶节点的输出。
get_split_value_histogram
(feature[, bins, ...])获取指定特征的分割值直方图。
获取模型的下界值。
model_from_string
(model_str)从字符串加载 Booster。
model_to_string
([num_iteration, ...])将 Booster 保存为字符串。
获取特征数量。
获取每次迭代的模型数量。
获取弱子模型的数量。
predict
(data[, start_iteration, ...])进行预测。
refit
(data, label[, decay_rate, reference, ...])使用新数据重新训练现有 Booster。
reset_parameter
(params)重置 Booster 的参数。
回滚一次迭代。
save_model
(filename[, num_iteration, ...])将 Booster 保存到文件。
set_leaf_output
(tree_id, leaf_id, value)设置叶节点的输出。
set_network
(machines[, local_listen_port, ...])设置网络配置。
set_train_data_name
(name)为训练数据集设置名称。
shuffle_models
([start_iteration, end_iteration])打乱模型顺序。
解析已拟合的模型并以易于阅读的 pandas DataFrame 格式返回。
update
([train_set, fobj])更新 Booster 一次迭代。
获取模型的上界值。
- dump_model(num_iteration=None, start_iteration=0, importance_type='split', object_hook=None)[source]
将 Booster 导出为 JSON 格式。
- 参数:
num_iteration (int 或 None, 可选 (默认=None)) – 应导出的迭代索引。如果为 None,则如果存在最佳迭代,则导出最佳迭代;否则,导出所有迭代。如果 <= 0,则导出所有迭代。
start_iteration (int, 可选 (默认=0)) – 应导出的迭代起始索引。
importance_type (str, 可选 (默认="split")) – 应导出的特征重要性类型。如果为 “split”,结果包含特征在模型中被使用的次数。如果为 “gain”,结果包含使用该特征进行分割的总增益。
object_hook (callable 或 None, 可选 (默认=None)) – 如果不为 None,则
object_hook
是在解析 C API 返回的 JSON 字符串时调用的函数。它可用于修改 JSON,在构建 JSON 结构时存储特定值。这避免了再次遍历结构。如果树的数量巨大,这将节省大量时间。函数签名是def object_hook(node: dict) -> dict
。None 等同于lambda node: node
。有关更多详细信息,请参阅json.loads()
的文档。
- 返回值:
json_repr – Booster 的 JSON 格式。
- 返回类型:
dict
- eval(data, name, feval=None)[source]
评估数据。
- 参数:
data (Dataset) – 用于评估的数据。
name (str) – 数据的名称。
feval (callable, callable 列表, 或 None, 可选 (默认=None)) –
自定义评估函数。每个评估函数应接受两个参数:preds、eval_data,并返回 (eval_name, eval_result, is_higher_better) 或此类元组的列表。
- predsnumpy 1-D 数组 或 numpy 2-D 数组 (用于多分类任务)
预测值。对于多分类任务,preds 是形状为 [n_samples, n_classes] 的 numpy 2-D 数组。如果使用自定义目标函数,预测值在任何转换之前返回,例如,在这种情况下,对于二分类任务,它们是原始 margin 而不是正类的概率。
- eval_dataDataset
要评估的
Dataset
。- eval_namestr
评估函数的名称(无空格)。
- eval_resultfloat
评估结果。
- is_higher_betterbool
评估结果是否越高越好,例如 AUC 是
is_higher_better
。
- 返回值:
result – 包含 (dataset_name, eval_name, eval_result, is_higher_better) 元组的列表。
- 返回类型:
list
- eval_train(feval=None)[source]
评估训练数据。
- 参数:
feval (callable, callable 列表, 或 None, 可选 (默认=None)) –
自定义评估函数。每个评估函数应接受两个参数:preds、eval_data,并返回 (eval_name, eval_result, is_higher_better) 或此类元组的列表。
- predsnumpy 1-D 数组 或 numpy 2-D 数组 (用于多分类任务)
预测值。对于多分类任务,preds 是形状为 [n_samples, n_classes] 的 numpy 2-D 数组。如果使用自定义目标函数,预测值在任何转换之前返回,例如,在这种情况下,对于二分类任务,它们是原始 margin 而不是正类的概率。
- eval_dataDataset
训练数据集。
- eval_namestr
评估函数的名称(无空格)。
- eval_resultfloat
评估结果。
- is_higher_betterbool
评估结果是否越高越好,例如 AUC 是
is_higher_better
。
- 返回值:
result – 包含 (train_dataset_name, eval_name, eval_result, is_higher_better) 元组的列表。
- 返回类型:
list
- eval_valid(feval=None)[source]
评估验证数据。
- 参数:
feval (callable, callable 列表, 或 None, 可选 (默认=None)) –
自定义评估函数。每个评估函数应接受两个参数:preds、eval_data,并返回 (eval_name, eval_result, is_higher_better) 或此类元组的列表。
- predsnumpy 1-D 数组 或 numpy 2-D 数组 (用于多分类任务)
预测值。对于多分类任务,preds 是形状为 [n_samples, n_classes] 的 numpy 2-D 数组。如果使用自定义目标函数,预测值在任何转换之前返回,例如,在这种情况下,对于二分类任务,它们是原始 margin 而不是正类的概率。
- eval_dataDataset
验证数据集。
- eval_namestr
评估函数的名称(无空格)。
- eval_resultfloat
评估结果。
- is_higher_betterbool
评估结果是否越高越好,例如 AUC 是
is_higher_better
。
- 返回值:
result – 包含 (validation_dataset_name, eval_name, eval_result, is_higher_better) 元组的列表。
- 返回类型:
list
- feature_importance(importance_type='split', iteration=None)[source]
获取特征重要性。
- 参数:
importance_type (str, 可选 (默认="split")) – 如何计算重要性。如果为 “split”,结果包含特征在模型中被使用的次数。如果为 “gain”,结果包含使用该特征进行分割的总增益。
iteration (int 或 None, 可选 (默认=None)) – 限制特征重要性计算中的迭代次数。如果为 None,则如果存在最佳迭代,则使用最佳迭代;否则,使用所有树。如果 <= 0,则使用所有树(无限制)。
- 返回值:
result – 包含特征重要性的数组。
- 返回类型:
numpy array
- get_leaf_output(tree_id, leaf_id)[source]
获取叶节点的输出。
- 参数:
tree_id (int) – 树的索引。
leaf_id (int) – 树中叶节点的索引。
- 返回值:
result – 叶节点的输出。
- 返回类型:
float
- get_split_value_histogram(feature, bins=None, xgboost_style=False)[source]
获取指定特征的分割值直方图。
- 参数:
feature (int 或 str) –
计算直方图的特征名称或索引。如果为 int,则解释为索引。如果为 str,则解释为名称。
警告
不支持分类特征。
bins (int, str 或 None, 可选 (默认=None)) – 最大 bin 数。如果为 None,或者为 int 且 > 唯一分割值的数量且
xgboost_style=True
,则 bin 数等于唯一分割值的数量。如果为 str,则应是numpy.histogram()
函数支持的值列表中的一个。xgboost_style (bool, 可选 (默认=False)) – 返回结果是否应与 XGBoost 中的形式相同。如果为 False,返回值为
numpy.histogram()
函数中返回的 2 个 numpy 数组的元组。如果为 True,返回值为矩阵,其中第一列是非空 bin 的右边缘,第二列是直方图值。
- 返回值:
result_tuple (2 个 numpy 数组的元组) – 如果
xgboost_style=False
,返回指定特征已使用的分割值的直方图值和 bin 边缘。result_array_like (numpy 数组 或 pandas DataFrame (如果安装了 pandas)) – 如果
xgboost_style=True
,返回指定特征已使用的分割值的直方图。
- model_from_string(model_str)[source]
从字符串加载 Booster。
- 参数:
model_str (str) – 将从该字符串加载模型。
- 返回值:
self – 已加载的 Booster 对象。
- 返回类型:
- model_to_string(num_iteration=None, start_iteration=0, importance_type='split')[source]
将 Booster 保存为字符串。
- 参数:
num_iteration (int 或 None, 可选 (默认=None)) – 应保存的迭代索引。如果为 None,则如果存在最佳迭代,则保存最佳迭代;否则,保存所有迭代。如果 <= 0,则保存所有迭代。
start_iteration (int, 可选 (默认=0)) – 应保存的迭代起始索引。
importance_type (str, 可选 (默认="split")) – 应保存的特征重要性类型。如果为 “split”,结果包含特征在模型中被使用的次数。如果为 “gain”,结果包含使用该特征进行分割的总增益。
- 返回值:
str_repr – Booster 的字符串表示形式。
- 返回类型:
str
- predict(data, start_iteration=0, num_iteration=None, raw_score=False, pred_leaf=False, pred_contrib=False, data_has_header=False, validate_features=False, **kwargs)[source]
进行预测。
- 参数:
data (str, pathlib.Path, numpy 数组, pandas DataFrame, pyarrow Table, H2O DataTable 的 Frame (已弃用) 或 scipy.sparse) – 预测的数据源。如果为 str 或 pathlib.Path,则表示文本文件(CSV、TSV 或 LibSVM)的路径。
start_iteration (int, 可选 (默认=0)) – 预测的迭代起始索引。如果 <= 0,则从第一次迭代开始。
num_iteration (int 或 None, 可选 (默认=None)) – 预测中使用的总迭代次数。如果为 None,则如果存在最佳迭代且 start_iteration <= 0,则使用最佳迭代;否则,使用
start_iteration
之后的所有迭代(无限制)。如果 <= 0,则使用start_iteration
之后的所有迭代(无限制)。raw_score (bool, 可选 (默认=False)) – 是否预测原始分数。
pred_leaf (bool, 可选 (默认=False)) – 是否预测叶节点索引。
pred_contrib (bool, 可选 (默认=False)) –
是否预测特征贡献。
注意
如果您想使用 SHAP 值(例如 SHAP 交互值)获取更多关于模型预测的解释,可以安装 shap 包 (https://github.com/slundberg/shap)。请注意,与 shap 包不同,使用
pred_contrib
时,我们返回一个多一列的矩阵,其中最后一列是期望值。data_has_header (bool, 可选 (默认=False)) – 数据是否包含头部。仅当数据为 str 时使用。
validate_features (bool, 可选 (默认=False)) – 如果为 True,确保用于预测的特征与用于训练的特征匹配。仅当数据为 pandas DataFrame 时使用。
**kwargs – 其他预测参数。
- 返回值:
result – 预测结果。对于特征贡献(当
pred_contrib=True
时),可以是稀疏矩阵或稀疏对象列表(每个元素表示一类的预测)。- 返回类型:
numpy 数组, scipy.sparse 或 scipy.sparse 列表
- refit(data, label, decay_rate=0.9, reference=None, weight=None, group=None, init_score=None, feature_name='auto', categorical_feature='auto', dataset_params=None, free_raw_data=True, validate_features=False, **kwargs)[source]
使用新数据重新训练现有 Booster。
- 参数:
data (str, pathlib.Path, numpy 数组, pandas DataFrame, H2O DataTable 的 Frame (已弃用), scipy.sparse, Sequence, Sequence 列表 或 numpy 数组列表) – 重新训练的数据源。如果为 str 或 pathlib.Path,则表示文本文件(CSV、TSV 或 LibSVM)的路径。
label (list, numpy 1-D 数组, pandas Series / 单列 DataFrame, pyarrow Array 或 pyarrow ChunkedArray) – 重新训练的标签。
decay_rate (float, 可选 (默认=0.9)) – 重新训练的衰减率,将使用
leaf_output = decay_rate * old_leaf_output + (1.0 - decay_rate) * new_leaf_output
来重新训练树。reference (Dataset 或 None, 可选 (默认=None)) –
data
的参考。版本 4.0.0 中新增。
weight (list, numpy 1-D 数组, pandas Series, pyarrow Array, pyarrow ChunkedArray 或 None, 可选 (默认=None)) –
每个
data
实例的权重。权重应为非负数。版本 4.0.0 中新增。
group (list, numpy 1-D 数组, pandas Series, pyarrow Array, pyarrow ChunkedArray 或 None, 可选 (默认=None)) –
data
的组/查询大小。仅用于排序学习任务。sum(group) = n_samples。例如,如果您有一个包含 100 个文档的数据集,group = [10, 20, 40, 10, 10, 10]
,这意味着您有 6 个组,其中前 10 条记录在第一个组中,记录 11-30 在第二个组中,记录 31-70 在第三个组中,以此类推。版本 4.0.0 中新增。
init_score (list, 列表的列表 (用于多分类任务), numpy 数组, pandas Series, pandas DataFrame (用于多分类任务), pyarrow Array, pyarrow ChunkedArray, pyarrow Table (用于多分类任务) 或 None, 可选 (默认=None)) –
data
的初始分数。版本 4.0.0 中新增。
feature_name (str 列表, 或 'auto', 可选 (默认="auto")) –
data
的特征名称。如果为 'auto' 且 data 是 pandas DataFrame,则使用数据列名。版本 4.0.0 中新增。
categorical_feature (str 列表 或 int, 或 'auto', 可选 (默认="auto")) –
data
的分类特征。如果为 int 列表,则解释为索引。如果为 str 列表,则解释为特征名称(也需要指定feature_name
)。如果为 'auto' 且 data 是 pandas DataFrame,则使用 pandas 的无序分类列。分类特征中的所有值都将转换为 int32,因此应小于 int32 最大值 (2147483647)。较大的值可能会占用大量内存。考虑使用从零开始的连续整数。分类特征中的所有负值都将被视为缺失值。输出不能相对于分类特征进行单调约束。分类特征中的浮点数将四舍五入到最接近 0 的整数。版本 4.0.0 中新增。
dataset_params (dict 或 None, 可选 (默认=None)) –
数据集
data
的其他参数。版本 4.0.0 中新增。
free_raw_data (bool, 可选 (默认=True)) –
如果为 True,则在为
data
构建内部数据集后释放原始数据。版本 4.0.0 中新增。
validate_features (bool, 可选 (默认=False)) –
如果为 True,确保用于重新训练模型的特征与原始特征匹配。仅当数据为 pandas DataFrame 时使用。
版本 4.0.0 中新增。
**kwargs – 重新训练的其他参数。这些参数将传递给
predict
方法。
- 返回值:
result – 重新训练的 Booster。
- 返回类型:
- reset_parameter(params)[source]
重置 Booster 的参数。
- 参数:
params (dict) – Booster 的新参数。
- 返回值:
self – 带有新参数的 Booster。
- 返回类型:
- save_model(filename, num_iteration=None, start_iteration=0, importance_type='split')[source]
将 Booster 保存到文件。
- 参数:
filename (str 或 pathlib.Path) – 保存 Booster 的文件名。
num_iteration (int 或 None, 可选 (默认=None)) – 应保存的迭代索引。如果为 None,则如果存在最佳迭代,则保存最佳迭代;否则,保存所有迭代。如果 <= 0,则保存所有迭代。
start_iteration (int, 可选 (默认=0)) – 应保存的迭代起始索引。
importance_type (str, 可选 (默认="split")) – 应保存的特征重要性类型。如果为 “split”,结果包含特征在模型中被使用的次数。如果为 “gain”,结果包含使用该特征进行分割的总增益。
- 返回值:
self – 返回自身。
- 返回类型:
- set_leaf_output(tree_id, leaf_id, value)[source]
设置叶节点的输出。
版本 4.0.0 中新增。
- 参数:
tree_id (int) – 树的索引。
leaf_id (int) – 树中叶节点的索引。
value (float) – 要设置为叶节点输出的值。
- 返回值:
self – 设置了叶节点输出的 Booster。
- 返回类型:
- set_network(machines, local_listen_port=12400, listen_time_out=120, num_machines=1)[source]
设置网络配置。
- 参数:
machines (list, set 或 str) – 机器名称。
local_listen_port (int, 可选 (默认=12400)) – 本地机器的 TCP 监听端口。
listen_time_out (int, 可选 (默认=120)) – Socket 超时时间(分钟)。
num_machines (int, 可选 (默认=1)) – 分布式学习应用的机器数量。
- 返回值:
self – 设置了网络的 Booster。
- 返回类型:
- set_train_data_name(name)[source]
为训练数据集设置名称。
- 参数:
name (str) – 训练数据集的名称。
- 返回值:
self – 设置了训练数据集名称的 Booster。
- 返回类型:
- shuffle_models(start_iteration=0, end_iteration=-1)[source]
打乱模型顺序。
- 参数:
start_iteration (int, 可选 (默认=0)) – 将被打乱的第一此迭代。
end_iteration (int, 可选 (默认=-1)) – 将被打乱的最后一次迭代。如果 <= 0,表示最后一次可用的迭代。
- 返回值:
self – 模型顺序已打乱的 Booster。
- 返回类型:
- trees_to_dataframe()[source]
解析已拟合的模型并以易于阅读的 pandas DataFrame 格式返回。
返回的 DataFrame 包含以下列。
tree_index
: int64,节点所属的树。基于 0,因此值为6
表示“此节点在第 7 棵树中”。node_depth
: int64,节点距离树根的距离。根节点的值为1
,其直接子节点为2
,以此类推。node_index
: str,节点的唯一标识符。left_child
: str,分割左侧子节点的node_index
。叶节点为None
。right_child
: str,分割右侧子节点的node_index
。叶节点为None
。parent_index
: str,此节点父节点的node_index
。根节点为None
。split_feature
: str,用于分割的特征名称。叶节点为None
。split_gain
: float64,将此分割添加到树中获得的增益。叶节点为NaN
。threshold
: float64,用于决定记录将进入分割哪一侧的特征值。叶节点为NaN
。decision_type
: str,描述如何将值与threshold
进行比较的逻辑运算符。例如,split_feature = "Column_10", threshold = 15, decision_type = "<="
表示Column_10 <= 15
的记录沿着分割的左侧,否则沿着分割的右侧。叶节点为None
。missing_direction
: str,缺失值应走向的分割方向。叶节点为None
。missing_type
: str,描述哪些类型的值被视为缺失值。value
: float64,此叶节点的预测值,乘以学习率。weight
: float64 或 int64,Hessian(目标函数的二阶导数)之和,对落在此节点中的观测值求和。count
: int64,落在此节点中的训练数据记录数。
- 返回值:
result – 返回解析后模型的 pandas DataFrame。
- 返回类型:
pandas DataFrame
- update(train_set=None, fobj=None)[source]
更新 Booster 一次迭代。
- 参数:
train_set (Dataset 或 None, 可选 (默认=None)) – 训练数据。如果为 None,则使用上次的训练数据。
fobj (callable 或 None, 可选 (默认=None)) –
自定义目标函数。应接受两个参数:preds、train_data,并返回 (grad, hess)。
- predsnumpy 1-D 数组 或 numpy 2-D 数组 (用于多分类任务)
预测值。预测值在任何转换之前返回,例如,对于二分类任务,它们是原始 margin 而不是正类的概率。
- train_dataDataset
训练数据集。
- gradnumpy 1-D 数组 或 numpy 2-D 数组 (用于多分类任务)
对于每个样本点,损失函数对 preds 元素的偏导数值(梯度)。
- hessnumpy 1-D 数组 或 numpy 2-D 数组 (用于多分类任务)
对于每个样本点,损失函数对 preds 元素的二阶偏导数值(Hessian)。
对于多分类任务,preds 是形状为 [n_samples, n_classes] 的 numpy 2-D 数组,grad 和 hess 应以相同的格式返回。
- 返回值:
is_finished – 更新是否成功完成。
- 返回类型:
bool