adaboost提升算法

2023-05-16

引言

俗话说得好,三个臭皮匠赛过诸葛亮。更主要的是三个臭皮匠好找,一个诸葛亮太难找了。在机器学习里面也是一样的。我们可以设计出各种分类器,然而分类器的效果确实不一而同的,相对而言,效果较差的分类器比效果很好的分类器更好设计,后者很多时候可遇而不可求。那么是否有什么方法能够将一系列的弱分类器组合,使其能够提示分类效果呢?这就是机器学习里面的提升学习。而且后来Schapire证明强可学习与弱可学习是等价的,这个就很完美了,这样我们就有了理论指导,通过一系列的弱学习算法可以提升为强学习算法,adaboost就是最重要的一个例子。

提升算法的思想

提升算法通过提高前面分类错误的样本的权重,是后面的分类器更加关注这些错误样本的分类,进而能够分而治之,使分类器重点关注不同的样本。

adaboost算法

下面我们先来介绍adaboost算法,后面再对算法做推导解释。(猜想adaboost算法应该是先提出的算法,后续才找个合理的解释。)

输入

  • 训练数据集 D={(x1,y1),...,(xN,yN)} D = { ( x 1 , y 1 ) , . . . , ( x N , y N ) }
  • 弱学习算法

算法过程


  • 初始化训练数据的权值分布为 W1=(w11,...,w1N) W 1 = ( w 11 , . . . , w 1 N ) 其中 W1i=1N W 1 i = 1 N
  • 进行迭代训练,即对 m=1,2,...,M m = 1 , 2 , . . . , M

  • 使用权重为 Wm W m 的训练数据训练学习器 Gm(x) G m ( x )
  • 计算 Gm(x) G m ( x ) 上的训练误差率 em=P(Gm(xi)yi)=Ni=1wmiI(Gm(xi)yi) e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i )
  • 计算 Gm(x) G m ( x ) 的系数 αm=12log1emem α m = 1 2 l o g 1 − e m e m
  • 更新训练集的权重 Wm+1=(wm+1,1,...,wm+1,N) W m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , N ) 其中 wm+1,1=xmiZmexp(αmyiGm(xi)) w m + 1 , 1 = x m i Z m e x p ( − α m y i G m ( x i ) ) ,其中 Zm Z m 是规范化因子,即 Zm=Ni=1wmiexp(αmyiGm(xi)) Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) )
  • 构建分类器的线性组合 f(x)=Mm=1αmGm(x) f ( x ) = ∑ m = 1 M α m G m ( x )
  • 得到最终的分类器为 G(x)=sign(f(x))=sign(Mm=1αmGm(x)) G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) )

输出

  • 最终的分类器 G(x) G ( x )

算法很简单也很好理解,同时很好用,而且效果确实很好,这就够了。

本质上讲权重在 em e m 出影响了分类器的选择,进而影响了数据分布,在这里将去权重间接的引入到了数据集中,影响了训练数据的分布。在一些书中说通过改变权重影响训练数据集的分布,其实就是这个意思,并不是真的修改了数据集的分布,而是通过误差率选择了分类效果最好的学习器,使分类器能够偏向去正确分类之前错误分类的数据。

过拟合

有了算法,那么还有一个问题,就是算法的过拟合问题。adaboost有很强的抗过拟合能力,然而很遗憾的是,针对adaboost问题的抗过拟合原因,至今没有一个比较完美的解释,虽然大牛们做了很多工作,但是依旧还是有很大的困难。一种猜想是通过多种分类器的组合,天然的引入了多样性,使算法不易过拟合。

算法解释

上面我们提出了算法,这里我们尝试利用数学推导来解释一下为什么adaboost这样设计是合理的。

对于adaboost可以理解为算法模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二分类学习算法

给定加法模型 f(x)=Mm=1βmb(xi,γm) f ( x ) = ∑ m = 1 M β m b ( x i , γ m ) ,损失函数为 L(x,f(x)) L ( x , f ( x ) ) ,则问题转化为最小化损失函数,即 minβm,γmNi=1L(yi,Mm=1βmb(xi,γm)) m i n β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i , γ m ) )

对于这个公式,基本上没有办法直接求得解析解,因此我们可以利用前向分步算法来近似求解。

前向分步算法

前向分步算法的思想就是每次只优化一个基函数机器系数,逐步逼近目标,最后得到目标的近似值。


  • 初始化 f(x)=0 f ( x ) = 0
  • m=1,2,...,M m = 1 , 2 , . . . , M

  • 极小化损失函数 (βm,γm)=argminβ,γ(Ni=1L(yi,fm1(xi)+βb(xi,γ))) ( β m , γ m ) = a r g m i n β , γ ( ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i , γ ) ) )
  • 更新 fm(x)=fm1+βmb(x,γm) f m ( x ) = f m − 1 + β m b ( x , γ m )
  • 得到加法模型 f(x)=Mm=1βmb(x,γm) f ( x ) = ∑ m = 1 M β m b ( x , γ m )

adaboost算法解释

由前文,adaboost算法的分类器如下:

f(x)=Mm=1αmGm(x) f ( x ) = ∑ m = 1 M α m G m ( x )

根据数学归纳法,假设 m1 m − 1 轮,根据前向分步算法,已经得到:

fm1(x)=fm2(x)+αm1Gm1(x) f m − 1 ( x ) = f m − 2 ( x ) + α m − 1 G m − 1 ( x )

则在第 m m 轮有:

fm(x)=fm1(x)+αmGm(x) f m ( x ) = f m − 1 ( x ) + α m G m ( x )

目标:得到 αm,Gm(x) α m , G m ( x ) 使得 fm(x) f m ( x ) 在训练集上的指数损失 L(y,f(x))=exp[yf(x)] L ( y , f ( x ) ) = e x p [ − y f ( x ) ] 最小。

(αm,Gm(x))=argminα,GNi=1exp(yi(fm1(xi)+αmGm(x))) ( α m , G m ( x ) ) = a r g m i n α , G ∑ i = 1 N e x p ( − y i ( f m − 1 ( x i ) + α m G m ( x ) ) )

前一项 w¯mi=exp(yifm1(xi)) w ¯ m i = e x p ( − y i f m − 1 ( x i ) ) 跟最小化 (αm,Gm(x)) ( α m , G m ( x ) ) 无关,

因此
(αm,Gm(x))=argminα,GNi=1w¯miexp(yiαmGm(x)) ( α m , G m ( x ) ) = a r g m i n α , G ∑ i = 1 N w ¯ m i e x p ( − y i α m G m ( x ) )

则最小的 Gm(x) G m ( x ) 为:

Gm(x)=argminGNi=1w¯miI(yiG(xi)) G m ∗ ( x ) = a r g m i n G ∑ i = 1 N w ¯ m i I ( y i ≠ G ( x i ) )

对于 αm α m ∗ ,有:

Ni=1w¯miexp(yiαmGm(x))=yiGm(xi)w¯mieα+yiGm(xi)w¯mieα ∑ i = 1 N w ¯ m i e x p ( − y i α m G m ( x ) ) = ∑ y i ∈ G m ( x i ) w ¯ m i e − α + ∑ y i ∉ G m ( x i ) w ¯ m i e α

=(eαeα)Ni=1w¯miI(yiG(xi))+eαNi=1w¯mi = ( e α − e − α ) ∑ i = 1 N w ¯ m i I ( y i ≠ G ( x i ) ) + e − α ∑ i = 1 N w ¯ m i

α α 进行求导,有:

(eα+eα)Ni=1w¯miI(yiG(xi))eαNi=1w¯mi=0 ( e α + e − α ) ∑ i = 1 N w ¯ m i I ( y i ≠ G ( x i ) ) − e − α ∑ i = 1 N w ¯ m i = 0

