GBDT
梯度提升方法, 通过拟合负梯度的方式, 可以配合各种可微损失函数使用. 如果基函数使用决策树, 此时的算法称为梯度提升决策树(Gradient Boosting Decision Tree, GBDT).
理论上梯度提升方法可以配合各种各样的基函数使用, 为何配合决策树称为了最流行的选择呢.
为什么选择决策树
决策树有以下的优点:
相当于IF-ELSE规则的集合, 可解释性强, 预测速度快
相比于其他算法, 需要的特征工程少, 如不需要进行标准化
同时也有以下的缺点:
缺乏平滑性, 回归预测时输出值只能输出有限的若干种数值
我们可以通过抑制决策树的复杂性, 降低单棵决策树的拟合能力, 再通过梯度提升的方法集成多个决策树, 最终能够很好的解决过拟合的问题. 由此可见, 梯度提升方法和决策树学习算法可以互相取长补短, 是一对完美的搭档.
GBDT回归算法
GBDT算法可以看成是M棵树组成的加法模型:
F(x,w)=∑m=0Mαmhm(x,wm)=∑m=0Mfm(x,wm)
x为输入样本, h(x;w)为回归决策树, w为决策树模型的参数, α为每棵树的权重.
给定训练集T={(x1,y1),(x2,y2),…,(xN,yN)}, 其中xi∈χ⊆Rn, χ为输入控件, yi∈Y⊆R, Y为输出控件, 损失函数为L(Y,f(x)), 目标是得到最终的GBDT回归模型FM.
初始化第一个回归决策树F0(x)=cargmin∑i=1NL(yi,c)
依次建立m=1,2,⋯,M棵回归决策树
对于所有样本i=1,2,⋯,N, 计算第m棵树对应的负梯度rm,i=−[∂F(x)∂L(yi,F(xi))]F(x)=Fm−1(x)
使用所有样本(xi,rm,i), 拟合得到一棵新的回归决策树, 即第m棵树. 树中叶子结点的数量为Jm, 每个叶子结点j=1,2,⋯,Jm对应的区域记为Rm,j
对于每个叶子结点区域, 拟合出这个结点的最佳输出值cm,j=cargmin∑xi∈Rm,jL(yi,Fm−1(xi)+c)
更新强学习器Fm(x)=Fm−1(x)+∑j=1Jmcm,jI(x∈Rm,j)
得到最终的强学习器FM(x)=F0(x)+∑m=1M∑j=1Jmcm,jI(x∈Rm,j)
GBDT回归任务损失函数
均方差
L(y,F(x))=(y−F(x))2
对应的负梯度为:
rm,i=−[∂F(x)∂L(yi,F(xi))]F(x)=Fm−1(x)=yi−F(xi)
经过推导, 初始化应为:
F0(x)=yˉ
yˉ是所有样本真实值的平均值.
每个叶子节点区域Rm,j的最佳输出cm,j为:
cm,j=averagex∈Rm,jrm,i
即这个叶子节点区域中所有样本负梯度的平均值.
在sklearn
中loss
参数赋值为ls
绝对损失
L(y,F(x))=∣y−F(x)∣
负梯度为:
rm,i=−[∂F(x)∂L(yi,F(xi))]F(x)=Fm−1(x)=sign(yi−F(xi))
初始化模型为:
F0(x)=median(y)
即所有样本真实值的中位数.
每个叶子节点区域Rm,j的最佳输出cm,j为:
cm,j=medianx∈Rm,j(yi−Fm−1(xi))
在sklearn
中的参数赋值为lad
.
Huber损失
Huber损失是均方差和绝对损失的折衷产物, 对于远离中心的异常点, 采用绝对损失, 而中心附近的点采用均方差, 这个界限一般用分位数点度量.
L(y,f(x))=⎩⎨⎧21(y−f(x))2δ(∣y−f(x)∣−2δ)∣y−f(x)≤δ∣∣y−f(x)>δ∣ 对应的负梯度为:
r(yi,f(xi))={yi−f(xi)δ⋅sign(yi−f(xi))∣yi−f(xi)≤δ∣∣yi−f(xi)>δ∣ 分位数损失
θ为分位数, 是一个超参数.
L(y,f(x))=y≥f(x)∑θ∣y−f(x)∣+y<f(x)∑(1−θ)∣y−f(x)∣ 对应的负梯度为:
r(yi,f(xi))={θθ−1yi≥f(xi)yi<f(xi) 对于Huber损失和分位数损失, 主要用于健壮回归, 也就是减少异常点对损失函数的影响.
GBDT的正则化
为了防止过拟合, GBDT有很多正则化的方式.
Shrinkage
为了防止过拟合, 在每次对负梯度估计进行迭代时, 不直接加上当前步所拟合的负梯度, 而是乘以一个系数α, 也被称为学习率. 它可以对梯度提升的步长进行调整, 较小的α意味着步幅较小, 需要更多的若学习器, 即更多的迭代次数, 更多的树. 迭代过程变为了:
Fm(x)=Fm−1(x)+αhm(x)
Subsample
采样样本的比例, 取值为0到1. 这里是不放回抽样. Subsample可以减小方差, 防止过拟合, 但会增加拟合的偏差, 因此取值不能太低, 推荐[0.5, 0.8]之间
对于回归树进行正则化剪枝
Early Stopping
选择一部分样本作为验证集, 在迭代拟合训练集的过程中, 如果模型在验证集里错误率不再下降, 就停止训练, 控制迭代的轮数, 树的个数.
Dropout
参考DART: Dropouts meet Multiple Additive Regression Trees. GBDT有一个显著的问题, 前面迭代的树对预测值的贡献比较大, 后面的树会集中预测一小部分样本的偏差. 通过Dropout平衡所有树对预测的贡献.
每次新加一棵树, 这棵树要拟合的并不是之前全部树ensemble后的负梯度, 而是随机抽取的一些树ensemble.
调参准则
loss
选择使用的损失函数, 如果要减少异常点的影响, 使用Huber损失和分位数损失
learning_rate
参数会强烈影响到参数n_estimators
, 一般将learning_rate
设置为小于0.1的小常数, 并通过early stopping来控制弱学习器的总数
subsample
可以减小方差, 防止过拟合, 但会增加拟合的偏差, 因此取值不能太低, 推荐[0.5, 0.8]之间
n_iter_no_change
控制Early Stopping
参考资料