机器学习---集成学习(三个臭皮匠顶个诸葛亮)

2024-02-12 02:30

本文主要是介绍机器学习---集成学习(三个臭皮匠顶个诸葛亮),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基本思路

群体智慧:如果能从所有的科学家中选择一群科学家组成一个团队,并且团队中的每个科学家都略强于随机选择的一个科学家,那么有理由相信这个科学家团队能比单个科学家做出更好的决定。
这样的群体智慧用到机器学习的学习器上也成立,集合多个个体学习器的方法称为集成学习
目前集成学习主要分成两大流派:

  • bagging
  • boosting

1 bagging

一棵树是决策树,多棵树是随机森林,解决决策树泛化能力不足的缺点
随机森林:

  • 随机选择样本
  • 随机选择特征

而且是有放回的随机抽样:自主采样法(bootstap sampling)
分类器并行。
在这里插入图片描述
投票法:少数服从多数

2 boosting(提升)

自适应地改变训练样本的分布,使得弱分类器聚焦到那些很难分类的样本上。它的做法是每一个训练样本赋予一个权重,在每一轮训练结束后自动地调整权重。
弱分类器是串行的,因此是个迭代的过程。
在这里插入图片描述

  • adaboost:boosting + 决策树
  • GBDT:梯度提 升树
  • XGBoost:

2.1 结合策略

多个学习器并不是简单的拼凑在一起,而是有策略的组合在一起,机器学习是靠数据驱动的,因此通过训练集就能找到能让每个学习器发挥最大效果的策略组合。
常用的组合策略有:

2.1.1 平均法

算术平均
加权平均
H ( x ) = 1 / n ∑ i = 1 n w i h i s . t . w I ≥ 0 , ∑ i = 1 n w i = 1 H(x)=1/n\sum_{i=1}^{n}w_ih_i \\ s.t. w_I \geq0,\sum_{i=1}^{n}w_i=1 H(x)=1/ni=1nwihis.t.wI0,i=1nwi=1

2.2.2 投票法

分类常用

  • 相对多数投票法:少数服从多数
  • 绝对多数投票法:投票数过半数
  • 加权投票法:权重

2.2.3 学习法

代表:stacking
对结果再加一层学习器,将训练集弱学习器的学习结果作为输入,训练集的输出作为输出,重新训练一个学习器来得到最终结果。
kaggle中一般用学习法。

2.2 Adaboost (adaptive boosting)

Adaboost 被认为是模型为加法模型,损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。

2.2.1 加法模型

加法模型可以看作模型是一系列基函数的线性组合。
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^{M}\beta_mb(x;\gamma_m) f(x)=m=1Mβmb(x;γm)

b ( x ; γ m ) b(x;\gamma_m) b(x;γm)是基函数, γ m \gamma_m γm是基函数的参数, β m \beta_m βm是基函数的系数。

2.2.2 损失函数

指数函数
L ( y , f ( x ) ) = e x p ( − y f ( x ) ) L(y,f(x)) = exp(-yf(x)) L(y,f(x))=exp(yf(x))

我们总是希望损失函数极小化:
m i n β m , γ m ∑ i = 1 N L ( y i , f ( x i ) ) = m i n β m , γ m ∑ i = 1 N L ( y i , ∑ i = 1 M β m b ( x i ; γ m ) ) \underset{\beta_m,\gamma_m}{min}\quad\sum_{i=1}^{N}L(y_i,f(x_i))\\ =\underset{\beta_m,\gamma_m}{min}\quad \sum_{i=1}^{N}L(y_i,\sum_{i=1}^{M}\beta_mb(x_i;\gamma_m)) βm,γmmini=1NL(yi,f(xi))=βm,γmmini=1NL(yi,i=1Mβmb(xi;γm))

2.2.3 前向分布算法

通常上面的损失函数是一个复杂的优化问题。但因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数项,就可以简化优化的复杂度。
具体每步只需要优化如下的损失函数:

  1. 初始化模型 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0;

  2. 对每个样本 f o r m = 1 , 2 , . . . M for\quad m = 1,2,...M form=1,2,...M

    • 极小化损失函数
      a r g    m i n β m , γ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x ; γ ) ) ) \underset{\beta_m,\gamma_m}{arg\;min}\sum_{i=1}^{N}L(y_i,f_{m-1}(x_i)+\beta b(x_;\gamma))) βm,γmargmini=1NL(yi,fm1(xi)+βb(x;γ)))

    • 更新加法模型 f m ( x ) f_m(x) fm(x)
      f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta_mb(x;\gamma_m) fm(x)=fm1(x)+βmb(x;γm)

  3. 得到加法模型:
    f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^{M}\beta_mb(x;\gamma_m) f(x)=fM(x)=m=1Mβmb(x;γm)

