机器学习实战 | LightGBM建模应用详解

机器学习实战 | LightGBM建模应用详解

  • 作者:韩信子@ShowMeAI
  • 教程地址:www.showmeai.tech/tutorials/4…
  • 本文地址:www.showmeai.tech/article-det…
  • 声明:版权所有,转载请联系平台与作者并注明出处
  • 收藏ShowMeAI查看更多精彩内容

引言

LightGBlinux必学的60个命令M是微软开发的boosting集成模型,和XGBoost一样是对GBDT的优化和高效实现,原理有一些相似之处,但它很多方面比XGBoost有着更为优秀的表现。

本篇内容ShowMeAI展开给大家讲解LightGBM的工程应用方法,对于LightGBM原理知识感兴趣的同学,欢迎参考大数据是干什么的ShowMeAI的另外一篇文章 图解机器学习 | LightGBM模型详解

1http代理.LightGBM安装

LightGBM作为常见的强大Py矩阵相乘怎么算thon机器学习工具库,安装也比较简单linux重启命令

1.1 Python与IDE环境设置矩阵游戏

python环大数据与会计大数据技术与IDE设置可以httpclient参考ShowMeAI文章 图解python | 安装与环境设置 进行设置。

机器学习实战 | LightGBM建模应用详解

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系统而言,比较高效便捷的安装方式是:在网址www.lfd.uci.edu/~gohlke/pyt… 中去下载对应版本的的L命令行窗口怎么打开ightGBM安装包,再通过如下命令安装。 piplinux创建文件 install lightgbm命令行窗口怎么打开‑3.3.2‑cp310‑cp310‑win_amd64.whl

2.LightGBM参数手册

在ShowMeAI的前一篇内容 XGBoost工具库建模应用详解 中,我们讲解到了Xgboost的三类参数通用参数,学习目标参数,Booster参数。而Li命令行快捷键ghtG命令行常用命令BM可调参数更加丰富,包含核心参数,linux虚拟机学习控制参数,IO参数,目标参数,度量参数,网络参数,GPU参数,模型参数,这里我常修改的便是核心参数,学习控制参数,度量参数等。下面我们对这些linux常用命令模型参数做展开讲解,更多的细节可以参考LightGBM中文文档。

2.1 参数介绍

(1) 核心参数

  • config或者config_file:一个字符串,给出了配置文件的路径。默大数据是干什么的认为空字符串。

  • task:一个字符串,给出了要执行的任务。可以为:

    • train或者training:表示是训练任务。默认为trlinux重启命令ain
    • predict或者prediction或者test:表示是预测任务。
    • convert_model:表示是模型转换任务。将模型文件转换成if-else格式。
  • application或者objective或者app:一个字符串,http 404表示问题类型。可以为:

    • regressi命令行窗口怎么打开onregression_l2mean_squared_errormsel矩阵相乘怎么算2_roothttp://www.baidu.com root_linux重启命令mean_squred_error矩阵的逆 rmse:表示回归任务,但是使用L2损失函数。默认为regression
    • regression_l1或者mae或者mean_absolute_error:表示回归任务,但是命令行快捷键使用L1损失函数。
    • huber:表示回归任务linux虚拟机,但是使用huber损失函数。
    • fair:表示回归任务,但是使用fair损失函数。
    • poisson:表示Poisson回归任务。
    • quantile:表示quantile回归任务。
    • quantile_l2:表示quantile回归任务,但是使用了L2损失函数。
    • maHTTPpe或者mean_absolute_preceHTTPntage_error:表示回归任linux重启命令务,但是使用MAPE损失函数
    • gamma:表示gamma回归任务。
    • tweedie:表示tweedie回归任务。
    • binary:表示二分类任务,使大数据与会计用对数损失函数作为目标函数。
    • multiclass:表示多分类任务,使用softmax函数作为目标函数。必须设置num_classlinux重启命令参数
    • mul矩阵乘法ticlassolinux重启命令va或者multiclass_ova或者ova或者ovr:表示多分类任务,使用one-vs-all的二分类目标函数。Linux必须设置num_class参数。
    • xentropy或者cross_enthttp 500rohttp://192.168.1.1登录py:目标函数为交叉熵(同时具有可选择的线性权矩阵游戏重)。要求标签linux必学的60个命令是[0,1]之间的数值。
    • xentlambda或者cross_entropy_lambda:替代了参数化的cross_entropy。要求标命令行参数签是[0,1]之间的数值。
    • lambdarank:表示排序任务。在lambdarank大数据与会计专业任务中,标签应该为整数类型,数值越大表大数据是干什么的矩阵和行列式的区别相关性越高。label_gain参数可以用于设置httpclient整数标签的增益(权重)。
  • boosting或者boost或者boosting_typ命令行e:一个字符串,给出了基学习器模型算法。可以为:

    • gbdt:表示传统的http 500梯度提升决策树。命令行快捷键默认值为gbdthttp代理
    • rf:表示随机森林。
    • dart:表示带dropout的gbdt。
    • goss:表示Gradient-based One-Side Sampling 的gbdt。
  • data或者train或者train_data:一个命令行快捷键字符串linux系统安装,给出了训练数据所在的文件的文件名。默认为空字符串。LightGBM将使用它来训练模型矩阵游戏

  • validhttp://www.baidu.com或者test或者valid_data或者test_data:一个字符串,表示验证集所在的文件的文件名。默认为空字符串。LightGB命令行窗口怎么打开M将输出该数据集的度量。如果有多个验证集,则用逗号分隔。

  • num_iterations或者num_iteration或者num_tree或者nulinux系统m_trees或者num_round或者num_rounds或者num_boost_round一个整数,给出了boosthttps和http的区别iLinuxng的迭代次数。默认为100。

    • 对于Python/R包,该参数是被忽略的。对于Python,使用train()/cv()的输入参数num_boost_round来代替。
    • 在内部,LightGBM对于multiclass问题设置了num_class*num_iterations棵树。
  • learning_rate或者shrinkage_ratehttp协议个浮点数,给出了学习率。默认为1。在dart中,它还会影响dropped trees的归一化权重。

  • num_leaves或者num_lea矩阵乘法f:一个整数,给出了一httpclient棵树上的叶子数。默认为3命令行选项语法错误怎么办1。

  • tree_lear大数据专业学什么ner或者tree:一个字符串,给出了tree learner,主要用于并行学习。默认为serial。可以为:

    • serial:单台机器的tree learner
    • feature:特征并行的tree learner
    • data:数据并行的tree learner
    • voting:投票并行的tree learner
  • num_threads或者num_thr矩阵的迹ead或者nthread:一个整数,给出了LightGBM的线程linux系统数。默认为OpenMP_default

    • 为了更快的速度,应该将它设置为真正的CPU矩阵的乘法运算内核数,而不是线程的数HTTP量(大多数CPU使用超线程来使每个linux常用命令CPU内核生成2个线程)。
    • 当数据集较小的时候linux虚拟机,不要将它设置的过大。
    • 对于并行学习,不应该使用全部的CPU核心,因为这会使得网络性能不佳。
  • device:一个字符串,指命令行常用命令定计算设备。默认为cpu。可以为gpucpu

    • 建议使用较小的大数据技术max_bin来获得更快的计算linux系统速度。
    • 为了加快学习速度,GPU默认使linux常用命令用32位浮点数来求和。你可以设置gpu_use_dp=True来启动64位浮点数,但是它会使得训练速度降低。

