集成学习:让算法和算法赛跑

2023-05-16

文章目录

  • 集成学习的基本概念
  • 构建弱分类器:决策树
  • 自助采样法
    • bootstrapping
      • bootstrapping的核心思想
      • bootstrapping与permutation的区别
    • bagging
    • boosting
    • 为何bagging会降低variance,boosting降低bias?
  • 更多参考阅读:

集成学习的基本概念

集成学习的概念有点像竞争社会,让算法之间竞争,决出最好的结果。如果底层的算法(或者说个体学习器)是同样的只是初始化参数不同,就称为同质集成。如果底层算法的基因都不一样,来自不同的机器学习门派,就称为异质集成。
个体学习器经常设置为多个不同的机器学习算法,这样做保证了个体学习期相互独立性的要求。例如支持向量机(SVM)、线性回归、k近邻、二元决策树等。但是这样做的缺点是每个个体学习期都有不同的参数,需要分别调参,最要命的是,每个模型对输入数据的要求也不一样。这样一来,问题建模的过程反而又复杂了。
因此,在应用集成方法时候,关键是生成大量近似独立模型——这些个体学习器便于调参,输入参数要求一致,易于集成。这里,我们以二元决策树为个体学习器,上层算法以某种方式使得使得个体模型相对独立。具体来说,常见得上层算法有:投票(bagging)、提升(boosting)和随机森林(random forests)。
在这里插入图片描述

构建弱分类器:决策树

二元决策树可以看作是简单的条件选择,基于某个特性做“是”或者“否”的判断。每次决策后,可能会引出另外一个决策,或者,生成最终的结果。最上面的节点称为根节点(root node)。根节点通常是特别重要的性质(变量),决策树的深度定义为从上到下遍历树的最长路径。例如下面的例子中,这个决策树的深度就是5.
在这里插入图片描述

import numpy as np
from sklearn import tree
from sklearn.tree import DecisionTreeRegressor
from sklearn.externals.six import StringIO
# a simple data set with y = x + random
nPoints = 100
xPlot = np.linspace(-0.5, 0.5, 100, endpoint=False)
x = [[xi] for xi in xPlot]
# add random noise
np.random.seed(1)
y = [xi + np.random.normal(scale=0.1) for xi in xPlot]
plot.plot(xPlot,y)
plot.axis('tight')
plot.xlabel('x')
plot.ylabel('y')
plot.show()
# decision tree with 1 layer
simpleTree1 = DecisionTreeRegressor(max_depth=1)
simpleTree1.fit(x,y)
with open("simpleTree1.dot",'w') as f:
    f = tree.export_graphviz(simpleTree1, out_file=f)
# decision tree with 2 layers
simpleTree2 = DecisionTreeRegressor(max_depth=2)
simpleTree2.fit(x, y)
# draw the tree
with open("simpleTree2.dot",'w') as f:
    f = tree.export_graphviz(simpleTree2, out_file=f)
    
# compare prediction with true
yHat1 = simpleTree1.predict(x)
yHat2 = simpleTree2.predict(x)
plot.figure()
plot.plot(xPlot, y, label='True_y')
plot.plot(xPlot, yHat1, label='Predict_y1', linestyle="--")
plot.plot(xPlot, yHat2, label='Predict_y2', linestyle=":")
plot.legend(bbox_to_anchor=(1, 0.3))
plot.axis('tight')
plot.xlabel('x')
plot.ylabel('y')
plot.show()

自助采样法

bootstrapping

在介绍Bagging和Boosting之前,首先介绍一下Bootstraping,即自助法:它是一种有放回的抽样方法(可能抽到重复的样本)。它是非参数统计中一种重要的通过估计统计量方差进而进行区间估计的统计方法。

bootstrapping的核心思想

Bootstrap的思想,是生成一系列bootstrap伪样本,每个样本是初始数据有放回抽样。通过对伪样本的计算,获得统计量的分布。例如,要进行1000次bootstrap,求平均值的置信区间,可以对每个伪样本计算平均值。这样就获得了1000个平均值。对着1000个平均值的分位数进行计算, 即可获得置信区间。已经证明,在初始样本足够大的情况下,bootstrap抽样能够无偏得接近总体的分布。

