Boosting是集成学习算法中用的比较多的一类,主要的代表算法有Adaboost,GBDT,XGBoost。
首先boosting算法是一个不断迭代提升的过程,这个过程整体是串行的(XGBoost在建立回归树的过程中可以实现并行化)。首先基于训练集训练出一个弱分类器,根据该弱分类器的分类结果看看哪些样本被分类错了,然后增大分类错误样本的权重,减小分类正确的样本的权重,构成新的数据集,然后传入下一个弱分类器中,根据分类结果再次改变权重组成新的数据集传入下一个弱分类器,这样反复迭代,就会得到若干个弱分类器,把这些弱分类器组合起来,就是一个强分类器。
Adaboost
Adaboost算法和boosting的整体思路基本一致:
输入:1)训练数据集,其中
表示训练数据,
表示标签
2)弱分类器
输出:强分类器G(x)
(1)初始化训练数据的权值分布(一开始所有数据的权值都是相同的)
(2)(a)首先用具有权值分布的数据 来训练基分类器
(b)计算 在训练数据集上的分类错误率
(c)计算 的系数
(d)更新训练数据集的权值分布
其中,
,i = 1,2...N,Z1是规范化因子,之所以需要Z1是为了让D2符合一个概率分布模型。
这样就得到了第二个基分类器 的训练数据,接着就把
传给
,从而能够得到
和
,进而得到
,再接着把
传给第三个基分类器
,一直继续下去,最终得到
从而得到
,所以一直这样迭代下去就可以得到M个基分类器。
(3)构建基分类器的现行组合
最终输出的分类器就是
提升树(BDT)如何拟合残差:
(a)假设有一组数据,
...
,首先建立第一个回归树
来拟合这些数据,得到预测结果为
,
...
,计算预测结果与实际结果的残差
,
,...,
。式中的上标‘1’表示第一个回归树预测的结果及残差
(b)建立第二个回归树 来拟合
,
...
,得到预测结果为
,
...
,再次计算残差
,
,...,
。上标‘2’表示的是第二个回归树预测的结果及残差
(3)一直到建立第M个回归树来拟合
,
...
,最终的输出就是
上面只是说到了拟合残差的过程,如何建立回归树:(下面的例子是李航老师的统计学习P149的一道题)
有一组数据如下:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
可以看出这里的特征只有一个,该特征对应的取值 有10个,
(a)首先需要将特征的取值按升序排列,这里已经是升序排列了。求数据的切分点s,根据所给的数据,考虑如下切分点:1.5, 2.5, 3.5,4.5, 5.5, 6.5, 7.5, 8.5, 9.5。
(b)对于切分点s=1.5,数据被分割成 =(5.56),
=(5.70,5.91,6.40,6.80,7.05,8.90,8.70,9.00,9.05),为了使
和
内部的平方误差最小,可知
和
两个区域的取值应该是所有数的平均值,则
,
计算得 c1=5.56, c2= 7.50
计算切分点为1.5时的平方误差
同样的当s=2.5,3.5,4.5, 5.5, 6.5, 7.5, 8.5, 9.5都可以计算得到相应的平方误差:
s | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
m(s) | 15.72 | 12.07 | 8.36 | 5.78 | 3.91 | 1.93 | 8.01 | 11.73 | 15.74 |
(c)选出平方误差最小的切分点作为最终的切分点,可以看出当s=6.5时误差最小,所以可建立回归树:
可以看出第一课树有两个叶子节点,左孩子具有样本(1,2,3,4,5,6),右孩子具有样本(7,8,9,10),左右孩子节点的取值就是每个样本对应 y 取值的平均值,这样第一课回归树就建立完成了,此时
(d)计算残差 得到下表:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
-0.68 | -0.54 | -0.33 | 0.16 | 0.56 | 0.81 | -0.01 | -0.21 | 0.09 | 0.14 |
得到每个样本对应的残差之后开始建立第二课回归树拟合残差,用同样的方式:
注:因为这里只有一个特征,所以不考虑需要选择最优的特征分割点,只需要考虑切分点
1)对切分点s,将数据切分成
2)计算 和
内部取值的平均值
,
3)计算均方误差,选出平方误差最小的那个切分点(这里s=1.5, 2.5, 3.5,4.5, 5.5, 6.5, 7.5, 8.5, 9.5)
最后发现s=3.5时平方误差最小,所以为:
(e)得到第二课回归树 ,这样输出就是:
一直这样拟合下去,每建立一棵树预测之后,都可以求得对应的平方误差和,直到最终的平方误差和满足要求停止。
最终的输出就是:
参考:李航《统计学习方法》