Bagging之随机森林
随机森林(Random Forest)是一种Bagging(Bootstrap Aggregating)集成算法,在样本随机(样本扰动)的基础上,进一步运用特征随机(属性扰动)的机制,得到比一般的Bagging集成更好的效果。
要理解随机森林,需要理解以下几点:
1、什么是自助采样(Bootstrap Sampling)?
2、什么是Bagging集成?
3、随机森林的基学习器是什么
4、随机森林的“随机”体现在哪里?
5、随机森林如何防止过拟合?
一、自助采样
自助采样是用自助法进行模型评估时用到的采样方法。我们知道,在模型初步训练完成后,需要用测试集对学习器的泛化误差进行评估,这就涉及到如何产生测试样本的问题。比如有一个包含m个样本的数据集D={(x1, y1),(x2, y2),...,(xm, ym)},用什么方法对D进行适当地处理,从中产生训练集D'和测试集D\D'呢?需要注意的是,产生的测试集要尽可能和训练集互斥。
常见的产生测试集的方法有留出法(hold out)、交叉验证法(cross validation)和自助法(bootstrapping),而自助采样(bootstrap sampling)是自助法中的采样方法。留出法和交叉验证法的问题在于保留了一部分样本用于测试,因此训练集比样本集小,从而会导致一定的估计偏差。而采用自助法,训练集和样本集的样本量是一样的,就可以减少训练规模不同造成的影响。
那自助采样具体是怎样进行的呢?自助采样是一种有放回的抽样,如果给定一个包含m个样本的数据集D,那么训练集D'是这样产生的:每次随机地从样本集D中取出一个样本,放入到训练集D'中,然后把这个样本放回原来的样本集中,继续进行随机抽取;这样有放回地抽样m次,就得到了包含m个样本的训练集D',于是训练集和样本集的大小就一样了。
显然训练集D'中有部分样本是重复的,而D中有一部分样本却不在训练集中。经过估计,样本在m次采样中始终不被抽取到的概率大概是36.8%,也就是说通过自助采样,初始样本集D中大约有36.8%的样本不在训练集D'中。把不在训练集中出现的样本记作:D\D',作为测试集。于是,自助采样中的测试集就这样产生了。而用这约占数据总量36.8%、未在训练集中出现的样本集作为测试集,用于评估模型泛化误差的做法,叫做“包外估计”(out of bag estimate)。
以上是一次自助采样的结果,也就是产生了一个包含m个样本的训练集,以及包含大约占样本总量36.8%且未在训练集中出现的样本的测试集。
在集成学习的Bagging模型中,如果打算训练K个学习器,那么以上的采样过程要重复K次,也就是从初始样本集中产生K个训练集,再用这K个训练集来训练出K个学习器。
到此就理解了,自助采样是一种有放回的随机采样,是Bagging集成中的采样方法,能够产生一个和原始样本集同样大小的训练集,以及一个和训练集互斥且样本量约占总样本36.8%的测试集。
二、Bagging模型
Bagging(Bootstrap Aggregating)是并行式集成学习方法中最著名的代表,它是基于自助采样法进行模型训练和模型评估的方法。Bagging的基本思想可以理解为,在分类问题中,将若干个弱分类器的分类结果进行投票选择,从而组成一个强分类器。它的基本流程是:通过T次自助采样,采样出T个与原始样本集规模一样的训练集,然后基于T个训练集学习到T个基学习器,再将这些基学习器进行结合,并用包外估计进行模型评估。所以可以从自助采样、学习器结合和包外估计这三个步骤来理解Bagging。
1、自助采样
通过一次自助采样,对于包含m个样本的原始数据集,我们可以得到包含m个样本的训练集,训练集与原始数据集大小一致。这样做有什么好处呢?
在集成学习中,如果希望个体学习器能够形成泛化性能较强的集成,那么一方面要求每个个体学习器自身的效果比较好,另一方面要求个体学习器之间尽可能具有较大的差异。而通过自助采样,一方面训练集的样本规模和原始数据集的大小一致,个体学习器能够进行比较充分的学习,性能比较好。另一方面多次自助采样后产生的多个训练集是不同的(尽管也有重叠的样本),因此从每个训练集中学习到的个体学习器之间有比较大的差异,我们可以把这种机制叫做样本扰动。基于这两点,Bagging集成的泛化性能是比较强的。
2、学习器结合
对学习好的T个基学习器进行结合,其实就是对预测输出进行结合,在分类任务中,Bagging使用简单投票法,在回归任务中使用简单平均法。如果在分类预测时出现两个类获得的票数相同,那么可以随机地二选一,或者进一步考察基学习器投票的置信度来确定。
3、包外估计
通过自助采样得到的训练集,对其去重后得到的样本量约为原始数据集的63.2%,那么剩下约36.8%的样本正好可以用来作为验证集,评估模型的泛化误差,这种评估方法就叫做包外估计。
具体怎么得到Bagging的泛化误差的包外估计呢?对于某一个样本(xi, yi),它大约会被63.2%的基学习器进行训练,而大约36.8%的基学习器未使用它进行学习。于是就用这36.8%的基学习器对这个样本进行预测,并把预测结果结合起来,与真实的标记yi进行对比,如果预测错误,就把对比结果记为1,预测正确,则记为0。对原始样本集D中的所有样本(m个)都进行这种操作,并把对比结果累加起来(误分类样本个数),再除以样本总数,就得到了泛化误差的包外估计。
好,理解以上这三点,差不多也就理解了Bagging的思想。再补充以下几点:
一是由于Bagging属于并行集成,所以训练一个Bagging集成与直接使用基学习算法训练一个基学习器的复杂度同阶,这表明Bagging是一个非常高效的集成学习算法。
二是与标准的AdaBoost只适用于二分类任务不同,Bagging可以不经调整就用于多分类和回归任务。
三是从偏差-方差分解的角度来看,与GBDT关注于降低偏差不同,Bagging主要关注降低方差,因此在不剪枝决策树、神经网络等容易受到样本扰动的学习器上效果更明显。
理解了这些,接下来理解随机森林就水到渠成了。
三、随机森林
随机森林(Random Forest,简称RF),是以决策树为基学习器的Bagging集成算法,是Bagging集成算法中性能最强的。要理解随机森林,就要从它的名称入手,拆成“随机”和“森林”两个词,分别来理解。
首先森林两个字是非常好理解的,随机森林的基学习器是决策树,成百上千棵决策树就构成了一个森林,这是一种形象的说法。学习到多棵决策树之后,再按照上面所写的Bagging中基学习器的结合方法,就可以得到分类或回归的最终预测结果。
再来理解随机二字。随机森林中运用了两个“随机”,一是样本随机,也就是一般的Bagging集成中通过自助采样所得到的效果,也叫做样本扰动,这体现了随机森林继承性的一面。二是特征随机,也叫属性扰动,体现了随机森林创新的一面。假设训练数据集中的样本有d个属性(特征),构成一个属性集合,那么随机森林在构建一棵决策树的过程中,在每一个结点上选择属性进行分裂时,都先从属性集合中随机选择一个包含k个属性的属性子集(k<d),再从这个子集中选择一个最优属性进行分裂。回想一下传统的决策树构建过程,在每一个结点上都是从完整的属性集合(包含d个属性)中,选择最佳的属性进行分裂。一般情况下,推荐k的值取。
所以随机森林中每棵树生成的规则是:
1、对于包含m个样本的原始数据集,通过自助采样得到同样包含m个样本的训练集;
2、每个样本有d个特征,那么选择一个小于d的整数k,随机地从d个特征中选择k个特征,然后决策树在每个结点上进行分裂时,从k个特征中选择最优的;
3、每棵树都生长到最大深度,不进行剪枝。
以上就是随机森林的思想和操作流程,几乎没有公式(如果已经学习了决策树),非常简单是不是,简直不敢相信!
随机森林只是对Bagging做了一个小改动,与一般Bagging集成中基学习器的“多样性”仅来自于样本扰动不同,随机森林再加入了属性扰动的机制。可别小看了这一个小改动,它使得基学习器之间的差异度进一步增加,从而进一步提高了集成的泛化性能,并且由于随机森林在构建决策树时只考察一个属性子集,与一般Bagging集成考察全部属性相比,训练效率高得多。
也正因为属性扰动机制非常重要,所以选择多少个属性(k的值)构成属性子集,就成了一个至关重要的问题,这也是随机森林中唯一的参数。
四、随机森林总结
随机森林中的决策树是不需要进行剪枝的,却一般不会过拟合,原因就在于两个随机:样本随机和特征随机,使得生成的各决策树之间存在较大的差异性,哪怕单独的一棵树是过拟合的,集成之后也可以消除这种影响。
随机森林的优点非常明显:
1、能够有效地运行在大规模数据集上;
2、能够处理具有高维特征的输入样本,而不需要降维;
3、抗噪能力强,能够很好地处理缺失值问题;
4、能够评估各个特征在分类问题上的重要性;
5、随机森林抗过拟合的能力比较强,生成的决策树不需要进行剪枝;
6、在决策树生成的过程中,就能够通过包外估计,对泛化误差建立一个无偏估计。
参考资料:
1、周志华:《机器学习》
2、https://www.cnblogs.com/maybe2030/p/4585705.html
Bagging之随机森林的更多相关文章
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- 机器学习 —— 决策树及其集成算法(Bagging、随机森林、Boosting)
本文为senlie原创,转载请保留此地址:http://www.cnblogs.com/senlie/ 决策树--------------------------------------------- ...
- 机器学习总结(二)bagging与随机森林
一:Bagging与随机森林 与Boosting族算法不同的是,Bagging和随机森林的个体学习器之间不存在强的依赖关系,可同时生成并行化的方法. Bagging算法 bagging的算法过程如下: ...
- 机器学习回顾篇(12):集成学习之Bagging与随机森林
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- Bagging与随机森林(RF)算法原理总结
Bagging与随机森林算法原理总结 在集成学习原理小结中,我们学习到了两个流派,一个是Boosting,它的特点是各个弱学习器之间存在依赖和关系,另一个是Bagging,它的特点是各个弱学习器之间没 ...
- 决策树算法(Bagging与随机森林)
Bagging算法: 将训练数据集进行N次Bootstrap采样得到N个训练数据子集,对每个子集使用相同的算法分别建立决策树,最终的分类(或回归)结果是N个决策树的结果的多数投票(或平均). 其中,B ...
- bootstrap && bagging && 决策树 && 随机森林
看了一篇介绍这几个概念的文章,整理一点点笔记在这里,原文链接: https://machinelearningmastery.com/bagging-and-random-forest-ensembl ...
- 机器学习相关知识整理系列之二:Bagging及随机森林
1. Bagging的策略 从样本集中重采样(有放回)选出\(n\)个样本,定义子样本集为\(D\): 基于子样本集\(D\),所有属性上建立分类器,(ID3,C4.5,CART,SVM等): 重复以 ...
- 04-10 Bagging和随机森林
目录 Bagging算法和随机森林 一.Bagging算法和随机森林学习目标 二.Bagging算法原理回顾 三.Bagging算法流程 3.1 输入 3.2 输出 3.3 流程 四.随机森林详解 4 ...
随机推荐
- DDGScreenShot —图片加各种滤镜高逼格操作
写在前面 图片加各种滤镜操作,当然苹果给开发者提供了相关的api和封装, 大部分开发者感觉这是这是晦涩难懂的,接下来就让我们来了解一下, 其实也没有那么深不可测. 代码如下(每一步已经解释的很详细) ...
- 微信小程序UI组件、开发框架、实用库...
UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...
- kaggle入门项目:Titanic存亡预测(四)模型拟合
原kaggle比赛地址:https://www.kaggle.com/c/titanic 原kernel地址:A Data Science Framework: To Achieve 99% Accu ...
- iframe 背景透明设置--兼容IE
iframe标签添加: allowTransparency="true"属性. 子文件body背景设置透明: background-color: transparent;.
- AE的空间分析(转载)
1.1 ITopologicalOperator接口 1.1.1 ITopologicalOperator接口简介ITopologicalOperator接口用来通过对已存在的几何对象做空间拓扑运算以 ...
- mac下安装windows系统
前言:我装win系统的原因很简单,就是某天突然想玩qq宠物了(不要嘲笑,自行尴尬一波)... 下面进入正题: 1.我的当前系统版本: 其实App Store 上新版本的os系统也已经出来很长一段时间了 ...
- css 实现文字自动换行切同行元素高度自适应
1.实现div行内布局所有行跟随最大高度自适应 html代码样例: <div class="row-single"> <div class="colsp ...
- Python_字符串之删除空白字符或某字符或字符串
''' strip().rstrip().lstrip()分别用来删除两端.右端.左端.连续的空白字符或字符集 ''' s='abc ' s2=s.strip() #删除空白字符 print(s2) ...
- QT5:C++实现基于multimedia的音乐播放器(一)
上一篇里简略的描述了一下播放器的实现,这一篇开始具体描述一下过程. 环境配置:Qt Creator 打开Qt Creator,创建一个new project,项目名称随你喜欢(我的是MusicPlay ...
- [ 搭建Redis本地服务器实践系列一 ] :图解CentOS7安装Redis
上一章 [ 搭建Redis本地服务器实践系列 ] :序言 作为开场白介绍了下为什么要写这个系列,从这个章节我们就开始真正的进入正题,开始搭建我们本地的Redis服务器.那么关于Redis的基本概念,什 ...