机器学习(二):GBDT调参指南

GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,是一种迭代的决策树算法,它通过构造一组弱的学习器(树),并把多颗决策树的结果累加起来作为最终的预测输出。该算法将决策树与集成思想进行了有效的结合。本文对GBDT的调参思想和具体步骤进行一个整理。GBDT的超参数分为框架参数和弱学习器参数两类,以下分别讲解。

框架参数

①  n_estimators:代表弱学习器的最大个数,即最多训练多少棵树。这个值过大导致过拟合,过小导致欠拟合。默认值为100。

②  learning_rate:每个弱学习器都有一个权重参数,默认值0.1,取值范围0-1。 learning_rate和n_estimators同时决定着模型的拟合效果,因此要同时调整,建议从一个小一点的学习率开始,可以选用0.01或0.05。

subsample:子采样比例,默认1.0,是不放回的采样,与随机森林的有放回采样不一样。如果为1.0,表示每轮采用全部数据生成决策树,容易过拟合,方差容易比较大。但是如果过小容易造成高偏差,建议0.5-0.8之间。

④  init:初始学习器的值,在有一定先验知识的情况下可以自己设定,但是一般不用。

⑤  loss:损失函数的选择,分类任务和回归任务是有区别的。

——分类:可选项有{'deviance','exponential'},"deviance"对数似然损失函数和'exponential'指数损失函数,默认对数似然损失函数,对于二分类以及多分类问题采用对数似然损失函数比较好,这种损失函数用的也比较多。而指数损失函数,让我们想到的是Adaboost,即改变本轮错误训练的数据在下一轮训练中的权值,使错误分类的样本得到更多重视。

——回归:可选项有{'ls', 'lad', 'huber', 'quantile'},ls是均方,lad是绝对误差,huber是抗噪音损失函数。当残差大于delta,应当采用L1(对较大的异常值不那么敏感)来最小化,而残差小于超参数,则用L2来最小化。本质上,Huber损失是绝对误差,只是在误差很小时,就变为平方误差。它对数据中的异常点没有平方误差损失那么敏感。它在0也可微分。使用MAE训练神经网络最大的一个问题就是不变的大梯度,这可能导致在使用梯度下降快要结束时,错过了最小点。而对于MSE,梯度会随着损失的减小而减小,使结果更加精确。在这种情况下,Huber损失就非常有用。它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。但是,Huber损失的问题是我们可能需要不断调整超参数delta。

alpha:这个参数只有GradientBoostingRegressor有,当使用Huber损失"huber"和分位数损失“quantile”时,需要指定分位数的值。默认是0.9,如果噪音点较多,可以适当降低这个分位数的值。

弱学习器参数

max_features:划分时考虑的特征数量。当特征数量并不多,小于50,可以None,即默认使用全部特征。

max_depth:每棵子树的深度,默认为3。如果数据量和特征都不多,可以不管这个参数。但是当较大时,建议限制深度,10-100之间。

min_samples_split:子树继续划分的条件,默认为2。当一个节点内的样本数量少于该值时,该节点不再拆分,当作叶节点。当数据量小不用管,数据量大可以增大该值。

min_samples_leaf:叶子节点最少的样本数,默认1。如果叶节点的样本数少于该值,会和兄弟节点一起被剪枝,相当于不需要对上层的样本再做细分,因为叶节点中只有一个样本,分支意义不大。当数量级大,可以增大这个值。由此可见GBDT生成的树不是完全二叉树,是有可能出现左右子树高度不同的情况的。

min_weight_fraction_leaf:限制了叶子节点所有样本权重和的最小值。如果小于这个值,则会和兄弟节点一起被剪枝。默认是0,即不考虑。如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

max_leaf_nodes:最大叶子节点数量,默认为None,在限制的叶节点数之内生成最优决策树,可以防止过拟合。当数量级较大,可以限制这个数。

min_impurity_split:最小基尼不纯度,如果某个节点的基尼不纯度小于该值,则不再划分,视为叶节点,默认1e-7,一般不修改。

调参过程

① 先对提升框架内的迭代次数和学习率做调整。选一个较小的学习率,对迭代次数网格化调参(grid search);

② 接下来对弱学习器调参。先一起调整max_depth和min_samples_split,根据输出的最优值将max_depth定下俩,后续再调整最小划分样本数;

③ 再对内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf一起调参。看二者的最优值是否在边界上,如果在边界上,就进一步改变参数范围再网格化调参;

④ 再对max_features和subsample进行网格化;

⑤ 最后可以通过,减小学习率,增大迭代次数,增加泛化能力,防止过拟合。保持两者的乘积基本不变,但步长设定过小,会导致拟合效果反而变差,应适当减小学习率。

 


补充参考:

1、详细推导:https://zhuanlan.zhihu.com/p/92837676

2、调参整理:https://zhuanlan.zhihu.com/p/526131920

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