机器学习理论 | 周志华西瓜书 第八章:集成学习

2024-04-10 23:48

本文主要是介绍机器学习理论 | 周志华西瓜书 第八章:集成学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第八章 集成学习

此系列文章旨在提炼周志华《机器学习》的核心要点,不断完善中…


8.1 个体与集成

  • 集成学习的一般结构
    • 示意图
      在这里插入图片描述
    • 个体学习器(individual learner)
      • 基学习器(base learner)
        同质(homogenous)集成:集成中只包含同种类型的个体学习器
        基学习器——同质集成中的个体学习器
        基学习算法(base learning algorithm)——相应的学习算法
      • 组建学习器(component learner)
        异质(heterogenous)集成:集成中包含不同类型的个体学习器
        同质集成中的个体学习器亦称“组建学习器”或直接称为个体学习器
  • 弱学习器(weak learner)(泛化性能略优于随机预测的学习器)
    • 集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器
    • 如何选择集成学习的个体——集成个体“好而不同”
    • 假设基分类器的错误率为(对每个基分类器hi): P ( h i ( x ) = f̸ ( x ) ) = ε P(h_i(\bm x) =\not f(\bm x))=\varepsilon P(hi(x)=f(x))=ε
      二分类的判定准则: H ( x ) = s i g n ( ∑ i = 1 [ T / 2 ] h i ( x ) ) H(\bm x)=sign(\sum_{i=1}^{[T/2]}h_i(\bm x)) H(x)=sign(i=1[T/2]hi(x))
      假设基分类器的错误率相互独立,则由Hoeddcling不等式可知,集成的错误率为: P ( H ( x ) = f̸ ( x ) ) = ∑ k = 0 [ T / 2 ] C T k ( 1 − ε ) k ε T − k ≤ e x p ( − 1 2 T ( 1 − 2 ε ) 2 ) P(H(\bm x)=\not f(\bm x))=\sum_{k=0}^{[T/2]}C_T^k(1-\varepsilon)^k\varepsilon^{T-k}≤exp(-\frac 1 2 T(1-2\varepsilon)^2) P(H(x)=f(x))=k=0[T/2]CTk(1ε)kεTkexp(21T(12ε)2)
  • 集成学习大类(根据个体学习器的生成方式)
    • 1)Boosting为代表
      个体学习器间存在强依赖关系
      必须串行生成的序列化方法
    • 2)Bagging和随机森立为代表
      个体学习器间不存在强依赖关系
      可同时生成的并行化方法

8.2 Boosting

  • 特点与工作机制
    定义:Boosting是一族可将弱学习器提升为强学习器的算法
    关注:Boosting主要关注降低偏差
    工作机制
    • 1.初始训练集训练->基学习器
    • 2.根据基学习器的表现->调整样本分布->使得先前基学习出错的训练样本在后续受到更多关注
    • 3.基于调整后的样本分布来训练下一个基学习器
    • 4.重复进行,直至基学习器数目达到事先指定的值T
    • 5.将这T个基学习器进行加权结合
  • 代表算法—AdaBoost
    1)主要推导:基于加性模型(additive model)(基学习器的线性组合): H ( x ) = ∑ t = 1 T a t h t ( x ) , H(\bm x)=\sum_{t=1}^Ta_th_t(\bm x), H(x)=t=1Tatht(x)来最小化指数损失函数: l e x p ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] l_{exp}(H|D)=\mathbb{E}_{\bm x\sim \mathcal{D}}[e^{-f(\bm x)H(\bm x)}] lexp(HD)=ExD[ef(x)H(x)]
    2)算法
    在这里插入图片描述
    3)两种方法
    重赋权法(re-weighting):训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重
    重采样法(re-sampling):每一轮学习中,根据样本分布对训练集重新采样,再用重采样而得的样本集对基学习器进行训练

8.3 Bagging与随机森林

8.3.1 Bagging(Bootstrap AGGregatING)

  • 介绍
    并行式集成学习方法代表,基于自助采样法(bootstrap sampling)
    基本流程:采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合
    对预测输出进行结合
    主要关注:降低方差
    • 分类任务:简单投票法(相同:随机或考察置信度)
    • 回归任务:简单平均法
  • 算法描述
    具体算法
    在这里插入图片描述
    高效的集成学习算法,标准AdaBoost只适用于二分类任务,Bagging能不经修改地用于对分类、回归等任务
  • 包外估计(out-of-bag estimate)
    自助采样原理:36.8%包外估计
    未使用x训练的基学习器在x上的预测:
    H o o b ( x ) = a r g m a x y ∈ Y ∑ t = 1 T I ( h t ( x ) = y ) ∗ I ( x ∉ D t ) H^{oob}(\bm x)=arg\ max_{y\in \mathcal{Y}}\sum_{t=1}^T\mathbb{I}(h_t(\bm x)=y)*\mathbb{I}(\bm x\notin D_t) Hoob(x)=arg maxyYt=1TI(ht(x)=y)I(x/Dt)
    Bagging泛化误差的包外估计:
    ε o o b = 1 ∣ D ∣ ∑ ( x , y ) ∈ D I ( H o o b ( x ) = y̸ ) \varepsilon^{oob}=\frac 1 {|D|}\sum_{(\bm x,y)\in D}\mathbb{I}(H^{oob}(\bm x)=\not y) εoob=D1(x,y)DI(Hoob(x)=y)
    包外估计其他用途
    • 基学习器为决策树:使用包外样本辅助剪枝
    • 用于估计决策树中各结点的后验概率以辅助对零样本结点的处理
    • 基学习器为神经网络:使用包外样本辅助early stop减小过拟合风险

8.3.2 随机森林(RF, Random Forest)

  • 1)介绍:Bagging的一个扩展变体——进一步在决策树的训练过程中引入了随机属性选择
    • 对基决策树每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分
    • 参数k控制随机性的引入程度
      k=d,基决策树的构建与传统决策树相同
      k=1,随机选择一个属性用于划分
      一般情况:推荐值:k=log2d
  • 2)RF与Bagging对比
    RF收敛性与Bagging相似
    RF起始性能往往较差(尤其当集成中只包含一个基学习器时)
    随着个体学习器数目的增加,随机森林通常会收敛到更低的泛化误差
    RF训练效率优于Bagging(只需考察一个属性子集)

8.4 结合策略

8.4.1 学习器结合的好处

统计方面:减少泛化性能不佳的风险
计算方面:降低陷入糟糕局部极小点的风险
表示的方面:学得更好的近似
在这里插入图片描述

8.4.2 基学习器结合的常见策略

  • 平均法(averaging):对数值型输出hi(x)最常见的结合策略
    • 简单平均法(个体学习器性能相近)
      H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(\bm x)=\frac 1 T\sum_{i=1}^Th_i(\bm x) H(x)=T1i=1Thi(x)
    • 加权平均法(集成学习研究基本出发点,个体学习器性能相差较大时采用)
      H ( x ) = ∑ i = 1 T w i h i ( x ) , 权 重 : w i ≥ 0 , ∑ i = 1 T w i = 1 H(\bm x)=\sum_{i=1}^Tw_ih_i(\bm x),权重:w_i≥0,\sum_{i=1}^Tw_i=1 H(x)=i=1Twihi(x):wi0i=1Twi=1
  • 投票法(voting):对分类任务来说最常见的结合策略
    • 绝对多数投票法:标记过半数即为该标记,否则拒绝
    • 相对多数投票法:多个最高票随机选
    • 加权投票法
    • 现实任务:不同类型个体学习器可能产生不同类型的h(x),不可混用
  • 学习法:训练数据很多时更强大的结合策略,通过另一个学习器来进行结合
    • 典型代表:Stacking
      个体学习器——初级学习器
      用于结合的学习器——次级学习器/元学习器(meta-learner)
    • Stacking算法描述在这里插入图片描述
    • 次级学习器的输入属性表示和次级学习算法对Stacking集成的泛化性能有很大影响
      将初级学习器的输出类概率作为次级学习器的输入属性
      多响应线性回归(Multi-response Linear Regression MLR)作为次级学习算法效果较好
      在MLR中使用不同的属性集更佳
    • 贝叶斯模型平均(Bayes Model Averaging BMA)与stacking对比
      理论:数据生成模型恰在当前考虑的模型中,且噪声小,则BMA不差于Stacking
      现实中:无法确保数据生成模型一定在当前考虑的模型中甚至难以近似,Robust:Stacking>BMA(对误差敏感)

8.5 多样性

  • 误差-分歧分解(error-ambiguity decomposition)
    • 基本算式(全样本上):
      ∑ i = 1 T w i ∫ A ( h i ∣ x ) p ( x ) d x = ∑ i = 1 T w i ∫ E ( h i ∣ x ) p ( x ) d x − ∫ E ( H ∣ x ) p ( x ) d x \sum_{i=1}^Tw_i\int A(h_i|\bm x)p(\bm x)d\bm x=\sum_{i=1}^Tw_i\int E(h_i|\bm x)p(\bm x)d\bm x-\int E(H|\bm x)p(\bm x)d\bm x i=1TwiA(hix)p(x)dx=i=1TwiE(hix)p(x)dxE(Hx)p(x)dx
      E = E ˉ − A ˉ E=\bar{E}-\bar{A} E=EˉAˉ
      集成泛化误差: E = ∫ E ( H ∣ x ) p ( x ) d x E=\int E(H|\bm x)p(\bm x)d\bm x E=E(Hx)p(x)dx
      个体学习器hi在全样本上的泛化误差: E i = ∫ E ( h i ∣ x ) p ( x ) d x E_i=\int E(h_i|\bm x)p(\bm x)d\bm x Ei=E(hix)p(x)dx
      个体学习器hi在全样本上的分歧项: A i = ∫ A ( h i ∣ x ) p ( x ) d x A_i=\int A(h_i|\bm x)p(\bm x)d\bm x Ai=A(hix)p(x)dx
      个体学习器泛化误差的加权均值: E ˉ = ∑ i = 1 T w i E i \bar{E}=\sum_{i=1}^Tw_iE_i Eˉ=i=1TwiEi
      个体学习器的加权分歧值: A ˉ = ∑ i = 1 T w i A i \bar{A}=\sum_{i=1}^Tw_iA_i Aˉ=i=1TwiAi
    • 现实任务很难直接对E右边式子简化
      定义在整个样本空间
      个体学习器的加权分歧值不是一个可直接操作的多样性度量
    • 推导只适合回归学习,难以推广与分类
  • 多样性度量(diversity measure)
    • 基本:预测结果列联表在这里插入图片描述
    • 不合度量(disagreement measure)
      值域[0,1],值大多样性大: d i s i j = b + c a + b + c + d dis_{ij}=\frac{b+c}{a+b+c+d} disij=a+b+c+db+c
    • 相关系数(correlation coefficient)
      值域[-1,1],衡量 h i h_i hi h j h_j hj相关性: ρ i j = a d − b c ( a + b ) ( a + c ) ( c + d ) ( b + d ) \rho_{ij}=\frac{ad-bc}{\sqrt{(a+b)(a+c)(c+d)(b+d)}} ρij=(a+b)(a+c)(c+d)(b+d) adbc
    • Q-统计量(Q-statistic)
      与相关系数符号相同,绝对值≤相关系数绝对值: Q i j = a d − b c a d + b c Q_{ij}=\frac {ad-bc}{ad+bc} Qij=ad+bcadbc
    • k统计量(k-statistic)
      分类器hi、hj在D完全一致;若偶然,k=0,k通常非负,只在达成一致概率低于偶然取负值: K = P 1 − P 2 1 − P 2 ; P 1 = a + d a + b + c + d ; P 2 = ( a + b ) ( a + c ) + ( c + d ) ( b + d ) ( a + b + c + d ) 2 \mathcal{K}=\frac{P_1-P_2}{1-P_2};P_1=\frac{a+d}{a+b+c+d};P_2=\frac{(a+b)(a+c)+(c+d)(b+d)}{(a+b+c+d)^2} K=1P2P1P2;P1=a+b+c+da+d;P2=(a+b+c+d)2(a+b)(a+c)+(c+d)(b+d)
  • 多样性增强
    • 数据样本扰动
      对不稳定基学习器很有用:决策树、神经网络
      对稳定学习器作用不大:线性学习器、支持向量机、朴素贝叶斯、k近邻学习器等
    • 输入属性扰动
      随机子空间(random subspace)算法
      在这里插入图片描述
    • 输出表示扰动
      翻转法(Flipping Output):随机改变一些训练样本的标记
      输出调制法(Output Smearing):将分裂输出转化为回归输出后构建个体学习器
      ECOC法:利用纠错输出码将多分类任务拆解为一系列二分类任务来训练基学习器
    • 算法参数扰动
      负相关法(Negative Correlation):显式地通过正则化项来强制个体神经网络使用不同的参数
      对参数较少的算法,可通过将其学习过程中某些环节用其他类似方式代替,从而扰动

这篇关于机器学习理论 | 周志华西瓜书 第八章:集成学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892495

相关文章

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用

SpringBoot如何集成Kaptcha验证码

《SpringBoot如何集成Kaptcha验证码》本文介绍了如何在Java开发中使用Kaptcha生成验证码的功能,包括在pom.xml中配置依赖、在系统公共配置类中添加配置、在控制器中添加生成验证... 目录SpringBoot集成Kaptcha验证码简介实现步骤1. 在 pom.XML 配置文件中2.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;