集成学习

集成学习

集成学习通过构建结合多个学习器来完成任务,通常可以获得比单个学习器显著优越的泛化性能。

集成个体应该好而不同



Boosting 和Bagging
  • Boosting:个体学习器之间存在强依赖关系,必须串行生成的序列化方法,典型代表是adaboost。从偏差-方差的角度来分析,Boosting方法主要关注降低偏差。
  • Bagging:个体学习器之间不存在强依赖性,可同时生成的并行化方法,典型代表是Bagging和随机森林。Bagging主要关注于降低方差。Bagging方法每次对样本进行自助采样,随机森林在对样本采样的基础上引入随机属性选择。

Adaboost

Adaboost是Boosting方法的典型代表,将一系列的弱学习器组合成为强学习器,其基本思想是根据上一个弱分类器的分类结果,给予误分类样本更多的权重驯练当前的分类器,直至训练器达到既定的数目T,最终的决策函数为这T个弱分类器 ht(x) h t ( x ) 的加权( αt α t )组合,准确率越高的分类器权重越大:

H(x)=sign(t=1Tαtht(x)) H ( x ) = s i g n ( ∑ t = 1 T α t h t ( x ) )

给定训练集 (xi,yi) ( x i , y i ) yi{1,1},i=1,,n y i ∈ { − 1 , 1 } , i = 1 , ⋯ , n
Adaboost训练的算法为:

  • 初始化样本权重, w1,i=1n w 1 , i = 1 n
  • for t=1:T
    • 根据带权重 wt,i w t , i 的样本训练弱分类器 ht(x) h t ( x )
    • 计算该分类器在权重 wt w t 下的错误率
      ϵt=iwt,iI(yiht(xi))iwt,i ϵ t = ∑ i w t , i I ( y i ≠ h t ( x i ) ) ∑ i w t , i
    • 计算该弱分类器的权重
      αt=12ln1ϵtϵt α t = 1 2 l n 1 − ϵ t ϵ t
    • 更新训练样本的权重
      wt+1,i=wt,iexp(αtyiht(xi))Zt w t + 1 , i = w t , i e x p ( − α t y i h t ( x i ) ) Z t

      其中 Zt Z t 为归一化系数,使得 iwt+1,i=1 ∑ i w t + 1 , i = 1

最后得到的强分类器为:

H(x)=Esign(t=1Tαtht(x)) H ( x ) = E s i g n ( ∑ t = 1 T α t h t ( x ) )

Adaboost其实是最小化指数损失函数。

lexp(H|D)=ExD(ef(x)H(x))=eH(x)P(f(x)=1|x)+eH(x)P(f(x)=1|x) l e x p ( H | D ) = E x ∼ D ( e − f ( x ) H ( x ) ) = e − H ( x ) P ( f ( x ) = 1 | x ) + e H ( x ) P ( f ( x ) = − 1 | x )

H(x) H ( x ) 求偏导:
lexp(H|D)H(x)=eH(x)p(f(x)=1|x)+eH(x)p(f(x)=1|x)=0H(x)=12lnP(f(x)=1|x)P(f(x)=1|x) ∂ l e x p ( H | D ) ∂ H ( x ) = − e − H ( x ) p ( f ( x ) = 1 | x ) + e H ( x ) p ( f ( x ) = − 1 | x ) = 0 ⟹ H ( x ) = 1 2 l n P ( f ( x ) = 1 | x ) P ( f ( x ) = − 1 | x )

这里写图片描述

Adaboost证明

  1. wT+1 w T + 1 迭代展开

    wT+1,i=wT,iexp(αTyihT(xi))ZT=wT1,iexp(αT1yihT1(xi))ZT1exp(αTyihT(xi))ZT=wT1,iexp(αT1yihT1(xi)αTyihT(xi))ZTZT1==w1,iexp(yiTt=1αtht(xi))Tt=1Zt=w1,iexp(yiH(xi))Tt=1Zt w T + 1 , i = w T , i e x p ( − α T y i h T ( x i ) ) Z T = w T − 1 , i e x p ( − α T − 1 y i h T − 1 ( x i ) ) Z T − 1 e x p ( − α T y i h T ( x i ) ) Z T = w T − 1 , i e x p ( − α T − 1 y i h T − 1 ( x i ) − α T y i h T ( x i ) ) Z T Z T − 1 = ⋯ = w 1 , i e x p ( − y i ∑ t = 1 T α t h t ( x i ) ) ∏ t = 1 T Z t = w 1 , i e x p ( − y i H ( x i ) ) ∏ t = 1 T Z t

    因为 iwT+1,i=1 ∑ i w T + 1 , i = 1
    t=1TZt=w1,iiexp(yiH(xi))=1niexp(yiH(xi)) ∏ t = 1 T Z t = w 1 , i ∑ i e x p ( − y i H ( x i ) ) = 1 n ∑ i e x p ( − y i H ( x i ) )

  2. 训练误差

    Errtrain(H(x))=1ni=1nl0/1(yiH(xi))1ni=1nlexp(yiH(xi))=t=1TZt E r r t r a i n ( H ( x ) ) = 1 n ∑ i = 1 n l 0 / 1 ( y i H ( x i ) ) ≤ 1 n ∑ i = 1 n l e x p ( y i H ( x i ) ) = ∏ t = 1 T Z t

从另一个角度看Adaboost:
前向逐步递增(Forward Stagewise Additive Model )

要找到最优的模型很难,可以每次递增

  • 损失函数: L(y,f(x)) L ( y , f ( x ) )
  • 目标函数: min1nni=1L(yi,f(xi)) min 1 n ∑ i = 1 n L ( y i , f ( x i ) )
  • 前向逐步递增:
    • 初始化: f0(x)=1nargminfni=1L(yi,f0(xi)) f 0 ( x ) = 1 n a r g m i n f ∑ i = 1 n L ( y i , f 0 ( x i ) )
    • fm(x)=fm1(x)+αmϕm(x) f m ( x ) = f m − 1 ( x ) + α m ϕ m ( x )
    • (αm,ϕm)=1nargminα,ϕni=1L(yi,fm1(x)+αmϕm(x)) ( α m , ϕ m ) = 1 n a r g m i n α , ϕ ∑ i = 1 n L ( y i , f m − 1 ( x ) + α m ϕ m ( x ) )

Adaboost其实是在最小化指数损失函数
m m 步,最小化

Lm(y,fm(x))=E(eyfm(x))

Lm=1nieyifm(xi)=1nieyi(fm1(xi)+αmϕm(xi))=1nieyifm1(xi)eαmyiϕm(xi)=1n(yi=ϕm(xi)eαmwm,i+yiϕm(xi)eαmwm,i) L m = 1 n ∑ i e − y i f m ( x i ) = 1 n ∑ i e − y i ( f m − 1 ( x i ) + α m ϕ m ( x i ) ) = 1 n ∑ i e − y i f m − 1 ( x i ) e − α m y i ϕ m ( x i ) = 1 n ( ∑ y i = ϕ m ( x i ) e − α m w m , i + ∑ y i ≠ ϕ m ( x i ) e α m w m , i )

选择 ϕm ϕ m 使得错误率最小
ϕm(x)=argminϕiwm,i(I(yiϕ(xi))) ϕ m ( x ) = a r g m i n ϕ ∑ i w m , i ( I ( y i ≠ ϕ ( x i ) ) )

如果损失函数选择L2损失,则称为L2 Boosting
在第m步,损失函数的形式为:

L(fm1(xi)+αmϕm(xi),yi)=(fm1(xi)+αmϕm(xi)yi)2=((yifm1(xi))αmϕm(xi))2=(rm,iαmϕm(xi))2 L ( f m − 1 ( x i ) + α m ϕ m ( x i ) , y i ) = ( f m − 1 ( x i ) + α m ϕ m ( x i ) − y i ) 2 = ( ( y i − f m − 1 ( x i ) ) − α m ϕ m ( x i ) ) 2 = ( r m , i − α m ϕ m ( x i ) ) 2

其中 rm,i=yifm1(xi) r m , i = y i − f m − 1 ( x i )

Gradient Boosting

用一个弱学习器去学习当前状态下损失函数的负梯度
这里写图片描述

XGboost: eXtreme Gradient Boosting
  • 损失函数采用泰勒展开二阶近似:
    • Gradient Boosting虽然对常见的损失函数适用,但除了L2损失,其他损失函数的推导比较复杂
  • 加入正则化:叶子节点数目,叶子节点分数
  • 先建完全树后剪枝
    这里写图片描述

泰勒公式展开
定理:
设 n 是一个正整数。如果定义在一个包含 a 的区间上的函数 f 在 a 点处 n+1 次可导,那么对于这个区间上的任意 x,都有:

f(x)=f(a)+f(a)1!(xa)+f′′(a)2!(xa)2++f(n)(x)n!(xa)n+Rn(x) f ( x ) = f ( a ) + f ′ ( a ) 1 ! ( x − a ) + f ″ ( a ) 2 ! ( x − a ) 2 + ⋯ + f ( n ) ( x ) n ! ( x − a ) n + R n ( x )

其中的多项式称为函数在 a a 处的泰勒展开式,剩余的 Rn(x) R n ( x ) 是泰勒公式的余项,是 (xa)n ( x − a ) n 的高阶无穷小。
ex e x 的泰勒展开:
ex1+x+x22!++xnn! e x ≈ 1 + x + x 2 2 ! + ⋯ + x n n !


参考资料

周志华 机器学习
Boosting algorithm: AdaBoost

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值