博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(十四)
阅读量:3517 次
发布时间:2019-05-20

本文共 2062 字,大约阅读时间需要 6 分钟。

开春,复课。

一句无关的话...今天打开Google Reader看到7月份要关的提示,无限悲伤。看着落园若干RSS源里面累计800+的读者,只能说句bless...2008年开始使用,到现在,伴我度过了多少读书时光呀。不过确实也衰落了,高峰的时候一个RSS源就有600+读者,现在也只剩一半了。写博客,越来越像一件出力不讨好的事情了。

--------正文开始---------

提升与梯度树

1. Boost(AdaBoost)

这里讲的AdaBoost是仅针对二类分类器的提升。大致的思想就是,给我一个弱分类器,还你一个强分类器。听起来蛮神奇的对不对?

先说算法实现。

第一步:初始化。 f0(x)=0

,权重初始值
wi=1N,i{
1,...,n}

第二步:迭代。

for m = 1 to M

  • 根据已有算法(即弱分类器)和{
    wi
}得到一个分类器
Gm(x)
  • .
  • 计算误差: errm=N1I(yiGm(xi))wiNi=1wi
  • ,这里我们把权重进行归一化。
  • 计算 Gm 权重: αm=log1errmerrm
  • 修改样本权重 wi wi=wiexp(αmI(yiGm(xi))

    也就是说,我们不断的生成新的权重,当分类器分错的时候更改权重。

    第三步:输出。最终的分类器为前面的加权。

    G(x)=sign(Mm=1αmGm(x))

    这样就实现了从一个弱分类器改善到一个强分类器。这里弱分类器是指误差比随机猜的1/2少一点。

    另注:在修改权重那一步的时候,也可以定义 βm=αm2

    ,然后 wi=wi{
    eβmeβmifrightifwrong
    ,这样在最后的时候也可以改成 G(x)=sign(Mm=1βmGm(x))

    。总之这里的直觉是,如果分对了,那么权重下降;反之,分错的时候这些样本的权重上升。最后take average就可以了。

    2. 自适应基函数模型、前向分布算法

    之所以上面又引入 βm

    ,便是为了更好地理解这一类模型:自适应基函数模型。

    1. 我们称 f(x)=Mm=1βmb(x,γm)

    为基函数模型,其中 {
    b(x,γ),γΓ}
    成为基函数基。注意这里和GLM有很大的不同,广义线性模型后面的 γm

    为确定的。

    2. 前向分步算法。

    数据集记作 {

    (xi,yi),1iN}

    。定义一个损失函数,比如常见的 L2

    均方误差,

    (yf(x))2

    ,或者0-1准则。

    然后步骤为:

    • 初始化: f0(x)=0
  • 迭代:For m=1 to M, (βm,γm)=argminNi=1L(yi,fm1(xi)+βb(xi,γ))
  • fm(x)=fm1(x)+βmb(xi,γ)
  • 输出 fm(x)

    这样我们就把这个最优化问题转变成了M步,每步只做一个参数的最优化(近似方法)。

    3. 指数损失函数与AdaBoost

    有了这么一个一般性的框架,我们就可以套用具体的形式。

    1. 定义指数损失函数: L(y,f(x))=exp(yf(x))

    2. 两类分类、指数损失函数的自适应基函数模型。

    前向分布算法:

    (i)

    ====i=1NL(yi,fm1(xi)+βb(xi,γ))i=1Nexp[yi(fm1(xi)+βb(xi,γ))]i=1Nw(m)iexp(βyib(xi,γ)),w(m)i=exp(yifm1(xi))eβ(yb(xi,γ)w(m)i)+eβ(y=b(xi,γ)w(m)i)i=1Nw(m)ieβyb(xi,γ)w(m)iNi=1w(m)i+eβy=b(xi,γ)w(m)iNi=1w(m)i

    定义

    err(γ)m=yb(xi,γ)w(m)iNi=1w(m)i

    这样上式就可以化作

    ==i=1Nw(m)i[eβerr(γ)m+eβ(1err(γ)m)]i=1Nw(m)i[(eβeβ)err(γ)m)+eβ]

    (ii) 固定 β>0

    ,优化 γ

    .

    yb(xi,γ)w(m)i=Ni=1w(m)iI(yb(xi,γ))

    然后最小化,则 γ=argminNi=1w(m)iI(yb(xi,γ))

    。假定 γ

    已被优化,然后继续。

    (iii)优化 β

    βm=argminNi=1w(m)i[(eβeβ)err(γ)m)+eβ]

    取一阶条件FOC,则有

    (eβeβ)err(γ)m)eβ=0

    这样最后

    β=[log1errmerrm]/2

    这样就看出来上面那个AdaBoost里面的 β

    是怎么来的了吧?

    (iv) 回到AdaBoost

    fm(x)w(m)i=====fm1(x)+βmb(xi,γ)exp(yifm1(x))exp(yi[fm1(xi)+βmb(xi,γ)])w(m)iexp(yiβmb(xi,γ))w(m)iexpβm[yib(xi,γ)]

    看出来最后的AdaBoost雏形了吧?

转载地址:http://kcvqj.baihongyu.com/

你可能感兴趣的文章
vue router 报错: Uncaught (in promise) NavigationDuplicated {_name:""NavigationDuplicated"... 的解决方法
查看>>
vue跳转页面的两种方式
查看>>
存储器题目解析(持续更新中....)
查看>>
存储器知识要点
查看>>
Cache模拟器的实现
查看>>
实验2:MIPS指令系统和MIPS体系结构
查看>>
设计模式七大原则
查看>>
手写 | spring事务
查看>>
AndroidStudio Gradle手动下载
查看>>
SpringBoot入门(二)场景启动器
查看>>
SpringBoot入门--自动配置
查看>>
springboot读取配置文件 例:读取配置文件的优先顺序;在主配置文件中激活其他配置文件;加载非主配置文件
查看>>
自动配置原理
查看>>
TCP协议
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
redis 持久化详解,RDB和AOF是什么?他们优缺点是什么?运行流程是什么?
查看>>
spring注解版(一)
查看>>
SpringBoot中访问控制层(controller)得不到Json数据
查看>>
react项目报出警告Warning: Cannot update during an existing state transition (such as within `render`).
查看>>
BFC(Block Formatting Context)
查看>>