集成学习随机森林

news2025/1/24 2:21:43

集成学习

集成学习分为三类算法:

装袋法(Bagging),提升法(Boosting)和融合stacking。

在这里插入图片描述

Bagging:核心思想是构建多个相互独立的评估器,然后对其预测进行平均或多数表决原则来决定集成评估器的结果。

  • 装袋法的代表模型就是随机森林。

Boosting:提升法中,基评估器是相关的,是按顺序一一构建的。
其核心思想是结合弱评估器的力量一次次对难以评估的样本进行预测,从而构成一个强评估器。

  • 提升法的代表模型有Adaboost和梯度提升树。

在这里插入图片描述

在这里插入图片描述

决策树

  • 用树模型提炼决策规则

决策树的核心问题有两个:

  1. 一个是如何找出正确的特征来进行提问,即如何分枝
  2. 二是树生长到什么时候应该停下

对于第一个问题,我们定义了用来衡量分枝质量的指标不纯度,分类树的不纯度用基尼系数或信息熵来衡量,回归树的不纯度用MSE均方误差来衡量。每次分枝时,决策树对所有的特征进行不纯度计算,选取不纯度最低的特征进行分枝,分枝后,又再对被分枝的不同取值下,计算每个特征的不纯度,继续选取不纯度最低的特征进行分枝

在这里插入图片描述

  • 每分枝一层,树整体的不纯度会越来越小,决策树追求的是最小不纯度。因此,决策树会一致分枝,直到没有更多的特征可用,或整体的不纯度指标已经最优,决策树就会停止生长。

随机森林

class sklearn.ensemble.RandomForestClassifier (n_estimators=’10’, criterion=’gini’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)

在这里插入图片描述

nestimators

基学习器数量

这个参数对随机森林模型的精确性影响是单调的,n_estimators越
大,模型的效果往往越好。但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。

random_state

随机森林的本质是一种装袋集成算法(bagging),装袋集成算法是对基评估器的预测结果进行平均或用多数表决原则来决定集成评估器的结果。

随机森林的随机性由两部分构成,样本随机性,属性随机性,由random_state控制

  • 当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的。
  • 但这种做法的局限性是很强的,当我们需要成千上万棵树的时候,数据不一定能够提供成千上万的特征来让我们构筑尽量多尽量不同的树。

因此,除了random_state。我们还需要其他的随机性。比如,随机采样

  • 注意,又放回随机采样有一个缺陷,一些样本会反复出现,一些样本则可能永远没有采样到,采样率大约为0.632,即有0.37的样本会被浪费掉。
  • 但是,袋外的数据正好可以拿来测试模型

也就是说,在使用随机森林时,我们可以不划分测试集和训练集,只需要用袋外数据来测试我们的模型即可

但是,当n和n_estimators都不够大的时候,很可能就没有数据掉
落在袋外,自然也就无法使用oob数据来测试模型了

如果希望用袋外数据来测试,则需要在实例化时就将oob_score这个参数调整为True,训练完毕之后,我们可以用随机森林的另一个重要属性:oob_score_来查看我们的在袋外数据上测试的结果

在这里插入图片描述

  1. 常用接口:apply, fit, predict,score,predict_proba
  2. Bonus条件:基学习器的准确率应该超过随机分类器,对二分类来说,如果基学习器的准确率不能超过0.5,就应该丢弃改基学习器

随机森林面试题

1. 简单介绍随机森林

一种基于树模型的Bagging的优化版本,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的特点。

多次随机取样,多次随机取属性,选取最优分割点,构建多个(CART)分类器,投票表决

算法流程:

  • 输入为样本集 D = { ( x , y 1 ) , ( x 2 , y 2 ) … ( x m , y m ) } D=\{(x,y_1),(x_2,y_2) \dots (x_m,y_m)\} D={(xy1)(x2y2)(xmym)},弱分类器迭代次数 T T T

  • 输出为最终的强分类器 f ( x ) f(x) f(x)

  • 对于 t = 1 , 2 … T t=1,2 \dots T t=12T

    • 对训练集进行第 t t t次随机采样,共采集 m m m次,得到包含 m m m个样本的采样集Dt
    • 用采样集 D t D_t Dt训练第 t t t个决策树模型 G t ( x ) G_t(x) Gt(x),在训练决策树模型的节点的时候,在节点上所有的样本特征中选择一部分样本特征,在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分
  • 如果是分类算法预测,则 T T T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法, T T T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

2. 随机森林的随机性体现在哪里?

