机器学习总结(二)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与随机森林笔记
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能.这对“弱学习器”尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器.虽然从理论上来 ...
随机推荐
- Excel文件导入导出(基于Nodejs、exceljs)
Excel导入.导出是大多数项目的管理后台必备功能.几年来使用过多个该功能的实现包,最近一次开发该功能,突然发现一个人气极高(3000+)的包,这里记录一下使用方法. 大凡厉害的技术的文档咋一看都想字 ...
- CentOS 7 - 最小化安装后,解决无法使用yum命令问题!!
刚刚最小化方式安装了CentOS 7 后,说实话,真不习惯也不喜欢纯shell方式工作,使用root账号登入后,马上想安装GNOME,但是发现yum不能正常工作!!! 一,输入安装X Window命令 ...
- mysql 字符集
mysql -u root -p 输入密码进入mysql show variables like 'character%'; --显示字符集,像这样 \q退出mysql, 更改mysql配置文件 vi ...
- linux服务器情况
查看Linux 进程命令 ps -aux 或者ps -ef linux 进程很多 如果需要查找某一个进程可以使用 管道和grep命令 Linux下常用命令 grep 匹配字符 ps 查询Li ...
- Shell脚本创建的文件夹末尾有两个问号怎么回事?
原因:Linux系统的换行符是"\r\n",Windows上的换行符是"\n",Windows上编写shell脚本上传Linux,Linux无法正确识别&quo ...
- 简介一下 i++和++i&&i=i+i,i+=1;的区别
首先: int i=2; i++=2; ++i=3; 前者先显示当前的值,而后者则是先自增在显示值: second i=i+1和i+=1; 输出结果虽然一样,但是 1.byte i=2; i+=2; ...
- sklearn中报错ValueError: Expected 2D array, got 1D array instead:
from sklearn.linear_model import LinearRegression lr = LinearRegression() print(tr_x.shape,tr_y.shap ...
- WPF中查找指定类型的父控件
/// <summary> /// 查找父控件 /// </summary> /// <typeparam name="T"></type ...
- LearnOpenGL
---------------------------------------------- LearnOpenGL ----------------------------------------- ...
- js数组创建两种方法
一.数组直接量形式创建数组 var arr=[];//空数组 ,,,,,]; ,,,],{x:,y:}]; ; ,x+,x+]; console.log(arr3); //[1,3,3,4] ,,]; ...