(2) 学习控制参数矩阵的迹

  • max_depth:一个整数,限制了树模型的最大深度,默认值矩阵的迹为-Linux1。如果小于0,则表示没有限制。
  • min_data_in_leaf或者min_data_命令行选项语法错误怎么办perHTTP_leaf或者min_data或者min_child_samples:一个整数,表示一个叶子节点上包含的最少样本数量。默认值为20。
  • min_sum_hessia大数据n_in_leaf或者min_suhttp://www.baidu.comm_hessian_linuxp命令行删除文件er_leaf或者min_sum_hessianlinux虚拟机min_hessian或者min_child_weight:一个浮大数据杀熟点数,表示一个叶子节点上的最小hessian之和。(也就是叶节点样本权重之和的最小值)默认为1e-3。
  • feature_frlinux创建文件action或者sub_feature或者clinux常用命令olsampleLinux_bytlinux必学的60个命令ree:一个浮点数,取值范围为[0.0,1.0],默认值为0。linux重启命令如果小于1.0,则LightGBM会在每次迭代中随机选择部分特征。如0.8表示:在每棵树训练linux系统安装之前选择80%的特征来训练。
  • feature_fraction_seed:一个整数,表示feature_fraction的随机数种子,默认为2。
  • bagging_fraction或者sub_矩阵乘法row或者subsample:一个浮点数,取值范围为[0.0,1.0],默认值为0。如果http://192.168.1.1登录小于1.0,则LightGBM会在每次迭代中随机选择部分样本来训练(非重复采样)。如0.8表示:在每棵树矩阵相乘怎么算训练之前选择80%的样本(非重复采样)来训练。
  • bagging_freq或者su命令行快捷键bsample_freq:一个整数,表示每bagging_freq次执大数据行bagging。如果该参数为0,表示禁用bagging。
  • bagging_seed或者bagging_fraction_seed:一个整数,表示bagging的随机数种子,默认为3。
  • early_stopping_round或者early_stopplinux常用命令ing_rounds或者early_stopping:一个整数,默认为0。如果一个验证集的度量在early_stopping_roun矩阵和行列式的区别d循环中没有提升,则停止训练矩阵乘法。如果为0则表示不开启早停。
  • lambda_l1或者reg_alpha:一个浮点数,表示L1正则命令行参数化系数。默认为0。
  • lambda_l2HTTP或者reg_lambda:一个浮点数,表示L2正则化系数。默矩阵转置认为0。
  • min_split_gain或者min_gainhttp 500_to_split:一个浮点数,表示执行切分的最小增益,默认为0。
  • drop_rate:一个浮点数,取值范围为[0.0,1.0],表示dropout的比例矩阵相乘怎么算,默认为1http协议。该参数仅在dart中使用。
  • skip_drop:一个浮点数,取值范围为[0.0,1.0],表示跳过dropout的概率,默认为5。该参数仅在dart中使用。
  • max_drop:一个整数,表示一次迭代中删除树的最大数量,默认为50。如果小于等于0,则表示没有限制。大数据技术与应用专业该参数仅在dart中使用。
  • uniform_drop:一个布尔值,表示是否想要均匀的删除树,默认值为False。该参数仅在da矩阵相乘怎么算rt中使用。
  • xgboost_linux系统安装dart_mode:一个布尔值,表示是否使用xgboost dart模式,默认值为False。该参数仅在dart中使用。
  • d大数据专业学什么rop_seed:一个整数,表示dropout的随机数种命令行如何切换到d盘子,默认值linux必学的60个命令为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:一个linux是什么操作系统整数,表示category特征的取值集合的最大大小。默认为32。
  • cat_smooth:一个浮点数,用于catego矩阵乘法ry特征的概率平滑。默认值为10。它可以降低噪声在categlinux命令ory特征中的影响,尤其是对于矩阵的逆数据很少的类。
  • cat_l2:一个浮点数,用大数据技术于category命令行快捷键切分中的L2正则化系数。默认为10。
  • top_k或者topk:一个整数,用于投票并行中。默认为20。将它设置为更大的值可以获得更精确的结果,但是会降低训练速度。

