1.前言

集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。本文就对集成学习中Bagging与随机森林算法做一个总结。
随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力。

2.bagging的原理

bagging集成学习方法可以利用下图说明:

从上图可以看出,Bagging的弱学习器之间的确没有boosting那样的联系。它的特点在“随机采样”。那么什么是随机采样?
随机采样(bootsrap)就是从我们的训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。对于我们的Bagging算法,一般会随机采集和训练集样本数m一样个数的样本。这样得到的采样集和训练集样本的个数相同,但是样本内容不同。如果我们对有m个样本训练集做T次的随机采样,,则由于随机性,T个采样集各不相同。注意到这和GBDT的子采样是不同的。GBDT的子采样是无放回采样,而Bagging的子采样是放回采样

对于一个样本,它在某一次含m个样本的训练集的随机采样中,每次被采集到的概率是1/m。不被采集到的概率为1−1/m。如果m次采样都没有被采集中的概率是(1−1/m)^m。当m→∞m→∞时,(1−1/m)^m→ 1/e≃0.368。也就是说,在bagging每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。

对于这部分大约36.8%的没有被采样到的数据,我们常常称之为袋外数据(Out Of Bag, 简称OOB)。这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。
bagging对于弱学习器没有限制,这和Adaboost一样。但是最常用的一般也是决策树和神经网络。
bagging的集合策略也比较简单,对于分类问题,通常使用简单投票法,得到最多票数的类别或者类别之一为最终的模型输出。对于回归问题,通常使用简单平均法,对T个弱学习器得到的回归结果进行算术平均得到最终的模型输出。
由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型的方差很有作用。当然对于训练集的拟合程度就会差一些,也就是模型的偏倚会大一些。

3.bagging算法流程

上一节我们对bagging算法的原理做了总结,这里就对bagging算法的流程做一个总结。相对于Boosting系列的Adaboost和GBDT,bagging算法要简单的多。
输入为样本集D={(x1,y1),(x2,y2),...(xm,ym)},弱学习器算法, 弱分类器迭代次数T。输出为最终的强分类器f(x).
1)对于t=1,2...,T:

  • a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集Dm
  • b)用采样集Dm训练第m个弱学习器Gm(x)

2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

4.随机森林算法

理解了bagging算法,随机森林(Random Forest,以下简称RF)就好理解了。它是Bagging算法的进化版,也就是说,它的思想仍然是bagging,但是进行了独有的改进。我们现在就来看看RF算法改进了什么。   
首先,RF使用了CART决策树作为弱学习器,这让我们想到了梯度提示树GBDT。第二,在使用决策树的基础上,RF对决策树的建立做了改进,对于普通的决策树,我们会在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是RF通过随机选择节点上的一部分样本特征,这个数字小于n,假设为nsub,然后在这些随机选择的nsub个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。

如果nsub=nnsub=n,则此时RF的CART决策树和普通的CART决策树没有区别。nsubnsub越小,则模型约健壮,当然此时对于训练集的拟合程度会变差。也就是说nsubnsub越小,模型的方差会减小,但是偏倚会增大。在实际案例中,一般会通过交叉验证调参获取一个合适的nsubnsub的值。
除了上面两点,RF和普通的bagging算法没有什么不同, 下面简单总结下RF的算法。
输入为样本集D={(x1,y1),(x2,y2),...(xm,ym)},弱分类器迭代次数T。输出为最终的强分类器f(x):

1)对于t=1,2...,T:

  • a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集Dm
  • b)用采样集Dm训练第m个决策树模型Gm(x),在训练决策树模型的节点的时候, 在节点上所有的样本特征中选择一部分样本特征,在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分

2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

5.随机森林算法推广

由于RF在实际应用中的良好特性,基于RF,有很多变种算法,应用也很广泛,不光可以用于分类回归,还可以用于特征转换,异常点检测等。下面对于这些RF家族的算法中有代表性的做一个总结。

5.1 extra trees

extra trees是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:
1)对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集
2)在选定了划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。
从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好。

5.2 Totally Random Trees Embedding

Totally Random Trees Embedding(以下简称 TRTE)是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。
TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征xx划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0,     0,0,1,0,0,     0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。
映射到高维特征后,可以继续使用监督学习的各种分类回归算法了。

6.随机森林小结