只需把基函数换成弱分类器 G m ( x ) G_m(x) Gm(x),就能得到adaboost算法:

2.2.4 adaboost

输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , y ∈ { − 1 , + 1 } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},y\in\{-1,+1\} T={(x1,y1),(x2,y2),...,(xN,yN)},y{1,+1}
输出:最终分类器 G ( x ) G(x) G(x)

  1. 初始化训练数据的权值分布:
    赋予训练集中每个样本一个权重,构成权重向量D,并假设每个权重都相等。
    D = ( w 11 , . . . , w 1 i , . . . , w i N ) , w 1 i = 1 N D=(w_{11},...,w_{1i},...,w_{iN}),w_{1i}=\dfrac{1}{N} D=(w11,...,w1i,...,wiN),w1i=N1

  2. 加法模型:叠加模型直到满足条件
    f o r m = 1 , 2 , . . . , M : for\quad m=1,2,...,M: form=1,2,...,M:(m为模型个数)
    (a). 使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本分类器:
    G m ( x ) : χ → { − 1 , + 1 } G_m(x):\chi \to \{-1,+1\} Gm(x):χ{1,+1}

    (b). 计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率:
    e m = 分 错 的 数 量 样 本 总 数 e_m=\dfrac{分错的数量}{样本总数} em=

    e m = ∑ i = 1 N w m i I ( y i    ≠ G m ( x i ) ) ∑ i = 1 N w m i = ∑ i = 1 N w m i I ( y i    ≠ G m ( x i ) ) e_m=\dfrac{\sum_{i=1}^{N}w_{mi}I(y_i\;\neq G_m(x_i))}{ \sum_{i=1}^{N}w_{mi} } \\=\sum_{i=1}^{N}w_{mi}I(y_i\;\neq G_m(x_i)) em=i=1Nwmii=1NwmiI(yi̸=Gm(xi))=i=1NwmiI(yi̸=Gm(xi))

    ©.计算分类器 G m ( x ) G_m(x) Gm(x)的权重系数
    α m = 1 2 l o g 1 − e m e m \alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1em

    1 − e m \quad \quad 1-e_m 1em是准确率, 1 − e m e m \dfrac{1-e_m}{e_m} em1em是相对准确率,可见错误率 e m e_m em上升,分类器所占的权重 α m \alpha_m αm就会降低。
    (d). 更新训练数据集的权重分布
    D m + 1 = ( w m + 1 , 1 , w m + 1 , 2 , . . . . , w m + 1 , N ) D_{m+1}=(w_{m+1,1},w_{m+1,2},....,w_{m+1,N}) Dm+1=(wm+1,1,wm+1,2,....,wm+1,N)

w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)) wm+1,i=Zmwmiexp(αmyiGm(xi))

Z m Z_m Zm是归一化因子,它使 D m D_m Dm成为一个概率分布:
Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^{N}w_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=i=1Nwmiexp(αmyiGm(xi))

  1. 构建基本分类器的线性组合:
    f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^{M}\alpha_mG_m(x) f(x)=m=1MαmGm(x)

得到最终分类器:
G ( x ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(\sum_{m=1}^{M}\alpha_mG_m(x)) G(x)=sign(m=1MαmGm(x))

Adaboost的训练误差分析表明,Adaboost的每次迭代可以减少它在训练数据集上的分类误差率,这说明了它作为提升方法的有效性。

Adaboost的优点:

  • 易用,需要调节的参数少;
  • 弱分类器可以是任何模型,比如逻辑回归, 线性回归等等, 最常用的是决策树桩;

3. 提升树

提升树是以分类树和回归树为基本分类器的提升方法,提升方法采用加法模型与前向分布算法,以决策树为基函数的提升方法称为提升树。

3.1梯度提升树算法

当损失函数是平方损失和 指数损失函数时,每一步的优化是简单的。但对于一般损失函数而言,则利用损失函数的负梯度去近似平方损失中的残差。

代码实现

决策树桩:基于单个特征的单层决策树,相当于在分类平面的一条水平线
每个弱分类器只能选择一个特征。

参考:

  1. 李航- 统计学习
  2. https://zhuanlan.zhihu.com/p/38507561
  3. https://www.bilibili.com/video/av56033745?from=search&seid=17687865746952149587

这篇关于机器学习---集成学习(三个臭皮匠顶个诸葛亮)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

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