本文约11000字,建议阅读20分钟

本文为你介绍数据挖掘神器LightGBM。

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

1.LightGBM安装

LightGBM作为常见的强大Python机器学习工具库,安装也比较简单。

这些系统下的XGBoost安装,大家只要基于pip就可以轻松完成了,在命令行端输入命令如下命令即可等待安装完成。

pipinstalllightgbm

大家也可以选择国内的pip源,以获得更好的安装速度:

pipinstall-i
Windows系统

对于Windows系统而言,比较高效便捷的安装方式是:在网址中去下载对应版本的的LightGBM安装包,再通过如下命令安装。

pipinstalllightgbm‑3.3.2‑cp310‑cp310‑win_
2.LightGBM参数手册

在ShowMeAI的前一篇内容XGBoost工具库建模应用详解[3]中,我们讲解到了Xgboost的三类参数:通用参数,学习目标参数,Booster参数。

而LightGBM可调参数更加丰富,包含核心参数,学习控制参数,IO参数,目标参数,度量参数,网络参数,GPU参数,模型参数。这里我常修改的便是核心参数,学习控制参数,度量参数等。下面我们对这些模型参数做展开讲解,更多的细节可以参考LightGBM中文文档[4]。

(1)核心参数

train或者training:表示是训练任务。默认为train。

predict或者prediction或者test:表示是预测任务。

convert_model:表示是模型转换任务。将模型文件转换成if-else格式。

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参数可以用于设置整数标签的增益(权重)。

gbdt:表示传统的梯度提升决策树。默认值为gbdt。

rf:表示随机森林。

dart:表示带dropout的gbdt。

goss:表示Gradient-basedOne-SideSampling的gbdt。

对于Python/R包,该参数是被忽略的。对于Python,使用train()/cv()的输入参数num_boost_round来代替。

在内部,LightGBM对于multiclass问题设置了num_class*num_iterations棵树。

serial:单台机器的treelearner

feature:特征并行的treelearner

data:数据并行的treelearner

voting:投票并行的treelearner

为了更快的速度,应该将它设置为真正的CPU内核数,而不是线程的数量(大多数CPU使用超线程来使每个CPU内核生成2个线程)。

当数据集较小的时候,不要将它设置的过大。

对于并行学习,不应该使用全部的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:一个布尔值,表示是否使用xgboostdart模式,默认值为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会将数据文件映射到内存,然后从内存加载特征,这将提供更快的数据加载速度。但是当数据文件很大时,内存可能会被耗尽。如果数据文件太大,则将它设置为True

save_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:一个整数,表示检查早停的频率。默认为10

pred_early_stop_margin:一个浮点数,表示早停的边际阈值。默认为0

use_missing:一个布尔值,表示是否使用缺失值功能。默认为True如果为False则禁用缺失值功能。

zero_as_missing:一个布尔值,表示是否将所有的零(包括在libsvm/sparse矩阵中未显示的值)都视为缺失值。默认为False。如果为False,则将nan视作缺失值。如果为True,则和零都将视作缺失值。

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:一个浮点数,用于Poissonregression的参数,默认值为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任务。

num_class或者num_classes:一个整数,指示了多分类任务中的类别数量。默认为1它用于多分类任务。

reg_sqrt:一个布尔值,默认为False。如果为True,则拟合的结果为:\sqrt{label}。同时预测的结果被自动转换为:{pred}^2。它用于回归任务。

(5)度量参数

l1或者mean_absolute_error或者mae或者regression_l1:表示绝对值损失。

l2或者mean_squared_error或者mse或者regression_l2或者regression:表示平方损失。

l2_root或者root_mean_squared_error或者rmse:表示开方损失。

quantile:表示Quantile回归中的损失。

mape或者mean_absolute_percentage_error:表示MAPE损失。

huber:表示huber损失。

fair:表示fair损失。

poisson:表示poisson回归的负对数似然。

gamma:表示gamma回归的负对数似然。

gamma_deviance:表示gamma回归的残差的方差。

tweedie:表示Tweedie回归的负对数似然。

ndcg:表示NDCG。

map或者mean_average_precision:表示平均的精度。

auc:表示AUC。

binary_logloss或者binary:表示二类分类中的对数损失函数。

binary_error:表示二类分类中的分类错误率。

