Bagging、随机森林、Boosting

  • 1.Bagging(装袋算法)
  • 2.随机森林
  • 3.Boosting
  • 参考

1.Bagging(装袋算法)

bootstrap抽样:反复地从原始数据集中有放回地抽取观测数据,得到多个数据集。

  • 优点:适用于样本数量较小,可从原始数据中产生多个训练集。
  • 缺点:会引入相同样本,改变了原始数据的分布,导致偏差;模型的可理解性差。

在决策树中(或其他高方差模型中),由于其高方差低偏差地特性(即对训练集样本很敏感),样本发生个别变化时,生成的决策树可能会完全不同。为了减小高方差,引入Bagging方法。

假设有n个数据集,Z1,Z2,...ZnZ_1,Z_2,...Z_nZ1​,Z2​,...Zn​,每个数据集的方差为σ2\sigma^2σ2,则其样本平均值Zˉ\bar{Z}Zˉ的方差为σ2n\frac{\sigma^2}{n}nσ2​。

可以发现,对一系列观测值取平均可以显著降低方差。因此,类比可知,依赖原训练集生成许多新的训练集,再分别对新的训练集训练模型f^1(x),f^2(x),...f^B(x)\hat{f}^1(x),\hat{f}^2(x),...\hat{f}^B(x)f^​1(x),f^​2(x),...f^​B(x),最终取得各模型预测结果的平均。(分类问题即可以少数服从多数)
f^avg(x)=1B∑b=1Bf^b(x)\hat{f}_{avg}(x)=\frac{1}{B}\sum_{b=1}^B\hat{f}^b(x) f^​avg​(x)=B1​b=1∑B​f^​b(x)
Bagging(Boostrap aggregation):给定一个训练集,采用boostrap抽样生成b个训练集,再分别这b个训练集去训练模型,生成b个模型,再通过取平均值或取多数票等方法得到模型预测或分类结果。

  • Out-of-Bag Error(袋外错误)
    运用Boostrap抽样方式不可避免地存在一个问题,即当从样本数为n的训练集D中,运用Bootstrap抽样时,第j个观测值在bootstrap抽样集中的概率为:
    P=(1−(1−1n)n)lim⁡n→∞P=1−1e≈23P= (1-(1-\frac{1}{n})^n)\\ \lim_{n\rightarrow\infty }P=1- \frac{1}{e}\approx \frac{2}{3} P=(1−(1−n1​)n)n→∞lim​P=1−e1​≈32​
    可以得知,每个抽样集平均利用了原数据集的三分之二去训练子模型,而剩下的三分之一数据没有被利用去拟合该子模型,称这部分数据为Out-of-Bag(OOB)观测值(即子模型拟合未用到的训练集)。
    OOB误分率:对所有样本,计算它作为OOB样本时的预测或分类情况;通过平均或多数投票的方式得到该样本的分类样本;最后用误分个数占样本总数的比率作为OOB误分率。(因为OOB样本的预测利用的模型并不是用其拟合的模型,相当于测试集,所以可以近似将OBB错误作为test error)

2.随机森林

随机森林是在Bagging方法上的改进,子模型为决策树,在Bagging中抽样时进行模型拟合时,利用了观测值的所有特征p个,而在随机森林模型中,各子模型仅利用观测值所有特征中m=pm=\sqrt{p}m=p​个进行拟合。

  • m越大,单棵树的效果会提升,但树之间相关性也会增强
  • B越大,模型效果会有提升,但计算量会变大

优势:降维;当强特征存在时,bagging生成的各树模型可能高度相似,因此平均或多数投票不能够显著降低方差,而随机森林平均上(p−m)/p(p-m)/p(p−m)/p的split不会考虑强特征。
劣势:对小量数据集和低维数据集的分类不一定可以得到很好的效果。

bagging与随机森林均不会因为B值的增大而产生过拟合,所以一般采用较大的B去减小误差。
一方面:在样本的抽样中,会产生重复的样本,这样每一个子模型在拟合时都不会采用全部的样本,就不会产生过拟合现象。
另一方面:在特征值的采样中,选择有限的特征,这样每一个子模型可能不会生成完整的决策树(效果上类似于剪枝),所以不会产生过拟合现象。

3.Boosting

提升方法(Boosting)在该文进行了详细阐述。
提升树中,子模型的split为1时(即模型为树桩)通常效果较好,因为每次迭代产生的子模型都依赖于上一个子模型的结果(即与每次迭代的残差有关),因此每个模型之间的相关度越低,提升的效果越好。此时每一个子模型只包括一个特征,相当于加法模型。split越多,子模型考虑的特征数就越多,interaction depth就越大。

