20240324-1-集成学习面试题EnsembleLearning

集成学习面试题

在这里插入图片描述

1. 什么是集成学习算法?

集成学习算法是一种优化手段或者策略,将多个较弱的模型集成模型组,一般的弱分类器可以是决策树,SVM,KNN等构成。其中的模型可以单独进行训练,并且它们的预测能以某种方式结合起来去做出一个总体预测。

2. 集成学习主要有哪几种框架?

集成学习从集成思想的架构分为Bagging,Boosting,Stacking三种。

3. 简单介绍一下bagging,常用bagging算法有哪些?

  • Bagging

    • 多次采样,训练多个分类器,集体投票,旨在减小方差
  • 基于数据随机重抽样的分类器构建方法。从训练集中进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果。

  • 算法流程:

    • 输入为样本集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x m , y m ) D={(x_1,y_1),(x_2,y_2) \dots (x_m,y_m)} D=(x1y1)(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 T次,得到包含 T T T个样本的采样集 D t D_t Dt
    • 用采样集 D t D_t Dt训练第 t t t个弱学习器 G t ( x ) G_t(x) Gt(x)
  • 如果是分类算法预测,则 T T T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法, T T T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

  • 常用bagging算法:随机森林算法

4. 简单介绍一下boosting,常用boosting算法有哪些?

  • Boosting

    • 基分类器层层叠加,聚焦分错的样本,旨在减小方差
  • 训练过程为阶梯状,基模型按次序进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次都进行一定的转化,每次都是提高前一次分错了的数据集的权值,最后对所有基模型预测的结果进行线性组合产生最终的预测结果。

  • 算法流程:

    • 给定初始训练数据,由此训练出第一个基学习器;

    • 根据基学习器的表现对样本进行调整,在之前学习器做错的样本上投入更多关注;

    • 用调整后的样本,训练下一个基学习器;

    • 重复上述过程T次,将T个学习器加权结合。

  • 常用boosting算法:

    • Adaboost
    • GBDT
    • XGBoost

5. boosting思想的数学表达式是什么?

f ( x ) = w 0 + ∑ m = 1 M w m ϕ m ( x ) f(x)=w_{0}+\sum_{m=1}^{M} w_{m} \phi_{m}(x) f(x)=w0+m=1Mwmϕm(x)

其中 w w w是权重, ϕ \phi ϕ是弱分类器的集合,可以看出最终就是基函数的线性组合。

6. 简单介绍一下stacking

  • Stacking

    • 多次采样,训练多个分类器,将输出作为最后的输入特征
  • 将训练好的所有基模型对训练集进行预测,第个 i i i基模型对第 i i i个训练样本的预测值将作为新的训练集中第 i i i个样本的第 i i i个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测。

  • stacking常见的使用方式:

    • 由k-NN、随机森林和朴素贝叶斯基础分类器组成,它的预测结果由作为元分类器的逻回归组合。

7. 你意识到你的模型受到低偏差和高方差问题的困扰,应该使用哪种算法来解决问题呢?为什么?

低偏差意味着模型的预测值接近实际值。换句话说,该模型有足够的灵活性,以模仿训练数据的分布。貌似很好,但是别忘了,一个灵活的模型没有泛化能力。这意味着,当这个模型用在对一个未曾见过的数据集进行测试的时候,它会令人很失望。
在这种情况下,我们可以使用bagging算法(如随机森林),以解决高方差问题。bagging算法把数据集分成重复随机取样形成的子集。然后,这些样本利用单个学习算法生成一组模型。接着,利用投票(分类)或平均(回归)把模型预测结合在一起。另外,为了应对大方差,我们可以:

  • 使用正则化技术,惩罚更高的模型系数,从而降低了模型的复杂性。
  • 使用可变重要性图表中的前n个特征。
  • 可以用于当一个算法在数据集中的所有变量里很难寻找到有意义信号的时候。

8. 常用的基分类器是什么?

最常用的基分类器是决策树,原因:

  • 决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重。
  • 决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。
  • 数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性。

9. 可否将随机森林中的基分类器,由决策树替换为线性分类器或K-近邻?请解释为什么?

不能:

  • Bagging的主要好处是集成后的分类器的方差,比基分类器的方差小。

  • 随机森林属于Bagging类的集成学习,对样本分布较为敏感的分类器更适用于Bagging。

  • 线性分类器或者K-近邻都是较为稳定的分类器,本身方差就不大。

  • 线性分类器或者K-近邻可能会由于Bagging的采样,导致在训练中更难收敛,增大偏差。

10. GBDT和RF如何计算特征重要性

  • RF有两种方法:
    • 通过计算Gini系数的减少量VIm=GI−(GIL+GIR)判断特征重要性,越大越重要。
    • 对于一颗树,先使用袋外错误率(OOB)样本计算测试误差a,再随机打乱OOB样本中第i个特征(上下打乱特征矩阵第i列的顺序)后计算测试误差b,a与b差距越大特征i越重要。
  • GBDT计算方法:

    • 所有回归树中通过特征i分裂后平方损失的减少值的和/回归树数量 得到特征重要性。 在sklearn中,GBDT和RF的特征重要性计算方法是相同的,都是基于单棵树计算每个特征的重要性,探究每个特征在每棵树上做了多少的贡献,再取个平均值。
  • Xgb主要有三种计算方法:

    • importance_type=weight(默认值),特征重要性使用特征在所有树中作为划分属性的次数。
    • mportance_type=gain,特征重要性使用特征在作为划分属性时loss平均的降低量。
    • importance_type=cover,特征重要性使用特征在作为划分属性时对样本的覆盖度。

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

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

相关文章

python安装(window环境)

1.下载安装文件 首先推荐去官网下载最新版本,但是我这边官网打开很慢,而且下载的时候也很慢,翻墙也不行。所以我最终选择了非官方下载。 官网:Download Python | Python.org 中文官网:Python下载 | Python中文网 官…

牛客周赛39 --- G -- 小红不想做平衡树 -- 题解

小红不想做平衡树: 思路解析: 好数组的定义为 恰好翻转一个区间是得,这个区间变为升序的。 那么就有五种情况: 1.本身数组就升序的, 翻转一个长度为1的区间后,数组仍为升序 2.本身数组就降序的&#xf…

跨框架探索:React Redux 和 Vuex 对比分析快速掌握React Redux

React Redux 和 Vuex 都是前端状态管理库,分别用于 React 和 Vue.js 框架。 它们都提供了一套规范的状态管理机制,帮助开发者更好地组织和管理应用状态。下面是它们的一些异同点: 相同点: 中心化状态管理:两者都提…

环形链表 II - LeetCode 热题 26

大家好!我是曾续缘😛 今天是《LeetCode 热题 100》系列 发车第 26 天 链表第 5 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 环形链表 II 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环&#xf…

docker部署coredns服务器

创建文件夹 mkdir /coredns/config/添加一个CoreDNS配置文件 cat >/coredns/config/Corefile<<EOF.:53 {forward . 114.114.114.114:53log}EOF启动docker docker run -d --name coredns --restartalways \-v /coredns/config:/etc/coredns \-p 53:53/udp \regist…

HarmonyOS 开发-短视频切换实现案例

介绍 短视频切换在应用开发中是一种常见场景&#xff0c;上下滑动可以切换视频&#xff0c;十分方便。本模块基于Swiper组件和Video组件实现短视频切换功能。 效果图预览 使用说明 上下滑动可以切换视频。点击屏幕暂停视频&#xff0c;再次点击继续播放。 实现思路 使用Sw…

一文了解ERC404协议

一、ERC404基础讲解 1、什么是ERC404协议 ERC404协议是一种实验性的、混合的ERC20/ERC721实现的&#xff0c;具有原生流动性和碎片化的协议。即该协议可让NFT像代币一样进行拆分交易。是一个图币的互换协议。具有原生流动性和碎片化的协议。 这意味着通过 ERC404 协议&#xf…

混淆时,编译器优化导致通过反射赋值的类被清空问题

有几个反射赋值的类&#xff0c;之前一直是 keep 整个class的&#xff0c;现在要求对class的路径进行混淆。 当我启用混淆后&#xff0c;发现整个类的内容被清空了。 // 原始的类内容public class BaseLoadData {property("config_data1")public static String dat…

R语言数据可视化:ggplot2绘图系统

ggpolt2绘图系统被称为R语言中最高大上的绘图系统&#xff0c;使用ggplot2绘图系统绘图就像是在使用语法创造句子一样&#xff0c;把数据映射到几何客体的美学属性上。因此使用ggplot2绘图系统的核心函数ggplot来绘图必须具备三个条件&#xff0c;数据data&#xff0c;美学属性…

如何开始用 C++ 写一个光栅化渲染器?

光栅化渲染器是计算机图形学中最基础且广泛应用的一种渲染技术&#xff0c;它将三维模型转化为二维图像。下面我们将逐步介绍如何使用C语言从零开始构建一个简单的光栅化渲染器。 一、理解光栅化渲染原理 光栅化是一种将几何数据&#xff08;如点、线、三角形&#xff09;转换…

视频拍摄后如何用二维码分享?在线制作视频二维码的方法

现在很多人会将拍摄的视频内容用生成二维码的方式来分享给其他人&#xff0c;与以前使用微信、QQ、网盘等形式相比&#xff0c;二维码能够更加简单快捷的将视频传递给其他人查看&#xff0c;不需要下载缓存占用扫码者的内存&#xff0c;提供更好的用户体验效果。 视频转二维码…

大语言模型及提示工程在日志分析任务中的应用 | 顶会IWQoS23 ICPC24论文分享

本文是根据华为技术专家陶仕敏先生在2023 CCF国际AIOps挑战赛决赛暨“大模型时代的AIOps”研讨会闪电论文分享环节上的演讲整理成文。 BigLog&#xff1a;面向统一日志表示的无监督大规模预训练方法 BigLog: Unsupervised Large-scale Pre-training for a Unified Log Represen…

低代码平台适合谁用?业务岗能用它做什么?开发岗能用它做什么?一文讲清!

近期&#xff0c;低代码开发平台以其独特的魅力&#xff0c;迅速引发了大众的广泛关注。众多人士纷纷寻求了解各类低代码产品&#xff0c;以探究其功能与特点。 然而&#xff0c;有些人可能因一两款产品的体验不佳&#xff0c;便对整个低代码行业产生了偏见。但我要指出的是&am…

JS 表单验证

点击注册的时候&#xff0c;渲染出来&#xff0c;验证码是自动获取出来的 html&#xff1a; <div class"div1">用户名<input type"text" id"yhm"><span id"span1"></span><br>密码<input type"…

用AI作图,使用这个免费网站,快看我画的大鹏鸟和美女

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

C语言面试题之判定字符是否唯一

判定字符是否唯一 实例要求 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同 实例分析 1、使用一个大小为 256 的bool数组 charSet 来记录字符是否出现过&#xff1b;2、遍历字符串时&#xff0c;如果字符已经在数组中标记过&#xff0c;则返回 false&a…

Linux、Docker、Brew、Nginx常用命令

Linux、Docker、Brew、Nginx常用命令 Linuxvi编辑器文件操作文件夹操作磁盘操作 DockerBrewNginx参考 Linux vi编辑器 Vi有三种模式。命令模式、输入模式、尾行模式&#xff0c;简单的关系如下&#xff1a; i -- 切换到输入模式&#xff0c;在光标当前位置开始输入文本。&a…

代码随想录算法训练营Day48|LC198 打家劫舍LC213 打家劫舍IILC337 打家劫舍III

一句话总结&#xff1a;前两题白给&#xff0c;第三题树形DP有点难。 原题链接&#xff1a;198 打家劫舍 滚动数组直接秒了。 class Solution {public int rob(int[] nums) {int n nums.length;int first 0, second nums[0];for (int i 2; i < n; i) {int tmp Math.m…

SysTick滴答定时器 - 延时函数

SysTick定时器 Systick定时器&#xff0c;是一个简单的定时器&#xff0c;对于CM3,CM4内核芯片&#xff0c;都有Systick定时器。Systick定时器常用来做延时&#xff0c;或者实时系统的心跳时钟。这样可以节省MCU资源&#xff0c;不用浪费一个定时器。比如UCOS中&#xff0c;分…

记录一次Ubuntu 22.04桌面版安装向日葵的过程

大概花了近一天的时间安装了WIN11和Ubuntu 22.04双系统&#xff0c;中间Ubuntu安装时出现了好几次失败&#xff0c;后来检查可能是下载的iso文件有问题&#xff0c;重新下载一次&#xff0c;刻录到U盘。安装才算成功。 最后的Ubuntu系统信息如下 接着安装向日葵的时候出错了&a…