20240328-2-随机森林面试题RandomForest

随机森林面试题

在这里插入图片描述

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中所有的树加权投票来决定因变量的预测值,每棵树的权重和错误率有关;随机森林按照所有树中少数服从多数树的分类值来决定因变量的预测值(或者求取树预测的平均值)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在Vue3中如何使用H.265视频流媒体播放器EasyPlayer.js?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8&#…

【uniapp踩坑记】——微信小程序转发保存图片

关于微信小程序转发&保存图片 微信小程序图片转发保存简单说明网络图片的转发保存base64流形式图片转发保存 已经好多年没写博客了,最近使用在用uniapp开发一个移动版管理后台,记录下自己踩过的一些坑 吃相别太难看,搞一堆下头僵尸号来点…

【YOLOv9】使用yolov9训练自己的数据集/验证 /推理 /参数分析

完胜V8的SOTA模型Yolov9(论文阅读笔记)内容 点击即可跳转 当今的YOLO系列武林盟主YOLOV9: YOLOv9的优秀表现: 环境: ubuntu20.04,无GPU,使用anaconda3创建的虚拟环境yolov9。 环境安装: conda create -n …

JavaSE图书管理系统

JavaSE图书管理系统 思路一.Main方法二.User包1.User类2.NormaUser类3.AdminUser类三.book包1.BookList类2.Book类四.operation包1.IOPeration接口2.AddOperation类新增图书3.BorrowOperation类借阅图书4.DelOperation类删除图书5.FindOperation类查找图书6.ReturnOperation类归…

Centos7配置IP地址

1、找到网卡名字 使用root用户登陆,输入命令 ifconfig 2、打开配置文件 输入命令,打开配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 3、添加IP地址 3.1修改BOOTPROTO 将“BOOTPROTOdhcp” 改为 “BOOTPROTOstatic” 3.2添加IP地址 在配…

【JavaEE多线程】从单例模式到线程池的深入探索

目录 多线程案例单例模式阻塞队列定时器线程池总结-保证线程安全的思路对比线程和进程 多线程案例 单例模式 单例模式是一种设计模式 设计模式,就是程序员的棋谱,这里介绍了很多典型场景,以及典型场景的处理方式,按照设计模式写…

火车头采集一键发布到Zblog

火车头采集发布到Zblog系统,主要操作步骤如下: 目录 1、Zblog火车头Web发布模块 2、内容发布参数映射,火车头发布到Zblog 3、简数一键发布到Zblog方法 1、Zblog火车头Web发布模块 自行编写Zblog火车头Web发布模块,一般要使用f…

Linux--进程间的通信--进程池

进程间的通信–匿名管道 进程池的概念 进程池是一种将多个进程组织起来以执行特定任务的机制。它由多个预先创建好的资源进程和一个管理进程组成。这些资源进程被管理进程负责分配和调度,用于处理任务。 当有新的任务提交时,管理进程会从进程池中取出一…

2024北京门窗展|2024北京门窗展会|2024北京门窗展览会

CWE中国(北京)国际系统门窗及幕墙博览会 CWE China(Beijing)International System Doors Windows and Curtain Walls Expo 2024年8月29-31日 北京,中国国际展览中心顺义馆 展会概况: 2024年CWE中国&…

【Unity】ScriptableObject 在游戏中的使用实例

ScriptableObject 在游戏中的使用实例 ScriptableObject 使用指南Unity 存储游戏数据的几种方法Unity ScriptableObject实例创建一个物品管理的ScriptableObject创建一个管理所有 ScriptableObject 的数据库(ItemDBSO) ScriptableObject 使用指南 Scrip…

回溯算法练习day.2

216.组合总和III 链接:. - 力扣(LeetCode) 题目描述: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相…

基于STM32的RFID智能门锁系统

本文针对RFID技术,着重研究了基于单片机的智能门锁系统设计。首先,通过链接4*4按键模块与主控STM32,实现了多种模式,包括刷卡开锁、卡号权限管理、密码开锁、修改密码、显示实时时间等功能。其次,采用RC522模块与主控S…

【C语言基础】:预处理详解(二)

文章目录 一、宏和函数的对比二、#和##运算符2.1 #运算符2.2 ##运算符 三、#undef四、命令行定义五、条件编译六、头文件的包含1. 头文件包含的方式2. 嵌套文件包含 上期回顾: 【C语言基础】:预处理详解(一) 一、宏和函数的对比 宏通常被应有于执行简单…

Vue3---基础10(路由)

写一个最基本的路由导航 下载、创建、使用路由 下载路由 npm i vue-router 创建路由 先在 src 内去创建一个 router 文件夹 在文件夹内创建一个 index 文件 index.ts 内代码 // 创建一个路由器,并暴露出去 // 引入createRouter import { createRouter, createWeb…

CSS使用自己的字体

在项目的根目录下的static文件夹中放置字体文件。在项目中使用这个字体,需要2个步骤。 一. 你需要在全局样式文件中引入它。 假设你的全局样式文件是App.vue或者App.vue中引入的App.scss文件,你可以像这样引入字体文件: font-face {font-fa…

深度学习体系结构——CNN, RNN, GAN, Transformers, Encoder-Decoder Architectures算法原理与应用

1. 卷积神经网络 卷积神经网络(CNN)是一种特别适用于处理具有网格结构的数据,如图像和视频的人工神经网络。可以将其视作一个由多层过滤器构成的系统,这些过滤器能够处理图像并从中提取出有助于进行预测的有意义特征。 设想你手…

MySQL中的存储过程详解(上篇)

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法,看完代码自己敲一遍,十分有用 拖动表名到查询文件中就可以直接把名字拉进来中括号,就代表可写可不写 目录 1.认识存储过程 1.1 存储过程的作用 1.2 存储过程简介…

C#基础|数据类型、变量

哈喽,你好啊,我是雷工! 01 数据类型 数据类型是为了方便存储数据的,为了将数据按照不同的分类存储,所以引入数据类型。这个在PLC中已经很熟悉了。 数据类型的作用:就是为了更好地管理内存,为…

顺序表 (头删 尾删 清空)

//头删 | 1 #include "head.h" | 1 #ifndef ww87 void head_del(p lp) | 2 int main(int argc, const char *argv[]) …

[C++][算法基础]求最小生成树(Kruskal)

给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。 给定一张边带权的无向图 G(V,E),其中 V 表示图中点的集合,E 表示图…