学习笔记-随机森林、提升树、GBDT
在之前的章节里,学习了集成学习的两个代表方式:bagging和boosting,现在来看如果将bagging和boosting运用在决策树中。
随机森林(random forest)
随机森林是决策树和Bagging的结合体,并且为了增加多样性,随机森林加入了样本的随机选择。
- 随机采样的到m个子集
随机森林使用boostrap的方式对原始数据集采样,即有放回的采样。每个子集采样n(数据集的大小)次,所以子集中可能有的样本出现多次,有的样本没有出现。所以得到m个大小和原始数据大小一样的样本子集。
![](https://img.haomeiwen.com/i8458357/a84b783688c30965.png)
-
对特征采样
传统决策树在选择划分属性时,选择当前所有属性中的最优属性作为决策树的划分属性。但随机森林中,对决策树中的每个结点,先从该结点中随机选取k个属性作为当前结点的属性子集,然后再从这子集中选择最优的属性。下图展示的是两次不同结点所选择的特征。通常推荐,d表示当前结点所有属性的个数。
图片来自网络
-
最终决策
最终决策使用的是投票方式,少数服从多数。
![](https://img.haomeiwen.com/i8458357/bae1f668ea60b517.png)
需要注意的是:并不是决策树的个数越多越好。
优点
简单、容易实现、计算开销小、具有强大的性能。性能强大的原因是不仅包含了bagging中的样本多样性,还包含了来自样本自己特征的多样性。
提升树
在之前的笔记中,学习了cart如果解决回归问题和boosting集成方式,现在来看看如何将boosting集成方法应用到回归问题中。
提升树:以决策树为基函数的提升方法。在提升树中,每个基决策树是由一个根结点直接连接的两个也结点的简单决策树,即决策树桩。提升树模型可以表示为决策树的加法模型
其中,表示决策树,m表示第m课决策树桩,M为决策树的个数,
表示将输入空间划分为
个互不相交的区域,
,并且在每个区域上的输出为
,
表示树的空间划分和每个区域上确定的输出常量
。
回归问题下使用前向分布算法
第一步:设
第二步:
第三步:整体模型表示
第四步:写出第m步的损失函数
在回归问题中,使用mse作为损失函数 ,所以决策树的目标是最小化mse损失函数。
在第m步,给定当前模型,即前m-1个决策树。(在第m步,前m-1个模型肯定是已经求出)
所以第m步的损失函数可以将式(5)改写为:
第五步:求参数
回归问题使用MSE作为损失函数
令,损失函数变为
r就是当前模型需要拟合的残差,所以提升树的回归问题来说就是简单的拟合数据的残差即可。
为什么拟合残差就行
拟合残差意味着使当前模型的输出逼近残差,从式(9)可以看到损失函数变为了,要最小化损失函数只需要最小化
与当前模型输出的差值即可,并且构成
的
与
都是已知的。所以提升树在回归问题中拟合残差即可。
例子(来自于统计学习方法P180)
现在有输入数据x和输出数据y
![](https://img.haomeiwen.com/i8458357/f538d7e78f0dcaa2.png)
对于以上数据,可能的切分点有。
(1) 对于所有可能的切分点计算MSE损失和最优输出
例如以1.5作为分界点
,
,
所以
同理计算其他切分点的损失,如下图所示
![](https://img.haomeiwen.com/i8458357/308589e9505fda83.png)
(2) 选择使损失最小的切分点
当时,损失函数最小为1.93,对应的划分输出为,,得到树
![](https://img.haomeiwen.com/i8458357/f22b43bf7050cce2.png)
(3) 根据树计算下一个树需要拟合的残差
![](https://img.haomeiwen.com/i8458357/47be66a150d87cbb.png)
(4)重复上述过程,依次计算
![](https://img.haomeiwen.com/i8458357/82e52a7ec2f456b7.png)
(5) 将所有树的区间叠加得到
这步根据式(1)得到
![](https://img.haomeiwen.com/i8458357/1d335842db236110.png)
GBDT
提升树利用加法模型与前向分步算法实现学习的优化过程。当损失函数使平方损失和指数损失时,每一步的优化是很简单的。但对于一般损失函数而言,每一步优化并不容易。GBDT利用损失函数的负梯度在当前模型的值
作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
注意:当损失函数为MSE时,负梯度就是残差,其他损失函数时,只是近似残差。
从泰勒展开看看GBDT
泰勒展开式如下:
![](https://img.haomeiwen.com/i8458357/5a7affffb38e52cf.png)
GBDT的损失函数如下:
使用一阶泰勒展开损失函数,将此处的当作a,
当作h,带入泰勒展开式得到
要使损失函数最小,等式右边是个常数, 那么令
为
的负方向即可保证等式右边的损失函数比前一个树的损失函数小
带入式中得到
变为
综上所述,拟合损失函数的负梯度即可保证模型趋向拟合。
GDBT流程
输入:训练数据集,损失函数为
输出回归树
(1)初始化
,这里的c是所有均值
(2)对
- 对
,计算
,这里计算每个x对于的残差值
- 对
拟合一个回归树,得到第m棵树的叶结点区域
,
.
- 对,
,计算
,这里的c是每一个子区域
的均值,具体的,这里的
表示第m棵树在
这个子领域的输出值。
- 更新
(3) 得到回归树
**优缺点
- 优点
- 准确度高
- 适合低维复杂度
- 能灵活的处理各种类型的数据,连续值和离散值
- 缺点
- 不能并行
- 数据高维会加大复杂度
参考文献
[1] 《统计学习方法》 李航 第二版
[2] 《机器学习》 周志华
[3] http://ihoge.cn/2018/boosting.html
[4] https://juejin.im/post/5cd1828af265da038364dbba
[5] 泰勒公式 https://blog.csdn.net/weixin_37697191/article/details/89303042