主要步骤:

1)根据抽出的样本计算统计量T。

2)重复上述N次(一般大于1000),得到统计量T。

3)计算上述N个统计量T的样本方差,得到统计量的方差。

Bootstrap实质上是一种再抽样过程,相对于其他方法,在小样本时也具有较好效果。

参见wiki百科关于bootstrapping方法的介绍:https://en.wikipedia.org/wiki/Bootstrapping_(statistics)

bootstrapping与permutation的区别

Permutation test 置换检验是Fisher于20世纪30年代提出的一种基于大量计算(computationally intensive),利用样本数据的全(或随机)排列,进行统计推断的方法,因其对总体分布自由,应用较为广泛,特别适用于总体分布未知的小样本资料,以及某些难以用常规方法分析资料的假设检验问题。在具体使用上它和Bootstrap Methods类似,通过对样本进行顺序上的置换,重新计算统计检验量,构造经验分布,然后在此基础上求出P-value进行推断。

具体看看这篇博客的例子就明白了:
置换检验:https://www.cnblogs.com/bnuvincent/p/6813785.html

bagging

bagging是并行式集成学习方法最著名的代表,从名字就可以看出,它基于自助采样法。给定包含m个样本的数据集,我们先随即取出一个样本放入采样集中,再把这个样本放回到初始数据集,使得下次采样时该样本仍可能被选,这样,经过m次随机采样操作,我们得到含有m个样本的采样集,初始训练集中有的样本在采样集中多次出现,有的没有出现,我们之前计算过这个比例,大概有63.2%的样本会出现在采样集中。

就这样,我们可以采样出T个样本集,每个样本集合中含m个训练样本,然后基于每个采样集训练出一个基学习器,再将这些学习器进行结合,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法/若分类预测时出现两个类收到的票数相同,那么最简单的做法是随机选出一个,也可以进一步考察学习器投票的置信度来确定最终胜者。

bagging方法的主要过程

i) 训练分类器:从整体样本集合中,抽样n* < N个样本 针对抽样的集合训练分类器Ci
ii) 分类器进行投票:最终的结果是分类器投票的优胜结果

boosting

boosting一种典型的基于Bootstrapping思想的应用,其特点是:每一次迭代时训练集的选择与前面各轮的学习结果有关,而且每次是通过更新各个样本权重的方式来改变数据分布。其中主要的是Adaboost (Adaptive boosting),即自适应助推法。

Boosting的算法过程如下:

对于训练集中的每个样本建立权值wi,表示对每个样本的权重, 其关键在与对于被错误分类的样本权重会在下一轮的分类中获得更大的权重(错误分类的样本的权重增加)。

加大分类误差概率小的弱分类器的权值,使其在表决中起到更大的作用,减小分类误差率较大弱分类器的权值,使其在表决中起到较小的作用。每一次迭代都得到一个弱分类器,需要使用某种策略将其组合,成为最终模型,(adaboost给每个迭代之后的弱分类器一个权值,将其线性组合作为最终的分类器,误差小的分类器权值越大。)

关于Boosting的两个核心问题:

1)在每一轮如何改变训练数据的权值或概率分布?

通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。

2)通过什么方式来组合弱分类器?

通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。

为何bagging会降低variance,boosting降低bias?

什么是bias/variance tradeoff?引用下图来自coursera:

在这里插入图片描述
High variance 是model过于复杂overfit,记住太多细节noise,受outlier影响很大;high bias是underfit,model过于简单,cost function不够好。

2 A- bagging随机选取data的subset,outlier因为比例比较低,参与model training的几率也比较低,所以bagging降低了outliers和noise对model的影响,所以降低了variance。
2 B-boosting minimize loss function by definition minimize bias. 因此降低的是bias。

更多参考阅读:

Boosting的代表是AdaBoost,关于AdaBoost,参照以下帖子:
基本原理:http://www.jianshu.com/p/f2017cc696e6
误差分析:http://www.jianshu.com/p/bfba5a91ba15
AdaBoost与前向分步算法:http://www.jianshu.com/p/a712dff0f388
集成学习-Boosting和Bagging异同:https://blog.csdn.net/Mr_Robert/article/details/84448417
https://www.zhihu.com/question/26760839/answer/68915634

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

集成学习:让算法和算法赛跑 的相关文章

  • 集成学习

    中科院人工智能学院面试的时候有问到 xff0c 集成学习有哪些方法 xff0c 各自的优缺点 是因为我在简历上写了KPI异常检测最后需要通过无监督学习或者集成学习来解决 说实话我对集成学习的概念没那么清晰了 xff0c 我只记得裴丹用的随机
  • 集成学习(Ensemble Learning)

    集成学习Ensemble Learning Ensemble LearningDefinitionCommon types of ensemblesBootstrap aggregating Bagging BoostingStacking
  • 机器学习(十一)——集成学习

    集成学习 xff08 ensemble learning xff09 通过构建并结合多个学习器来完成学习任务 根据个体学习器的生成方式 xff0c 目前集成学习的方法大致分为两类 xff0c 即个体学习器之间存在强依赖关系 xff0c 必须
  • 集成学习

    李宏毅机器学习 周志华机器学习第8章 使用sklearn进行集成学习 stacking心得 xgboost实战 bagging xff1a 当原模型已经很复杂的时候 xff0c bias已经很小但variance很大时候 比较容易overf
  • 【机器学习】信用卡欺诈检测 (下采样、SMOTE过采样、集成学习、Pytorch)

    2022 4 17 补充 视频 xff1a 参考 xff1a 6 01 信用卡交易欺诈数据检测 哔哩哔哩 bilibili 参考 xff1a 机器学习 Kaggle 信用卡欺诈检测 Tommy 数据不平衡 ipynb myaijarvis
  • 常用网络协议神图

  • 李宏毅深度学习之集成学习

    1 bagging 没有顺序的 bagging是将单个函数的结果进行average 回归 或voting 分类 当在model很复杂的情况下 担心过拟合问题 可以做bagging 1 1容易过拟合的模型 1 1 1decision tree
  • 集成学习算法:Bagging和随机森林

    学习目标 知道Bagging集成原理 知道随机森林构造过程 知道RandomForestClassifier的使用 了解baggind集成的优点 1 Bagging集成原理 目标 把下面的圈和方块进行分类 实现过程 1 采样不同数据集 2
  • 【Ensemble Learning】第 3 章:混合模型

    在第2章中 您学习了如何以不同方式划分和混合训练数据以构建集成模型 其性能优于在未划分数据集上训练的模型 在本章中 您将学习不同的组装方法 与混合训练数据方法不同 混合模型方法在不同的机器学习模型中使用相同的数据集 然后以不同的方式组合结果
  • 集成学习5-Xgboost原理与调参

    github地址 DataScicence欢迎star 集成学习4 前向分步算法与GBDT 原理与案例 集成学习3 Boosting的原理和案例 集成学习2 bagging的原理与案例分析 集成学习1 投票法的原理和案例分析 Xgboost
  • 机器学习:集成学习

    一 集成学习算法简介 1 什么是集成学习 集成学习通过建立几个模型来解决单一预测问题 它的工作原理是生成多个分类器 模型 各自独立地学习和作出预测 这些预测最后结合成组合预测 因此优于任何一个单分类的做出预测 2 复习 机器学习的两个核心任
  • 集成学习-Voting

    一 什么是集成学习 集成学习是使用一系列学习器进行学习 并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法 一般情况下 集成学习中的多个学习器都是同质的 弱学习器 上面的描述来自百度百科 看定义的话知道
  • Lightgbm 直方图优化算法深入理解

    一 概述 在之前的介绍Xgboost的众多博文中 已经介绍过 在树分裂计算分裂特征的增益时 xgboost 采用了预排序的方法来处理节点分裂 这样计算的分裂点比较精确 但是 也造成了很大的时间开销 为了解决这个问题 Lightgbm 选择了
  • MATLAB算法实战应用案例精讲-【集成算法】集成学习模型Bagging(附Python和R语言代码)

    目录 前言 几个相关概念 几个高频面试题目
  • 【2023硅谷数模笔试题】~ 题目及参考答案

    本章目录 0 前言 1 题目 答案 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 第十一题 声明 0 前言 哈喽 二舅 最近和你们一样 不断被鞭策 今天抽个小空给大家带来的是前几天做的一套笔试题 名称如标题
  • 【软考-中级】系统集成项目管理工程师【总】

    网站 https bm ruankao org cn sign welcome 持续更新中 学习目标 完成2023上半年 软件中考任务 目标23年5月 考试前 完成 相关知识点学习 和练习 核心 十五至尊图 上面图是考试的核心 需要背下来
  • 机器学习之集成学习

    一 介绍 集成学习 Ensemble Learning 是一种机器学习技术 通过结合多个学习器 例如决策树 神经网络 支持向量机等 的预测结果 来达到更好的分类或回归预测性能 集成学习可以通过降低模型的方差 提高模型的稳定性和泛化性能 从而
  • 集成电路模拟版图入门-版图基础学习笔记(五)

    第四部分 版图的艺术 模拟版图和数字版图的首要目标 首先考虑的三个问题 匹配 3 1 匹配中心思想 3 2 匹配问题 3 3 如何匹配 3 4 MOS管 3 5 电阻 3 6 电容 3 7 匹配规则 寄生效应 4 1 寄生的产生 4 2 寄
  • 广告营销用户点击预测分析

    广告营销用户点击预测分析 零 数据集以及数据集简介以及任务分析 一 数据预处理 1 加载检查数据 1 特殊特征 2 特殊特征的处理 3 特殊特征处理后生成的新特征 2 数据类型与缺失值处理 1 查看数据信息 2 数据补全以及类型转换 3 补
  • 2021年系统集成项目管理工程师(软考中级)连夜整理考前重点

    一 信息与信息化 1 信息论奠基者香农认为 信息就是能够用来消除不确定性的东西 8种状态需要3位比特表示 5位比特则可表示64种状态 信息 物质材料 能源是三大戓略资源 2 信息论两个层次 本体论和认识论 3 信息传输模型 信源 编码 信道