(3) IO参数

  • max_bin:一个整数,表示最大linux创建文件的桶的数量。默认值为255。LightGBM会根据它来自动压缩内存。如max_bin=255时,则LightGBM将使用uint8来表示特征的每一个值。命令行选项语法错误怎么办
  • min_data_in_bin:一个整数,表示每个桶的最小样本数。默认为矩阵的乘法运算3。该方法可以避免出现一个桶只有一个样本的情况。
  • data_random_seed:一个整数,表示并行学习数据分隔中的随机数种子。默认为1它不大数据与会计专业包括特征并行。
  • output_modellinux系统或者model_output或者mo命令行窗口怎么打开del_out:一个字符串,表示训练中输出的模型被保存的文件矩阵和行列式的区别的文件名。默认txt。
  • input_model或者model_input或者model_in:一个字符串,表示输入模型的文件的文件名。默认空字符串。对于prediction任务,该模型HTTP将用于预测数据,对于train任务,训练将从该模型继续
  • output_result或者predict_reshttp协议ult或者p命令行快捷键rediction_result:一个字http代理符串,给出了prediction结果存放的文件名。默认为txt。
  • pre_partition或者is_pre_partition:一个布尔值,指示数据是否已经被划分。默认值为False。如果为true,则不同的机器使用不同的partition来训练。它用于并行学习(不包括特征并行)
  • is_sparse或者is_enable_sparse或者enable_sparse:一个布尔值,表示是否开启稀疏优化,默认为True。如果为Truelinux系统则启用稀疏优化。
  • two_rou大数据专业学什么nd或者two_round_loading或者use_two_round_loadinlinux虚拟机g:一个布尔值,指linux创建文件示是否启动两次加载。默认值为False,命令行参数表示只需要进行一次加载。默认情况下,LightGBM会将数据文件映射到内存,然后从内存加载特征,这将提供更快的数据加载速度。但是当数据文件很大时,内存可能会被耗尽。如果数据文件太大,则将它设置为True
  • savehttpclient_binary或者is_save_bi命令行快捷键nary或者is_save_binary_file:一个布尔值,表示是否将数据集(包括验证集)保存到二进制文件中。默认值为False矩阵计算器。如果为True,则可以加快数据的加载速度。
  • verbosithttp代理y或者verbose:一个整数,表示是否输出中间信息。默认值为1。如果小于0,则仅仅输出critical信息;如果等于0,则还会输出error,warning信息;如果大于0,则还会输出info信息。
  • header大数据技术与应用has_hea命令行常用命令der:一个布尔命令行进入指定目录值,表示输httpclient入数据是否有头部。默认为False。
  • label或者label_column:一个字符串,表示标签列。默认为空字符串HTTP。你也可以指定一个整数,如lab命令行参数el=0表示第0列是标签列。你也可以为列名添加前缀,如label大数据专业学什么=prefix:label_name
  • weilinux命令gh命令行快捷键t或者weight_column:一个字符串,表示样本权重列。默认为空字符串。你也可以指定一个整数,如weight=0表示第0列是权重列。注意:它是剔除了标签列之后的索引。假如标签列为0,权重http 404列为1,则这里weight=0。你也可以为列名添加前缀,如wlinux系统eight=pref命令行ix: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或者ignhttp://192.168.1.1登录ore_feature或者blac大数据专业学什么klist:一个字符串,表示训练中忽略的一些列,默认为空字符串。可以用数字做索引,如ignhttp://192.168.1.1登录ore_column=0,1,2表示第0,1,2列将被忽略。注意:它是剔除了标签列之后的索引。
  • 你也可以矩阵和行列式的区别为列名添加前缀http://192.168.1.1登录,如ignore_colinux虚拟机lumn=prefix:ign_name1,ign_name2
  • cate大数据杀熟gorical_大数据与会计专业feature或者categorical_column或者cat_feature或者cat_column:一个字符串,指定category特征的列。默认为空字符串。可以用数字做索引linux命令,如categor大数据ical_feature=0,1,2表示第0,1,2列将作为category特征。注意:它是剔除了标签列之后的索引。你也可以为列名添加前缀,如categorical_feature=prefix:cat_name1,cat_name2在catHTTPegorycal特征中,负的取值矩阵游戏被视作缺失值。
  • predict_raw_score或者raw_大数据技术score或者is_predicthttp协议_raw_score:一个布尔值,命令行怎么打开表示是否预测原始得分。默认为False。如果为True则仅预测原始得分。该参数只用于prediction任务。
  • predict_leaf_index或者leaf_index或者is_predict_leaf_index:一个布linux虚拟机尔值,表示是否预测每个样本在每棵树上的叶节点编号。默认为False。在预测时,每个样本都会被分配到每棵树的某个叶子节点上。该参数就是要输出这些叶子节点的编号。该矩阵的迹参数只用于prediction任务。
  • predict_contrib或者contrib或者is_predict_HTTPcontrib:一个布尔值,表示是否输出每个特linux创建文件征对于每个样本的预测的贡献。默认为False。输出的结果形状为[nsamples,nfeatures+1],之所以+1是考虑到bais的贡献。所有的贡献加起来就是该样本的预测结果。该参数只用于prediction任务。
  • bin_construct_samp矩阵的秩le_cnt或者subsample_for_bin:一个整数,表示用来构建直方图的样本的数量。默http://www.baidu.com认为200000。如果数据非常稀疏,则可以设置为一个更大的值,如果设置更大的值,则会提供更好的训练效果,但是会增加数据加载时间。
  • num_iteration_predict:一个整数,表示在预测中使用多少棵子树。默认为-1。小于等于0表示使用模型的所有子树。该参数只用于prediction任务。
  • pred_early_stop:一个布尔值,表示是否使用早停来加速预测。默认为False。如果为True,则可能影响精度。
  • pred_early_stop_freq:一个整数,表示检查早停的频率。默认为10
  • pred_early_stoplinux虚拟机_marg命令行怎么打开inhttp://192.168.1.1登录一个浮点数,表示早停的边际阈值。默认为0
  • use_missing:一个布尔值,表示是否使用缺失值功能。默认为True如果为False则禁用缺失值功能。
  • zero_as_missing:一个布尔值,表示是否将所有的零(包括在libsvm/sparse矩阵中未显示的值)都视为缺失值。默认为False。如果为Falhttps和http的区别se,则将矩阵计算器nan视作缺失值。如果为True,则np.nan和零都将视作缺失值。
  • init_score_file:一个字符串,表示训练矩阵时的初始化分数文件的路径。默认为空字符矩阵的秩串,表示train_data_file+”.init”(大数据是干什么的如果存在)
  • valid_init_score_file:一个字矩阵计算器符串,表示验证时的初始化分数文件的路径。默认为空字符串,表示valid_data_file+”.init”(如果存在)。如果有多个(对linux重启命令应于多个验证集),则可以用逗号,来分隔。