multi_logloss或者multiclass或者softmax或者‘multiclassova或者multiclass_ova,或者ova或者ovr`:表示多类分类中的对数损失函数。

multi_error:表示多分类中的分类错误率。

xentropy或者cross_entropy:表示交叉熵。

xentlambda或者cross_entropy_lambda:表示intensity加权的交叉熵。

kldiv或者kullback_leibler:表示KL散度。

参数影响与调参建议

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

(1)对树生长控制

如果是level-wise,则该参数为,其中depth为树的深度。但是当叶子数量相同时,leaf-wise的树要远远深过level-wise树,非常容易导致过拟合。因此应该让num_leaves小于。在leaf-wise树中,并不存在depth的概念。因为不存在一个从leaves到depth的合理映射。

它是处理leaf-wise树的过拟合的重要参数。将它设为较大的值,可以避免生成一个过深的树。但是也可能导致欠拟合。

(2)更快的训练速度

通过设置bagging_fraction和bagging_freq参数来使用bagging方法。

通过设置feature_fraction参数来使用特征的子抽样。

使用较小的max_bin。

使用save_binary在未来的学习过程对数据加载进行加速。

(3)更好的模型效果

使用较大的max_bin(学习速度可能变慢)。

使用较小的learning_rate和较大的num_iterations。

使用较大的num_leaves(可能导致过拟合)。

使用更大的训练数据。

尝试dart。

(4)缓解过拟合问题

使用较小的max_bin。

使用较小的num_leaves。

使用min_data_in_leaf和min_sum_hessian_in_leaf。

通过设置bagging_fraction和bagging_freq来使用bagging。

通过设置feature_fraction来使用特征子抽样。

使用更大的训练数据。

使用lambda_l1、lambda_l2和min_gain_to_split来使用正则。

尝试max_depth来避免生成过深的树。

3.LightGBM内置建模方式内置建模方式

LightGBM内置了建模方式,有如下的数据格式与核心训练方法:

基于格式的数据。

基于接口训练。

下面是官方的一个简单示例,演示了读取libsvm格式数据(成Dataset格式)并指定参数建模的过程。

加载数据集合print('加载数据')df_train=_csv('./data/',header=None,sep='\t')df_test=_csv('./data/',header=None,sep='\t')构建lgb中的Dataset格式lgb_train=(X_train,y_train)lgb_eval=(X_test,y_test,reference=lgb_train)训练gbm=(params,lgb_train,num_boost_round=20,valid_sets=lgb_eval,early_stopping_rounds=5)保存模型到文件中_model('')print('开始预测')评估print('预估结果的rmse为:')print(mean_squared_error(y_test,y_pred)**0.5)

加载数据开始训练[1]valid_0'sl2:0.24288valid_0'sauc:0.764496Traininguntilvalidationscoresdon'timprovefor5rounds.[2]valid_0'sl2:0.239307valid_0'sauc:0.766173[3]valid_0'sl2:0.235559valid_0'sauc:0.785547[4]valid_0'sl2:0.230771valid_0'sauc:0.797786[5]valid_0'sl2:0.226297valid_0'sauc:0.805155[6]valid_0'sl2:0.223692valid_0'sauc:0.800979[7]valid_0'sl2:0.220941valid_0'sauc:0.806566[8]valid_0'sl2:0.217982valid_0'sauc:0.808566[9]valid_0'sl2:0.215351valid_0'sauc:0.809041[10]valid_0'sl2:0.213064valid_0'sauc:0.805953[11]valid_0'sl2:0.211053valid_0'sauc:0.804631[12]valid_0'sl2:0.209336valid_0'sauc:0.802922[13]valid_0'sl2:0.207492valid_0'sauc:0.802011[14]valid_0'sl2:0.206016valid_0'sauc:0.80193Earlystopping,bestiterationis:[9]valid_0'sl2:0.215351valid_0'sauc:0.809041保存模型开始预测预估结果的rmse为:0.4640593794679212
设置样本权重

LightGBM的建模非常灵活,它可以支持我们对于每个样本设置不同的权重学习,设置的方式也非常简单,我们需要提供给模型一组权重数组数据,长度和样本数一致。

如下是一个典型的例子,其中和读取后加载为格式的输入,而在的构建参数中可以设置样本权重(这个例子中是numpyarray的形态)。再基于接口使用内置建模方式训练。

加载数据集print('加载数据')df_train=_csv('./data/',header=None,sep='\t')df_test=_csv('./data/',header=None,sep='\t')W_train=_csv('./data/',header=None)[0]W_test=_csv('./data/',header=None)[0]y_train=df_train[0].valuesy_test=df_test[0].valuesX_train=df_(0,axis=1).valuesX_test=df_(0,axis=1).valuesnum_train,num_feature=X_设定参数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_name,categorical_feature=[21])
加载数据开始训练[1]training'sbinary_logloss:0.68205[2]training'sbinary_logloss:0.673618[3]training'sbinary_logloss:0.665891[4]training'sbinary_logloss:0.656874[5]training'sbinary_logloss:0.648523[6]training'sbinary_logloss:0.641874[7]training'sbinary_logloss:0.636029[8]training'sbinary_logloss:0.629427[9]training'sbinary_logloss:0.623354[10]training'sbinary_logloss:0.617593
模型存储与加载

上述建模过程得到的模型对象,可以通过save_model成员函数进行保存。保存好的模型可以通过加载回内存,并对测试集进行预测。

具体示例代码如下:

存储模型_model('./model/lgb_')特征重要度print('特征重要度:')print(list(_importance()))预测y_pred=(X_test)继续训练在训练的过程中调整超参数调整其他超参数gbm=(params,lgb_train,num_boost_round=10,init_model=gbm,valid_sets=lgb_eval,callbacks=[_parameter(bagging_fraction=[0.7]*5+[0.6]*5)])print('逐步调整bagging比率完成第30-40轮训练')

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

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

自定义评估函数defbinary_error(preds,train_data):labels=train__label()return'error',(labels!=()),Falsegbm=(params,lgb_train,num_boost_round=10,init_model=gbm,fobj=loglikelood,feval=binary_error,valid_sets=lgb_eval)print('用自定义的损失函数与评估标准完成第40-50轮')

[41]valid_0'sbinary_logloss:0.614429valid_0'serror:0.268[42]valid_0'sbinary_logloss:0.610689valid_0'serror:0.26[43]valid_0'sbinary_logloss:0.606267valid_0'serror:0.264[44]valid_0'sbinary_logloss:0.601949valid_0'serror:0.258[45]valid_0'sbinary_logloss:0.597271valid_0'serror:0.266[46]valid_0'sbinary_logloss:0.593971valid_0'serror:0.276[47]valid_0'sbinary_logloss:0.591427valid_0'serror:0.278[48]valid_0'sbinary_logloss:0.588301valid_0'serror:0.284[49]valid_0'sbinary_logloss:0.586562valid_0'serror:0.288[50]valid_0'sbinary_logloss:0.584056valid_0'serror:0.288用自定义的损失函数与评估标准完成第40-50轮
4.LightGBM预估器形态接口SKLearn形态预估器接口

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

加载数据print('加载数据')df_train=_csv('./data/',header=None,sep='\t')df_test=_csv('./data/',header=None,sep='\t')初始化LGBMRegressorgbm=(objective='regression',num_leaves=31,learning_rate=0.05,n_estimators=20)预测print('开始预测')y_pred=(X_test,num_iteration=_iteration_)配合scikit-learn的网格搜索交叉验证选择最优超参数estimator=(num_leaves=31)param_grid={'learning_rate':[0.01,0.1,1],'n_estimators':[20,40]}gbm=GridSearchCV(estimator,param_grid)(X_train,y_train)print('用网格搜索找到的最优超参数为:')print(_params_)

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

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

以下为参考代码:

加载数据集print('加载数据')df_train=_csv('./data/',header=None,sep='\t')df_test=_csv('./data/',header=None,sep='\t')构建lgb中的Dataset数据格式lgb_train=(X_train,y_train)lgb_test=(X_test,y_test,reference=lgb_train)torecordevalresultsforplottingprint('开始训练')print('用graphviz画出第84颗树')(view=True)

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

参考资料:

[1]

图解机器学习|LightGBM模型详解:

[2]

图解python|安装与环境设置](

[3]

XGBoost工具库建模应用详解:

[4]

LightGBM中文文档: