谈谈你对集成学习的见解与认识,描述一下它们的优势所在?

2023-11-04

【每日一问】谈谈你对集成学习的见解与认识,描述一下它们的优势所在?
Datawhale优秀回答者:HipHopMan
集成方法有很多种,一种叫做bagging,bagging的思想是,我把我的数据做一点微小的调整,就得到了一个跟原来不一样的数据集,我就能多训练一个模型出来,模型的数量多了,解释力自然就增强了。比如说我原来有100个人的数据,其中有两个分别叫Tony和Lily,我把Tony这条数据删掉,用Lily的数据来替换,这样就得到了一个跟原来不一样的船新的数据集,这个过程叫做Bootstrap

每一个Bootstrap数据集都能用来训练一次模型,所以我们重复这个过程,比如重复1000次,一次是Tony替代Cici,一次是Ivy替代Yuki,这样每一次都是不一样的数据,也就可以训练1000次,得到了1000个决策树,我们把这1000个决策树打包到一起作为我们最终的模型,这个打包就叫做bagging

一般我们会把bagging跟随机森林一起叠加使用,在数据点的处理上,我们使用bagging来创造许多组(比如说1000组)bootstrap数据,对于每一组数据,我们使用随机森林来训练模型,最后再把所有模型的预测结果bagging起来

第二种集成的方法是boosting,boosting跟bagging一样都属于集成的思想,本质上都是训练很多模型,用数量堆积出质量。还是举1000个model,100个variable的例子,bagging是训练1000个等价的模型,比如说用随机森林,这些模型都是同样随机从100个里面选10个variable出来训练,每一个模型之间是同一级别的、互不干扰的

但boosting的思路和bagging不同,boosting里每一个模型都是基于上一个模型来进行优化,它的核心思想是训练1000个模型,每一个模型在上一个模型的基础上再好一点点

比如说第一个模型的RSS是10,这时候我们基于第一个模型定个小目标,先让RSS减到9,这就是我们的第二个模型,第三个模型的RSS减到8.5…如此往复,得到1000个model,再综合这1000个model得到最终的模型

第三种也是最后一种集成方法是stacking,stacking在字面上更好理解一点,就是堆积、堆砌。如果说bagging和boosting一般都是在决策树的范围内使用,stacking的运用范围会更广一点。例如对于同一个问题,假设还是预测一个人是不是柠檬精,我们首先用Logistic回归跑一遍,再用LDA跑一遍,再用SVM跑一遍,最后用决策树再跑一遍,然后我们用一种方法,比如说是majority polling或是权重加成把这些结果结合到一起,这就是一个stacking的过程

stacking的一个使用场景是我们有很多专家小组,每个小组都训练出了一个自己的模型,当这些模型难以取舍的时候,就干脆一口气打包带走,用stacking把这些模型结合起来,这样谁也不得罪,而且通常也能取得较好的效果。另外在参加各种建模比赛的时候,为了追求一点点精度,我们可以多训练几个模型然后结合起来,有时候也能得到很好的效果。

【每日一问】机器学习中常用的最优化方法有哪些?有什么区别
Datawhale优秀回答者:五花肉,郭佳林
在这里插入图片描述
常见的最优化方法有最速下降法(梯度下降法),牛顿法,共轭梯度法,拟牛顿法等等。目的都是求解某个函数的极小值。
1 最速下降法:使用条件是函数具有一阶连续偏导数。
步骤:首先通过求函数的一阶偏倒数得出函数的最速下降方向(负梯度方向),然后给任意一个点作为初始点进行迭代,令每次迭代后新的点坐标为上一个迭代点坐标减去上一个点处的梯度值乘步长(步长可以根据每个点的坐标值进行求解)。若迭代到某个点后,该点梯度值小于某个预设的很小的阈值,则说明不需要继续迭代。该点即为极小值点。
2 牛顿法:基本思想是用一个二次函数近似逼近目标函数,然后直接求解出二次函数的极小值点。首先令原函数在某点做二阶泰勒展开,进行变换后可以得到原函数在某邻域内的近似二次函数。为求该二次函数极小值,令其一阶偏导数为零,可以直接得到函数在该邻域的极小值(为原始点坐标减去该点的海森矩阵乘梯度)。
可以看出,最速下降法是通过一步步迭代,每次迭代都要计算梯度和步长,最终得到最优解;牛顿法是函数先在某个邻域内进行变形,再在这个邻域内直接一步求出最优解,不进行多轮迭代,所以对初始点的选择要求较高。
拟牛顿法和共轭梯度法在这两种迭代思想上继续加以改进。

