首页 > 其他分享 >Bagging与随机森林

Bagging与随机森林

时间:2022-11-02 09:24:38浏览次数:36  
标签:Bagging 训练 随机 森林 数据 决策树

1. 集成学习三大领域

集成学习(Ensemble learning)方法会训练多个弱评估器(base estimators),并将他们的输出结果以某种方式结合起来解决一个问题。

  • 模型融合

    投票法Voting、堆叠法Stacking、混合法Bleding,被融合的模型需要是强分类器

  • 弱分类器集成

    装袋法Bagging、提升法Boosting

  • 混合专家模型(micture of experts)

常出现在深度学习领域。将一个相对复杂的任务拆解成几个相对简单且更小的子任务,然后针对不同的子任务训练个体学习器(专家),然后再结合这些 个体学习器的结果得出最终输出。

2. Bagging方法的基本思想(Bagging是并行式集成学习最典型的框架,其核心在于自助采样。)

原理:

  • 在Bagging集成当中,我们并行建立多个弱评估器(通常是决策树,也可以是其他非线性算法),并综合多个弱评估器的结果进行输出。

  • 当集成算法目标是回归任务时,集成算法的输出结果是弱评估器输出的结果平均值。

  • 当集成算法的目标是分类任务时,集成算法的输出结果是弱评估器输出的结果少数服从多数。

    • 少数、多数:每个类别所对应弱评估器的数量,一个类别对应弱评估器的数量越多就是多数,反之是少数

思想:

给定m个样本的数据集,有放回的随机抽取一个样本放入采样集中,经过m次采样,可以得到和原始数据集一样大小的采样集;

最终可以采样T个包含m个样本的采样集,然后基于每个采样集训练出一个基分类器,最后将这些基分类器进行组合。

例子:假设现在一个Bagging集成算法中有7个弱评估器,对任意一个样本而言,输出的结果如下:

  • bincount会将array由大到小排序,然后对每个数值进行计数,并返回计数结果。bincount函数不能接受负数输入。 -- 经常用于多分类

  • argmax是找到array中的最大值,并安返回最大值索引的函数 -- 少数服从多数原则

通过bincount计数后的类别对应着索引,所以使用argmax即可返回次数最大的索引,即类别:image-20221101141118306

编码数字更小:类别0和1对应的弱分类器数量相同,则输出类别0

 两个集成算法:

  • 随机森林(RandomForest)

  • 极端随机树(ExtraTrees)

二者都是以决策树为弱评估器的有监督算法。

3. 随机森林RandomForest -- 适用于中小型数据集

算法构筑过程:从提供的数据中随机抽样出不同的子集,用于建立多棵不同的决策树,并按照Bagging的规则对单棵决策树的结果进行集成(回归则平均,分类则少数服从多数)。

随机森林是由许多决策树组成的模型。这个模型不是简单地平均所有树(我们可以称之为“森林”)的预测,而是使用了两个关键概念,名字中的随机二字也是由此而来:

  • 在构建树时对训练数据点进行随机抽样

  • 分割节点时考虑特征的随机子集

具体流程:

  1. 假设有M个样本,有放回的随机选择M个样本(每次随机选择一个放回后继续选)

  2. 假设样本有N个特征,在决策时的每个节点需要进行分裂时,随机从这N个特征中选取n个特征,满足n<<N,从这n个特征中选择特征进行结点分裂

  3. 基于抽样的M个样本n个特征按照结点分裂的方式构建决策树

  4. 按照1~3步构建大量决策树组成随机森林,然后将每棵树的结果进行综合(分类可使用投票法,回归可使用均值法)

弱分类器】首先,RF使用了CART决策树作为弱学习器。换句话说,其实我们只是将使用CART决策树作为弱学习器的Bagging方法称为随机森林。

随机性】同时,在生成每棵树的时候,每个树选取的特征都仅仅是随机选出的少数特征,一般默认取特征总数n的开方。而一般的CART树则是会选取全部的特征进行建模。因此,不但特征是随机的,也保证了特征随机性

样本量】相对于一般的Bagging算法,RF会选择采集和训练集样本数M一样个数的样本。

特点】由于随机性,对于降低模型的方差很有作用,故随机森林一般不需要额外做剪枝,即可以取得较好的泛化能力和抗过拟合能力(Low Variance)。当然对于训练集的拟合程度就会差一些,也就是模型的偏倚会大一些(High Bias),仅仅是相对的