Boosting与前两者的区别:

  • Boosting根据错误率调整样本权重,错误率越大的样本权重越大;
  • Bagging使用的是均匀取样,每个样本权重相等。
  • Boosting各个预测函数必须按顺序迭代生成;
  • Bagging各个预测函数可以并行生成。
  • Boosting中误差越小的预测函数其权重越大;
  • Bagging所有的预测函数的权重相等。

参考

[1]《An introduction to statistical learning; with Application in R》

《ISLR》学习笔记 —— Bagging、随机森林、Boosting相关推荐

  1. 随机森林分类算法python代码_Python机器学习笔记:随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

  2. 【进阶版】机器学习之集成学习介绍、随机森林模型经验贴(12)

    目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 集成学习 个体与集成 Boosting Bagging与Ran ...

  3. 集成学习中的随机森林

    摘要:随机森林是集成算法最前沿的代表之一.随机森林是Bagging的升级,它和Bagging的主要区别在于引入了随机特征选择. 本文分享自华为云社区<集成学习中的随机森林>,原文作者:ch ...

  4. Opencv学习笔记 - 使用opencvsharp和Boosting算法处理分类问题

    决策树非常有用,但单独使用时它并不是表现最佳的分类器.改进的方法随机森林和Boosting算法.随机森林与Boosting算法都是在内部循环中使用决策树的,因此继承了决策树的许多优良属性,它们通常是机 ...

  5. 机器学习 ||《菜菜的sklearn机器学习》笔记——2 随机森林

    1 集成算法 集成学习 非常流行的机器学习算法,通过在数据上构建多个模型,集成所有模型的结果. 多个模型集成成为的模型叫做集成评估器,其中的每个模型叫做基评估器.通常来说,有三类集成算法:袋装法(Ba ...

  6. 【机器学习】集成学习ensemble之随机森林

    Bootstrapping Bootstrapping从字面意思翻译是拔靴法,从其内容翻译又叫自助法,是一种再抽样的统计方法.自助法的名称来源于英文短语"to pull oneself up ...

  7. Xposed学习笔记之蚂蚁森林能量自动收取模块

    本文主要借鉴尼古拉斯_赵四大佬的文章 本人xposed小白一枚,看了尼古拉斯_赵四大佬的那篇文章入门,深入的原理什么的,大家可以深入研究一下尼古拉斯_赵四大佬的文章. 学习笔记 调试常用的函数Log. ...

  8. 机器学习笔记(3) 随机森林

    random forest 和 extra-trees是对decison tree做ensemble而得到最终模型的两种算法. 阅读本文前需要先了解一下 机器学习笔记1:决策树 机器学习笔记2:集成学 ...

  9. numpy学习笔记之随机采样函数

    numpy的随机采样函数 np.random.choice(a, size=None,replace=None, p=None) 功能:Generates a random sample from a ...

最新文章

  1. 在leangoo里怎么插入泳道,上下移动泳道和删除泳道?
  2. AI算法不断突破 人工智能驱动创新需找对方向
  3. CSS 解决td里面内容太多把表格弄变形的原因,设置 自动换行。
  4. [Swift]UIKit学习之UISegSmentedControl的用法
  5. programcreek
  6. mysql proxy性能差_mysql性能的检查和优化方法
  7. 【好文收藏】k8s中Pod 无法正常解析域名:部署 DNS 调试工具排查
  8. boost::geometry::comparable_distance用法的测试程序
  9. 腾讯技术直播间 | 零代码打造智能对话机器人
  10. 香橼做空跟谁学发第三枪 跟谁学股价盘后下跌1.37%
  11. 25个恶意JavaScript 库通过NPM官方包仓库分发
  12. 关于NSStringFromClass的一点见解
  13. java序列不存在错误_java.sql.SQLException: ORA-02289: 序列不存在 已解决!
  14. 【Python基础】5-函数编程
  15. 毫秒级时间戳php,PHP获取毫秒级时间戳的方法
  16. 极限编程XP 的12个最佳实践
  17. DX11 游戏开发笔记 (二) DX11 基础框架 上
  18. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭
  19. 第11章 角色页的删除、批量删除
  20. 微型计算机ccc认证样品测试,CCC认证、检测中国赛西64102188

热门文章

  1. Swagger-ui.html页面简单的修改
  2. 374. Guess Number Higher or Lower*
  3. 总结DES、3DES、AES、SM加密算法
  4. Ghost 使用手册
  5. 将图片压缩至指定大小Kb(Thumbnailator)
  6. 1001 害死人不偿命的(3n+1)猜想
  7. 网络安全工程师从0单排日记-0
  8. 用蓝牙网络设计蓝牙低能耗智能应用程序.第1部分
  9. 终于有懂哥能把云计算、大数据和人工智能讲得明明白白了
  10. Java判断日期格式是否正确