集成学习方法

2023-05-16

概述

集成学习,是将几个泛化能力差的模型相结合,组成泛化能力强的模型。
常见的做法就是分别训练几个模型,然后再将多个模型的输出组合,形成最终输出,也称为模型平均的效果。类似的策略都称为集成方法。
模型平均,有如俗语:三个臭皮匠,顶过诸葛亮,发挥群体决策的力量取长补短,从而达到更好的泛化效果。

集成学习的方法主要包括Bagging、Boosting、Stacking等

Bagging

Bagging全称是bootstrap aggregating,其实现是通过对样本数据集进行有放回的重复采样,生成多个采样子集,并行地训练出多个模型,测试阶段集成多个模型的泛化输出,常常采样直接平均的做法
从偏差-方差分解的角度看,Bagging主要关注降低方差,其有效性是有严格的数学推导的

假如有 k k k个回归模型,对每个输出数据,模型输出为 Y i Y_i Yi,其中 i ∈ [ 1 , ⋯   , k ] i\in[1,\cdots,k] i[1,,k],该输出真值为 Y Y Y,则对于第 i i i个子模型,其偏差为 b i = Y i − Y b_i=Y_i-Y bi=YiY
由于这里的 k k k个回归模型都是基于同样的数据集进行采样来训练模型,所以其模型输出的数学期望和方差都基本一致,因此,可认为 E [ Y i ] = μ E[Y_i]=\mu E[Yi]=μ D [ Y i ] = σ 2 D[Y_i]=\sigma^2 D[Yi]=σ2
对于集成模型来说,其期望和方差为:
E [ 1 k ∑ i Y i ] = 1 k ∑ i E [ Y i ] = μ E\left[\frac{1}{k}\sum_iY_i\right]=\frac{1}{k}\sum_iE\left[Y_i\right]=\mu E[k1iYi]=k1iE[Yi]=μ
D [ 1 k ∑ i Y i ] = 1 k 2 ∑ i D [ Y i ] = σ 2 k D\left[\frac{1}{k}\sum_iY_i\right]=\frac{1}{k^2}\sum_iD\left[Y_i\right]=\frac{\sigma^2}{k} D[k1iYi]=k21iD[Yi]=kσ2
由此可见,Bagging的集成模型输出可以有效降低方差。然而,实际上训练出来的子模型之间不是完全相互独立的,所以方差的范围是介于 σ 2 / k \sigma^2/{k} σ2/k σ 2 \sigma^2 σ2之间

Boosting

Boosting也是典型的集成学习方法,其思想是采用串行训练过程来训练模型
同样是利用数据集来训练多个模型,但是Boosting的最大特征是后训练的模型会考虑前训练模型的误差,具体做法就是对于前训练模型中出错的样本加大权重,称为赋权法
赋权法的应用使得每个样本对于训练模型的误差起到的作用是不同的,而后训练模型会采用贪心算法去不断适应训练集,力争将每个训练样本的误差都尽量降低
Boosting的输出也是集成多个子模型的输出得到的

从偏差-方差分解的角度看,Boosting主要关注降低偏差,因此Boosting能基于泛化能力相当弱的学习器构建出很强的集成

Boosting典型的方法就是Adaboost,GBDT和Xgboost

  • 原始的AdaBoost算法是在算法开始的时候,为每一个样本赋上一个权重值,初始的时候,大家都是一样重要的。在每一步训练中得到的模型,会使得数据点的估计有对有错,我们就在每一步结束后,增加分错的点的权重,减少分对的点的权重,这样使得某些点如果老是被分错,那么就会被“重点关注”,也就被赋上一个很高的权重。然后等进行了N次迭代(由用户指定),将会得到N个简单的分类器(basic learner),然后我们将它们组合起来(比如说可以对它们进行加权、或者让它们进行投票等),得到一个最终的模型。
  • GBDT(Gradient Boosting Decison Tree)每一次的计算是为了减少上一次的残差(residual),而为了消除残差,我们可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说,在Gradient Boost中,每个新的模型的建立是为了使得之前模型的残差往梯度方向减少。Shrinkage(缩减)的思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。本质上,Shrinkage为每棵树设置了一个weight,累加时要乘以这个weight,但和Gradient并没有关系
  • xgboost是Gradient Boosting的一种高效系统实现,并不是一种单一算法。xgboost里面的基学习器除了用tree(gbtree),也可用线性分类器(gblinear)。而GBDT则特指梯度提升决策树算法。xgboost相对于普通gbm的实现,可能具有以下的一些优势:
    -1. 显式地将树模型的复杂度作为正则项加在优化目标公式
    -2. 推导里用到了二阶导数信息,而普通的GBDT只用到一阶允许使用column(feature) sampling来防止过拟合
    -3. 借鉴了Random Forest的思想,sklearn里的gbm好像也有类似实现
    -4.实现了一种分裂节点寻找的近似算法,用于加速和减小内存消耗
    -5.节点分裂算法能自动利用特征的稀疏性
    -6.data事先排好序并以block的形式存储,利于并行计算
    -7.cache-aware, out-of-core computation
    -8.支持分布式计算可以运行在MPI,YARN上,得益于底层支持容错的分布式通信框架rabit

注:XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。

Stacking

Stacking的基本思路与Bagging类似,区别有几点:

  • 集成的子模型可以不同
  • 训练时采用全部数据
  • 完成子模型训练之后再训练一个meta-classifier(元模型),其输入是各个子模型的输出,其目的就是调节各个子模型在最终集成模型所起到的作用(类似于赋权的思想)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

集成学习方法 的相关文章

  • 最强大易用的开源MODBUS库-YMODBUS,包含MASTER/SLAVE

    无论是MASTER或SLAVE xff0c 构建MODBUS应用都极其简单 xff0c 可通过设置Master为Slave的Player轻松实现MODBUS网关 项目使用C 43 43 11编写 xff0c 支持多线程 xff0c 可在WI
  • keil5 添加注释说明模板

    我们使用 Keil uvision5 编写代码时 xff0c 为了规范代码 xff0c 一般会在文件开头对本文件进行注释说明 xff0c 同时我们也会在函数的开头对函数进行说明 但 Keil5 集成开发环境中没有这些注释模板 xff0c 而
  • Putty 使用记录

    Putty 显示时间戳 需要三个软件 Putty xff0c ExtraPuTTY xff0c mtputty Putty用来提供基本功能 ExtraPuTTY用来提供时间戳功能 mtputty用于多链接多页面显示 ExtraPuTTY中的
  • 学习java方面的一点收获

    学习JAVA方面的收获 经过将近两年的时间学习java xff0c 觉得在java方面有比较大的收获 在学习和实践过程中逐渐对代码习惯 软件思维都有比较进一步的了解 java语言的纯面向对象 平台无关性是java能够得到比较多的程序开发者的
  • ROS使用catkin_make编译指定功能包

    指定要编译的功能包 xff08 多个用分号相隔 xff09 catkin make DCATKIN WHITELIST PACKAGES 61 34 需要单独编译的包名 34 但是如再次使用catkin make编译所有功能包时会出现仅仅只
  • python中_、__、__xx__(单下划线、双下划线等)的含义

    默认情况下 xff0c Python中的成员函数和成员变量都是公开的 相当于java中的public xff0c 或者OC中定义在 h文件中的公开成员变量 在python中没有public private等关键词来修饰成员函数和成员变量 为
  • 龙芯1B核心板使用alsa音频播放设置,aplay播放

    龙芯1B核心板是默认启用alsa音频工具的 只需要进行一些配置就能使用 1 先检查你的板子的alsa工具是否正常 aplay l 可以查看 xff0c 是否已正确安装音频驱动 如果正常 xff0c 能看到你的音频驱动的信息 可能会出现 xf
  • centos 64bit安装arm-none-linux-gnueabi交叉编译工具链

    xfeff xfeff yum install glibc i686在centos中安装arm none Linux gnueabi有两种方法 xff0c 一种是apt get 安装容易但是不易成功 xff0c 一种是下载压缩包或安装程序
  • 旋转矩阵和欧拉角

    欧拉角介绍 旋转可以参考两种坐标系 内部坐标系 XYZ 角度 外部坐标系 xyz 角度 不考虑参考坐标系情况下 按照旋转方式可以分为两种 Proper Euler angles z x z x y x y z y z y z x z x y
  • SIP 鉴权 & HTTP 认证

    sip 鉴权是基于摘要签名认证的 具体来说 每一个用户都有一个用户名和密码 用户名和密码在客户端和SIP 服务器的数据库中都有保存 在认证的过程中 客户端将自己的信息 用户名 密码 url 等信息 做一些复杂的MD5 或者SHA256 SH
  • ROS——TF坐标变换

    TF功能包 创建功能包 cd catkin ws src catkin creat pkg learning tf roscpp rospy tf turtlesim 如果此时依赖包已有tf xff0c 后文中CMakeLists文件中的f
  • Gazebo——仿真平台搭建(基于Ubuntu20.04)

    目录 Gazebo安装配置 创建仿真环境 仿真使用 Rviz查看摄像头采集的信息 Kinect仿真 问题解决 xff1a 1 gazebo SpawnModel Failure model name mrobot already exist
  • 单片机要学多久可以找到工作?能找到哪类的工作

    单片机学多久能工作 单片机学好了能应聘什么工作 xff1f 从事单片机开发10年 xff0c 我见证了这个行业的成长 xff0c 最明显的就是这几年的工资涨幅 大家好 xff0c 我是小哥 xff0c 10年前我还是个对前景充满憧憬的小屌丝
  • 互联网企业部分面试笔试真题以及考察知识点总结(一)

    1 static的作用 1 1用static关键字修饰的静态变量 静态变量属于类 xff0c 在内存中只有一个复制 xff0c 只要静态变量所在的类被加 载 xff0c 这个静态变量就会被分配空间 1 2 static成员方法 Java中提
  • 史上最全网址导航大全,让世上没有找不到的好东西

    收录的导航网址大全 好用和常用的网址几乎都在里面 个人喜欢往浏览器书签收藏夹里塞喜欢的干货和网站 xff0c 以至于收藏夹里有着几千条网址 xff0c 所以比较喜欢导航 xff0c 但是浏览器原生自带的导航又太low 所以一般自己设置打开浏
  • HTTP的认证方式之DIGEST 认证(摘要认证)

    核心步骤 xff1a 步骤 1 xff1a 请求需认证的资源时 xff0c 服务器会随着状态码 401Authorization Required xff0c 返回带WWW Authenticate 首部字段的响应 该字段内包含质问响应方式
  • 相机标定评价标准

    相机标定的实验一般根据图像数据的类型分为两种 xff1a 1 仿真实验 2 实际场景的操作性实验 目前为止 xff0c 还没有形成一套完善的用于评价相机标定方法的标准体系 xff0c 通常采用的评价准则如下 xff1a 1 标定方法是否具有
  • ubuntu下串口工具的安装与使用

    1 概述 作为一个嵌入式开发人员 xff0c 串口是开发过程中不可或缺的工具之一 xff0c window下有各种各样的串口工具 xff0c 使用起来很方便 xff0c 这里不再做过多陈述 xff0c 这里主要介绍Ubuntu 16 04
  • Ubuntu查看文件大小或文件夹大小

    Ubuntu查看文件大小或文件夹大小 一 查看文件大小 查看文件大小的命令 xff1a ls l filename 会在终端输出 xff1a rw r r 1 root root 2147483648 Mar 5 09 39 filetem

