您的位置:

在lightgbm中进行超参数调优的指南

一、LightGBM调参过程图

在开始具体介绍如何在LightGBM中进行超参数调优之前,我们先来看一下整个调参过程的图示:

根据上图,我们可以分为以下几步进行LightGBM调参:

二、LightGBM调色

对于LightGBM的超参数调优,在确定好超参数范围之后,我们可以使用Grid Search, Random Search和Bayesian optimization等方式进行搜索。在这里,我们先介绍一下Grid Search和Random Search。

Grid Search 和 Random Search 的对比

Grid Search 和 Random Search 是两种相对简单和常用的网格搜索和随机搜索方法。在 LightGBM中,网格搜索常常能取得不错效果,而随机搜索在一些场景下更为适用。

我们这里主要介绍 Grid Search 和 Random Search 分别的优缺点。

Grid Search

Grid Search 是将超参数的可能取值按照一定网格分布,然后对每一组可能参数值都进行模型训练和评价,最后选出最优的一组参数值。其优点是遍历所有可能的参数值,简单易行,能保证找到全局最优解,但同时也存在显著的计算开销较大的问题,网格不均匀时可能会出现局部最优问题。

Random Search

Random Search 是基于随机的搜索方法,将超参数的可能取值随机分布,再针对每一组可能的随机参数值进行模型训练和评价,最终选出最优的一组参数值。其优点是能够在参数空间中更广泛地探查,相对于 Grid Search 对参数空间分割的更加均匀和全面。同时,计算开销比 Grid Search 相对较小。

LightGBM调色参数选取

其实,参数调优是一个相对比较苦的活,靠经验积累和足够的实验。我们这里主要从以下几个方面介绍在LightGBM中,需要进行调参的主要参数:

学习率(learning rate)

学习率是调整每次模型迭代时的步长,其过大容易出现收敛困难,甚至不收敛的问题;而过小则需要很长的训练时间。 LightGBM 默认的学习率为 0.1,通常这也可作为一个默认值。如果需要尝试其他学习率时,建议从 [0.001, 0.1]这个范围开始。

树的深度(max_depth)

max_depth一般减小至3-8,能有效防止过拟合。然而,它应该在模型中更严格地约束叶子节点数量相对于树的深度的大小。

叶子节点个数(num_leaves)

num_leaves 是 LightGBM 中非常重要的超参数之一,它决定了一棵树上至多能够存在的叶子节点数目。num_leaves 值越大,则模型复杂度越高,且容易出现过拟合;反之,模型可能欠拟合。 初始 num_leaves 的取值可以根据训练集中样本数量的大小 (N)进行计算,即 num_leaves = 2^(max_depth) ≤ N。

防止过拟合(min_data_in_leaf和\ max_bin)

max_bin:特征值离散化的最大数量;

min_data_in_leaf:一个叶节点的最小样本数量;

带着这些参数去跑起来,你会发现:这样一来可以初步探索哪些参数比较重要,然后接下来就可以针对重要的参数进行调整和优化。

三、目标函数

对于 LightGBM 中的目标函数,其默认是 Regression,在分类问题中默认使用 Cross-Entropy。

如果你需要进行目标函数的更改,可以在调用函数中使用 objective 参数,例如:

objective = 'multiclassova'
num_class = 10

上述代码中,我们对 objective 进行了更改,使其适用于多分类问题,这里 num_class = 10 指定了分类的类别数目。

四、训练数据

最后,我们来考虑一下在 LightGBM 调整中需要注意的训练数据情况。对于训练数据来说,我们需要考虑以下几个方面:

数据格式

LightGBM 支持的数据格式包括 libsvm 格式数据和二进制数据。对于 libsvm 格式数据,其每行格式可以使用以下格式:

其中 label 是数据的标签,index 是特征的索引(从1开始,0表示数据中没有对应的特征),value 是特征的值。举个例子 ,图中所示的样本,使用 libsvm 格式表示为:

3 1:0.55 3:0.23 11:0.75 14:0.12 ... 23:0.9 39:0.17

在 LightGBM 训练时,使用这个数据格式:

train_data = lgb.Dataset(X_train, y_train, free_raw_data=False, silent=True,
                              feature_name=feature_cols, categorical_feature=cate_cols)

类别型数据 (categorical features)

最后要注意的是类别型特征。LightGBM 默认采用 k-means 算法来将连续型特征转变为离散化类别特征。如果一个很高的精度需要这个模型在没有达到精度上的性能损失条件下,你可以覆盖默认的 k-means 实现。但是,对一些固定的、有限的类别型特征(如花的颜色),默认的 k-means 转换可能不足以满足需求。

总结

LightGBM 是一个高效的并行决策树构造算法,能够在较大数据集或高维数据上高效地处理。

在超参数调优时,我们可以采用 Grid Search 和 Random Search 进行搜索,并对学习率、树的深度和叶子节点个数等重要参数进行细致调整。此外,在训练数据方面需要注意数据格式,以及类别型数据的处理。