参数
本页面包含 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_typetrain,用于训练,别名:trainingpredict,用于预测,别名:prediction,testconvert_model,用于将模型文件转换为if-else格式,更多信息请参见 转换参数refit用于使用新数据重新拟合现有模型,别名:refit_treesave_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,rmseregression_l1,L1 损失,别名:l1,mean_absolute_error,maehuber,Huber 损失fair,Fair 损失poisson, 泊松回归quantile,分位数回归mape, MAPE 损失, 别名:mean_absolute_percentage_errorgamma,使用对数链接的伽玛回归。它可能有用,例如,用于建模保险索赔的严重程度,或用于任何可能是 伽玛分布的 目标。tweedie,使用对数链接的 Tweedie 回归。它可能很有用,例如,用于建模保险中的总损失,或用于任何可能 tweedie 分布 的目标。
二元分类应用
binary,二元 对数损失 分类(或逻辑回归)需要标签为 {0, 1};参见
交叉熵应用中 [0, 1] 范围内的一般概率标签
多类分类应用
交叉熵应用
cross_entropy,交叉熵的目标函数(可选的线性权重),别名:xentropycross_entropy_lambda,交叉熵的替代参数化方法,别名:xentlambdalabel 是区间 [0, 1] 中的任何值
排名应用
lambdarank,lambdarank 目标。可以使用 label_gain 来设置int标签的增益(权重),并且label中的所有值必须小于label_gain中元素的数量。rank_xendcg,XE_NDCG_MART 排名目标函数,别名:xendcg,xe_ndcg,xe_ndcg_mart,xendcg_martrank_xendcg比lambdarank更快,并且能达到相似的性能。标签应为
int类型,数字越大表示相关性越高(例如 0:差,1:一般,2:好,3:完美)
自定义目标函数(梯度和Hessian不由LightGBM直接计算)
custom注意: 在CLI版本中不支持
必须在C API中通过参数显式传递
boosting🔗︎,默认值 =gbdt,类型 = 枚举,选项:gbdt,rf,dart,别名:boosting_type,boostgbdt,传统梯度提升决策树,别名:gbrtrf,随机森林,别名:random_forestdart,Dropouts meet Multiple Additive Regression Trees注意:在内部,LightGBM 在前
1 / learning_rate次迭代中使用gbdt模式
data_sample_strategy🔗︎, 默认值 =bagging, 类型 = 枚举, 选项:bagging,gossbagging, 随机袋装采样注意:
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_typeserial, 单机树学习器feature,特征并行树学习器,别名:feature_paralleldata,数据并行树学习器,别名:data_parallelvoting,投票并行树学习器,别名: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, 别名:deviceseed🔗︎, 默认值 =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_freqbagging 的频率
0表示禁用 bagging;k表示在每k次迭代时执行 bagging。每第k次迭代时,LightGBM 将随机选择bagging_fraction * 100 %的数据用于接下来的k次迭代。注意: 只有在
0.0 < bagging_fraction < 1.0时,bagging 才有效。
bagging_seed🔗︎, 默认值 =3, 类型 = int, 别名:bagging_fraction_seedbagging 的随机种子
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.0L1 正则化
lambda_l2🔗︎, 默认值 =0.0, 类型 = double, 别名:reg_lambda,lambda,l2_regularization, 约束:lambda_l2 >= 0.0L2 正则化
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_methodmonotone_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.0refit任务的衰减率,将使用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,contribpredict_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仅用于
fairregression应用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,customl1,绝对损失,别名:mean_absolute_error,mae,regression_l1l2,平方损失,别名:mean_squared_error,mse,regression_l2,regressionrmse, 均方根误差, 别名:root_mean_squared_error,l2_rootquantile,分位数回归mape, MAPE 损失, 别名:mean_absolute_percentage_errorhuber,Huber 损失fair,Fair 损失poisson,泊松回归 的负对数似然gamma,Gamma 回归的负对数似然gamma_deviance,Gamma 回归的残差偏差tweedie, Tweedie 回归的负对数似然ndcg, NDCG, 别名:lambdarank,rank_xendcg,xendcg,xe_ndcg,xe_ndcg_mart,xendcg_martmap,MAP,别名:mean_average_precisionauc, AUCaverage_precision, 平均精度分数binary_logloss,对数损失,别名:binarybinary_error,对于一个样本:0表示正确分类,1表示错误分类auc_mu,AUC-mumulti_logloss,多类分类的对数损失,别名:multiclass,softmax,multiclassova,multiclass_ova,ova,ovrmulti_error,多类别分类的错误率cross_entropy,交叉熵(可选线性权重),别名:xentropycross_entropy_lambda,“强度加权”交叉熵,别名:xentlambdakullback_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_atmulti_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 > 0socket 超时时间(分钟)
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 > 0GPU 数量
注意:仅可在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 参数。