GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升树,属于集成学习中的boosting算法,但是和boosting中的典型算法Adaboost有很大的不同。Adaboost是利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。GBDT也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,无论是处理回归问题还是二分类以及多分类。同时迭代思路和Adaboost也有所不同。
GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。
而GBDT的上层就是一个加法模型
其中每个都是一棵CART树。每棵回归树对给定的同一个样本输出的值相加就是该样本最终的输出y。
我们怎么求解最优的y呢,这就需要用到前向分布算法和负梯度优化了,首先来介绍前向分布算法。
目录
前向分布算法
负梯度拟合
损失函数
回归
二分类,多分类
正则化
优缺点
Sklearn参数
应用场景
参考
在李航的《统计学习》一书中8.3.1节讲述了前向分布算法
首先考虑加法模型
(1)
其中,是基函数,是基函数的参数,是基函数的系数
在给定训练集和损失函数的条件下,学习加法模型成为经验风险极小化即损失函数极小化问题:
这是一个复杂的优化问题,前向分布算法求解这一优化问题的想法是:学习的是加法模型如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数(1)那么就可以优化简化的复杂度,具体来说每步只需要优化如下损失函数:
给定训练数据集,,yi∈Y={-1,+1},损失函数和基函数的集合,学习加法模型f(x)的前向分布算法如下:
输入:训练数据集,损失函数和基函数集
输出:加法模型f(x)
(1)初始化
(2)对m = 1,2,…,M
得到参数
这样,前向分布算法将同时求解从m = 1到M所有参数的优化问题简化为逐次求解各个的优化问题。
在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是, 损失函数是 ,我们本轮迭代的目标是找到一个CART回归树模型的弱学习器,让本轮的损失函数最小。也就是说,本轮迭代找到要让样本的损失尽量变得更小的决策树。
针对这个损失函数拟合方法的问题,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为:
利用,我们可以拟合一颗CART回归树,得到了第t颗回归树,其对应的叶节点区域。其中J为叶子节点的个数。
针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值如下:
这样我们就得到了本轮的决策树拟合函数如下:
从而本轮最终得到的强学习器的表达式如下:
通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。下面来介绍下常用的损失函数。
(1).对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种::
(2).对于回归算法,常用损失函数有如下4种:
输入是训练集样本, 最大迭代次数T, 损失函数L。
输出是强学习器f(x)
(1).初始化弱学习器
(2).对迭代轮数t=1,2,...T有:
a)对样本i=1,2,...m,计算负梯度:
b)利用, 拟合一颗CART回归树,得到第t颗回归树,其对应的叶子节点区域为。其中J为回归树t的叶子节点的个数。
c) 对叶子区域j =1,2,..J,计算最佳拟合值
d)更新强学习器
3)得到强学习器f(x)的表达式
(1)二分类
对于二元GBDT,如果用类似于逻辑回归的对数似然损失函数,则损失函数为:
其中y∈{−1,+1}。则此时的负梯度误差为
对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为
由于上式比较难优化,我们一般使用近似值代替
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同
(2)多分类
假设类别数为K,则此时我们的对数似然损失函数为:
其中如果样本输出类别为k,则yk=1。第k类的概率pk(x)的表达式为:
集合上两式,我们可以计算出第t轮的第i个样本对应类别l的负梯度误差为:
观察上式可以看出,其实这里的误差就是样本i对应类别l的真实概率和t−1轮预测概率的差值。
对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为
我们一般使用近似值代替
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多元GBDT分类和二元GBDT分类以及GBDT回归算法过程相同。
防止过拟合。GBDT的正则化主要有三种方式
如果我们加上了正则化项,则有:
ν的取值范围为0<ν≤1。对于同样的训练集学习效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
预测精度高,适合低维数据,能处理非线性数据
可以灵活处理各种类型的数据,包括连续值和离散值
如果数据维度高时会加大算法的计算复杂度
可以用于回归/分类问题
李航《统计学习》
https://www.cnblogs.com/pinard/p/6140514.html
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html