(4) 目标参数

  • sigmoid:一个浮点数,用s大数据修仙igmoid函数的参数,默认为0。它用于二分linux虚拟机类任务和lambdarank任务。
  • alpha:一个浮点数,用于H命令行删除文件uber损失函数和Quantileregression,默认值为0。它用命令行怎么打开于huber回归任务和Quantil大数据与会计专业e回归任务。
  • fair_c:一个浮点数,用于Fair损失函数,默认值为0。它用于fair回归任务。
  • gaussian_eta:一个浮点数,用于控制高斯函数的宽度linux重启命令,默认值为0。它用于linux虚拟机regression_l1回归任务和huber回归任务。
  • posson_max_delta_step:一个浮点数,用于Poisson regression的参数,默认值为7。它用于poisson回归httpwatch任务。
  • scale_pos_weight:一个浮点数,用于调整正样本的权重,默认值为0它用于二分类任务。
  • boost_from_average:一个布尔值,指示https和http的区别是否将初始得分调整为平均值(它可以使得收敛速度更快)。默认为True。它用于回归任务。
  • is_unbalance或者unbalalinux虚拟机nced_set:一个布linux创建文件尔值,指示训练数据是否均衡的。默认为True。它用于二分类任务。
  • max_position:一个整数,指示将在这个NDCG位置优化。默认为20。它用于lambdarank任务。
  • lahttp协议bel_gain:一个浮点数序列,给出了每个标签的增益。默认值为0,1linux虚拟机,3,7,15,….它用于lambdarank任务。
  • num_class或者numhttp协议_classeslinux常用命令:一个整数,指示了多分类任务中的类别数量。默认为1它用于多分类任务。
  • reg_sqrt:一个布尔值,默认为False。如果为True,则拟合的结果为:sqrt{label}。同时预测的结果被自动转换为:{pred}^2。它用于回归任务。