随机推荐

  • MySQL DROP TABLE操作以及 DROP 大表时的注意事项

    语法 xff1a 删表 sql view plain copy DROP TABLE Syntax DROP TEMPORARY TABLE IF EXISTS tbl name tbl name RESTRICT CASCADE 可一次删
  • python日期操作类

    coding utf 8 39 39 39 获取当前日期前后N天或N月的日期 39 39 39 from time import strftime localtime from datetime import timedelta date
  • C++中指向常量的指针与常量指针

    1 指向常量的指针 xff1a pointer to const span class token keyword const span span class token keyword double span pi span class
  • Linux系统省略输入用户名密码(字符界面下)

    1 省略密码验证 很简单 xff0c 只需把 etc passwd中的root x 0 0 root root bin bash xff0c 改为root 0 0 root root bin bash xff0c 就可以了 xff0c 就是
  • avc: denied SELinux权限问题解决

    1 SELinux简介 SELinux是Google从android 5 0开始 xff0c 强制引入的一套非常严格的权限管理机制 xff0c 主要用于增强系统的安全性 然而 xff0c 在开发中 xff0c 我们经常会遇到由于SELinu
  • 解决编译报错:VINTF parse error:“android.hardware.secure_element“ has a conflict.

    VINTF parse error Cannot add manifest fragment vendor etc vintf manifest android hardware secure element 64 1 2 service
  • HIDL转AIDL编译报错:ISecureElement does not have VINTF level stablity, but interface requires it.

    在m vendor sprd hardware secure element update api生成stable接口时 xff0c 总是报错如下 找了一圈找不到解决方法 xff0c 最后误打误撞地解决了 xff0c 供大家参考 HIDL转
  • Mac上的远程连接工具Royal TSX,比FinalShell更值得被推荐

    安装Royal TSX xff1a https blog csdn net Darling qi article details 120289137 使用Royal TSX xff1a https blog csdn net Bluffin
  • libjvm.so: ELF file OS ABI invalid

    Error dl failure on line 893 Error failed 某目录 jdk jre lib amd64 server libjvm so because 某目录 jdk jre lib amd64 server li
  • win11启用旧右键菜单(不折叠)的方案,亲测有效

    我电脑的winodws11版本如下 在以上win版本下 xff0c 测试网上说的以下几个办法都不行 1 权利与暗访时在终端运行 reg exe delete HKCU Software Classes CLSID 86ca1aa0 34aa
  • Android中的动画总结

    Android 动画 三种总结 xff1a 属性动画 xff1a 动态的改变属性产生动画效果 xff1b 改变动画的属性 xff0c 两个重要的类 xff1a 1 ValueAnimator 类是先改变值 xff0c 然后 手动赋值 给对象
  • ubuntu自动登录tty终端的最简方法

    背景 在嵌入式系统经常需要自动登录tty xff0c 以实现业务程序开机启动的效果 网上有篇文章ubuntu自动登录tty1 shell text 配置转发挺多 xff0c 但我弄明白原理后 xff0c 觉得可以进一步简化 xff0c 经测
  • git为指定项目设置用户名密码

    我们如果没有为项目设置用户名密码 xff0c 那么每次提交都会有提示账号和密码输入 xff1a 1 找到你项目的半隐藏文件 git文件夹 xff0c 通常只要git init 就会生成这样一个文件夹 xff0c 现在双击进入文件夹 xff1
  • JAVA 访问windows共享文件夹

    一 使用技术 JCIFS框架对Windows共享文件夹进行读写 xff0c 使用了SMB通信协议 xff0c 它为局域网内不同的计算机之间提供文件和打印机等资源共享服务 二 共享文件夹设置 测试共享文件夹机器windows版本为win10家
  • 前端代码调试:Webstorm调试js

    前言 目前前端开发 JavaScript的debug一般都是用chrome和firefox的开发者工具进行调试 xff0c 浏览器工具使用不方便 xff0c webstorm支持了在代码上打断点 xff0c 在编辑器里debug js代码
  • CV:基本概念和工具

    文章目录 计算机视觉像素 xff0c 颜色 xff0c 通道 xff0c 图像和颜色空间的概念图像文件后缀有损压缩和无损压缩 Python的计算机视觉库PIL xff1a python 图像处理类库载入PIL库基本操作命令 openCVop
  • OCR技术概览

    OCR技术概览 OCR Optical Character Recognition 光学字符识别技术主要分为手写体识别和印刷体识别两类 印刷体识别比手写体识别要简单 因为印刷体更规范 字体来自于计算机字库 尽管印刷过程中可能会发生不清晰 粘
  • CV:图像色彩空间及色彩处理

    文章目录 基本概念RGB空间HSV空间HSL空间 色彩变换灰度变换色彩反向 调整像素区间增强对比度直方图均衡化 图像平滑 减少噪声图像平均高斯滤波 图像梯度sobel算子 scharr算子prewitt算子Laplacian 算子 参考及更
  • OpenCV角点检测: Harris算子, ShiTomasi算子

    角点检测 角点的特征检测与匹配是Computer Vision 应用总重要的一部分 xff0c 这需要寻找图像之间的特征建立对应关系 点 xff0c 也就是图像中的特殊位置 xff0c 是很常用的一类特征 xff0c 点的局部特征也可以叫做
  • 集成学习:让算法和算法赛跑

    文章目录 集成学习的基本概念构建弱分类器 xff1a 决策树自助采样法bootstrappingbootstrapping的核心思想bootstrapping与permutation的区别 baggingboosting为何bagging会