
作者:韩信子@ShowMeAI
教程地址:https://www.showmeai.tech/tutorials/41
本文地址:https://www.showmeai.tech/article-detail/205
声明:版权所有,转载请联系平台与作者并注明出处
收藏ShowMeAI查看更多精彩内容
引言
LightGBM是微软开发的boosting集成模型,和XGBoost一样是对GBDT的优化和高效实现,原理有一些相似之处,但它很多方面比XGBoost有着更为优秀的表现。
本篇内容ShowMeAI展开给大家讲解LightGBM的工程应用方法,对于LightGBM原理知识感兴趣的同学,欢迎参考ShowMeAI的另外一篇文章 图解机器学习 | LightGBM模型详解。
1.LightGBM安装
LightGBM作为常见的强大Python机器学习工具库,安装也比较简单。
1.1 Python与IDE环境设置
python环境与IDE设置可以参考ShowMeAI文章 图解python | 安装与环境设置 进行设置。

1.2 工具库安装
(1) Linux/Mac等系统
这些系统下的XGBoost安装,大家只要基于pip就可以轻松完成了,在命令行端输入命令如下命令即可等待安装完成。
pip install lightgbm
大家也可以选择国内的pip源,以获得更好的安装速度:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lightgbm
(2) Windows系统
对于windows系统而言,比较高效便捷的安装方式是:在网址http://www.lfd.uci.edu/~gohlke/pythonlibs/ 中去下载对应版本的的LightGBM安装包,再通过如下命令安装。
pip install lightgbm‑3.3.2‑cp310‑cp310‑win_amd64.whl
2.LightGBM参数手册
在ShowMeAI的前一篇内容 XGBoost工具库建模应用详解 中,我们讲解到了Xgboost的三类参数通用参数,学习目标参数,Booster参数。而LightGBM可调参数更加丰富,包含核心参数,学习控制参数,IO参数,目标参数,度量参数,网络参数,GPU参数,模型参数,这里我常修改的便是核心参数,学习控制参数,度量参数等。下面我们对这些模型参数做展开讲解,更多的细节可以参考LightGBM中文文档。
2.1 参数介绍
(1) 核心参数
-
config或者config_file:一个字符串,给出了配置文件的路径。默认为空字符串。 -
task:一个字符串,给出了要执行的任务。可以为:train或者training:表示是训练任务。默认为train。predict或者prediction或者test:表示是预测任务。convert_model:表示是模型转换任务。将模型文件转换成if-else格式。
-
application或者objective或者app:一个字符串,表示问题类型。可以为:regression或regression_l2或mean_squared_error或mse或l2_root或root_mean_squred_error或rmse:表示回归任务,但是使用L2损失函数。默认为regression。regression_l1或者mae或者mean_absolute_error:表示回归任务,但是使用L1损失函数。huber:表示回归任务,但是使用huber损失函数。fair:表示回归任务,但是使用fair损失函数。poisson:表示Poisson回归任务。quantile:表示quantile回归任务。quantile_l2:表示quantile回归任务,但是使用了L2损失函数。mape或者mean_absolute_precentage_error:表示回归任务,但是使用MAPE损失函数gamma:表示gamma回归任务。tweedie:表示tweedie回归任务。binary:表示二分类任务,使用对数损失函数作为目标函数。multiclass:表示多分类任务,使用softmax函数作为目标函数。必须设置num_class参数multiclassova或者multiclass_ova或者ova或者ovr:表示多分类任务,使用one-vs-all的二分类目标函数。必须设置num_class参数。xentropy或者cross_entropy:目标函数为交叉熵(同时具有可选择的线性权重)。要求标签是[0,1]之间的数值。xentlambda或者cross_entropy_lambda:替代了参数化的cross_entropy。要求标签是[0,1]之间的数值。lambdarank:表示排序任务。在lambdarank任务中,标签应该为整数类型,数值越大表示相关性越高。label_gain参数可以用于设置整数标签的增益(权重)。
-
boosting或者boost或者boosting_type:一个字符串,给出了基学习器模型算法。可以为:gbdt:表示传统的梯度提升决策树。默认值为gbdt。rf:表示随机森林。dart:表示带dropout的gbdt。goss:表示Gradient-based One-Side Sampling 的gbdt。
-
data或者train或者train_data:一个字符串,给出了训练数据所在的文件的文件名。默认为空字符串。LightGBM将使用它来训练模型。 -
valid或者test或者valid_data或者test_data:一个字符串,表示验证集所在的文件的文件名。默认为空字符串。LightGBM将输出该数据集的度量。如果有多个验证集,则用逗号分隔。 -
num_iterations或者num_iteration或者num_tree或者num_trees或者num_round或者num_rounds或者num_boost_round一个整数,给出了boosting的迭代次数。默认为100。- 对于Python/R包,该参数是被忽略的。对于Python,使用
train()/cv()的输入参数num_boost_round来代替。 - 在内部,LightGBM对于multiclass问题设置了
num_class*num_iterations棵树。
- 对于Python/R包,该参数是被忽略的。对于Python,使用
-
learning_rate或者shrinkage_rate:个浮点数,给出了学习率。默认为1。在dart中,它还会影响dropped trees的归一化权重。 -
num_leaves或者num_leaf:一个整数,给出了一棵树上的叶子数。默认为31。 -
tree_learner或者tree:一个字符串,给出了tree learner,主要用于并行学习。默认为serial。可以为:serial:单台机器的tree learnerfeature:特征并行的tree learnerdata:数据并行的tree learnervoting:投票并行的tree learner
-
num_threads或者num_thread或者nthread:一个整数,给出了LightGBM的线程数。默认为OpenMP_default。- 为了更快的速度,应该将它设置为真正的CPU内核数,而不是线程的数量(大多数CPU使用超线程来使每个CPU内核生成2个线程)。
- 当数据集较小的时候,不要将它设置的过大。
- 对于并行学习,不应该使用全部的CPU核心,因为这会使得网络性能不佳。
-
device:一个字符串,指定计算设备。默认为cpu。可以为gpu、cpu。- 建议使用较小的
max_bin来获得更快的计算速度。 - 为了加快学习速度,GPU默认使用32位浮点数来求和。你可以设置
gpu_use_dp=True来启动64位浮点数,但是它会使得训练速度降低。
- 建议使用较小的
(2) 学习控制参数
max_depth:一个整数,限制了树模型的最大深度,默认值为-1。如果小于0,则表示没有限制。min_data_in_leaf或者min_data_per_leaf或者min_data或者min_child_samples:一个整数,表示一个叶子节点上包含的最少样本数量。默认值为20。min_sum_hessian_in_leaf或者min_sum_hessian_per_leaf或者min_sum_hessian或者min_hessian或者min_child_weight:一个浮点数,表示一个叶子节点上的最小hessian之和。(也就是叶节点样本权重之和的最小值)默认为1e-3。feature_fraction或者sub_feature或者colsample_bytree:一个浮点数,取值范围为[0.0,1.0],默认值为0。如果小于1.0,则LightGBM会在每次迭代中随机选择部分特征。如0.8表示:在每棵树训练之前选择80%的特征来训练。feature_fraction_seed:一个整数,表示feature_fraction的随机数种子,默认为2。bagging_fraction或者sub_row或者subsample:一个浮点数,取值范围为[0.0,1.0],默认值为0。如果小于1.0,则LightGBM会在每次迭代中随机选择部分样本来训练(非重复采样)。如0.8表示:在每棵树训练之前选择80%的样本(非重复采样)来训练。bagging_freq或者subsample_freq:一个整数,表示每bagging_freq次执行bagging。如果该参数为0,表示禁用bagging。bagging_seed或者bagging_fraction_seed:一个整数,表示bagging的随机数种子,默认为3。early_stopping_round或者early_stopping_rounds或者early_stopping:一个整数,默认为0。如果一个验证集的度量在early_stopping_round循环中没有提升,则停止训练。如果为0则表示不开启早停。lambda_l1或者reg_alpha:一个浮点数,表示L1正则化系数。默认为0。lambda_l2或者reg_lambda:一个浮点数,表示L2正则化系数。默认为0。min_split_gain或者min_gain_to_split:一个浮点数,表示执行切分的最小增益,默认为0。drop_rate:一个浮点数,取值范围为[0.0,1.0],表示dropout的比例,默认为1。该参数仅在dart中使用。skip_drop:一个浮点数,取值范围为[0.0,1.0],表示跳过dropout的概率,默认为5。该参数仅在dart中使用。max_drop:一个整数,表示一次迭代中删除树的最大数量,默认为50。如果小于等于0,则表示没有限制。该参数仅在dart中使用。uniform_drop:一个布尔值,表示是否想要均匀的删除树,默认值为False。该参数仅在dart中使用。xgboost_dart_mode:一个布尔值,表示是否使用xgboost dart模式,默认值为False。该参数仅在dart中使用。drop_seed:一个整数,表示dropout的随机数种子,默认值为4。该参数仅在dart中使用。top_rate:一个浮点数,取值范围为[0.0,1.0],表示在goss中,大梯度数据的保留比例,默认值为2。该参数仅在goss中使用。other_rate:一个浮点数,取值范围为[0.0,1.0],表示在goss中,小梯度数据的保留比例,默认值为1。该参数仅在goss中使用。min_data_per_group:一个整数,表示每个分类组的最小数据量,默认值为100。用于排序任务max_cat_threshold:一个整数,表示category特征的取值集合的最大大小。默认为32。cat_smooth:一个浮点数,用于category特征的概率平滑。默认值为10。它可以降低噪声在category特征中的影响,尤其是对于数据很少的类。cat_l2:一个浮点数,用于category切分中的L2正则化系数。默认为10。top_k或者topk:一个整数,用于投票并行中。默认为20。将它设置为更大的值可以获得更精确的结果,但是会降低训练速度。
(3) IO参数
max_bin:一个整数,表示最大的桶的数量。默认值为255。LightGBM会根据它来自动压缩内存。如max_bin=255时,则LightGBM将使用uint8来表示特征的每一个值。min_data_in_bin:一个整数,表示每个桶的最小样本数。默认为3。该方法可以避免出现一个桶只有一个样本的情况。data_random_seed:一个整数,表示并行学习数据分隔中的随机数种子。默认为1它不包括特征并行。output_model或者model_output或者model_out:一个字符串,表示训练中输出的模型被保存的文件的文件名。默认txt。input_model或者model_input或者model_in:一个字符串,表示输入模型的文件的文件名。默认空字符串。对于prediction任务,该模型将用于预测数据,对于train任务,训练将从该模型继续output_result或者predict_result或者prediction_result:一个字符串,给出了prediction结果存放的文件名。默认为txt。pre_partition或者is_pre_partition:一个布尔值,指示数据是否已经被划分。默认值为False。如果为true,则不同的机器使用不同的partition来训练。它用于并行学习(不包括特征并行)is_sparse或者is_enable_sparse或者enable_sparse:一个布尔值,表示是否开启稀疏优化,默认为True。如果为True则启用稀疏优化。two_round或者two_round_loading或者use_two_round_loading:一个布尔值,指示是否启动两次加载。默认值为False,表示只需要进行一次加载。默认情况下,LightGBM会将数据文件映射到内存,然后从内存加载特征,这将提供更快的数据加载速度。但是当数据文件很大时,内存可能会被耗尽。如果数据文件太大,则将它设置为Truesave_binary或者is_save_binary或者is_save_binary_file:一个布尔值,表示是否将数据集(包括验证集)保存到二进制文件中。默认值为False。如果为True,则可以加快数据的加载速度。verbosity或者verbose:一个整数,表示是否输出中间信息。默认值为1。如果小于0,则仅仅输出critical信息;如果等于0,则还会输出error,warning信息;如果大于0,则还会输出info信息。header或者has_header:一个布尔值,表示输入数据是否有头部。默认为False。label或者label_column:一个字符串,表示标签列。默认为空字符串。你也可以指定一个整数,如label=0表示第0列是标签列。你也可以为列名添加前缀,如label=prefix:label_name。weight或者weight_column:一个字符串,表示样本权重列。默认为空字符串。你也可以指定一个整数,如weight=0表示第0列是权重列。注意:它是剔除了标签列之后的索引。假如标签列为0,权重列为1,则这里weight=0。你也可以为列名添加前缀,如weight=prefix:weight_name。query或者query_column或者gourp或者group_column:一个字符串,query/groupID列。默认为空字符串。你也可以指定一个整数,如query=0表示第0列是query列。注意:它是剔除了标签列之后的索引。假如标签列为0,query列为1,则这里query=0。你也可以为列名添加前缀,如query=prefix:query_name。ignore_column或者ignore_feature或者blacklist:一个字符串,表示训练中忽略的一些列,默认为空字符串。可以用数字做索引,如ignore_column=0,1,2表示第0,1,2列将被忽略。注意:它是剔除了标签列之后的索引。- 你也可以为列名添加前缀,如
ignore_column=prefix:ign_name1,ign_name2。 categorical_feature或者categorical_column或者cat_feature或者cat_column:一个字符串,指定category特征的列。默认为空字符串。可以用数字做索引,如categorical_feature=0,1,2表示第0,1,2列将作为category特征。注意:它是剔除了标签列之后的索引。你也可以为列名添加前缀,如categorical_feature=prefix:cat_name1,cat_name2在categorycal特征中,负的取值被视作缺失值。predict_raw_score或者raw_score或者is_predict_raw_score:一个布尔值,表示是否预测原始得分。默认为False。如果为True则仅预测原始得分。该参数只用于prediction任务。predict_leaf_index或者leaf_index或者is_predict_leaf_index:一个布尔值,表示是否预测每个样本在每棵树上的叶节点编号。默认为False。在预测时,每个样本都会被分配到每棵树的某个叶子节点上。该参数就是要输出这些叶子节点的编号。该参数只用于prediction任务。predict_contrib或者contrib或者is_predict_contrib:一个布尔值,表示是否输出每个特征对于每个样本的预测的贡献。默认为False。输出的结果形状为[nsamples,nfeatures+1],之所以+1是考虑到bais的贡献。所有的贡献加起来就是该样本的预测结果。该参数只用于prediction任务。bin_construct_sample_cnt或者subsample_for_bin:一个整数,表示用来构建直方图的样本的数量。默认为200000。如果数据非常稀疏,则可以设置为一个更大的值,如果设置更大的值,则会提供更好的训练效果,但是会增加数据加载时间。num_iteration_predict:一个整数,表示在预测中使用多少棵子树。默认为-1。小于等于0表示使用模型的所有子树。该参数只用于prediction任务。pred_early_stop:一个布尔值,表示是否使用早停来加速预测。默认为False。如果为True,则可能影响精度。pred_early_stop_freq:一个整数,表示检查早停的频率。默认为10pred_early_stop_margin:一个浮点数,表示早停的边际阈值。默认为0use_missing:一个布尔值,表示是否使用缺失值功能。默认为True如果为False则禁用缺失值功能。zero_as_missing:一个布尔值,表示是否将所有的零(包括在libsvm/sparse矩阵中未显示的值)都视为缺失值。默认为False。如果为False,则将nan视作缺失值。如果为True,则np.nan和零都将视作缺失值。init_score_file:一个字符串,表示训练时的初始化分数文件的路径。默认为空字符串,表示train_data_file+”.init”(如果存在)valid_init_score_file:一个字符串,表示验证时的初始化分数文件的路径。默认为空字符串,表示valid_data_file+”.init”(如果存在)。如果有多个(对应于多个验证集),则可以用逗号,来分隔。
(4) 目标参数
sigmoid:一个浮点数,用sigmoid函数的参数,默认为0。它用于二分类任务和lambdarank任务。alpha:一个浮点数,用于Huber损失函数和Quantileregression,默认值为0。它用于huber回归任务和Quantile回归任务。fair_c:一个浮点数,用于Fair损失函数,默认值为0。它用于fair回归任务。gaussian_eta:一个浮点数,用于控制高斯函数的宽度,默认值为0。它用于regression_l1回归任务和huber回归任务。posson_max_delta_step:一个浮点数,用于Poisson regression的参数,默认值为7。它用于poisson回归任务。scale_pos_weight:一个浮点数,用于调整正样本的权重,默认值为0它用于二分类任务。boost_from_average:一个布尔值,指示是否将初始得分调整为平均值(它可以使得收敛速度更快)。默认为True。它用于回归任务。is_unbalance或者unbalanced_set:一个布尔值,指示训练数据是否均衡的。默认为True。它用于二分类任务。max_position:一个整数,指示将在这个NDCG位置优化。默认为20。它用于lambdarank任务。label_gain:一个浮点数序列,给出了每个标签的增益。默认值为0,1,3,7,15,….它用于lambdarank任务。</
1万+



被折叠的 条评论
为什么被折叠?



