机器学习(六):集成算法(1)Bagging
来源:互联网 发布:yii框架连接数据库 编辑:程序博客网 时间:2024/06/06 08:57
1.Aggregation概论
1.1 引言
三个臭皮匠,顶个诸葛亮。
假设我们有多个预测模型
能不能呢?我们从直观上来看:
我们组合是有效果的。
1.2 这么多g是怎么获得的?
如果使用
1.3 为什么aggregation可以起作用?
最终采用如下形式:
1.4 Bootstrap Aggregation(bagging)
假设对于某一个学习算法A,使用无限多不同的数据集
然而,通常情况下,我们无法获取如此多的训练数据集,我们通常采用一种叫做Bootstrap的方法来获取数据集:
1.5 小结
模型的表现分为Bias和Variance两部分,而aggregation的原理是将Variance部分尽可能的减小。那么这非常适用于如下情况:有一系列low Bias High Variance的模型。——我们可以得到这样一个结论:Aggregation类似于正则化过程。
但是,很显然地,Aggregation有类似于特征转换的部分:
这又当如何理解呢?
2. 决策树——CART
决策树的原理非常简单,在此不叙述。给出一个决策树的递归定义:
看得出对于决策树,我们只需要做四个决定:1.分支的多少;2.如何进行分支;3.什么时候终止;4.终止时(叶结点)的g。
对于CART,我们选择:
C=2;g——constant:对于分类问题,最多的y;对于回归问题,是y的平均值;
现在还剩两个问题:
2.1 如何进行分支?
因为只有两个分支,我们将数据集D分成两个
2.2 什么时候不再进行分支?
2.3 CART分类算法
CART回归算法就不再说了,只是impurity不同。
- 设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。
- 在所有可能的特征A以及它们所有可能的切分点a,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
- 对两个子结点递归调用上述两个步骤,直到满足停止条件。
- 生成CART树
其中的停止条件是结点中的样本数小于预定阈值,或样本及的基尼指数小于预定阈值,或没有更多特征。
2.4 CART剪枝
我们知道,CART基本上来说,一定会过拟合。那么如何来正则化呢?
使用叶结点的个数来表征CART的复杂度,那么很自然地:
那么,问题又回到了之前我们讨论正则化时候的情况,使用不同的λ并使用validation来选取即可。
对于CART来说,有更为具体地、我们称之为剪枝的算法。剪枝算法分为两步:
- 从生成算法产生的决策树
T0 底端开始不断剪枝,直到T0 的根结点,形成一个子树序列{T0,T1,...,Tn} - 通过交叉验证法在独立的验证数据集上对子树序列进行测试,选择最优子树。
采用如上所述的剪枝步骤,则所有的λ都已经被考虑在内了。
证明过程如下:
- 当λ等于0时,不需要剪枝;当λ无穷大时,根结点组成的单结点树最优;随着λ增大,被剪掉的结点越多;
- 对于整体树
T0 开始,对于每一个内部结点t,都有:1)如果剪掉这个以t为根结点的子树,只保留t,此时子树的损失函数是J(t)=cost(t)+λ ;2)如果不剪掉,那么子树的损失函数是J(Tt)=cost(Tt)+λ|Tt| 。令两者相等,得λ=cost(t)−cost(Tt)|Tt|−1 。当λ小于这个值时,不剪掉t最优;当λ大于这个值时,剪掉最优。 - 所以我们对每一个内部结点t都计算
g(t)=cost(t)−cost(Tt)|Tt|−1 ,先从T0 剪掉g(t)最小的t子树,得到T1 ,令λ1=此g(t) ,则T1 是区间[λ1,λ2) 的最优子树。
[具体参见李航的《统计学习方法》]
3. 随机森林
我们前面介绍了Bagging集成算法;
我们还介绍了决策树算法,我们知道决策树算法1)对训练数据非常敏感;2)可以使
而这两个缺点,恰好能通过Bagging来解决!
Bagging+决策树=随机森林。
3.1 随机森林中随机
针对于随机森林,我们不只有bootstrap中的随机选取,还可以再新增加一个层次的random:
random subspace——从属性集中随机选择k个属性。
3.2 out-of-bag examples
当我们使用Bagging方法的时候,对于每一个
对于某个
某个数据属于OOB的概率为:
那么这些数据能不能利用一下?
没有被污染的数据我们通常用来干什么呢?validation和test都可以。
但是这里还存在一些问题:
我们要validation/test的模型是G,而G由许多g组成,然而每个g的OOB都是不一样的,可能
- 对于每一个数据
(x(i),y(i)) ,找出此数据是哪些g的OOB数据?假设为g2,g3.gt 的OOB数据,那么G−i(x)=average(g2,g3,gt) ,计算err(y(i),G−i(x(i))) - –
- 计算
Eoob(G)=1m∑mi=1err(y(i),G−i(x(i))) ,用Eoob 取代Eval/Etest 。
我们说对于Bagging方法,它是自验证的。
3.3 随机森林的一个应用——特征选择
假设输入空间有1万个特征,可能很多特征是没用的,这样可能会导致过拟合问题,我们需要选择出我们感兴趣的特征。
譬如说,两个特征可能是重复的,“生日”和“年龄”这两个特征就是重复的;又或者某个特征与我们研究的问题根本没有关系。去除这些特征是有好处的。
上述情况下的特征很好去掉,但是却是完全人工的、完全依赖于研究者的直觉的。如何系统地选择特征?
——我们可以给每个特征计算出一个重要度,我们只使用那些重要度高的特征。
以线性模型为例,我们使用
可是,对于非线性模型呢?这种方法很明显不再适用。我们可以使用随机森林来计算重要度。
假设对于某个特征,如果它是“重要”的,那么如果我们在数据的这个特征维度上使用随机值,那么模型的性能必然降低。这称为random test:
这里需要注意的问题是:如何获取某个特征的随机值?一种想法是使用诸如随机分布、高斯分布之类的概率模型来产生数据,然而这样做的问题是:我们选取的概率模型可能不是此特征的真是概率模型。
所以我们采用例如bootstrap的方法:将训练数据这个特征的数据全部打乱排序,获取新的数据集D’,自然而言的:
3.4 小结
我们可以看到,随机森林并不复杂,而且虽然OOB和特征选择这两个主题是在随机森林这里引申的,但是却不仅仅是适用于随机森林。OOB适用于所有的Bagging方法;而特征选择的random test适用于任何机器学习算法。
4. 小结
正如我们之前所说的,Bagging这种形式的组合方式,限制太多,在实际应⽤中,误差通常是高度相关的,因此整体的误差下降是通常是很⼩的。为了得到更显著的提升,我们转向⼀种更加复杂的组合的⽅法,被称为提升⽅法。
- 机器学习(六):集成算法(1)Bagging
- 机器学习:集成学习算法Bagging,Boosting
- Matlab实现Bagging(集成学习)算法
- 机器学习----集成学习(Bagging和随机森林)
- 机器学习笔记(六)Bagging及随机森林
- bagging和boosting算法(集成学习算法)
- 集成学习(Ensemble learning)算法之bagging
- 机器学习算法--bagging算法
- 机器学习概念总结笔记(三)——分类决策树C4.5、集成学习Bagging算法Boosting算法随机森林算法迭代决策树算法、
- 机器学习-->集成学习-->Bagging,Boosting,Stacking
- 机器学习-->集成学习-->Bagging,Boosting,Stacking
- 机器学习(五):Bagging与Boosting
- 机器学习方法(六):随机森林Random Forest,bagging
- 机器学习sklearn19.0——集成学习——bagging、随机森林算法
- 机器学习 —— 决策树及其集成算法(Bagging、随机森林、Boosting)
- 集成学习算法总结----Boosting和Bagging
- 集成学习算法总结----Boosting和Bagging
- 集成剪枝分类算法的Bagging集成学习算法示例
- puppet 配置 3.5 参数
- mysql 设置 max_allow_packet
- 《C和指针》之一学习规划
- spark streaming性能优化
- 归并排序
- 机器学习(六):集成算法(1)Bagging
- View的事件分发机制
- Spring Bean的生命周期
- 《剑指offer》根据先序序列与中序序列重建二叉树-Java
- Centos7 CM5和CDH5(5.9.0) 离线安装
- CM开机动画 BootanimationMikuSony
- nova组件-rescue/unrescue
- 逆波兰表达式的生成(Java版)
- Storm入门学习随记