可以得到 αm=12log(w¯miw¯miI(yiG(xi))1) α m ∗ = 1 2 l o g ( ∑ w ¯ m i ∑ w ¯ m i I ( y i ≠ G ( x i ) ) − 1 )

em=w¯miI(yiG(xi))w¯mi=wmiI(yiG(xi)) e m = ∑ w ¯ m i I ( y i ≠ G ( x i ) ) ∑ w ¯ m i = w m i I ( y i ≠ G ( x i ) )

有: αm=12log1emem α m ∗ = 1 2 l o g 1 − e m e m

αm α m 的更新与adaboost算法的 αm α m 的更新形式一致,因此adaboost可以看做是算法模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二分类学习算法

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

adaboost提升算法 的相关文章

  • C语言学习:数据类型

    在C语言中 xff0c 数据类型可以分为以下几种 xff1a 类型描述基本类型C语言中的算术类型 xff0c 包含整数型和浮点型枚举类型C语言中的算术类型 xff0c 用来定义在程序中只能赋予其一定的离散整数值的变量 void类型类型说明符
  • 典型相关分析(CCA)

    CCA是数据挖掘中重要的算法 xff0c 可以挖掘出数据间的关联关系的算法 基础知识 如何衡量两个变量之间的相关性呢 xff1f 我们有相关系数 xff0c 如下所示 xff1a X Y 61 c o v X Y D X D Y X
  • Android 按键模拟输入事件和Monitor工具的使用

    有时候 xff0c 进行Android开发 xff0c 会遇到屏幕会失灵的情况 xff0c 但是显示无问题 xff0c 这时候可以使用一些工具 手段 xff0c 在电脑端控制模拟屏幕输入 xff0c 或者使用adb 相关命令模拟按键事件输入
  • Android APK获取平台系统签名权限

    1 修改AndroidManifest xml xff0c 改变uid为android uid system xff0c 使之与Settings能够共享数据空间 lt xml version 61 34 1 0 34 encoding 61