【每日一问】什么是交叉验证,简述使用交叉验证的原因?
Datawhale优秀回答者:徐悦
在机器学习里,通常来说我们不能将全部用于数据训练模型,否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果。为了解决这一问题,最简单的方法是把整个数据集分成两部分,一部分用于训练,一部分用于验证,这也就是我们经常提到的训练集和测试集。这个方法存在一些问题:最终模型与参数的选取将极大程度依赖于对训练集和测试集的划分方法;另外,该方法只用了部分数据进行模型的训练。
基于这样的背景,有人就提出了交叉验证(cross-validation)的方法,可以在一定程度上减小过拟合,并从有限的数据中获取尽可能多的有效信息。
常见的交叉验证有两种形式,一种是留一验证(Leave-one-out cross-validation),另一种是K折交叉验证(K-fold Cross Validation)。

  • 留一验证方法包含将数据集分为训练集和测试集这一步骤。但是不同的是,它只用一个数据作为测试集,其他的数据都作为训练集,并将此步骤重复N次(N为数据集的数据数量)。假设现在有n个数据组成的数据集,那么就是每次取出一个数据作为测试集的唯一元素,而其他n-1个数据都作为训练集用于训练模型和调参。结果就是最终训练了n个模型,每次都能得到一个MSE。而计算最终test MSE则就是将这n个MSE取平均。该方法不受测试集合训练集划分方法的影响,因为每一个数据都单独的做过测试集。同时,其用了n-1个数据训练模型,也几乎用到了所有的数据,保证了模型的偏差更小。不过留一验证法的缺点也很明显,那就是计算量过于大,是测试集方法耗时的 n-1倍。
  • K折交叉验证,和留一验证法不同在于,每次的测试集将不再只包含一个数据,而是多个,具体数目将根据K的选取决定。根据经验一般选择k=5或10。比如,如果K=5,那么我们利用五折交叉验证的步骤就是:
    1)将所有数据集分成5份;
    2)不重复地每次取其中一份做测试集,用其他四份做训练集训练模型,之后计算该模型在测试集上的MSE_i;
    3)将5次的MSE_i取平均得到最后的MSE。事实上留一验证和10折交叉验证对测试集 MSE的估计是很相似的,但是相比LOOCV,10-fold CV的计算成本却小了很多,耗时更少。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谈谈你对集成学习的见解与认识,描述一下它们的优势所在? 的相关文章

  • angularJs-基础用法

    1 2 3 4 5 6 7 h2 AngularJS应用示例 h2 8 div 9 10 Enter name div
  • vue实现textarea框,文字高度自适应

    vue实现textarea框 文字高度自适应 https blog csdn net qq 38128179 article details 103591717 下面是两种方式 注释掉的是一种 不可以输入字数超出100字 另一种是可以超出
  • 设置MYSQL数据库编码为UTF-8

    1 编辑MySql的配置文件 MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my ini 可以搜索 Linux下一般是 etc my cnf 在 mysqld 标签下加上以下内容 default ch
  • 关于解决Vmware虚拟机中Firefox没有网络的解决方法

    1 打开 应用程序 gt 系统工具 gt 设置 2 找到 网络 gt 打开 有线 开关 3 显示 已连接 再访问Firefox浏览器就发现可以上网了 今天新建了一个centOS7的虚拟机 但是发现东西啥都配置好了 进入Firefox浏览器想
  • 在外包的这几年,技术和管理经验总结

    我是2010年4月份进入华为外包公司 然后在5月份跳槽到现在的公司 一直待到现在 目前是公司持证PM 华为技能定级五级 技术篇 这些年主要一直在做同一个项目 某个业务发放网关管理系统 这里简称SPXX 主要是用于管理所有的BOSS系统和组网
  • redis基础知识汇总

    redis基础知识汇总 一 redis 基础知识 1 什么是Redis 2 redis的优缺点 3 redis比memcached的优势在哪里 以及两者的区别 4 redis的持久化策略 5 Redis过期键的删除策略 6 数据淘汰策略 7
  • 头文件声明忘记加分号导致报错

    头文件出错 main文件显示错误 编译报错 Using Compiler V5 06 update 5 build 528 folder D Keil5 ARM ARMCC Bin Build target Target 1 compili
  • java垃圾回收策略_Java内存管理基础篇 - Java内存回收-常见的垃圾回收策略

    Java的内存使用完之后 是通过JVM的GC进行回收的 1 概述 垃圾收集的目的在于清除不再使用的对象 gc通过确定对象是否被活动对象引用来确定是否收集该对象 gc首先要判断该对象是否是时候可以收集 两种常用的方法是引用计数和对象引用遍历
  • Android通过滑动实现Activity跳转(手势识别器应用)

    通过手势识别器实现界面的转跳 1 创建 GestureDetector对象 2 创建新类继承SimpleOnGestureListener类 创建 GestureDetecto需要的参数 3 重写SimpleOnGestureListene
  • 八大定位元素的方法

    ind element by xxx 查找符合规范的元素 并返回查找到的第一个元素 通过使用这个方法 find elements by xxx 查找符合规范的元素 并以列表的形式返回 一 八大定位元素的方法 1 根据元素id属性定位元素 重
  • 尝试运行项目时出错:无法启动程序

    很久木有写程序了 刚才偶尔写了个 竟然碰到如此问题 留个纪念 处理方法 把你打开的网络游戏关了 再试试就ok了
  • Error: Java exception was raised during method invocation

    项目中有用到 JavascriptInterface 来JS Java 通讯 但是 H5 报了一个异常 我在一个通讯方法里申请动态权限 后发现需要切换到主线程才行 其实是所有的 UI 操作都要切换到主线程 否则会抛出异常 后改为以下代码解决
  • [转载]TF-IDF模型的概率解释

    信息检索概述 信息检索是当前应用十分广泛的一种技术 论文检索 搜索引擎都属于信息检索的范畴 通常 人们把信息检索问题抽象为 在文档集合D上 对于由关键词w 1 w k 组成的查询串q 返回一个按查询q和文档d匹配度relevance q d
  • 自动化测试 —— unittest框架,理论和实操双管齐下

    unittest 1 什么是Unittest框架 python自带一种单元测试框架 2 为什么使用UnitTest框架 gt 批量执行用例 gt 提供丰富的断言知识 gt 可以生成报告 3 核心要素 1 TestCase 测试用例 2 Te
  • UVA-127 纸牌游戏 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 简单的模拟题目 暴力即可 我使用了栈记录每个堆的数量 include

