【小白学ML】随机森林 全解 (从bagging到variance)
【前言】:公众号的AI初学者交流群已经建立啦,公众号后台回复【加群】可以加入。群里都是些一起学习的朋友,大家学习路上,结个伴。
【公众号资源汇总】:炼丹图书馆 | AI初学者所需要的资料合集(视频+PDF下载)
全文3155字,预计阅读时间10min
文章目录:
1 随机森林
2 bagging
3 神秘的63.2%
4 随机森林 vs bagging
5 投票策略
6 随机森林的特点
6.1 优点
6.2 bias 与 variance
6.3 随机森林降低偏差证明
随机森林中仍有两个未解之谜(对我来说)。随机森林采用的bagging思想中怎么得到的62.3% 以及 随机森林和bagging的方法是否有区别。
随机森林(Random Forest)就是通过集成学习的思想将多棵决策树集成的一种算法。基本单元是决策树。随机森林算法的提出也是为了改善决策树容易存在过拟合的情况。
1 随机森林
习惯上,我们将众多分类器(SVM、Logistic回归、决策树等)所组成的“总的分类器”,叫做随机森林。随机森林有两个关键词,一个是“随机”,一个是“森林”。森林就是成百上千棵树,体现了集成的思想,随机将会在下面总结到。
2 bagging
Bagging,其实就是bootstrap aggregating的缩写, 两者是等价的,其核心就是有放回抽样。
【bagging具体步骤】
-
从大小为n的样本集中有放回地重采样选出n个样本;(没错就是n个样本抽取n个) -
在所有属性上,对这n个样本建立分类器(ID3信息增益、C4.5信息增益率、CART基尼系数、SVM、Logistic回归等) -
重复以上两步m次,即获得了m个分类器; -
将预测数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类。
3 神秘的63.2%
一般被大家知晓的是:随机森林中每一次采样的比例是63.2%。 这个比例到底是怎么确定的呢?
在某手的面试中,我被问到了这个相关的问题,奈何学艺不精,哎。后来苦苦研究15分钟,终于得到答案,现在分享给大家。
bagging的最初的说法其实是:n个样本从中有放回抽样n次,这种条件下,势必会有抽取到相同样本的可能性,那么抽取到不同样本的期望值是多少呢?其实大家心里可能会有答案了,没错就是0.632n。
我们假设 表示第k次抽样抽取到不同样本的概率。那么 则表示第k-1次抽样抽取到不同样本的概率。
-
第k-1次抽样到不同样本的概率: -
第k-1次抽样时,有 个样本还没有被抽取 -
第k次抽样时,还有 的样本没有抽取 -
因此 -
,第一次抽样的数据一定不会重复
因此k次放回抽样的不同样本的期望值为:
利用等比数列的性质,得到:
当n足够大,并且k=n的情况下,上面的公式等于
所以证明完毕,每一次bagging采样重复抽取n次其实只有63.2%的样本会被采样到。
4 随机森林 vs bagging
随机森林(Random Forest)在Bagging基础上进行了修改。 具体步骤可以总结如下:
-
从训练样本集中采用Bootstrap的方法有放回地重采样选出n个样本,即每棵树的训练数据集都是不同的 ,里面包含重复的训练样本(这意味着随机森林并不是按照bagging的0.632比例采样 );
-
从所有属性中有选择地选出K个属性,选择最佳属性作为节点建立CART决策树;
-
重复以上步骤m次,即建立了m棵CART决策树
-
这m个CART形成随机森林,通过投票表决分类结果,决定数据是属于哪一类。
随机森林(Random Forest)的随机性主要体现在两方面,一方面是样本随机,另一方面是属性随机。样本随机的原因是如果样本不随机,每棵树的训练数据都一样,那么最终训练出的分类结果也是完全一样的。
5 投票策略
-
少数服从多数 -
一票否决 -
听说还有贝叶斯平均的方法。但是我没有过多了解。一般还是用少数服从多数的吧。
6 随机森林的特点
6.1 优点
-
在当前的算法中,具有极好的准确率 -
能够运行在大数据上 -
能够处理具有高维特征的输入样本,不需要降维 -
能够计算各个特征的重要度 -
能够防止过拟合 -
其实在一些大数据竞赛中,随机森林也是我第一个会尝试的模型哦~
6.2 bias 与 variance
说到机器学习模型的误差,主要就是bias和variance。
-
Bias:如果一个模型的训练错误大,然后验证错误和训练错误都很大,那么这个模型就是高bias。可能是因为欠拟合,也可能是因为模型是弱分类器。
-
Variance:模型的训练错误小,但是验证错误远大于训练错误,那么这个模型就是高Variance,或者说它是过拟合。
这个图中,左上角是低偏差低方差的,可以看到所有的预测值,都会落在靶心,完美模型;
右上角是高偏差,可以看到,虽然整体数据预测的好像都在中心,但是波动很大。
【高偏差vs高方差】
在机器学习中,因为偏差和方差不能兼顾,所以我们一般会选择高偏差、低方差的左下角的模型。稳定性是最重要的,宁可所有的样本都80%正确率,也不要部分样本100%、部分50%的正确率。个人感觉,稳定性是学习到东西的体现,高方差模型与随机蒙的有什么区别?
6.3 随机森林降低偏差证明
上面的可能有些抽象,这里用RandomForest(RF)来作为例子:随机森林是bagging的集成模型,这里:
-
RF(x)表示随机森林对样本x的预测值; -
B表示总共有B棵树; -
表示第i棵树所使用的训练集,是使用bagging的方法,从所有训练集中进行行采样和列采样得到的子数据集。
这里所有的 ,都是从所有数据集中随机采样的,所以可以理解为都是服从相同分布的。所以不断增加B的数量,增加随机森林中树的数量,是不会减小模型的偏差的。【个人感觉,是因为不管训练再多的树,其实就那么多数据,怎么训练都不会减少,这一点比较好理解】
【RF是如何降低偏差的?】 直观上,使用多棵树和bagging,是可以增加模型的稳定性的。怎么证明的?
我们需要计算
假设不同树的 之间的相关系数为 ,然后每棵树的方差都是 .
先复习一下两个随机变量相加的方差如何表示:
-
Cov(X,Y)表示X和Y的协方差。协方差和相关系数不一样哦,要除以X和Y的标准差:
下面转成B个相关变量的方差计算,是矩阵的形式:
很好推导的,可以试一试。
这样可以看出来了,RF的树的数量越多,RF方差的第二项会不断减小,但是第一项不变。也就是说,第一项就是RF模型偏差的下极限了。
【总结】
-
增加决策树的数量B,偏差不变;方差减小; -
增加决策树深度,偏差减小; 减小, 增加; -
增加bagging采样比例,偏差减小; 增加, 增加;
【bagging vs boost】 之前的文章也提到过了boost算法。
GBDT中,在某种情况下,是不断训练之前模型的残差,来达到降低bias的效果。虽然也是集成模型,但是可以想到,每一个GBDT中的树,所学习的数据的分布都是不同的,这意味着在GBDT模型的方差会随着决策树的数量增多,不断地增加。
-
bagging的目的:降低方差; -
boost的目的:降低偏差
【机器学习炼丹术】的文章清单
<<小白学图像>>
小白学目标检测 | RCNN, SPPNet, Fast, Faster
小白学图像 | BatchNormalization详解与比较
<<小白学算法>>
<<小白学机器学习>>
SVM三合一 | SVM优化推导 + 拉格朗日算子讲解(KKT条件) + hingeLoss
评价指标 | 详解F1-score与多分类MacroF1&MicroF1
<<小白学推荐>>
<<小白面经>>
其实上面所有专题中的内容都有可能出在面试中
<<小白学杂七杂八>>
公众号回复【入群】,加入AI爱好者大学生交流群。你缺少的可能只是一起前行的同伴~
也可以添加作者好友,进行交流学习经验、求职经验、竞赛经验、如何一顿饭吃两顿的量的经验、找女朋友经验等。
本文分享自微信公众号 - 机器学习炼丹术(liandanshu)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【框架】122:spring框架之注解
今天是刘小爱自学Java的第122天。 感谢你的观看,谢谢你。 学习内容安排如下: Spring注解的使用。 JavaWeb项目的搭建。 Spring的Web集成。 本来还计划学Spring的junit测试集成的,结果又没时间了。 一、Spring的注解 IoC容器是Spring的特色之一,可以使用它管理很多Bean,前几天我们都是将这些Bean配置在applicationContext.xml文件中的。 而注解的作用在于:用了注解之后,就不需要在xml文件中配置这些了 。 1开启注解 ①开启spring的注解 context:annotation-config 让注解有效了,能够识别注解。 ②配置注解扫描 context:component-scan 用来专门扫描含有@Component注解的类,自动将其作为bean。 base-package 要扫描包的路径,包含子包,com.liuxiaoai表示该包下的所有子包和类定义注解都有效. 注意:注解扫描配置的时候,会自动开启注解功能,也就是说有了②的话,①就不需要了。 如果是注解+XML组合使用,可以只开启①。 2注解的使用 ①@Co...
- 下一篇
知识卡片 循环神经网络 RNN
前言:本文简要介绍了循环神经网络RNN以及其变体长短时记忆LSTM和双向循环网络。 循环神经网络 RNN-RecurrentNeural Network 序列数据 RNN建模的适合于序列数据,例如根据股票价格随时间的走势预测未来;视频中的每一帧属于帧序列,可以预测下一帧的内容,进行动作补偿。 自然语言处理中,如大话西游的台词,这里的括号填什么呢?不可能填写我没有去北京,上海,因为需要上下文的词序列来进行预判,输入法打字也是同样的原理;此外,在机器翻译中,将源语言和目标语言中,也存在着上下文衔接的词序列,因而RNN也可以被用在机器翻译中。 什么是循环神经网络? 传统的神经网络模型,层与层之间是全连接,但是隐藏层内的节点没有连接。序列信息中,节点存在被前一刻记忆的影响,隐藏层中的节点接收上一个节点的信息。RNN被称为循环神经网络是其对一组序列的输入进行循环,重复同样的操作。 RNN序列处理 RNN处理序列的类型根据输入和输出的数量,有四种类型。绿色是输入,蓝色是输出,灰色是隐藏层,可捕捉序列前后的信息;并不是每一步都需要输入或者输出,但是隐藏层是不可少的。 同步序列中,Many to ma...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果