随机推荐

  • gradlew编译时出现Unsupported major.minor version 52.0

    Android apk命令行编译时 xff0c 出现如下错误 xff1a Unsupported major minor version 52 0 先摆上结论 xff1a 1 有可能是compileSdkVersion和buildToolV
  • Android NE发生定位辅助之addr2line

    当发生NE时 xff0c 可以通过addr2line来辅助定位发生点 举个例子 Exception Class Native NE Exception Type SIGABRT Current Executing Process pid 3
  • Android N编译之Out of memory error

    之前本地环境编译一直是正常的 xff0c 后来更新代码后 xff0c 出现编译不过 提示out of memory 但是查看swap和内存都还是够的 里面有个提示 xff0c try increasing heap size with ja
  • Android R源码Settings之NFC与Tap&pay

    Android R 又对 Tap amp pay菜单 进行了更新 xff0c 变得更加合理化 xff0c 人性化了 编辑于2020 4 20 12 24 10 xff09 Android R Tap amp pay菜单 如图可知 xff0c
  • [NOTE]Android N SmartLock缺少很多功能

    有个Android项目刚启动不久时 xff0c 测试SmartLock时 xff0c 发现里面只有On body detection xff0c Trusted places Trusted devices Trusted face和Tru
  • Launcher壁纸来源

    Launcher是个特殊APK xff0c 但说到底还是个应用 xff0c 想要在上面展示壁纸 xff0c 自然是来自应用本身 xff0c 要么就是Framework public资源 首先 xff0c 根据长按Launcher主界面空白处
  • Android N之hasSystemFeature

    当我们判断某一功能打开与否时 xff0c 一般会有个确认本功能是否支持的过程 xff0c 以便与为相关的功能初始化其他的环境 xff0c 例如 xff1a 蓝牙 NFC 例如 NFC HCE 两个的声明如下 xff1a Feature fo
  • Android Go项目预置应用Google GTS测试testPreloadedAppsTargetSdkVersion失败

    Android GO项目中预置的一个Weather应用 xff0c GTS测试通不过 据log提示 xff0c 是兼容的SDK目标版本过低导致 xff0c GO版本要求必须为API 26 43 含26 xff09 LOG如下 xff1a 0
  • 多维缩放算法(MDS)

    算法思想 MDS算法思想很简单 xff0c 一句话就是保持样本在原空间和低维空间的距离不变 因为距离是样本之间一个很好的分离属性 xff0c 对于大多数聚类算法来说 xff0c 距离是将样本分类的重要属性 xff0c 因此当我们降维后 xf
  • Gerrit 安装lfs插件

    一 下载lfs插件 https gerrit ci gerritforge com job plugin lfs bazel stable 2 16 这个是直接编译好的 二 安装插件 将下载的插件放在 GERRIT SITE plugins
  • 反编译so库破解so

    所需工具 1 IDA Pro v6 8 and Hex Rays Decompiler 2 WinHex 3 ARM ASM 背景 xff1a I2C通讯时报log CameraHal Marvin HAL MOCKUP HalReadI2
  • 长虹官方刷机包和刷机教程

    为了解决部分朋友因应用引起的电视死机 无法开机 系统被破坏等情形 xff0c 长虹电视团队特开此帖为朋友们提供刷机方法 xff0c 但刷机有风险 xff0c 如完全不懂刷机技巧的朋友需要谨慎操作哦 xff0c 如有疑问可以微信留言给我们 下
  • Android终端通过adb 配置静态IP和DNS

    有时我们需要使用命令行来配置eth0的IP信息 xff0c 这在linux系统是非常简单的 xff0c 网上也有很多资料 但是在Android系统 xff0c 就非常困难 xff0c 因为Android精简掉了很多linux命令 xff0c
  • 【官方】下载最新adb及安装驱动的方法

    Only adb 驱动 xff1a https adbdriver com downloads adb工具 xff1a https adbshell com upload adb zip https adbshell com downloa
  • 中芯微随身WIFI破解实体SIM卡槽(不拆机,无需切卡密码)

    目前网上卖的一些随身WIFI是中芯微的方案 MF782 部分产品限制用户使用实体SIM卡 只能使用内置eSIM 下面谈谈解决方案 1 中沃的没有限制 实体SIM卡优先 检测到插的有实体SIM卡 就使用实体SIM卡网络 2 另外一部分网上提供
  • 高通Android随身WIFI屏蔽商家远程控制断网

    nbsp nbsp nbsp nbsp 部分随身WIFI商家后台会监测用户是否使用的是自家的eSIM 若使用了外置卡槽或eSIM的ICCID改变就会断网 主要表现是先联网后突然变成飞行模式 或联网后开热点变飞行模式 这就是商家后台做了监测
  • Linux kernel make clean时忽略部分文件(不被删除)

    有时我们在运行make clean 时 xff0c 需要保留某些 o 文件 xff0c 这就需要我们修改 Makefile 文件 xff0c 下面以 linux 2 6 18 的 Makefile 为例 xff1a Files to ign
  • Audio参数讲解

    一 音频基础参数 frame bits 一帧数据的位数比如 xff1a 16bits 2ch frame bits 61 16 2 sample bits 采样位数 比如16bit 24bit 32bit period size 指一个周期
  • linux ALSA 驱动架构

    一 kernel Audio驱动架构主流有两大类 xff0c 一类是SOC Machine架构 xff0c 另一类是simple card架构 MTK QCom主要采用machine架构 xff0c rockchip采用simple car
  • adaboost提升算法

    引言 俗话说得好 xff0c 三个臭皮匠赛过诸葛亮 更主要的是三个臭皮匠好找 xff0c 一个诸葛亮太难找了 在机器学习里面也是一样的 我们可以设计出各种分类器 xff0c 然而分类器的效果确实不一而同的 xff0c 相对而言 xff0c