参数
本页面包含 LightGBM 中所有参数的描述。
其他有用链接列表
参数格式
参数格式为 key1=value1 key2=value2 ...
。参数可以在配置文件和命令行中设置。通过命令行使用时,参数在 =
前后不应有空格。通过配置文件使用时,每行只能包含一个参数。你可以使用 #
进行注释。
如果一个参数同时出现在命令行和配置文件中,LightGBM 将使用命令行中的参数。
对于Python和R包,任何接受值列表的参数(通常它们具有 multi-xxx
类型,例如 multi-int
或 multi-double
)都可以在这些语言的默认数组类型中指定。例如, monotone_constraints
可以如下指定。
Python
params = {
"monotone_constraints": [-1, 0, 1]
}
R
params <- list(
monotone_constraints = c(-1, 0, 1)
)
核心参数
config
🔗︎, 默认值 =""
, 类型 = 字符串, 别名:config_file
配置文件的路径
注意:只能在CLI版本中使用
task
🔗︎,默认值 =train
,类型 = 枚举,选项:train
,predict
,convert_model
,refit
,别名:task_type
train
,用于训练,别名:training
predict
,用于预测,别名:prediction
,test
convert_model
,用于将模型文件转换为if-else格式,更多信息请参见 转换参数refit
用于使用新数据重新拟合现有模型,别名:refit_tree
save_binary
,加载训练(和验证)数据,然后将数据集保存为二进制文件。典型用法:首先save_binary
,然后使用保存的二进制文件并行运行多个train
任务。注意:只能在CLI版本中使用;对于特定语言的包,您可以使用相应的函数
objective
🔗︎, 默认值 =regression
, 类型 = 枚举, 选项:regression
,regression_l1
,huber
,fair
,poisson
,quantile
,mape
,gamma
,tweedie
,binary
,multiclass
,multiclassova
,cross_entropy
,cross_entropy_lambda
,lambdarank
,rank_xendcg
, 别名:objective_type
,app
,application
,loss
回归应用
regression
,L2 损失,别名:regression_l2
,l2
,mean_squared_error
,mse
,l2_root
,root_mean_squared_error
,rmse
regression_l1
,L1 损失,别名:l1
,mean_absolute_error
,mae
huber
,Huber 损失fair
,Fair 损失poisson
, 泊松回归quantile
,分位数回归mape
, MAPE 损失, 别名:mean_absolute_percentage_error
gamma
,使用对数链接的伽玛回归。它可能有用,例如,用于建模保险索赔的严重程度,或用于任何可能是 伽玛分布的 目标。tweedie
,使用对数链接的 Tweedie 回归。它可能很有用,例如,用于建模保险中的总损失,或用于任何可能 tweedie 分布 的目标。
二元分类应用
binary
,二元 对数损失 分类(或逻辑回归)需要标签为 {0, 1};参见
交叉熵
应用中 [0, 1] 范围内的一般概率标签
多类分类应用
交叉熵应用
cross_entropy
,交叉熵的目标函数(可选的线性权重),别名:xentropy
cross_entropy_lambda
,交叉熵的替代参数化方法,别名:xentlambda
label 是区间 [0, 1] 中的任何值
排名应用
lambdarank
,lambdarank 目标。可以使用 label_gain 来设置int
标签的增益(权重),并且label
中的所有值必须小于label_gain
中元素的数量。rank_xendcg
,XE_NDCG_MART 排名目标函数,别名:xendcg
,xe_ndcg
,xe_ndcg_mart
,xendcg_mart
rank_xendcg
比lambdarank
更快,并且能达到相似的性能。标签应为
int
类型,数字越大表示相关性越高(例如 0:差,1:一般,2:好,3:完美)
自定义目标函数(梯度和Hessian不由LightGBM直接计算)
custom
注意: 在CLI版本中不支持
必须在C API中通过参数显式传递
boosting
🔗︎,默认值 =gbdt
,类型 = 枚举,选项:gbdt
,rf
,dart
,别名:boosting_type
,boost
gbdt
,传统梯度提升决策树,别名:gbrt
rf
,随机森林,别名:random_forest
dart
,Dropouts meet Multiple Additive Regression Trees注意:在内部,LightGBM 在前
1 / learning_rate
次迭代中使用gbdt
模式
data_sample_strategy
🔗︎, 默认值 =bagging
, 类型 = 枚举, 选项:bagging
,goss
bagging
, 随机袋装采样注意:
bagging
仅在bagging_freq > 0
且bagging_fraction < 1.0
时有效
goss
, 基于梯度的一侧采样新版本 4.0.0
data
🔗︎, 默认值 =""
, 类型 = 字符串, 别名:train
,train_data
,train_data_file
,data_filename
训练数据的路径,LightGBM 将从此数据进行训练
注意:只能在CLI版本中使用
valid
🔗︎, 默认值 =""
, 类型 = 字符串, 别名:test
,valid_data
,valid_data_file
,test_data
,test_data_file
,valid_filenames
验证/测试数据的路径,LightGBM 将输出这些数据的指标
支持多个验证数据,用
,
分隔注意:只能在CLI版本中使用
num_iterations
🔗︎, 默认值 =100
, 类型 = int, 别名:num_iteration
,n_iter
,num_tree
,num_trees
,num_round
,num_rounds
,nrounds
,num_boost_round
,n_estimators
,max_iter
, 约束:num_iterations >= 0
提升迭代的次数
注意:在内部,LightGBM 为多类分类问题构建了
num_class * num_iterations
棵树
learning_rate
🔗︎, 默认值 =0.1
, 类型 = 双精度, 别名:shrinkage_rate
,eta
, 约束:learning_rate > 0.0
收缩率
在
dart
中,它还会影响被丢弃树的归一化权重
num_leaves
🔗︎, 默认值 =31
, 类型 = int, 别名:num_leaf
,max_leaves
,max_leaf
,max_leaf_nodes
, 约束:1 < num_leaves <= 131072
一棵树中的最大叶子数
tree_learner
🔗︎, 默认 =serial
, 类型 = 枚举, 选项:serial
,feature
,data
,voting
, 别名:tree
,tree_type
,tree_learner_type
serial
, 单机树学习器feature
,特征并行树学习器,别名:feature_parallel
data
,数据并行树学习器,别名:data_parallel
voting
,投票并行树学习器,别名:voting_parallel
参考 分布式学习指南 以获取更多详情
num_threads
🔗︎, 默认值 =0
, 类型 = int, 别名:num_thread
,nthread
,nthreads
,n_jobs
仅在
train
、prediction
和refit
任务中使用,或在特定语言包的相应函数中使用LightGBM 的线程数
0
表示 OpenMP 中的默认线程数为了获得最佳速度,请将其设置为 真实CPU核心数,而不是线程数(大多数CPU使用 超线程 技术,每个CPU核心生成2个线程)
如果你的数据集很小(例如,不要对一个有10,000行的数据集使用64个线程),不要设置得太大。
请注意,任务管理器或任何类似的CPU监控工具可能会报告核心未被充分利用。这是正常的
对于分布式学习,不要使用所有CPU核心,因为这会导致网络通信性能不佳。
注意:在训练期间请 不要 更改此项,尤其是在通过外部包同时运行多个作业时,否则可能会导致不希望的错误。
device_type
🔗︎, 默认值 =cpu
, 类型 = 枚举, 选项:cpu
,gpu
,cuda
, 别名:device
seed
🔗︎, 默认值 =None
, 类型 = int, 别名:random_seed
,random_state
这个种子用于生成其他种子,例如
data_random_seed
、feature_fraction_seed
等。默认情况下,此种子未被使用,而是优先使用其他种子的默认值。
这个种子相对于其他种子具有较低的优先级,这意味着如果你明确设置了其他种子,它将被覆盖。
deterministic
🔗︎, 默认 =false
, 类型 = bool仅用于
cpu
设备类型将此设置为
true
应在使用相同数据和相同参数(以及不同的num_threads
)时确保稳定的结果当你使用不同的种子、不同版本的 LightGBM、由不同编译器编译的二进制文件,或在不同的系统中,结果预计会有所不同。
当你遇到不稳定的结果时,可以在 LightGBM GitHub 仓库中 提出问题。
注意:将其设置为
true
可能会减慢训练速度注意:为了避免由于数值问题导致的潜在不稳定性,请在设置
deterministic=true
时,同时设置force_col_wise=true
或force_row_wise=true
。
学习控制参数
force_col_wise
🔗︎, 默认 =false
, 类型 = bool仅用于
cpu
设备类型将此设置为
true
以强制按列构建直方图当以下情况时,建议启用此功能:
列数较多,或者总箱数较多
num_threads
很大,例如> 20
你想减少内存开销
注意:当
force_col_wise
和force_row_wise
都为false
时,LightGBM 会首先尝试两者,然后使用速度更快的那一个。为了消除测试的开销,请手动将速度更快的那一个设置为true
。注意:此参数不能与
force_row_wise
同时使用,请选择其中之一。
force_row_wise
🔗︎, 默认值 =false
, 类型 = bool仅用于
cpu
设备类型将此设置为
true
以强制按行构建直方图当以下情况时,建议启用此功能:
数据点的数量很大,而总箱数相对较少
num_threads
相对较小,例如<= 16
您想使用小的
bagging_fraction
或goss
采样策略来加速
注意:将其设置为
true
将使 Dataset 对象的内存成本翻倍。如果内存不足,可以尝试设置force_col_wise=true
注意:当
force_col_wise
和force_row_wise
都为false
时,LightGBM 会首先尝试两者,然后使用速度更快的那一个。为了消除测试的开销,请手动将速度更快的那一个设置为true
。注意: 此参数不能与
force_col_wise
同时使用,请选择其中之一。
histogram_pool_size
🔗︎, 默认值 =-1.0
, 类型 = double, 别名:hist_pool_size
历史直方图的最大缓存大小(以MB为单位)
< 0
表示没有限制
max_depth
🔗︎, 默认值 =-1
, 类型 = int限制树模型的最大深度。这在
#数据
较少时用于处理过拟合问题。树仍然以叶向方式生长。<= 0
表示没有限制
min_data_in_leaf
🔗︎, 默认值 =20
, 类型 = int, 别名:min_data_per_leaf
,min_data
,min_child_samples
,min_samples_leaf
, 约束:min_data_in_leaf >= 0
一个叶子中数据的最小数量。可以用来处理过拟合问题。
注意:这是基于Hessian的一个近似值,因此偶尔你可能会观察到分裂,产生少于这个数量观察值的叶节点
min_sum_hessian_in_leaf
🔗︎, 默认值 =1e-3
, 类型 = double, 别名:min_sum_hessian_per_leaf
,min_sum_hessian
,min_hessian
,min_child_weight
, 约束:min_sum_hessian_in_leaf >= 0.0
单叶中的最小和Hessian。类似于
min_data_in_leaf
,它可以用于处理过拟合。
bagging_fraction
🔗︎, 默认值 =1.0
, 类型 = double, 别名:sub_row
,subsample
,bagging
, 约束条件:0.0 < bagging_fraction <= 1.0
类似于
feature_fraction
,但这将随机选择部分数据而不进行重采样。可以用来加速训练
可用于处理过拟合
注意: 要启用装袋,
bagging_freq
应设置为非零值。
pos_bagging_fraction
🔗︎, 默认值 =1.0
, 类型 = double, 别名:pos_sub_row
,pos_subsample
,pos_bagging
, 约束:0.0 < pos_bagging_fraction <= 1.0
仅在
binary
应用程序中使用用于不平衡的二分类问题,将在bagging中随机采样
#pos_samples * pos_bagging_fraction
个正样本。应与
neg_bagging_fraction
一起使用将此设置为
1.0
以禁用注意:要启用此功能,您需要设置
bagging_freq
和neg_bagging_fraction
。注意:如果
pos_bagging_fraction
和neg_bagging_fraction
都设置为1.0
,则平衡装袋功能将被禁用注意:如果启用了平衡装袋,
bagging_fraction
将被忽略
neg_bagging_fraction
🔗︎, 默认值 =1.0
, 类型 = double, 别名:neg_sub_row
,neg_subsample
,neg_bagging
, 约束:0.0 < neg_bagging_fraction <= 1.0
仅在
binary
应用程序中使用用于不平衡的二分类问题,将在bagging中随机采样
#neg_samples * neg_bagging_fraction
个负样本。应与
pos_bagging_fraction
一起使用将此设置为
1.0
以禁用注意:要启用此功能,您需要设置
bagging_freq
和pos_bagging_fraction
。注意:如果
pos_bagging_fraction
和neg_bagging_fraction
都设置为1.0
,则平衡装袋功能将被禁用注意:如果启用了平衡装袋,
bagging_fraction
将被忽略
bagging_freq
🔗︎, 默认值 =0
, 类型 = int, 别名:subsample_freq
bagging 的频率
0
表示禁用 bagging;k
表示在每k
次迭代时执行 bagging。每第k
次迭代时,LightGBM 将随机选择bagging_fraction * 100 %
的数据用于接下来的k
次迭代。注意: 只有在
0.0 < bagging_fraction < 1.0
时,bagging 才有效。
bagging_seed
🔗︎, 默认值 =3
, 类型 = int, 别名:bagging_fraction_seed
bagging 的随机种子
feature_fraction
🔗︎, 默认值 =1.0
, 类型 = double, 别名:sub_feature
,colsample_bytree
, 约束:0.0 < feature_fraction <= 1.0
如果
feature_fraction
小于1.0
,LightGBM 将在每次迭代(树)时随机选择特征的子集。例如,如果您将其设置为0.8
,LightGBM 将在训练每棵树之前选择 80% 的特征。可以用来加速训练
可用于处理过拟合
feature_fraction_bynode
🔗︎, 默认值 =1.0
, 类型 = double, 别名:sub_feature_bynode
,colsample_bynode
, 约束:0.0 < feature_fraction_bynode <= 1.0
如果
feature_fraction_bynode
小于1.0
,LightGBM 将在每个树节点随机选择一个特征子集。例如,如果你将其设置为0.8
,LightGBM 将在每个树节点选择 80% 的特征。可用于处理过拟合
注意:与
feature_fraction
不同,这不能加快训练速度注意:如果
feature_fraction
和feature_fraction_bynode
都小于1.0
,每个节点的最终比例是feature_fraction * feature_fraction_bynode
feature_fraction_seed
🔗︎, default =2
, type = intfeature_fraction
的随机种子
extra_trees
🔗︎, 默认值 =false
, 类型 = bool, 别名:extra_tree
使用极度随机化树
如果设置为
true
,在评估节点分裂时,LightGBM 将仅检查每个特征的一个随机选择的阈值。可以用来加速训练
可用于处理过拟合
extra_seed
🔗︎, 默认值 =6
, 类型 = int当
extra_trees
为真时,选择阈值的随机种子
early_stopping_round
🔗︎, 默认值 =0
, 类型 = int, 别名:early_stopping_rounds
,early_stopping
,n_iter_no_change
如果在最近的
early_stopping_round
轮中,一个验证数据的某个指标没有改善,将停止训练。<= 0
表示禁用可以用来加速训练
early_stopping_min_delta
🔗︎, 默认值 =0.0
, 类型 = double, 约束:early_stopping_min_delta >= 0.0
当使用早停时(即
early_stopping_round > 0
),要求早停指标至少提高这个增量才能被视为改进新版本 4.4.0
first_metric_only
🔗︎, 默认值 =false
, 类型 = boolLightGBM 允许你提供多个评估指标。如果你想仅使用第一个指标进行早停,请将此设置为
true
。
max_delta_step
🔗︎, 默认值 =0.0
, 类型 = double, 别名:max_tree_output
,max_leaf_output
用于限制树枝的最大输出
<= 0
表示没有约束叶子的最终最大输出是
learning_rate * max_delta_step
lambda_l1
🔗︎, 默认值 =0.0
, 类型 = 双精度, 别名:reg_alpha
,l1_regularization
, 约束:lambda_l1 >= 0.0
L1 正则化
lambda_l2
🔗︎, 默认值 =0.0
, 类型 = double, 别名:reg_lambda
,lambda
,l2_regularization
, 约束:lambda_l2 >= 0.0
L2 正则化
linear_lambda
🔗︎, 默认值 =0.0
, 类型 = 双精度, 约束:linear_lambda >= 0.0
线性树正则化,对应于 Gradient Boosting with Piece-Wise Linear Regression Trees 中公式 3 的参数
lambda
。
min_gain_to_split
🔗︎, 默认值 =0.0
, 类型 = double, 别名:min_split_gain
, 约束:min_gain_to_split >= 0.0
执行分割的最小增益
可以用来加速训练
drop_rate
🔗︎,默认值 =0.1
,类型 = 双精度,别名:rate_drop
,约束:0.0 <= drop_rate <= 1.0
仅在
dart
中使用dropout 率:在 dropout 过程中丢弃的前几棵树的比例
max_drop
🔗︎, 默认值 =50
, 类型 = int仅在
dart
中使用在一次提升迭代中丢弃的最大树数
<=0
表示没有限制
skip_drop
🔗︎, 默认值 =0.5
, 类型 = 双精度, 约束:0.0 <= skip_drop <= 1.0
仅在
dart
中使用在提升迭代过程中跳过dropout程序的概率
xgboost_dart_mode
🔗︎, default =false
, type = bool仅在
dart
中使用如果你想使用 xgboost dart 模式,请将此设置为
true
。
uniform_drop
🔗︎, 默认 =false
, 类型 = bool仅在
dart
中使用如果你想使用统一掉落,请将此设置为
true
。
drop_seed
🔗︎, 默认值 =4
, 类型 = int仅在
dart
中使用随机种子以选择丢弃模型
top_rate
🔗︎, 默认值 =0.2
, 类型 = 双精度, 约束:0.0 <= top_rate <= 1.0
仅在
goss
中使用大梯度数据的保留率
other_rate
🔗︎,默认值 =0.1
,类型 = 双精度,约束条件:0.0 <= other_rate <= 1.0
仅在
goss
中使用小梯度数据的保留率
min_data_per_group
🔗︎, 默认值 =100
, 类型 = int, 约束:min_data_per_group > 0
每个分类组的最小数据量
max_cat_threshold
🔗︎, 默认值 =32
, 类型 = int, 约束:max_cat_threshold > 0
用于分类特征
限制为分类特征考虑的分割点数量。更多详情请参阅 LightGBM 如何为分类特征找到最佳分割点的文档。
可以用来加速训练
cat_l2
🔗︎, 默认值 =10.0
, 类型 = 双精度, 约束:cat_l2 >= 0.0
用于分类特征
类别分割中的L2正则化
cat_smooth
🔗︎, 默认值 =10.0
, 类型 = 双精度, 约束:cat_smooth >= 0.0
用于分类特征
这可以减少分类特征中噪声的影响,特别是对于数据较少的类别
max_cat_to_onehot
🔗︎, 默认值 =4
, 类型 = int, 约束:max_cat_to_onehot > 0
当一个特征的类别数量小于或等于
max_cat_to_onehot
时,将使用一对一的分割算法。
top_k
🔗︎, 默认值 =20
, 类型 = int, 别名:topk
, 约束:top_k > 0
仅在
voting
树学习器中使用,参考 投票并行将此值设置得更大以获得更准确的结果,但这会减慢训练速度
monotone_constraints
🔗︎, 默认 =None
, 类型 = 多整数, 别名:mc
,monotone_constraint
,monotonic_cst
用于单调特征的约束
1
表示增加,-1
表示减少,0
表示无约束你需要按顺序指定所有特征。例如,
mc=-1,0,1
表示第一个特征递减,第二个特征无约束,第三个特征递增。
monotone_constraints_method
🔗︎, 默认 =basic
, 类型 = 枚举, 选项:basic
,intermediate
,advanced
, 别名:monotone_constraining_method
,mc_method
monotone_penalty
🔗︎, 默认值 =0.0
, 类型 = double, 别名:monotone_splits_penalty
,ms_penalty
,mc_penalty
, 约束:monotone_penalty >= 0.0
仅在
monotone_constraints
设置时使用单调惩罚: 惩罚参数 X 禁止在树的前 X(向下取整)层进行任何单调分割。应用于给定深度的单调分割的惩罚是一个连续的、递增的函数,该函数依赖于惩罚参数
如果
0.0
(默认值),则不应用惩罚。
feature_contri
🔗︎, 默认值 =None
, 类型 = 多重双精度, 别名:feature_contrib
,fc
,fp
,feature_penalty
用于控制特征的分割增益,将使用
gain[i] = max(0, feature_contri[i]) * gain[i]
来替换第 i 个特征的分割增益您需要指定所有功能
forcedsplits_filename
🔗︎, 默认值 =""
, 类型 = 字符串, 别名:fs
,forced_splits_filename
,forced_splits_file
,forced_splits
指定在最佳优先学习开始之前,在每个决策树顶部强制分割的
.json
文件的路径.json
文件可以任意嵌套,每个分割包含feature
、threshold
字段,以及表示子分割的left
和right
字段。分类分割以独热编码方式强制进行,其中
left
表示包含特征值的分割,right
表示其他值。注意:如果分割会使增益变差,强制分割逻辑将被忽略。
参见 此文件 作为示例
refit_decay_rate
🔗︎, 默认值 =0.9
, 类型 = double, 约束:0.0 <= refit_decay_rate <= 1.0
refit
任务的衰减率,将使用leaf_output = refit_decay_rate * old_leaf_output + (1.0 - refit_decay_rate) * new_leaf_output
来重训练树仅在CLI版本的``refit``任务中使用,或在特定语言包的``refit``函数中作为参数使用。
cegb_tradeoff
🔗︎, 默认值 =1.0
, 类型 = 双精度浮点数, 约束条件:cegb_tradeoff >= 0.0
所有惩罚的成本效益梯度提升乘数
cegb_penalty_split
🔗︎, 默认值 =0.0
, 类型 = 双精度浮点数, 约束:cegb_penalty_split >= 0.0
节点分裂的成本效益梯度提升惩罚
cegb_penalty_feature_lazy
🔗︎, 默认值 =0,0,...,0
, 类型 = 多重双精度使用特征的成本效益梯度提升惩罚
应用于每个数据点
cegb_penalty_feature_coupled
🔗︎, 默认值 =0,0,...,0
, 类型 = 多重双精度使用特征的成本效益梯度提升惩罚
每片森林应用一次
path_smooth
🔗︎, 默认值 =0
, 类型 = 双精度, 约束:path_smooth >= 0.0
应用于树节点的平滑控制
有助于防止在样本较少的叶子上过度拟合
如果设置为零,则不应用平滑处理
如果
path_smooth > 0
那么min_data_in_leaf
必须至少为2
较大的值提供更强的正则化
每个节点的权重为
w * (n / path_smooth) / (n / path_smooth + 1) + w_p / (n / path_smooth + 1)
,其中n
是节点中的样本数,w
是使损失最小化的最优节点权重(大约为-sum_gradients / sum_hessians
),w_p
是父节点的权重。注意,父输出
w_p
本身已应用平滑处理,除非它是根节点,因此平滑效果会随着树的深度累积。
interaction_constraints
🔗︎, 默认值 =""
, 类型 = 字符串控制哪些功能可以出现在同一分支中
默认情况下,交互约束是禁用的,要启用它们,您可以指定
对于CLI,用逗号分隔的列表,例如
[0,1,2],[2,3]
对于Python包,列表的列表,例如
[[0, 1, 2], [2, 3]]
对于 R 包,可以是字符向量或数值向量的列表,例如
list(c("var1", "var2", "var3"), c("var3", "var4"))
或list(c(1L, 2L, 3L), c(3L, 4L))
。数值向量应使用基于 1 的索引,其中1L
是第一个特征,2L
是第二个特征,依此类推。
任意两个特征只能出现在同一个分支中,当且仅当存在一个包含这两个特征的约束。
verbosity
🔗︎, 默认值 =1
, 类型 = int, 别名:verbose
控制 LightGBM 的详细程度
< 0
: 致命,= 0
: 错误 (警告),= 1
: 信息,> 1
: 调试
input_model
🔗︎, 默认值 =""
, 类型 = 字符串, 别名:model_input
,model_in
输入模型的文件名
对于
预测
任务,此模型将应用于预测数据对于
train
任务,训练将从该模型继续进行注意:只能在CLI版本中使用
output_model
🔗︎, 默认值 =LightGBM_model.txt
, 类型 = 字符串, 别名:model_output
,model_out
训练中输出模型的文件名
注意:只能在CLI版本中使用
saved_feature_importance_type
🔗︎, 默认值 =0
, 类型 = int保存的模型文件中的特征重要性类型
0
: 基于计数的特征重要性(分割次数被计数);1
: 基于增益的特征重要性(增益值被计数)注意:只能在CLI版本中使用
snapshot_freq
🔗︎,默认值 =-1
,类型 = int,别名:save_period
保存模型文件快照的频率
将此设置为正值以启用此功能。例如,如果
snapshot_freq=1
,模型文件将在每次迭代时进行快照。注意:只能在CLI版本中使用
use_quantized_grad
🔗︎, 默认值 =false
, 类型 = bool是否在训练时使用梯度量化
启用此功能将把梯度和海森矩阵离散化(量化)为
num_grad_quant_bins
个区间。在量化训练中,训练过程中的大多数算术运算将是整数运算。
梯度量化可以在大多数情况下加速训练,且精度损失很小。
注意:只能与
device_type = cpu
和device_type=cuda
一起使用新版本 4.0.0
num_grad_quant_bins
🔗︎, default =4
, type = int量化梯度和Hessian的箱数
随着分箱数量增加,量化训练将更接近全精度训练
注意:只能与
device_type = cpu
和device_type=cuda
一起使用新版本 4.0.0
quant_train_renew_leaf
🔗︎, 默认 =false
, 类型 = bool在量化训练时是否用原始梯度更新叶子节点的值
更新对于提高用于排序目标的良好量化训练准确性非常有帮助
注意:只能与
device_type = cpu
和device_type=cuda
一起使用新版本 4.0.0
stochastic_rounding
🔗︎, 默认 =true
, 类型 = bool是否在梯度量化中使用随机舍入
注意:只能与
device_type = cpu
和device_type=cuda
一起使用新版本 4.0.0
IO 参数
数据集参数
linear_tree
🔗︎, 默认值 =false
, 类型 = bool, 别名:linear_trees
拟合分段线性梯度提升树
树的分裂按常规方式选择,但每个叶节点的模型是线性的,而不是常数。
每个叶子节点中的线性模型包括该叶子分支中的所有数值特征
第一棵树的叶子值是常量
分类特征像往常一样用于分割,但不用于线性模型
缺失值不应编码为
0
。对于 Python,使用np.nan
;对于 CLI,使用NA
;对于 R,使用NA
、NA_real_
或NA_integer_
。建议在训练前对数据进行重新缩放,以便特征具有相似的均值和标准差
注意:仅适用于 CPU 和
serial
树学习器注意:
regression_l1
目标函数不支持线性树提升注意:设置
linear_tree=true
会显著增加 LightGBM 的内存使用。注意:如果你指定了
monotone_constraints
,约束将在选择分割点时被强制执行,但在叶子上的线性模型拟合时不会被强制执行。
max_bin
🔗︎, 默认值 =255
, 类型 = int, 别名:max_bins
, 约束:max_bin > 1
特征值将被分桶的最大桶数
较少的箱子数量可能会降低训练精度,但可能会提高泛化能力(处理过拟合)
LightGBM 将根据
max_bin
自动压缩内存。例如,如果max_bin=255
,LightGBM 将使用uint8_t
作为特征值。
max_bin_by_feature
🔗︎, 默认值 =None
, 类型 = multi-int每个特征的最大箱数
如果未指定,将使用
max_bin
作为所有特征的值
min_data_in_bin
🔗︎, 默认值 =3
, 类型 = int, 约束:min_data_in_bin > 0
一个箱子内的最小数据量
使用此方法以避免一数据一箱(潜在的过拟合)
bin_construct_sample_cnt
🔗︎, 默认值 =200000
, 类型 = int, 别名:subsample_for_bin
, 约束:bin_construct_sample_cnt > 0
用于构建特征离散区间的采样数据数量
将此设置为更大的值将获得更好的训练结果,但可能会增加数据加载时间
如果数据非常稀疏,请将此值设置得更大。
注意:不要将此设置为较小的值,否则,您可能会遇到意外错误和较低的准确性
data_random_seed
🔗︎, 默认值 =1
, 类型 = int, 别名:data_seed
用于采样数据构建直方图箱的随机种子
is_enable_sparse
🔗︎, 默认值 =true
, 类型 = bool, 别名:is_sparse
,enable_sparse
,sparse
用于启用/禁用稀疏优化
enable_bundle
🔗︎, 默认值 =true
, 类型 = bool, 别名:is_enable_bundle
,bundle
将此设置为
false
以禁用独占功能捆绑(EFB),该功能在 LightGBM: 一种高效梯度提升决策树 中描述。注意:禁用此功能可能会导致稀疏数据集的训练速度变慢
use_missing
🔗︎, 默认值 =true
, 类型 = bool将此设置为
false
以禁用对缺失值的特殊处理
zero_as_missing
🔗︎, 默认值 =false
, 类型 = bool将此设置为
true
以将所有零视为缺失值(包括 LibSVM / 稀疏矩阵中未显示的值)将此设置为
false
以使用na
表示缺失值
feature_pre_filter
🔗︎, 默认值 =true
, 类型 = bool将此设置为
true
(默认值)以告知 LightGBM 忽略基于min_data_in_leaf
不可分割的特征。由于数据集对象仅初始化一次且之后无法更改,因此在使用
min_data_in_leaf
搜索参数时,您可能需要将其设置为false
,否则如果您不重新构建数据集对象,特征将首先被min_data_in_leaf
过滤。注意:将此设置为
false
可能会减慢训练速度
pre_partition
🔗︎,默认值 =false
,类型 = bool,别名:is_pre_partition
用于分布式学习(不包括
feature_parallel
模式)如果训练数据是预先分区的,并且不同的机器使用不同的分区,则为
true
two_round
🔗︎, 默认值 =false
, 类型 = bool, 别名:two_round_loading
,use_two_round_loading
如果数据文件太大无法放入内存,请将此设置为
true
默认情况下,LightGBM 会将数据文件映射到内存并从内存中加载特征。这将提供更快的数据加载速度,但在数据文件非常大时可能会导致内存不足错误。
注意: 仅在直接从文本文件加载数据时有效
header
🔗︎,默认值 =false
,类型 = bool,别名:has_header
如果输入数据有标题,请将此设置为
true
注意: 仅在直接从文本文件加载数据时有效
label_column
🔗︎, 默认 =""
, 类型 = int 或 string, 别名:label
用于指定标签列
使用数字作为索引,例如
label=0
表示 column_0 是标签为列名添加前缀
name:
,例如label=name:is_click
如果省略,训练数据中的第一列将用作标签
注意: 仅在直接从文本文件加载数据时有效
weight_column
🔗︎, 默认值 =""
, 类型 = int 或 string, 别名:weight
用于指定权重列
使用数字作为索引,例如
weight=0
表示 column_0 是权重为列名添加前缀
name:
,例如weight=name:weight
注意: 仅在直接从文本文件加载数据时有效
注意:索引从
0
开始,并且在传递类型为int
时,不计算标签列,例如当标签是 column_0,权重是 column_1 时,正确的参数是weight=0
注意: 权重应为非负数
group_column
🔗︎, 默认值 =""
, 类型 = int 或 string, 别名:group
,group_id
,query_column
,query
,query_id
用于指定查询/组ID列
使用数字作为索引,例如
query=0
表示 column_0 是查询 ID为列名添加前缀
name:
,例如query=name:query_id
注意: 仅在直接从文本文件加载数据时有效
注意:数据应按 query_id 分组,更多信息请参见 查询数据
注意:索引从
0
开始,并且在传递类型为int
时不计标签列,例如当标签为 column_0 且查询 ID 为 column_1 时,正确的参数是query=0
ignore_column
🔗︎, 默认值 =""
, 类型 = 多整数或字符串, 别名:ignore_feature
,blacklist
用于指定训练中忽略的某些列
使用数字作为索引,例如
ignore_column=0,1,2
表示将忽略第0列、第1列和第2列为列名添加前缀
name:
,例如ignore_column=name:c1,c2,c3
表示 c1, c2 和 c3 将被忽略注意: 仅在直接从文本文件加载数据时有效
注意: 索引从
0
开始,并且在传递类型为int
时不计算标签列。注意:尽管在训练过程中指定的列将被完全忽略,但它们仍应具有有效的格式,以允许 LightGBM 成功加载文件。
categorical_feature
🔗︎, 默认值 =""
, 类型 = 多整数或字符串, 别名:cat_feature
,categorical_column
,cat_column
,categorical_features
用于指定分类特征
使用数字作为索引,例如
categorical_feature=0,1,2
表示 column_0、column_1 和 column_2 是分类特征为列名添加前缀
name:
,例如categorical_feature=name:c1,c2,c3
表示 c1, c2 和 c3 是分类特征注意: 所有值将被转换为
int32
(在 Python 包中,将从 pandas 分类中提取整数码)注意: 索引从
0
开始,并且在传递类型为int
时不计算标签列。注意: 所有值应小于
Int32.MaxValue
(2147483647)注意:使用大值可能会消耗大量内存。树决策规则在分类特征以从零开始的连续整数表示时效果最佳。
注意:所有负值将被视为 缺失值
注意:输出不能相对于分类特征进行单调约束
注意:分类特征中的浮点数将被四舍五入至0
forcedbins_filename
🔗︎, 默认值 =""
, 类型 = 字符串save_binary
🔗︎, 默认值 =false
, 类型 = bool, 别名:is_save_binary
,is_save_binary_file
如果
true
,LightGBM 将把数据集(包括验证数据)保存到一个二进制文件中。这会加快下次加载数据的速度。注意:
init_score
不会保存在二进制文件中注意:只能在CLI版本中使用;对于特定语言的包,您可以使用相应的函数
precise_float_parser
🔗︎, 默认值 =false
, 类型 = bool使用精确的浮点数解析文本解析器(例如 CSV、TSV、LibSVM 输入)
注意: 将此设置为
true
可能会导致文本解析速度大大降低
parser_config_file
🔗︎,默认值 =""
,类型 = 字符串指向一个
.json
文件的路径,该文件指定了自定义解析器的初始化配置参见 lightgbm-transform 以获取使用示例
注意:
lightgbm-transform
不是由 LightGBM 的维护者维护的。错误报告或功能请求应提交到 问题页面新版本 4.0.0
预测参数
start_iteration_predict
🔗︎, 默认值 =0
, 类型 = int仅用于
预测
任务用于指定从哪一次迭代开始进行预测
<= 0
表示从第一次迭代开始
num_iteration_predict
🔗︎, 默认值 =-1
, 类型 = int仅用于
预测
任务用于指定在预测中将使用多少次训练迭代
<= 0
表示没有限制
predict_raw_score
🔗︎, 默认 =false
, 类型 = bool, 别名:is_predict_raw_score
,predict_rawscore
,raw_score
仅用于
预测
任务将此设置为
true
以仅预测原始分数将此设置为
false
以预测转换后的分数
predict_leaf_index
🔗︎, default =false
, type = bool, aliases:is_predict_leaf_index
,leaf_index
仅用于
预测
任务将此设置为
true
以预测所有树的叶索引
predict_contrib
🔗︎, 默认 =false
, 类型 = bool, 别名:is_predict_contrib
,contrib
predict_disable_shape_check
🔗︎, 默认 =false
, 类型 = bool仅用于
预测
任务控制当你尝试在具有与训练数据不同数量的特征的数据上进行预测时,LightGBM是否引发错误
如果 ``false``(默认),如果你预测的数据集中的特征数量与训练期间看到的数量不同,将会引发致命错误。
如果
true
,LightGBM 将尝试预测你提供的任何数据。这是危险的,因为你可能会得到不正确的预测,但在某些情况下可以使用它,例如生成某些特征非常困难或昂贵,并且你非常确信这些特征从未在模型中被选择用于分割。注意:将此参数设置为
true
时要非常小心
pred_early_stop
🔗︎, default =false
, type = bool仅用于
预测
任务仅用于
分类
和排序
应用仅用于预测正常或原始分数
如果
true
,将使用提前停止来加速预测。可能会影响准确性。注意:不能与
rf
提升类型或自定义目标函数一起使用
pred_early_stop_freq
🔗︎, default =10
, type = int仅用于
预测
任务检查早期停止预测的频率
pred_early_stop_margin
🔗︎, 默认值 =10.0
, 类型 = double仅用于
预测
任务早期停止预测中的边际阈值
output_result
🔗︎, 默认值 =LightGBM_predict_result.txt
, 类型 = 字符串, 别名:predict_result
,prediction_result
,predict_name
,prediction_name
,pred_name
,name_pred
仅用于
预测
任务预测结果的文件名
注意:只能在CLI版本中使用
转换参数
目标参数
objective_seed
🔗︎, 默认值 =5
, 类型 = int仅在
rank_xendcg
目标中使用目标的随机种子,如果需要随机过程
num_class
🔗︎, 默认值 =1
, 类型 = int, 别名:num_classes
, 约束:num_class > 0
仅用于
多类
分类应用
is_unbalance
🔗︎, 默认值 =false
, 类型 = bool, 别名:unbalance
,unbalanced_sets
仅在
binary
和multiclassova
应用中使用如果训练数据不平衡,请将此设置为
true
注意:虽然启用此功能应能提高模型的整体性能指标,但它也会导致各个类别概率的估计不准确。
注意:此参数不能与
scale_pos_weight
同时使用,请仅选择 其中一个。
scale_pos_weight
🔗︎, 默认 =1.0
, 类型 = 双精度, 约束:scale_pos_weight > 0.0
仅在
binary
和multiclassova
应用中使用正类标签的权重
注意:虽然启用此功能应能提高模型的整体性能指标,但它也会导致各个类别概率的估计不准确。
注意:此参数不能与
is_unbalance
同时使用,请仅选择 其中一个
sigmoid
🔗︎, 默认值 =1.0
, 类型 = double, 约束:sigmoid > 0.0
仅在
binary
和multiclassova
分类以及lambdarank
应用中使用sigmoid 函数的参数
boost_from_average
🔗︎, 默认值 =true
, 类型 = bool仅用于
回归
、二分类
、多分类ova
和交叉熵
应用调整初始分数为标签的均值以加快收敛
reg_sqrt
🔗︎, 默认值 =false
, 类型 = bool仅在
回归
应用中使用用于拟合
sqrt(label)
而不是原始值,预测结果也将自动转换为prediction^2
在处理大范围标签时可能会有用
alpha
🔗︎, 默认值 =0.9
, 类型 = 双精度, 约束:alpha > 0.0
仅用于
huber
和quantile
回归
应用
fair_c
🔗︎, 默认值 =1.0
, 类型 = 双精度, 约束:fair_c > 0.0
仅用于
fair
regression
应用Fair loss 的参数
poisson_max_delta_step
🔗︎, 默认值 =0.7
, 类型 = 双精度, 约束:poisson_max_delta_step > 0.0
仅用于
poisson
回归
应用用于 泊松回归 的参数以保障优化
tweedie_variance_power
🔗︎, 默认值 =1.5
, 类型 = double, 约束:1.0 <= tweedie_variance_power < 2.0
仅用于
tweedie
回归
应用用于控制tweedie分布的方差
将此值设置得更接近
2
以偏向于 Gamma 分布将此值设置得更接近
1
以趋向于 泊松 分布
lambdarank_truncation_level
🔗︎, 默认值 =30
, 类型 = int, 约束:lambdarank_truncation_level > 0
仅在
lambdarank
应用中使用控制训练期间关注的顶级结果数量,请参阅 LambdaMART 论文 第 3 节中的“截断级别”。
此参数与我们在优化排名器时所追求的指标 NDCG@k 中的理想截止值
k
密切相关。此参数的最佳设置可能略高于k``(例如,``k + 3
),以包含更多文档对进行训练,但可能不会太高,以避免偏离目标指标 NDCG@k 太多。
lambdarank_norm
🔗︎, 默认 =true
, 类型 = bool仅在
lambdarank
应用中使用将此设置为
true
以规范化不同查询的lambda,并提高不平衡数据的性能将此设置为
false
以强制执行原始的 lambdarank 算法
label_gain
🔗︎, 默认值 =0,1,3,7,15,31,63,...,2^30-1
, 类型 = 多重双精度仅在
lambdarank
应用中使用标签的相关增益。例如,在默认标签增益的情况下,标签
2
的增益是3
。用
,
分隔
lambdarank_position_bias_regularization
🔗︎, 默认值 =0.0
, 类型 = double, 约束:lambdarank_position_bias_regularization >= 0.0
仅在
lambdarank
应用中使用,当提供位置信息并建模位置偏差时。较大的值会减少推断的位置偏差因子。新版本 4.1.0
度量参数
metric
🔗︎, 默认值 =""
, 类型 = 多选枚举, 别名:metrics
,metric_types
要在评估集上评估的指标
``””``(空字符串或未指定)表示将使用与指定``objective``对应的指标(这仅适用于预定义的目标函数,否则不会添加评估指标)
"None"
(字符串,不是None
值) 意味着不会注册任何指标,别名:na
,null
,custom
l1
,绝对损失,别名:mean_absolute_error
,mae
,regression_l1
l2
,平方损失,别名:mean_squared_error
,mse
,regression_l2
,regression
rmse
, 均方根误差, 别名:root_mean_squared_error
,l2_root
quantile
,分位数回归mape
, MAPE 损失, 别名:mean_absolute_percentage_error
huber
,Huber 损失fair
,Fair 损失poisson
,泊松回归 的负对数似然gamma
,Gamma 回归的负对数似然gamma_deviance
,Gamma 回归的残差偏差tweedie
, Tweedie 回归的负对数似然ndcg
, NDCG, 别名:lambdarank
,rank_xendcg
,xendcg
,xe_ndcg
,xe_ndcg_mart
,xendcg_mart
map
,MAP,别名:mean_average_precision
auc
, AUCaverage_precision
, 平均精度分数binary_logloss
,对数损失,别名:binary
binary_error
,对于一个样本:0
表示正确分类,1
表示错误分类auc_mu
,AUC-mumulti_logloss
,多类分类的对数损失,别名:multiclass
,softmax
,multiclassova
,multiclass_ova
,ova
,ovr
multi_error
,多类别分类的错误率cross_entropy
,交叉熵(可选线性权重),别名:xentropy
cross_entropy_lambda
,“强度加权”交叉熵,别名:xentlambda
kullback_leibler
,Kullback-Leibler 散度,别名:kldiv
支持多个指标,用
,
分隔
metric_freq
🔗︎, 默认值 =1
, 类型 = int, 别名:output_freq
, 约束:metric_freq > 0
指标输出的频率
注意:只能在CLI版本中使用
is_provide_training_metric
🔗︎, 默认值 =false
, 类型 = bool, 别名:training_metric
,is_training_metric
,train_metric
将此设置为
true
以输出训练数据集上的指标结果注意:只能在CLI版本中使用
eval_at
🔗︎, 默认值 =1,2,3,4,5
, 类型 = multi-int, 别名:ndcg_eval_at
,ndcg_at
,map_eval_at
,map_at
multi_error_top_k
🔗︎, 默认 =1
, 类型 = int, 约束:multi_error_top_k > 0
仅与
multi_error
指标一起使用top-k 多错误指标的阈值
如果真实类别在
multi_error_top_k
预测中,则每个样本的错误为0
,否则为1
。更准确地说,如果至少有
num_classes - multi_error_top_k
个预测严格小于真实类别的预测,样本上的错误为0
。
当
multi_error_top_k=1
时,这等同于通常的多错误指标
auc_mu_weights
🔗︎, 默认值 =None
, 类型 = 多重双精度仅与
auc_mu
指标一起使用表示扁平化矩阵(按行优先顺序)的列表,给出分类错误的损失权重
列表应包含
n * n
个元素,其中n
是类的数量矩阵坐标
[i, j]
应对应于列表的第i * n + j
个元素如果未指定,将对所有类别使用相等的权重
网络参数
num_machines
🔗︎, 默认值 =1
, 类型 = int, 别名:num_machine
, 约束:num_machines > 0
分布式学习应用的机器数量
此参数需要在 socket 和 mpi 版本中都进行设置
local_listen_port
🔗︎, 默认值 =12400 (Dask-package 为随机)
, 类型 = int, 别名:local_port
,port
, 约束:local_listen_port > 0
本地机器的TCP监听端口
注意:在训练之前,别忘了在防火墙设置中允许此端口
time_out
🔗︎,默认值 =120
,类型 = int,约束条件:time_out > 0
socket 超时时间(分钟)
machine_list_filename
🔗︎, 默认值 =""
, 类型 = 字符串, 别名:machine_list_file
,machine_list
,mlist
列出此分布式学习应用程序机器的文件路径
每行包含一个IP和一个端口,对应一台机器。格式为 ``ip port``(空格作为分隔符)
注意:只能在CLI版本中使用
machines
🔗︎, 默认值 =""
, 类型 = 字符串, 别名:workers
,nodes
以下格式的机器列表:
ip1:port1,ip2:port2
GPU 参数
gpu_platform_id
🔗︎, 默认值 =-1
, 类型 = intOpenCL 平台 ID。通常每个 GPU 供应商会暴露一个 OpenCL 平台
-1
表示系统范围内的默认平台注意: 更多详情请参阅 GPU 目标
gpu_device_id
🔗︎,默认值 =-1
,类型 = int指定平台中的OpenCL设备ID。所选平台中的每个GPU都有一个唯一的设备ID
-1
表示所选平台中的默认设备注意: 更多详情请参阅 GPU 目标
gpu_use_dp
🔗︎, 默认值 =false
, 类型 = bool将此设置为
true
以在 GPU 上使用双精度数学(默认使用单精度)注意:只能在 OpenCL 实现中使用,在 CUDA 实现中目前仅支持双精度。
num_gpu
🔗︎, 默认值 =1
, 类型 = int, 约束:num_gpu > 0
GPU 数量
注意:仅可在CUDA实现中使用
其他
继续训练与输入分数
LightGBM 支持使用初始分数进行连续训练。它使用一个额外的文件来存储这些初始分数,如下所示:
0.5
-0.1
0.9
...
这意味着第一行数据的初始分数是 0.5
,第二行是 -0.1
,依此类推。初始分数文件与数据文件逐行对应,每行有一个分数。
如果数据文件名为 train.txt
,初始分数文件应命名为 train.txt.init
并放置在与数据文件相同的文件夹中。在这种情况下,如果初始分数文件存在,LightGBM 将自动加载它。
如果原始数据文件 train.txt
存在二进制数据文件,例如名为 train.txt.bin
,那么初始分数文件应命名为 train.txt.bin.init
。
重量数据
LightGBM 支持加权训练。它使用一个额外的文件来存储权重数据,如下所示:
1.0
0.5
0.8
...
这意味着第一行数据的权重是 1.0
,第二行是 0.5
,依此类推。权重应为非负数。
权重文件与数据文件逐行对应,每行有一个权重。
如果数据文件名为 train.txt
,则权重文件应命名为 train.txt.weight
并放置在与数据文件相同的文件夹中。在这种情况下,如果权重文件存在,LightGBM 将自动加载它。
此外,您可以在数据文件中包含权重列。请参考上述的 weight_column
参数。
查询数据
对于学习排序,它需要查询信息作为训练数据。
LightGBM 使用一个额外的文件来存储查询数据,如下所示:
27
18
67
...
对于像Python和R中的包装库,这些信息也可以通过数据集参数 group
以类似数组的方式提供。
[27, 18, 67, ...]
例如,如果你有一个包含112个文档的数据集,且 group = [27, 18, 67]
,这意味着你有3个组,其中前27条记录在第一组,记录28-45在第二组,记录46-112在第三组。
注意:数据应按查询排序。
如果数据文件名为 train.txt
,查询文件应命名为 train.txt.query
并放置在与数据文件相同的文件夹中。在这种情况下,如果查询文件存在,LightGBM 将自动加载它。
此外,您可以在数据文件中包含查询/组ID列。请参考上面的 group_column
参数。