多次有放回的随机取样,多次随机选择特征

3. 随机森林为什么不容易过拟合?

  • 随机森林中的每一颗树都是过拟合的,拟合到非常小的细节上

  • 随机森林通过引入随机性,使每一颗树拟合的细节不同

  • 所有树组合在一起,过拟合的部分就会自动被消除掉。

因此随机森林出现过拟合的概率相对低。

4. 为什么不用全样本训练?

全样本训练忽视了局部样本的规律(各个决策树趋于相同),对于模型的泛化能力是有害的,使随机森林算法在样本层面失去了随机性。

5. 为什么要随机特征?

随机特征保证基分类器的多样性(差异性),最终集成的泛化性能可通过个体学习器之间的差异度而进一步提升,从而提高泛化能力和抗噪能力。

6. RF与 GBDT 的区别?

  • 随机森林将多棵决策树的结果进行投票后得到最终的结果,对不同的树的训练结果也没有做进一步的优化提升,将其称为Bagging算法。
  • GBDT用到的是Boosting算法,在迭代的每一步构建弱学习器弥补原有模型的不足。GBDT中的Gradient Boost就是通过每次迭代的时候构建一个沿梯度下降最快的方向的学习器。

7. RF为什么比Bagging效率高?

因为在个体决策树的构建过程中,Bagging使用的是“确定型”决策树,bagging在选择划分属性时要对每棵树是对所有特征进行考察;而随机森林仅仅考虑一个特征子集。

8. 你已经建了一个有10000棵树的随机森林模型。在得到0.00的训练误差后,你非常高兴。但是,验证错误是34.23。到底是怎么回事?你还没有训练好你的模型吗?

  • 模型过拟合十分严重
  • 新的测试集与训练集的数据分布不一致

9. 如何使用随机森林对特征重要性进行评估?

袋外数据(OOB): 大约有1/3的训练实例没有参与第k棵树的生成,它们称为第 k k k棵树的袋外数据样本。

在随机森林中某个特征 X X X的重要性的计算方法如下:

  • 对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)来计算它的袋外数据误差,记为 e r r O O B 1 err_{OOB1} errOOB1
  • 随机地对袋外数据OOB所有样本的特征 X X X加入噪声干扰(就可以随机的改变样本在特征X处的值),再次计算它的袋外数据误差,记为 e r r O O B 2 err_{OOB2} errOOB2
  • 假设随机森林中有 N N N棵树,那么对于特征 X X X的重要性为 ( e r r O O B 2 − e r r O O B 1 / N ) (err_{OOB2}-err_{OOB1}/N) (errOOB2errOOB1/N),之所以可以用这个表达式来作为相应特征的重要性的度量值是因为:若给某个特征随机加入噪声之后,袋外的准确率大幅度降低,则说明这个特征对于样本的分类结果影响很大,也就是说它的重要程度比较高。

10. 随机森林算法训练时主要需要调整哪些参数?

  • **n_estimators:**随机森林建立子树的数量。
    较多的子树一般可以让模型有更好的性能,但同时让你的代码变慢。需要选择最佳的随机森林子树数量

  • **max_features:**随机森林允许单个决策树使用特征的最大数量。
    增加max_features一般能提高模型的性能,因为在每个节点上,我们有更多的选择可以考虑。然而,这未必完全是对的,因为它降低了单个树的多样性,而这正是随机森林独特的优点。但是,可以肯定,你通过增加max_features会降低算法的速度。因此,你需要适当的平衡和选择最佳max_features。

  • max_depth: 决策树最大深度

    默认决策树在建立子树的时候不会限制子树的深度

  • **min_samples_split:**内部节点再划分所需最小样本数
    内部节点再划分所需最小样本数,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。

  • min_samples_leaf: 叶子节点最少样本

    这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。

  • max_leaf_nodes: 最大叶子节点数

    通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。

  • min_impurity_split: 节点划分最小不纯度
    这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点。一般不推荐改动默认值1e-7。

11. 随机森林的优缺点

  • 优点

    • 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。
    • 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。
    • 在训练后,可以给出各个特征对于输出的重要性
    • 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
    • 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
    • 对部分特征缺失不敏感,如果有很大一部分的特征遗失,仍可以维持准确度。
  • 缺点

    • 在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
    • 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

12. 简述一下Adaboost原理

