网上已经有很多介绍Boosting的资料了,这里简单概述一下Boosting。
Boosting是一种ensemble的学习方法。通过反复学习多个弱学习器,然后使用加法模型将弱学习器组合到一起形成一个强学习器。如果每次学习一个弱分类器都用同样的数据,显然是学习多少次都是没有太大意义。所以,大多数Boosting每一轮训练一个弱学习器时就会改变样本的概率分布,也就是每个样本的权重。然后下一个弱学习器就会学到不同分布的样本。
接着我们来看一下什么是加法模型:
加法模型为一系列模型的线性相加:
其中,为基学习器,为基学习器的参数,为基学习器的系数,也可以理解为每个基学习的权重。
所以在给定训练数据及损失函数的情况下,学习一个加法模型f(x)就成为经验风险极小化,即cost function极小化问题:
因为加法模型要同时优化所有的基学习器是一个很复杂的问题,为了make life easier,同时结合加法模型的特性(基学习器的线组合),我们可以采用前向分布算法,每次优化新加入的基学习器的参数, 因为前面已经变为常数了,逐步逼近优化上面的cost function。
前向分布算法
输入:训练数据集, ; 损失函数;基函数集为;
输出:加法模型f(x)
1) 初始化
2) 对m=1,2,3,...,M, 依次训练第m个基学习器
a) 极小化损失函数
得到参数;
b) 更新
3) 得到加法模型
有了上面的铺垫,我们可以开始回归问题提升树了。
回归提升树是采用CART回归树作为基学习器的Boosting算法。它会训练多棵CART树,然后每棵树的预测结果的线性组合就是回归问题提升树。
回归提升树算法:
输入:训练数据集, ;
损失函数为平方误差损失函数(MSE) :
输出:提升树
1) 初始化;
2) 对m=1,2,3,...,M, 依次训练第m个CART回归树
a) 计算残差
b) 拟合残差学习一个回归树,得到
为回归树在输入空间划分的J个区域j = 1,2,...,J,也就是叶子结点的个数。所以就表示每个结点也就是区域输出的常 量 。参数,表示树的区域划分和各区域上的常数。
c) 更新
3) 得到回归问题提升树
在《统计学习算法》书上p149页给出了一个具体的回归问题提升树的实例,大家可以去看一下。
接下来讲一下为什么下一棵树拟合的是当前模型的残差,不是应该拟合原始数据,然后最小化损失函数吗?
因为回归问题提升树是加法模型,在使用前向分布算法拟合数据时,我可以把前几步具体写出来:
此时要最小化损失函数得到下一颗树的参数
因为使用的是平方误差损失函数,所以就有:
而正是当前模型的残差, 就可以得到:
因为回归树的损失函数也是MSE,所以 正好是回归树的损失函数,只是说 r 就充当了原本 y 的位置,所以下一棵树拟合的是当前模型的残差。也就是拟合数据集
回归问题提升树和GBDT也有联系。首先,都用的是CART回归树;其次,因为GBDT下一棵树拟合的是损失函数在当前模型的负梯度,而回归问题提升树的损失函数为MSE,而该损失函数的梯度就是残差。所以回归问题提升树可以看做是损失函数为MSE的GBDT.
GBDT的解释请看下一篇。
参考书籍:李航《统计学习方法》