随机推荐

  • 结构体数据对齐

    结构体数据对齐 结构体数据对齐 xff0c 是指结构体内的各个数据对齐 在结构体中的第一个成员的首地址等于整个结构体的变量的首地址 xff0c 而后的成员的地址随着它声明的顺序和实际占用的字节数递增 为了总的结构体大小对齐 xff0c 会在
  • 2016你配得上更好地自己

    传统里我一直觉得过完春节才是一年结束的时候 xff0c 但是现在慢慢习惯阳历的计算 xff0c 2017年1月1日 xff0c 看着空间里面新年祝福和期待 xff0c 突然觉得这才是过年 2016年就这样走了 xff0c 以后我再也回不到2
  • 树莓派镜像备份与恢复文章

    在做完下属步骤以后 xff0c 需要考虑分区表 xff0c 将分区表复制到镜像里 xff0c 否则系统无法启动 xff0c 而且还要回利用gparted dev loop0以及fdisk l dev loop0等命令 xff0c 查看分区类
  • 在树莓派上将现有系统复制到新存储卡(转载 )

    在树莓派上将现有系统复制到新存储卡 xff08 转载 xff09 http www eeboard com bbs thread 39663 1 1 html 最初 xff0c 使用树莓派的时候 xff0c 也许也只是为了新鲜 xff0c
  • 【c/c++】单链表、头指针、头结点、首元节点

    链表中第一个结点的存储位置叫做头指针 xff0c 那么整个链表的存取就必须是从头指针开始进行了 之后的每一个结点 xff0c 其实就是上一个的后继指针指向的位置 这里有个地方要注意 xff0c 就是对头指针概念的理解 xff0c 这个很重要
  • VINS-mono学习总结

    Vins mono是一个后端基于非线性优化的 单目与IMU紧耦合的融合定位算法 整体 xff1a 1 预处理模块 视觉 xff1a 特征点提取与追踪 IMU xff1a 惯性解算与误差状态分析 计算预积分量 2 初始化模块 xff08 旋转
  • Fast-lio个人总结

    Lidar第一帧作为基坐标 1 lidar原始数据预处理默认不提取特征 xff0c 对原始数据间隔式 xff08 间隔3个点 xff09 降采样提取 2 imu初始化 惯性解算 误差分析 状态 协方差预测 3 Lidar与imu时间状态对齐
  • 在rviz中使用键盘控制burger

    启动语句 roslaunch turtlebot3 fake turtlebot3 fake launch 启动rviz 话题通信 roslaunch turtlebot3 teleop turtlebot3 teleop key laun
  • shell脚本中=左右的空格问题

    赋值语句等号两边不能有空格 xff1a i 61 1 或i 61 i 43 1 而字符串比较 xff0c 等号两边必须有空格 if a 61 b 比较时 xff0c if a xxx b 中括号前后一定要加空格否则会报错xxx 61 eq
  • freertos.axf: Error: L6218E: Undefined symbol xTaskGetSchedulerState (referred from delay.o).

    今天移植了一下FreeRTOS xff0c 出现了freertos axf Error L6218E Undefined symbol xTaskGetSchedulerState referred from delay o xff0c 这
  • vnc桌面配置及黑屏问题解决

    一 vnc桌面配置 登入需要远程帐号下修改 vnc xstartup 如配置root远程桌面 vi vnc xstartup 原内容如下 xff1a xff3b x etc vnc xstartup xff3d amp amp exec e
  • 华清嵌入式--入学篇

    当初在学习嵌入式的时候 xff0c 就知道嵌入式门槛高 xff0c 需要的知识比较多 工作了4年多时间 xff0c 确实感觉还是刚入门的感觉 xff0c 焊接 调试 原理图 PCB 模电 数电 c语言 数据结构 单片机 linux等知识比价
  • 20.华清嵌入式--数据结构入门

    从今天开始正式开始学习数据结构与算法 从今天开始正式开始学习数据结构与算法 从上面的框图也可以从整体上把握数据结构的关键知识点 xff0c 不管是简单的顺序表还是栈 xff0c 树等 xff0c 学习的方法都是一样的他们的操作也都是无非都是
  • 35.Linux应用层开发---线程

    一 线程的概念和使用 1 线程的概念 为了进一步减少处理器的空转时间 xff0c 支持多处理器以及减少上下文切换开销 xff0c 进程在演化中出现了另外一个概念线程 它是进程内独立的一条运行路线 xff0c 是内核调度的最小单元 xff0c
  • 36.Linux 应用层开发--进程间通讯

    最近因为项目原因耽误了一些时间 xff0c 导致进程间的通讯一直没有来的及学习及整理 在我们之前学过进程相关的概念和操作 xff0c 还学习了轻量级的进程的线程 xff0c 在我们之后的开发和面试中 xff0c 多线程 xff0c 多进程开
  • 树莓派4 ubuntu22.04LTS整合Intel Realsense深度相机

    树莓派4 ubuntu22 04LTS整合Intel Realsense深度相机 文章目录 树莓派4 ubuntu22 04LTS整合Intel Realsense深度相机前言一 为什么不使用Docker安装或使用官方教程安装 xff1f
  • 串口打印调试信息(干货)

    printf重定向到串口 上代码 xff0c 这里用到的是hal库 xff0c 标准库改以下函数就行 span class token macro property span class token directive keyword in
  • 相电流与线电流有什么区别

    相电流和线电流的区别 xff0c 主要看负载的连接方法 xff0c 如果是星型接法 xff0c 相电流和线电流相同 xff0c 线电压是相电压的开方3倍 如果负载是三角形接法 xff0c 那么 xff0c 线电流是相电流的开方3倍 xff0
  • STM32f103c8t6的定时器配置定时中断

    span class token comment 时间计算公式 span Tout span class token operator 61 span xff08 xff08 arr span class token operator 43
  • 集成学习方法

    概述 集成学习 xff0c 是将几个泛化能力差的模型相结合 xff0c 组成泛化能力强的模型 常见的做法就是分别训练几个模型 xff0c 然后再将多个模型的输出组合 xff0c 形成最终输出 xff0c 也称为模型平均的效果 类似的策略都称