目标:好好捋一捋跟提升有关的算法,总结实属不易,望点赞或关注,谢谢。
一、前向分布算法
首先必须了解前向分布算法,因为这个算法将提升思想变得更容易实现,它只需求出每一次迭代时的最优弱模型的参数和系数即可,不用一次性求出所有的弱模型。
下面是我的另一篇博客,里面讲解了前向分布算法的思想和实现。
https://blog.csdn.net/watermelon12138/article/details/90370257
二、Adaboost算法
前向分布算法中并没有要求损失函数必须取哪一种(平方损失、指数损失等等),也没有要求基函数(就是弱模型)应该取哪一种(线性回归、svm、决策树等等),所以说前向分布算法更像是一个框架,需要你自己添加血和肉。Adaboost算法就是这样来的,如果将前向分布算法中的损失函数取 指数损失函数,那么前向分布算法就等价于Adaboost算法。
具体的分析和讲解,请看我的另一篇博客:
https://blog.csdn.net/watermelon12138/article/details/90370257
三、提升树算法
如果前向分布算法中的基函数取决策树(一般默认使用CART树,因为它即可做回归也可以做分类),那么该前向分布算法就可以称为提升树算法。针对不同的损失函数和树的类型,提升树有不同的用途,对于前向分布算法来说,当损失函数取指数损失,基函数取二叉分类树,前向分布算法就变成了用于分类的提升树算法; 当损失函数取平方损失,基函数取二叉回归树,前向分布算法就变成了用于回归的提升树算法;
3.1用于分类的提升树算法
这里我就不再啰嗦了,就是将Adaboost算法中的基函数取二叉分类树,算法具体流程和Adaboost一样。
3.2用于回归的提升树算法
前向分步算法中的基函数采用二叉回归树,损失函数采用平方损失,就得到了解决回归问题的提升树。
分析:
假设现在是前向分布算法的第 m 次 迭代,当前模型为 fm-1(x),此时的弱模型未知,我们记为T(x;θ),第m次迭代的目标是找到使得损失函数 L(yi, fm-1(xi) + T(xi;θ))取最小值的 T*(x;θ),然后更新当前模型 fm(x) = fm-1(x) + T*(x;θ)。
因为损失函数采用的是平方损失,所以有:
L(yi, fm-1(xi) + T(xi;θ)) = (yi - fm-1(xi) -T(xi;θ))2 = ( r - T(xi;θ))2
其中 r = yi - fm-1(xi) ,这是当前模型拟合数据的残差。从上面的表达式可以看出弱模型T(xi;θ)的预测值越是接近 r ,损失L的值就越小,所以说每一次迭代过程的弱模型 T(xi;θ) 只需拟合当前模型的残差就可以了,但这只限于损失函数取平方损失的时候。
算法: