机器学习总结(二)bagging与随机森林
一:Bagging与随机森林
与Boosting族算法不同的是,Bagging和随机森林的个体学习器之间不存在强的依赖关系,可同时生成并行化的方法。
Bagging算法
bagging的算法过程如下:
1:从原始样本集中使用Bootstraping自助采样的方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
2:对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
3:对于分类问题:由k个模型的预测结果投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)
从算法的流程可以看出,Bagging生成的每个基学习器的训练样本都会不同,由此基学习器之间具有一定的差异,但是这种差异不会特别大,因为采集的样本是在原样本上有放回的重复采样,采样子集之间有交叠。k轮随机采样,每轮经过n次随机的有放回的抽样,得到k个含有n个样本的采样集。从而可以在k个采样集上训练出k个基学习器,然后再将这些基学习 器进行结合。在对预测输出进行结合时,对分类任务使用简单的投票法,对回归任务采用简单平均法。
Bagging算法有以下优点:
(1)假定一个基学习器的计算复杂度为O(m),Bagging的复杂度为T(O(m)+O(s)),由于采样过程和投票平均过程 的复杂度O(s)很小,T是一个不大的常数,训练一个Bagging与直接使用基学习算法训练一个学习器的复杂度同阶。
(2)与标准的Adaboost算法只能用于二分类任务 不同,Bagging能不经修改的用于 多分类、回归任务。
(3)由于采样过程中每个基学习器会没有使用约有36.8%的样本,所以可以用来作为验证集,对基学习器的样本进行泛化性能包外估计。若基学习器为决策树,包外样本可用于对决策树进行剪枝,若基学习器为神经网络,可用来辅助 早期停止,以减少过拟合的风险。
(4)从偏差方差分解来看,Bagging主要是关注降低方差(在取样过程添加了随机性),在不剪枝的决策树、神经网络等易受样本扰动的学习器比较有效。决策树是一种贪心的算法,样本中噪音过多时,容易过拟合。而神经网络的拟合能力非常强,所以也是一种对样本中的噪音非常敏感的算法,容易过拟合。
随机森林算法
随机森林RF是是Bagging算法的变体。RF的基学习器为决策树,其在构建决策树基学习器的过程,是在Bagging的基础上,进一步引入了 随机属性 选择。具体来说,一般决策 树 是 在当前结点中所有的属性集合中选择最优属性来划分,而 RF对每个基决策树的结点,从结点中随机选择一个包含k个属性的子集,然后再从这些子集中选择一个最优的属性划分。这个K在sklearn里叫做max_feature,是重要的参数。k控制了随机性的引入程度,即会对最终的算法的泛化能力产生影响。
随机森林的优点:
随机森林与Bagging相比,在其样本扰动的基础上,增加了属性扰动,泛化性能通过个体学习器之间的差异 度的增加而进一步提升。
随机森林算法可以对特征的重要性进行选择,如通过包外估计法和基于不纯度减少的方法(哪个特征对不纯度减少的贡献越大,那么哪个特征就越重要)
包外估计法原理:
假设针对某个特征X,我们利用套袋法建立了一颗决策树T,然后用T对袋外数据TOOB进行分类检测,得到其正确分类的个数XT,然后对袋外数据的特征X进行“随机扰乱”,对特征X的取值赋予随机取的新数值,这时再用T对袋外数据TOOB'进行分类检测,得到正确分类数XT',这时对于T来说,特征X的重要性D=|XT' - XT|,我们对随机森林中共N颗决策树做相同操作,可以得到N个特征X的重要性,取其均值作为X的重要性度量,即D(X) = (D1+D2+......+DN)/N,其中Di = |XT'i - XTi|(i=1,2,3,....,N)。
总结
随机森林是一种优秀的算法。由于随机森林和Bagging的方法在每个基学习器的训练过程相对独立,存在一种加法的性质 ,所以这决定了这算法可以进行并行计算,从而加快运行速度。由于其加入了数据样本扰动和输入属性扰动,所以会具有更好的泛化性能。
机器学习总结(二)bagging与随机森林的更多相关文章
- 机器学习回顾篇(12):集成学习之Bagging与随机森林
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 机器学习 —— 决策树及其集成算法(Bagging、随机森林、Boosting)
本文为senlie原创,转载请保留此地址:http://www.cnblogs.com/senlie/ 决策树--------------------------------------------- ...
- Bagging之随机森林
随机森林(Random Forest)是一种Bagging(Bootstrap Aggregating)集成算法,在样本随机(样本扰动)的基础上,进一步运用特征随机(属性扰动)的机制,得到比一般的Ba ...
- SIGAI机器学习第十九集 随机森林
讲授集成学习的概念,Bootstrap抽样,Bagging算法,随机森林的原理,训练算法,包外误差,计算变量的重要性,实际应用 大纲: 集成学习简介 Boostrap抽样 Bagging算法 随机森林 ...
- R语言︱机器学习模型评估方案(以随机森林算法为例)
笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- Bagging与随机森林(RF)算法原理总结
Bagging与随机森林算法原理总结 在集成学习原理小结中,我们学习到了两个流派,一个是Boosting,它的特点是各个弱学习器之间存在依赖和关系,另一个是Bagging,它的特点是各个弱学习器之间没 ...
- 机器学习相关知识整理系列之二:Bagging及随机森林
1. Bagging的策略 从样本集中重采样(有放回)选出\(n\)个样本,定义子样本集为\(D\): 基于子样本集\(D\),所有属性上建立分类器,(ID3,C4.5,CART,SVM等): 重复以 ...
- 机器学习之Bagging与随机森林笔记
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能.这对“弱学习器”尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器.虽然从理论上来 ...
随机推荐
- mysql_主从同步
在这里我就不说怎么搭建 Mysql 数据库了!如果有需要可以参照我前面的博文. 此博文主要说配置 Linux 数据库 主从 下面我们开始进入正题. master:192.168.31.200 ...
- xmanager 开启X11转发失败问题解决
安装相关rpm包 yum -y install xorg-x11-xauth xorg-x11-utils xorg-x11-fonts-* yum install dejavu-lgc-sans-f ...
- Django之JWT理解及简单应用
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(S ...
- VUE 安装&创建一个项目
1,安装node.js vue依赖nodejs,所以首先要安装node.js 然后打开cmd,输入命令, node -v.正常出现版本号,说明你已经安装成功了 下载地址:http://nodejs.c ...
- C++类(Class)总结
---恢复内容开始--- 一.C++类的定义 C++中使用关键字 class 来定义类, 其基本形式如下:class 类名{ public: //行为或属性 protected: //行为或 ...
- 设置光标聚焦输入框(EditText)并弹出软键盘(在适配器中设置)
参考代码: public void setFocusEditTextAndShowSoftInput(final EditText editText){ editText.setFocusable(t ...
- JavaScript 弹出窗体
//弹出层 //父页面代码.打开弹窗 function ProDBDisp(link) { var url = _spPageContextInfo.webAbsoluteUrl + link; va ...
- PHP多线程 curl_multi_init 的使用
php中可以通过CURL处理HTTP请求,其中curl_init()是单线程模式,如果需要对事务处理走多线程模式,那么就需要用到curl_multi_init()函数. 本案例用来测试大并发的情况下 ...
- UML作业第二次:类图中类的表示
1.关于类图的学习: 类图显示了系统的静态结构. 类:类图中的主要元素,用矩形表示.矩形的上层表示类名.中层表示属性.下层表示方法. 类之间的关系:关联.依赖.聚集.泛化和实现五种. 2.五种类间关系 ...
- 对象是存入cookie中需要注意
直接把对象存入cookie中的话,会转为字符串的 cookie中保存的都是字符串 所以取出来后还需要进行转换,转换成对象 JSON.parse()进行转换