Adaboost算法利用同一种基分类器(弱分类器),基于分类器的错误率分配不同的权重参数,最后累加加权的预测结果作为输出。

  • Adaboost算法流程:
    • 样本赋予权重,得到第一个分类器。
    • 计算该分类器的错误率,根据错误率赋予分类器权重(注意这里是分类器的权重)。
    • 增加分错样本的权重,减小分对样本的权重(注意这里是样本的权重)。
    • 然后再用新的样本权重训练数据,得到新的分类器。
    • 多次迭代,直到分类器错误率为0或者整体弱分类器错误为0,或者到达迭代次数。
    • 将所有弱分类器的结果加权求和,得到一个较为准确的分类结果。错误率低的分类器获得更高的决定系数,从而在对数据进行预测时起关键作用。

13. AdaBoost的优点和缺点

  • 优点
    • Adaboost提供一种框架,在框架内可以使用各种方法构建子分类器。可以使用简单的弱分类器,不用对特征进行筛选,也不存在过拟合的现象。
    • Adaboost算法不需要弱分类器的先验知识,最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。
    • Adaboost算法不需要预先知道弱分类器的错误率上限,且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。
    • Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。
    • Adaboost对同一个训练样本集训练不同的弱分类器,按照一定的方法把这些弱分类器集合起来,构造一个分类能力很强的强分类器,即“三个臭皮匠赛过一个诸葛亮"”。
  • 缺点
    • 在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。
    • Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。

14. Adaboost对噪声敏感吗?

在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。

15. Adaboost和随机森林算法的异同点

随机森林和Adaboost算法都可以用来分类,它们都是优秀的基于决策树的组合算法。

  • 相同之处
    • 二者都是Bootstrap自助法选取样本。
    • 二者都是要训练很多棵决策树。
  • 不同之处
    • Adaboost是基于Boosting的算法,随机森林是基于Bagging的算法。
    • Adaboost后面树的训练,其在变量抽样选取的时候,对于上一棵树分错的样本,抽中的概率会加大。
    • 随机森林在训练每一棵树的时候,随机挑选了部分特征作为拆分特征,而不是所有的特征都去作为拆分特征。
    • 在预测新数据时,Adaboost中所有的树加权投票来决定因变量的预测值,每棵树的权重和错误率有关;随机森林按照所有树中少数服从多数树的分类值来决定因变量的预测值(或者求取树预测的平均值)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

极客星球|数据分析引擎黑马ClickHouse技术研究与实践

ClickHouse 在近几年是大数据分析引擎界的一匹黑马,从默默无闻到一路起飞,在 DB engine Rank 上进入前50名,成为全球数据引擎界耀眼的一颗明星。在全球范围内,ClickHouse 单表查询比其他引擎要快数倍以上,在过去的几年…

Vue+Echart实现利用率表盘效果【组件已封装,可直接使用】

效果演示 当利用超过70%(可以自行设置),表盘变红 组件 里面对应两个图片资源,panelBackground_red.png 和 panelBackground_green.png,请前往百度网盘进行下载。如果喜欢其他颜色,可以使用.psd来修改导出…

redis从头开始【一】--面试的小伙伴必看

一 什么是NoSQL? Nosql not only sql(不仅仅是SQL) 关系型数据库:列行,同一个表下数据的结构是一样的。 非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展。 NoSQL泛指非关系型…

10.Yarn概述

如果说HDFS是存储,则Yarn就是cpu和内存,mapreduce就是程序。 1.基础架构 复习: 1.Container就是一个容器,其中封装了需要使用的内存与cpu 2.每当提交一个job,就会产生一个appMaster(总指挥),app Master负责其他container里面的…

【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的Redis延时队列的功能组件

手把手教你如何开发一个属于自己的延时队列的功能组件 前提介绍解决痛点延时队列组件的架构延时队列组件的初始化流程延时队列组件的整体核心类架构延时队列组件的整体核心类功能 延时队列的开发组件延迟队列的机制配置初始化类源码 - DelayedQueueConfigurationRedission客户端…

排序算法 - 冒泡排序

文章目录 冒泡排序介绍冒泡排序实现复杂度和稳定性冒泡排序时间复杂度冒泡排序稳定性 代码实现核心&注意结尾 每日一道算法提高脑力,今天是第一天,来个最简单的算法–冒泡排序。 冒泡排序介绍 它是一种较简单的排序算法。它会遍历若干次要排序的数列…

jQuery知识点一

一、 jQuery 介绍 1.jQuery的概念: jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。 j 就是 JavaScript; Query 查询; 意思…

学习 Python 之 Pygame 开发魂斗罗(十五)

