前向分步算法
考虑加法模型
其中,b(x,γm)为基函数,γm为基函数的参数,βm为基函数的系数。在给定训练数据及损失函数L(y,f(x))的条件下,学习加法模型f(x)成为经验风险极小化即损失函数极小化问题:
通常这是一个复杂的优化问题。前向分步算法求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:
,为什么说每一步只需优化上述损失函数呢,这里我谈下自己的认识,将损失函数拆成如下式子
这里,以Adaboost为例,假设损失函数为指数函数,则上式可以写成
前向分步算法过程如下:
输入:训练数据集T={(x1,y1),…(xN,yN)};损失函数L(y,f(x));基函数集{b(x;γ)}
输出:加法模型f(x)
负梯度拟合
提升树利用加法模型和前向分步算法实现优化的过程。当损失函数是平方损失函数和指数损失函数时,每一步的优化比较简单,但对于一般损失函数,就不那么容易了,可以梯度提升就派上用场了,梯度提升利用最速下降法,其关键是利用损失函数的负梯度在当前模型的值
作为回归问题提升树算法中的残差的近似值,来拟合一个回归树。
算法过程如下:
损失函数
对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种:
1.如果是指数损失函数,则损失函数表达式为
2. 如果是对数损失函数,分为二元分类和多元分类两种,
对于二元GBDT,如果用类似于逻辑回归的对数似然损失函数,则损失函数为:
L(y,f(x))=log(1+exp(−yf(x)))
对于多元分类,假设类别数为K,则此时我们的对数似然损失函数为:
对于回归算法,
1.平方损失函数
2.绝对损失函数
3.Huber损失,它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。损失函数如下:
回归
参看负梯度部分
二分类、多分类
二分类和多分类参考
https://www.cnblogs.com/pinard/p/6140514.html
正则化
GBDT的正则化主要有三种方式。
- 和Adaboost类似的正则化项,即步长(learning rate)。定义为ν,对于前面的弱学习器的迭代: fk(x)=fk−1(x)+hk(x)
如果我们加上了正则化项,则有fk(x)=fk−1(x)+νhk(x),ν的取值范围为0<ν≤1。对于同样的训练集学习效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。- 通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点
- 对于弱学习器即CART回归树进行正则化剪枝
优缺点
GBDT主要的优点有:
- 可以灵活处理各种类型的数据,包括连续值和离散值。
- 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
- 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有:
- 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行
sklearn参数
参数分为两类,第一类是Boosting框架的重要参数,第二类是弱学习器即CART回归树的重要参数
Boosting框架的重要参数
1.n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数
2.learning_rate: 即每个弱学习器的权重缩减系数νν,也称作步长
3.subsample:子采样取值[0,1]
4.init: 即我们的初始化的时候的弱学习器
5.loss: 即我们GBDT算法中的损失函数。分类模型和回归模型的损失函数是不一样的
6.alpha:这个参数只有GradientBoostingRegressor有,当我们使用Huber损失"huber"和分位数损失“quantile”时,需要指定分位数的值。默认是0.9,如果噪音点较多,可以适当降低这个分位数的值
CART回归树的重要参数
1.划分时考虑的最大特征数max_features
2.决策树最大深度max_depth
3.内部节点再划分所需最小样本数min_samples_split
4. 叶子节点最少样本数min_samples_leaf
5.叶子节点最小的样本权重和min_weight_fraction_leaf
6.最大叶子节点数max_leaf_nodes
7.节点划分最小不纯度min_impurity_split
应用场景
GBDT几乎可用于所有回归问题(线性/非线性),亦可用于二分类问题和多分类问题
参考
[1]https://www.cnblogs.com/pinard/p/6140514.html
[2]https://www.cnblogs.com/DjangoBlog/p/6201663.html
[3]李航.[统计学习方法]