在sklearn中实现方法:

 回归森林默认评估指标为$R^2,分类森林的默认评估指标为准确率。

4. 随机森林在巨量数据上的增量学习

增量学习允许算法不断接入新数据来拓展当前模型,即允许巨量数据被分成若干个子集,分别输入模型进行训练。

在增量学习中,原始数据训练的树不会被替代掉,模型会一直记得之前训练过的数据。

 

 warm_start :当设置为True,重新使用之前的结构去拟合样例并且加入更多的估计器(estimators,在这里就是随机树)到组合器中; [True/False]

 

在增量式学习中,已经训练过的结果会被保留。

对于随机森林这样的Bagging模型:之前的数据训练出来的树会被保留,新数据会训练出新的树,新旧树互不影响。

对于逻辑回归、神经网络这样不断迭代以求解权重w的算法来说:新数据训练时w的起点是之前的数据训练完毕之后的w

 

对于随机森林使用增量式学习来说,我们需要手动增加新的树:

 

 如何查看无法打开的CSV文件数据量:

  • 如果是比赛数据,一般可以在比赛页面中找到说明

  • 如果是数据库数据集,则可以在数据库中进行统计

  • 如果无法找到说明,可以使用deque库导入csv文件的最后几行,查看索引

  • 如果没有数据索引只能靠pandas尝试查找出大致的数据范围

5. Bagging与随机森林区别:

Bagging:训练数据是有放回随机采样M个训练数据,结果基于投票机制;弱学习器没有限制,最常用的一般也是决策树和神经网络。

随机森林:训练数据是有放回抽样M个训练数据,特征也是随机抽取n个(共N个),结果基于投票机制。

注意:随机森林的树没有剪枝过程。

由于是随机抽样,所以大约会有1/3的数据未被抽到,称作袋外数据(Out Of Bag, 简称OOB)。

这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。

标签:Bagging,训练,随机,森林,数据,决策树
From: https://www.cnblogs.com/5466a/p/16849893.html

相关文章

  • 随机变量函数-余丙森
    https://www.bilibili.com/video/BV1te4y1S7zY?p=13&vd_source=18c316629aa624cb452f9acf73595c09......
  • 笔记:java如何获取,指定范围的随机数?
    一、需求:如何获取一个指定范围的随机数,进行业务操作? 二、代码示例://传入指定的数值区间publicstaticintgetRandom(intmin,intmax){Randomrandom=newR......
  • jQuery制作随机色弹幕墙
    jQuery功能确实强大,虽然用起来不熟练但是在百度大法的帮助下还是挺好使的,今天便用它实现了一个弹幕墙。上张成果图,页面没用心写,有点辣眼睛界面制作就不啰嗦了,后面会放上......
  • 随机化算法解决圆排列问题 - python解法
    问题描述给定n个大小不等的圆,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n=3,且所给......
  • 闭社创建关注机器人,自动关注跨站用户(关联闭社、抒发森林、comin、mastodon)
    前言mastodon的跨站时间轴的显示机制有点复杂,简而言之可以这么概括“假设我处于A站,那么我发布的所有公开嘟文,都会显示在A站本站时间轴”“如果你没有被任何一个B站用户......
  • js常用方法和一些封装(2) -- 随机数生成
    任何编程语言,随机数都是必不可少的,我在开发过程中,尤其在自己做一些小玩意的时候,就经常使用随机数,后来发现每次使用都懒得写,直接去网上搜一个,拿过来就用了。可是时间一长,发现......
  • 【随机过程】随机过系列之随机过程概述
    我尽力了,不要让我挂科!靠,难学到爆炸!!!1.随机过程的定义随机过程X(t)是一组依赖于实参数t的随机变量,t一般具有时间的含义(当然,也可以选取别的测度)。随机过程{X(t),t∈T}可......
  • 随机点名系统
    1.问题在课堂上,老师想要用Java来随机抽取一位同学的姓名来回答问题。点名要体现随机性和公平性。2.方法importjava.util.Random;publicclassboke{publicstatic......
  • JAVA-Random随机整数
    packagecom.itheima;importjava.util.Random;/*Random的基本使用*/publicclassScanner03{publicstaticvoidmain(String[]args){//Random......
  • 树、森林与二叉树的互相转换
    1.树转为二叉树(1)从根节点往下开始,所有兄弟节点间连接虚线。(2)擦掉除根节点所连最左边的那条线以外的同层所有实线。(3)实线作为lchild所连的线,虚线作为rchild所连的线,全部......