作为一个可以高度并行化的算法,RF在大数据时候大有可为。这里也对常规的随机森林算法的优缺点做一个总结。
RF的主要优点有:
1)训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。
2)由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。
3)在训练后,可以给出各个特征对于输出的重要性
4)由于采用了随机采样,训练出的模型的方差小,泛化能力强。
5)相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
6)对部分特征缺失不敏感。
RF的主要缺点有:
1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
2)取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

RF(随机森林)算法原理及其派生算法相关推荐

  1. ML之RFXGBoost:分别基于RF随机森林、XGBoost算法对Titanic(泰坦尼克号)数据集进行二分类预测(乘客是否生还)

    ML之RF&XGBoost:分别基于RF随机森林.XGBoost算法对Titanic(泰坦尼克号)数据集进行二分类预测(乘客是否生还) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 ...

  2. 随机森林分类算法python代码_随机森林的原理及Python代码实现

    原标题:随机森林的原理及Python代码实现 最近在做kaggle的时候,发现随机森林这个算法在分类问题上效果十分的好,大多数情况下效果远要比svm,log回归,knn等算法效果好.因此想琢磨琢磨这个 ...

  3. 随机森林(Random Forest)算法原理

    随机森林(Random Forest)算法原理 集成学习(Ensemble)思想.自助法(bootstrap)与bagging **集成学习(ensemble)**思想是为了解决单个模型或者某一组参数 ...

  4. ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序

    ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序 目录 基于mpg数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特 ...

  5. 独家 | 决策树VS随机森林——应该使用哪种算法?(附代码链接)

    作者:Abhishek Sharma 翻译:陈超 校对:丁楠雅 本文长度为4600字,建议阅读20分钟 本文以银行贷款数据为案例,对是否批准顾客贷款申请的决策过程进行了算法构建,并对比了决策树与随机森 ...

  6. ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略

    ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树&RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻 ...

  7. ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林实现模型可解释性案例

    ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林实现模型可解释性案例 目录 基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对R ...

  8. ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之攻略

    ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之详细 ...

  9. python随机森林筛选变量_一种基于随机森林的改进特征筛选算法

    刘云翔 陈斌 周子宜 摘  要: 肝癌是一种我国高发的消化系统恶性肿瘤,患者死亡率高,威胁极大.而其预后情况通常只能通过医生的专业知识和经验积累来粗略判断,准确率较差.因此文中在分析随机森林算法的基本 ...

最新文章

  1. Ubuntu15.10的64位版本启动eclipse+adt时的若干问题
  2. 2021-12-27
  3. rip协议中周期性广播路由信息的报文_技术实操||距离矢量路由协议-RIP
  4. vs2010 EF4.0 访问mysql
  5. 线性表----顺序表
  6. Java虚拟机(JVM)面试题大集合
  7. MySQL之DQL(查询)语句
  8. Git submodule 特性
  9. C++ STL中Map的按Key排序和按Value排序
  10. java oracle分页查询语句_oracle分页查询语句,java得到分页查询语句的方法
  11. 基于mfc的图形学实例_前端图形学(二十)——退后!!我要开始进入3D世界了...
  12. java 表格树_00030-layui+java 树形表格treeTable
  13. asp.net出现【视图状态消息身份验证错误】
  14. 盲打打字php,盲打键盘指法图顺口溜及练习方法
  15. NS和DNS的区别有哪些?
  16. 乔布斯自传预售即夺下销售冠军
  17. 机器学习kaggle案例:沃尔玛招聘 - 商店销售预测
  18. linux smb无密码错误,smb无法登录提示用户名密码不正确错误排查
  19. 鸿蒙Module引用har方法
  20. 使用@Lazy解决循环依赖问题

热门文章

  1. c#笔记-流程控制语句
  2. JavaWeb思维导图(一周目版)
  3. 有道云笔记,熊掌记和 Effie 哪个适合 SMZDM 开箱评论者?
  4. 【20230401】【每日一题】前K个高频元素
  5. java组卷系统框架_java毕业设计_springboot框架的试题库自动组卷
  6. 2021-11-18 WinFrom面试题 在Winform中,我们发现在一个Form相关的cs文件有两个,它们的类名都是一样的,只是代码后台类文件中的class之前有partical修饰而已,这是为
  7. matlab里的deconv,deconv
  8. css3动画的神奇之处
  9. Pandoc: LaTeX 转 Word 文档 (含参考文献样式)
  10. DOM操作标签与jQuery框架