随机推荐

  • 软件测试分级理论

    软件测试是软件工程当中不可或缺的一个过程 在软件工程中 测试者充当 虚拟用户 对软件产品进行检验 只有经过严格测试的软件产品 才能发布给用户使用 只要有软件的地方 就有软件测试 软件测试是一个包罗万象的话题 这种 包罗万象 的具体表现之一就
  • 使用streamstring实现格式化输入

    目的 在windows系统写c 项目 常用sscanf s进行格式化输入 但是在ubuntu系统上发现sscanf s不可用 只有sscanf可用 但是它是c 99 的函数了 后面查阅知道 这个sscanf s函数是微软专有的函数 不具有跨
  • 关于hibernate在实体类增加字段启动项目报错

    如果出现这种情况 有可能涉及到hibernate或者mysql的缓存 因为第一次启动失败 mysql或者hibernate已经在数据库添加相应的字段 并生成缓存 然后之后的修改 启动项目也不会成功 因为hibernate会一直访问缓存 所以
  • cmake指令基础知识

    总结 写在前面 方便查看 1 cmake指令API文档 cmake指令 2 cmake指令中的常量 cmake变量 比如设置静态库和动态库输出目录的CMAKE ARCHIVE OUTPUT DIRECTORY和CMAKE LIBRARY O
  • 都9102年了还不懂动态图吗?一文带你了解飞桨动态图

    导读 飞桨PaddlePaddle致力于让深度学习技术的创新与应用更简单 飞桨核心框架已提供了动态图 DyGraph 相关的API和文档 并且还附有Language model Sentiment Classification OCR Re
  • 24. 两两交换链表中的节点 ----链表再学习

    https leetcode cn com problems swap nodes in pairs 思路如下图 蓝绿色箭头代表我们要构建的指向 红色箭头代表原来的指向 代码如下 Definition for singly linked l
  • C++ 实现两线段是否相交、相交情况、若相交求出交点坐标

    前段时间做计算机图形学的东西 现在闲下来 对代码稍作整理 都是些实用的函数 判断是否相交 X1 Y1 X2 Y2 前线 X3 Y3 X4 Y4 后线 x y 交点坐标 相交在前线上return 1 后线return 2 交于外面return
  • MacOS:Launchd&LaunchDaemon&LaunchAgent&.plist文件编写

    launchd官方文档 gt gt 详解文章1 gt gt 详解文章2 gt gt 什么是launchd 来自于官方文档 Wikipedia defines launchd as a unified open source service
  • java 基础 之 Comparable与Comparator

    曾经去一家公司面试 上来第一道问题就是问这个 原题目大概是 给你一个Student类 实现Comparable接口 如何写这个compareTo方法 当时很蒙 因为长时间的CURD 只是用的比较多 但是基础相对薄弱 结果必然是铩羽而归 为什
  • SQUASHFS error

    when i do flashcp operation and there are some errors happen asbelow SQUASHFS error xz dec run error data probably corru
  • vue如何在页面刷新时保留状态信息

    vue如何在页面刷新时保留状态信息 本篇转载至来自简书 仅供自己学习用 1 通过本地存储 state中的数据 页面刷新成功后再次从本地存储中读取state数据 vuex中的数据发生改变时触发localStorage的存储操作 localst
  • 讲解Oracle数据库SYS密码的找回方法

    1 采用命令行方式 sqlplus nolog connect as sysdba alter user sys identified by 新密码 alter user system identified by 新密码 2 用数据库管理软
  • mybatis DATE_FORMAT 格式化时间输出

    参考 http www cnblogs com yangy608 p 3950095 html 一 在oracle中 当想把字符串为 2011 09 20 08 30 45 的格式转化为日期格式 我们可以使用oracle提供的to date
  • Vue+SpringMVC---前后端分离极简尝试

    前后端分离 的开发方式是目前WEB开发中的一个大的趋势 随着各种前后端框架的出现 加上REST编程规范慢慢深入人心 前端后端之间通过更加轻量级 简洁高效的JSON作为数据传输格式 使得一切变得开朗起来 前后端分工更加明晰 前端被赋予了更多的
  • XSS----payload,绕过,xss小游戏记录

    一 XSS 1 原理 攻击者把恶意的脚本代码注入到网页中 等待其他用户浏览 这些网页 或触发其他条件 从而执行其中的恶意代码 1 xss实例代码 test html
  • 微信小程序数据传递的几种方式,你都掌握了吗?

    1 组件传递内容给页面 给组件设置myevent事件 通过this triggerEvent myevent myEventDetail 触发该myevent事件并传递内容 在页面用onMyEventshi事件监听传递过来的数据 Page
  • 三道典型C语言题(9)

    1 改错 a void test1 char string 10 改为string 11 char str1 0123456789 strcpy string str1 b void test2 char string 10 str1 10
  • 去除影像黑边的N种方法

    在影像处理过程中 有时候需要将几张小的影像图镶嵌为一张大的 但是却被黑边所阻挡 这时候就需要找到一种方法来将黑边去掉了 由于遥感影像一般都太大了 不好获取也不好处理 这里我们选用的的影像是之前用过的一个小影像 虽然是带有白边而不是黑边的 但
  • BeanFactoryPostProcessor扩展

    Configuration ComponentScan com example public class AppConfig Component public class User public User private String na
  • 谈谈你对集成学习的见解与认识,描述一下它们的优势所在?

    每日一问 谈谈你对集成学习的见解与认识 描述一下它们的优势所在 Datawhale优秀回答者 HipHopMan 集成方法有很多种 一种叫做bagging bagging的思想是 我把我的数据做一点微小的调整 就得到了一个跟原来不一样的数据