学习 Python 之 Pygame 开发魂斗罗(十五) 给魂斗罗游戏加入Boss1. 分析boss2. 创建boss类3. 在主类中加载Boss4. 修改子弹类逻辑,让boss可以开火5. 修改主类逻辑,让boss正常开火 给魂斗罗游戏加入Boss 在上次的博客学习 Python 之…

如何在不重装系统的情况下换固态硬盘?

随着固态硬盘的价格不断下降,越来越多的计算机用户希望用固态硬盘替换老旧的机械硬盘以获得更好的性能。 但是常规方法就避免不了重装系统,用户配置文件、系统设置、个人文件和已安装的程序又需要重新配置一遍。此外,还可能重新遇到很多问题…

城市“一网统管”平台—智慧平安小区的场景应用

随着城市建设进程的不断加快,关于城市的智能化治理需求也随之增多。在国家发布的“十四五”规划中,已经明确指出,推进新型城市建设,推行城市运行一网统管。作为推动城市治理体系和治理能力现代化的重要探索,“一网统管…

Linux/Unix常见IO模型

阻塞(Blocking I/O)、非阻塞(Non-Blocking I/O)、IO多路复用(I/O Multiplexing)、 信号驱动 I/O(Signal Driven I/O)(不常用)和异步(Asynchronous…

智能家居“落地者”:三翼鸟用场景方案持续链接大众消费

互联网分析沙龙(techxue)原创 作者 | 锡海 编辑 | 七喜 从上海车展再到AWE2023展会,只要有大型活动的地方,都能看到人潮汹涌的景象,久违的烟火气又回来了。数据显示,社会消费已出现较为强劲反弹&#xff0…

长知识了,mongo的时间居然这个样子

1、前言 最近一直在使用mongo数据库,前面文章也介绍了一直在做数据过期的事情, mongo中的数据过期时间之前在程序中增加了一个字段 【Springboot系列】项目启动时怎么给mongo表加自动过期索引 之前看到时间字段没有时区的信息,没有关注&a…

微服务注册中心选型:Zookeeper、Eureka、Nacos、Consul和Etcd

注册中心基本概念 什么是注册中心? 注册中心主要有三种角色: 服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。 服务消费者&#xff08…

怎么知道网站服务器有没有被攻击?

​  一个网站服务器遭到攻击可能会给企业带来巨大的金融损失,因此,企业需要及时发现服务器是否被攻击。但是,企业如何知道自己的服务器是否被攻击呢?下面,我们来看一些服务器被攻击的警告信号。 1.网络延迟增加 在网络攻击中&a…

记一次运气非常好的渗透到服务器的经历

平平无奇的客服平台 这个客服平台是有RCE的,如果上传到的不是oss服务器,存储在本地服务器的话 在返回端口的url是存在st2 root权限,由于是客服后台服务器,没有啥有用价值的信息 直接替换私钥连服务器 继续翻找有用的信息 配置文件…

Django性能监视工具django-silk的使用

django-silk 是一个轻量级的 Django 应用性能监视工具,可帮助您了解 Django 应用的性能瓶颈、数据库查询等问题。它可以使用在django前后端分离的项目中,直接通过请求后台API接口即可对性能进行监视。以下是 django-silk 的使用步骤: 1.安装…

资本认可 | 开源网安成为中国未来独角兽企业,引领软件安全不断发展

4月11日,第七届万物生长大会中国未来独角兽大会盛大召开,本次大会中国投资发展促进会创投专委会联合微链共同发布了《2023中国未来独角兽TOP100榜单》,开源网安成功入选榜单。 《2023中国未来独角兽TOP100榜单》瞄准近两年融资较为活跃或融资…

快速简单制作macOS Ventura系统ISO格式镜像

ISO格式的镜像其实没有什么制作难度,下面苹果系统之家教大家怎么快速简单制作ISO格式的镜像,教程使用到的都是Mac官方的命令。制作好的ISO格式镜像可以用于虚拟机安装或者制作到U盘或者直接在Mac里面打开安装升级。 准备系统镜像 首先下载好macOS 镜像…

上海亚商投顾:沪指延续反弹涨0.67% AI概念股掀跌停潮

指数今日低开高走,沪指午后一度涨超1%,以保险为首的大金融板块拉升,中国平安在一季报驱动下,迎来久违涨停,成交超120亿元。医药股全天强势,何氏眼科、金石亚药、普蕊斯、天宇股份20CM涨停,第一医…