(5) 度量参数

  • metric:一个字符串,指定了度量的httpclient指标,默认为:对于回归问题,使用l2;对于二分类问题,使用binary_logloss;对于lambdarank问题,使用ndcg。如果有多个度量指标,则用逗号,分隔。
    • l1或者mean_absolute_error或者mae或者regression_l1:表示绝对值损失。
    • l2或者mean_squaredlinux命令_error或者mse或者r大数据技术egressiohttp 302n_l2或者regression:表示平方损失。命令行参数
    • l2_root或者root_mean_squared_error或者rmse:表示开方损失。
    • quantile:表示Quan大数据是干什么的tile回归中的损失。
    • mape或者mean_absolute_percentage_error:表示MAPE损失大数据
    • huber:表示huber损失。
    • fair:表示fair损失。
    • poisson:表示poissonhttp 404回归的负对数似然。
    • gamma:表示gamma回归命令行窗口的负对数似然。
    • gamm大数据技术与应用专业a_deviance:表示gamma回归的残差的方差。
    • tweedie:表示Tweedie回归的负对数似然。矩阵和行列式的区别
    • ndcg:表示NDCG。
    • map或者mean_average_precision:表示平均的精度。
    • aulinux重启命令c:表示AUC。
    • binary_logloss或者binary:表示二类分类中的对数损失函数。
    • binary_error:表示二类分类中的分类错误率。
    • multi_logloss或者m大数据与会计专业ulticlass或者softmax或者‘multiclassova或者multiclass_ova,或者ova或者ovr`:表示多类分类中的对数损失函数。
    • multi_error:表示多分类中的分类错误率矩阵游戏
    • xentropy或者cross_entropy:表示交叉熵。
    • xentlambda或者cross_entropy_lambda:表示intensity加权的交叉熵。
    • kldivhttpclientkullback_leibler:表示KL散度。
  • metric_freq或者output_freq:一个https和http的区别正式,表示每隔多少次输出一次度量结果。默认为1。
  • train_metric或者training_metric或者is_training_melinux常用命令tric:一个布尔值,默认为False。如果为True,则在训练时就输出度量结果。
  • ndcg_at或者ndcg_eval_at或者eval_at:一个整数列命令行进入指定目录表,指定了NDCG评命令行窗口估点的位置。默认为1、2、3、4、5。

2.2 参数影响httpclient与调参建议

以下为总结的核心参数对模型的影响,及与之对应的调参建议。

(1) 对树生长控制

机器学习实战 | LightGBM建模应用详解

  • num_leaves:叶节点的数目。它是控制树命令行删除文件模型复杂度的主要参数。
    • 如果是level-wise,则该参数为2depth2^{depth},其中d大数据与会计epth为树的深度。但是当叶子linux命令数量相同时,leaf-wise的树要远远深过level-wise树,非常容易导致过拟合。因此应该让num_leaves小于2depth2^{depth}。在leaf-wishttp代理e树中命令行怎么打开,并不存在depth的概念大数据专业学什么。因为不存在一个从leaves到depth的合理映射。
  • min_data_in_leaf:每个叶节点的最少样本数量。
    • 它是linux系统安装处理leaf-wise树的过拟合的重要参数。将它设为较大的值,可以避免linux是什么操作系统生成一个过深的树。但是也命令行选项语法错误怎么办可能导致欠拟http代理合。
  • max_depth:树的最大深度。该参数可以显式的限制树的深度。

(2) 更快的训练速度http协议

机器学习实战 | LightGBM建模应用详解

  • 通过设置bagging_fractionbagging_freq参数来使用bagging方法。
  • 通过设置featurehttpwatch_fraction参数来使用特征的子抽样。
  • 使用较小大数据与会计专业m大数据修仙ax_bin
  • 使用save_binary在未来的学习过程对数据加载进行加速。

(3) 更好的矩阵游戏模型效果

机器学习实战 | LightGBM建模应用详解

  • 使用较大的max_bin(学习速度可能变慢)矩阵的秩
  • 使用较小的learning_rate和较大的num_iterations
  • 使用较大的num_leaves(可能导致过拟合)。
  • 使用更大的训练数据。
  • 尝试dart

(4) 缓解过拟合问题

机器学习实战 | LightGBM建模应用详解

  • 使用较小的max_bin
  • 使用较小的num_leaveslinux虚拟机
  • 使用min_data_in_leafmin_sum_hessian_in_leaf
  • 通过设置bagging_fractionbagging_freq来使用bagging
  • 通过设置feature_fractiolinux创建文件n来使用特征子抽样。
  • 使用更大的训练数据。
  • 使用lambda_l1lambda_l2min_gain_to_shttp协议plit来使用正则。
  • 尝试max_depth来避免生成过深的树。

3.LightGBM内置建模方式

3.1 内置建模方式

LightGBM内置了命令行进入指定目录建模方式,有如下的数据格式与核心训练方法:

  • 基于lightgbm.Dataset格式的数据。
  • 基于lightgbm.train接口训练。

下面是官方的一个简命令行窗口单示例,演示了读取libsvhttps和http的区别m格式数据(成Dataset格式)并指定参数建模的过程。

# coding: utf-8
import json
import lightgbm as lgb
import pandas as pd
from sklearn.metrics import mean_squared_error
# 加载数据集合
print('加载数据...')
df_train = pd.read_csv('./data/regression.train.txt', header=None, sep='t')
df_test = pd.read_csv('./data/regression.test.txt', header=None, sep='t')
# 设定训练集和测试集
y_train = df_train[0].values
y_test = df_test[0].values
X_train = df_train.drop(0, axis=1).values
X_test = df_test.drop(0, axis=1).values
# 构建lgb中的Dataset格式
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
# 敲定好一组参数
params = {
    'task': 'train',
    'boosting_type': 'gbdt',
    'objective': 'regression',
    'metric': {'l2', 'auc'},
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': 0
}
print('开始训练...')
# 训练
gbm = lgb.train(params,
                lgb_train,
                num_boost_round=20,
                valid_sets=lgb_eval,
                early_stopping_rounds=5)
# 保存模型
print('保存模型...')
# 保存模型到文件中
gbm.save_model('model.txt')
print('开始预测...')
# 预测
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)
# 评估
print('预估结果的rmse为:')
print(mean_squared_error(y_test, y_pred) ** 0.5)

机器学习实战 | LightGBM建模应用详解

加载数据...
开始训练...
[1]  valid_0's l2: 0.24288   valid_0's auc: 0.764496
Training until validation scores don't improve for 5 rounds.
[2]  valid_0's l2: 0.239307  valid_0's auc: 0.766173
[3]  valid_0's l2: 0.235559  valid_0's auc: 0.785547
[4]  valid_0's l2: 0.230771  valid_0's auc: 0.797786
[5]  valid_0's l2: 0.226297  valid_0's auc: 0.805155
[6]  valid_0's l2: 0.223692  valid_0's auc: 0.800979
[7]  valid_0's l2: 0.220941  valid_0's auc: 0.806566
[8]  valid_0's l2: 0.217982  valid_0's auc: 0.808566
[9]  valid_0's l2: 0.215351  valid_0's auc: 0.809041
[10] valid_0's l2: 0.213064  valid_0's auc: 0.805953
[11] valid_0's l2: 0.211053  valid_0's auc: 0.804631
[12] valid_0's l2: 0.209336  valid_0's auc: 0.802922
[13] valid_0's l2: 0.207492  valid_0's auc: 0.802011
[14] valid_0's l2: 0.206016  valid_0's auc: 0.80193
Early stopping, best iteration is:
[9]  valid_0's l2: 0.215351  valid_0's auc: 0.809041
保存模型...
开始预测...
预估结果的rmse为:
0.4640593794679212

3.2 设置样本权重

LightGBM的建模非常命令行参数灵活,它可以支持我们矩阵转置对于每个大数据与会计专业样本设置不同的权重学习,设置的方式也非常简单,我们需要提供给模型一矩阵乘法组权重httpclient数组数据,长度和样本数一致。

如下是一个典型的例子,其中binary.trainbinary.test矩阵计算器读取后加载为lightgbm.Dataset格式的输矩阵游戏入,而在lightgbm.Dataset的构建参数中可以设置样本权重(这个例子中是numpy ar大数据与会计ray的形态)。再基于lightgbm.t矩阵的迹rain接口使用内置建模方式训练。

# coding: utf-8
import json
import lightgbm as lgb
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error
import warnings
warnings.filterwarnings("ignore")
# 加载数据集
print('加载数据...')
df_train = pd.read_csv('./data/binary.train', header=None, sep='t')
df_test = pd.read_csv('./data/binary.test', header=None, sep='t')
W_train = pd.read_csv('./data/binary.train.weight', header=None)[0]
W_test = pd.read_csv('./data/binary.test.weight', header=None)[0]
y_train = df_train[0].values
y_test = df_test[0].values
X_train = df_train.drop(0, axis=1).values
X_test = df_test.drop(0, axis=1).values
num_train, num_feature = X_train.shape
# 加载数据的同时加载权重
lgb_train = lgb.Dataset(X_train, y_train,
                        weight=W_train, free_raw_data=False)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train,
                       weight=W_test, free_raw_data=False)
# 设定参数
params = {
    'boosting_type': 'gbdt',
    'objective': 'binary',
    'metric': 'binary_logloss',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': 0
}
# 产出特征名称
feature_name = ['feature_' + str(col) for col in range(num_feature)]
print('开始训练...')
gbm = lgb.train(params,
                lgb_train,
                num_boost_round=10,
                valid_sets=lgb_train,  # 评估训练集
                feature_name=feature_name,
                categorical_feature=[21])
加载数据...
开始训练...
[1]  training's binary_logloss: 0.68205
[2]  training's binary_logloss: 0.673618
[3]  training's binary_logloss: 0.665891
[4]  training's binary_logloss: 0.656874
[5]  training's binary_logloss: 0.648523
[6]  training's binary_logloss: 0.641874
[7]  training's binary_logloss: 0.636029
[8]  training's binary_logloss: 0.629427
[9]  training's binary_logloss: 0.623354
[10] training's binary_logloss: 0.617593

3.3 模型存大数据与会计储与加载

上述建模过程得到的模型对象,可以通过save_model成员函数进行保存。保存好的模型可以通过lgb.Booster加载回内存,矩阵相乘怎么算并对大数据与会计专业测试集进行预测。

具体示例代码如下:

# 查看特征名称
print('完成10轮训练...')
print('第7个特征为:')
print(repr(lgb_train.feature_name[6]))
# 存储模型
gbm.save_model('./model/lgb_model.txt')
# 特征名称
print('特征名称:')
print(gbm.feature_name())
# 特征重要度
print('特征重要度:')
print(list(gbm.feature_importance()))
# 加载模型
print('加载模型用于预测')
bst = lgb.Booster(model_file='./model/lgb_model.txt')
# 预测
y_pred = bst.predict(X_test)
# 在测试集评估效果
print('在测试集上的rmse为:')
print(mean_squared_error(y_test, y_pred) ** 0.5)

机器学习实战 | LightGBM建模应用详解

完成10轮训练...
第7个特征为:
'feature_6'
特征名称:
['feature_0', 'feature_1', 'feature_2', 'feature_3', 'feature_4', 'feature_5', 'feature_6', 'feature_7', 'feature_8', 'feature_9', 'feature_10', 'feature_11', 'feature_12', 'feature_13', 'feature_14', 'feature_15', 'feature_16', 'feature_17', 'feature_18', 'feature_19', 'feature_20', 'feature_21', 'feature_22', 'feature_23', 'feature_24', 'feature_25', 'feature_26', 'feature_27']
特征重要度:
[8, 5, 1, 19, 7, 33, 2, 0, 2, 10, 5, 2, 0, 9, 3, 3, 0, 2, 2, 5, 1, 0, 36, 3, 33, 45, 29, 35]
加载模型用于预测
在测试集上的rmse为:
0.4629245607636925

3.4 继续训练

LightGBM为boosting模型Linux,每一轮训练会增加新的基学习器,LightGBM还支持基于现有模型和参数继续训练,无需每次从头训练。

如下是典型的示例,我们加载已经训练10轮命令行怎么打开(即10颗树集成)的lgb模型,在此基础上继续训练(在参数层面做了一些命令行常用命令改变,调整了学习率,增加了一些bagging等缓解过拟合的处理http协议方法)

# 继续训练
# 从./model/model.txt中加载模型初始化
gbm = lgb.train(params,
                lgb_train,
                num_boost_round=10,
                init_model='./model/lgb_model.txt',
                valid_sets=lgb_eval)
print('以旧模型为初始化,完成第 10-20 轮训练...')
# 在训练的过程中调整超参数
# 比如这里调整的是学习率
gbm = lgb.train(params,
                lgb_train,
                num_boost_round=10,
                init_model=gbm,
                learning_rates=lambda iter: 0.05 * (0.99 ** iter),
                valid_sets=lgb_eval)
print('逐步调整学习率完成第 20-30 轮训练...')
# 调整其他超参数
gbm = lgb.train(params,
                lgb_train,
                num_boost_round=10,
                init_model=gbm,
                valid_sets=lgb_eval,
                callbacks=[lgb.reset_parameter(bagging_fraction=[0.7] * 5 + [0.6] * 5)])
print('逐步调整bagging比率完成第 30-40 轮训练...')

机器学习实战 | LightGBM建模应用详解

[11] valid_0's binary_logloss: 0.616177
[12] valid_0's binary_logloss: 0.611792
[13] valid_0's binary_logloss: 0.607043
[14] valid_0's binary_logloss: 0.602314
[15] valid_0's binary_logloss: 0.598433
[16] valid_0's binary_logloss: 0.595238
[17] valid_0's binary_logloss: 0.592047
[18] valid_0's binary_logloss: 0.588673
[19] valid_0's binary_logloss: 0.586084
[20] valid_0's binary_logloss: 0.584033
以旧模型为初始化,完成第 10-20 轮训练...
[21] valid_0's binary_logloss: 0.616177
[22] valid_0's binary_logloss: 0.611834
[23] valid_0's binary_logloss: 0.607177
[24] valid_0's binary_logloss: 0.602577
[25] valid_0's binary_logloss: 0.59831
[26] valid_0's binary_logloss: 0.595259
[27] valid_0's binary_logloss: 0.592201
[28] valid_0's binary_logloss: 0.589017
[29] valid_0's binary_logloss: 0.586597
[30] valid_0's binary_logloss: 0.584454
逐步调整学习率完成第 20-30 轮训练...
[31] valid_0's binary_logloss: 0.616053
[32] valid_0's binary_logloss: 0.612291
[33] valid_0's binary_logloss: 0.60856
[34] valid_0's binary_logloss: 0.605387
[35] valid_0's binary_logloss: 0.601744
[36] valid_0's binary_logloss: 0.598556
[37] valid_0's binary_logloss: 0.595585
[38] valid_0's binary_logloss: 0.593228
[39] valid_0's binary_logloss: 0.59018
[40] valid_0's binary_logloss: 0.588391
逐步调整bagging比率完成第 30-40 轮训练...

3.5 自定义损失函数

LightGBM支持在训练过程中,自定义损失函数和评估准则,其中损失函数的定义需要返回损失函数一阶和二阶导数的计算linux虚拟机方法,评估准则部分需要对数据的label和预估值进行计算。其中损失函数用于训练过程中的树结构学习,而评估准则很多时候是用在验证集上进行效果评估。

# 自定义损失函数需要提供损失函数的一阶和二阶导数形式
def loglikelood(preds, train_data):
    labels = train_data.get_label()
    preds = 1. / (1. + np.exp(-preds))
    grad = preds - labels
    hess = preds * (1. - preds)
    return grad, hess
# 自定义评估函数
def binary_error(preds, train_data):
    labels = train_data.get_label()
    return 'error', np.mean(labels != (preds > 0.5)), False
gbm = lgb.train(params,
                lgb_train,
                num_boost_round=10,
                init_model=gbm,
                fobj=loglikelood,
                feval=binary_error,
                valid_sets=lgb_eval)
print('用自定义的损失函数与评估标准完成第40-50轮...')

机器学习实战 | LightGBM建模应用详解

[41] valid_0's binary_logloss: 0.614429  valid_0's error: 0.268
[42] valid_0's binary_logloss: 0.610689  valid_0's error: 0.26
[43] valid_0's binary_logloss: 0.606267  valid_0's error: 0.264
[44] valid_0's binary_logloss: 0.601949  valid_0's error: 0.258
[45] valid_0's binary_logloss: 0.597271  valid_0's error: 0.266
[46] valid_0's binary_logloss: 0.593971  valid_0's error: 0.276
[47] valid_0's binary_logloss: 0.591427  valid_0's error: 0.278
[48] valid_0's binary_logloss: 0.588301  valid_0's error: 0.284
[49] valid_0's binary_logloss: 0.586562  valid_0's error: 0.288
[50] valid_0's binary_logloss: 0.584056  valid_0's error: 0.288
用自定义的损失函数与评估标准完成第40-50轮...

4.LightGBM预估器形态接口

4.1 SKLearn形态预估器接口

和XGBoost一样,LightGBM也支持用SKLearn中统一的预估器形态接口进行建模,如下为典型的参考案例,对于读取为Dataframe格式的训练集和测试集,可以直接使用LightGBM初始化LGBMRegressor进行fit拟合训练。使用方法与接口,和Shttp 302KLearn中其他预估器一致。

# coding: utf-8
import lightgbm as lgb
import pandas as pd
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
# 加载数据
print('加载数据...')
df_train = pd.read_csv('./data/regression.train.txt', header=None, sep='t')
df_test = pd.read_csv('./data/regression.test.txt', header=None, sep='t')
# 取出特征和标签
y_train = df_train[0].values
y_test = df_test[0].values
X_train = df_train.drop(0, axis=1).values
X_test = df_test.drop(0, axis=1).values
print('开始训练...')
# 初始化LGBMRegressor
gbm = lgb.LGBMRegressor(objective='regression',
                        num_leaves=31,
                        learning_rate=0.05,
                        n_estimators=20)
# 使用fit函数拟合
gbm.fit(X_train, y_train,
        eval_set=[(X_test, y_test)],
        eval_metric='l1',
        early_stopping_rounds=5)
# 预测
print('开始预测...')
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration_)
# 评估预测结果
print('预测结果的rmse是:')
print(mean_squared_error(y_test, y_pred) ** 0.5)

机器学习实战 | LightGBM建模应用详解

加载数据...
开始训练...
[1]  valid_0's l1: 0.491735
Training until validation scores don't improve for 5 rounds.
[2]  valid_0's l1: 0.486563
[3]  valid_0's l1: 0.481489
[4]  valid_0's l1: 0.476848
[5]  valid_0's l1: 0.47305
[6]  valid_0's l1: 0.469049
[7]  valid_0's l1: 0.465556
[8]  valid_0's l1: 0.462208
[9]  valid_0's l1: 0.458676
[10] valid_0's l1: 0.454998
[11] valid_0's l1: 0.452047
[12] valid_0's l1: 0.449158
[13] valid_0's l1: 0.44608
[14] valid_0's l1: 0.443554
[15] valid_0's l1: 0.440643
[16] valid_0's l1: 0.437687
[17] valid_0's l1: 0.435454
[18] valid_0's l1: 0.433288
[19] valid_0's l1: 0.431297
[20] valid_0's l1: 0.428946
Did not meet early stopping. Best iteration is:
[20] valid_0's l1: 0.428946
开始预测...
预测结果的rmse是:
0.4441153344254208

4.2 网格搜索调参

上面提到LightGBM的预估命令行快捷键器接口,整体大数据修仙使用方法和SKLearn中其矩阵的乘法运算他预估器一致,所以我们也可以使用SKLearn中的超参数调优方法来进行模型调优。

如下是一个典型的网格搜索交法调优超参数的代码示例,我们会给出候选参数列表字典,通过G大数据技术与应用ridSearch大数据与会计专业CV进行交叉验证实验评估,选出LightGBM在候选参数中最优的超参数。

# 配合scikit-learn的网格搜索交叉验证选择最优超参数
estimator = lgb.LGBMRegressor(num_leaves=31)
param_grid = {
    'learning_rate': [0.01, 0.1, 1],
    'n_estimators': [20, 40]
}
gbm = GridSearchCV(estimator, param_grid)
gbm.fit(X_train, y_train)
print('用网格搜索找到的最优超参数为:')
print(gbm.best_params_)

机器学习实战 | LightGBM建模应用详解

用网格搜索找到的最优超参数为:
{'learning_rate': 0.1, 'n_estimators': 40}

4.3 绘图解释

LightGBM支持对模型训练进行可视化呈现与解释,包括对于训练过程中的损失函数取值与评估准则结果的可视化、训练完成后特征重要度的排序与可视化、基学习器(比如决策树)的可视化。

以下为参考代码:

# coding: utf-8
import lightgbm as lgb
import pandas as pd
try:
    import matplotlib.pyplot as plt
except ImportError:
    raise ImportError('You need to install matplotlib for plotting.')
# 加载数据集
print('加载数据...')
df_train = pd.read_csv('./data/regression.train.txt', header=None, sep='t')
df_test = pd.read_csv('./data/regression.test.txt', header=None, sep='t')
# 取出特征和标签
y_train = df_train[0].values
y_test = df_test[0].values
X_train = df_train.drop(0, axis=1).values
X_test = df_test.drop(0, axis=1).values
# 构建lgb中的Dataset数据格式
lgb_train = lgb.Dataset(X_train, y_train)
lgb_test = lgb.Dataset(X_test, y_test, reference=lgb_train)
# 设定参数
params = {
    'num_leaves': 5,
    'metric': ('l1', 'l2'),
    'verbose': 0
}
evals_result = {}  # to record eval results for plotting
print('开始训练...')
# 训练
gbm = lgb.train(params,
                lgb_train,
                num_boost_round=100,
                valid_sets=[lgb_train, lgb_test],
                feature_name=['f' + str(i + 1) for i in range(28)],
                categorical_feature=[21],
                evals_result=evals_result,
                verbose_eval=10)
print('在训练过程中绘图...')
ax = lgb.plot_metric(evals_result, metric='l1')
plt.show()
print('画出特征重要度...')
ax = lgb.plot_importance(gbm, max_num_features=10)
plt.show()
print('画出第84颗树...')
ax = lgb.plot_tree(gbm, tree_index=83, figsize=(20, 8), show_info=['split_gain'])
plt.show()
#print('用graphviz画出第84颗树...')
#graph = lgb.create_tree_digraph(gbm, tree_index=83, name='Tree84')
#graph.render(view=True)

机器学习实战 | LightGBM建模应用详解

加载数据...
开始训练...
[10] training's l2: 0.217995 training's l1: 0.457448 valid_1's l2: 0.21641   valid_1's l1: 0.456464
[20] training's l2: 0.205099 training's l1: 0.436869 valid_1's l2: 0.201616  valid_1's l1: 0.434057
[30] training's l2: 0.197421 training's l1: 0.421302 valid_1's l2: 0.192514  valid_1's l1: 0.417019
[40] training's l2: 0.192856 training's l1: 0.411107 valid_1's l2: 0.187258  valid_1's l1: 0.406303
[50] training's l2: 0.189593 training's l1: 0.403695 valid_1's l2: 0.183688  valid_1's l1: 0.398997
[60] training's l2: 0.187043 training's l1: 0.398704 valid_1's l2: 0.181009  valid_1's l1: 0.393977
[70] training's l2: 0.184982 training's l1: 0.394876 valid_1's l2: 0.178803  valid_1's l1: 0.389805
[80] training's l2: 0.1828   training's l1: 0.391147 valid_1's l2: 0.176799  valid_1's l1: 0.386476
[90] training's l2: 0.180817 training's l1: 0.388101 valid_1's l2: 0.175775  valid_1's l1: 0.384404
[100]   training's l2: 0.179171 training's l1: 0.385174 valid_1's l2: 0.175321  valid_1's l1: 0.382929

机器学习实战 | LightGBM建模应用详解

机器学习实战 | LightGBM建模应用详解

参考资料

  • 图解机器学习算法 | 从入门到精通系列
  • 图解机器学习 | LightGBM模型详解

ShowMeAI系列教程推荐

  • 图解Python编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解AI数学基础:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列

相关文章推荐

  • Python机器学习算法应用实践
  • SKLearn入门与简单应用案例
  • SKLearn最全应用指南
  • XGBoost建模应用详解大数据查询
  • LightGBM建模应用详解
  • Python机器学习综合项目-电商销量预估
  • Python机器学习综合项目-电商销量预估<进阶方案&g矩阵的逆t;
  • 机器学习特征工程最全解读
  • 自动化特征工程工具Featuretools应用
  • AutoML自动化机器学习建模

机器学习实战 | LightGBM建模应用详解

发表评论

提供最优质的资源集合

立即查看 了解详情