数据比赛Kaggle,天池中最常见的就是XGBoost和LightGBM。
模型是在数据比赛中尤为重要的,但是实际上,在比赛的过程中,大部分朋友在模型上花的时间却是相对较少的,大家都倾向于将宝贵的时间留在特征提取与模型融合这些方面。在实战中,我们会先做一个baseline的demo,尽可能快尽可能多的挖掘出模型的潜力,以便后期将精力花在特征和模型融合上。这里就需要一些调参功底。
本文从这两种模型的一共百余参数中选取重要的十余个进行探讨研究。并给大家展示快速轻量级的调参方式。当然,有更高一步要求的朋友,还是得戳LightGBM和XGBoost这两个官方文档链接。
XGBoost 的重要参数
XGBoost的参数一共分为三类:
-
通用参数:宏观函数控制。
-
Booster参数:控制每一步的booster(tree/regression)。booster参数一般可以调控模型的效果和计算代价。我们所说的调参,很这是大程度上都是在调整booster参数。
-
学习目标参数:控制训练目标的表现。我们对于问题的划分主要体现在学习目标参数上。比如我们要做分类还是回归,做二分类还是多分类,这都是目标参数所提供的。
通用参数
-
booster:我们有两种参数选择,
gbtree
和gblinear
。gbtree是采用树的结构来运行数据,而gblinear是基于线性模型。 -
silent:静默模式,为
1
时模型运行不输出。 -
nthread: 使用线程数,一般我们设置成
-1
,使用所有线程。如果有需要,我们设置成多少就是用多少线程。
Booster参数
-
n_estimator: 也作
num_boosting_rounds
这是生成的最大树的数目,也是最大的迭代次数。
-
learning_rate: 有时也叫作
eta
,系统默认值为0.3
,。每一步迭代的步长,很重要。太大了运行准确率不高,太小了运行速度慢。我们一般使用比默认值小一点,
0.1
左右就很好。 -
gamma:系统默认为
0
,我们也常用0
。在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。
gamma
指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。因为gamma
值越大的时候,损失函数下降更多才可以分裂节点。所以树生成的时候更不容易分裂节点。范围:[0,∞]
-
subsample:系统默认为
1
。这个参数控制对于每棵树,随机采样的比例。减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。 典型值:
0.5-1
,0.5
代表平均采样,防止过拟合. 范围:(0,1]