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

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

梯度树提升算法(GTBA, gradient tree boosting algorithm)

继续boosting类算法哎。小小预告一下,下节课会直接跳到随机森林,老师貌似是想把各种分类器都一下子讲到,然后有点前后照应的比较~真有意思,若是以前扔给我这种问题我肯定run一个logit regression就不管了,现在倒是有各种线性的、广义线性的、非线性的模型可以试着玩了,爽哎~

------------------

1. 自适应基函数模型

小小的复习一下上节课那个框架。

1. 数据。 D={

(xi,yi),1iN}

2. 模型。 f(x)=Mm=1βmb(x,γm)

为基函数模型,其中
{
b(x,γ),γΓ}
成为基函数集合。
{
(βm,γm)}M1

为参数。

3. 损失函数(准则)。 L(y,f(x))

为损失函数,然后就转为一个优化问题:

{

(βm,γm)}M1=argminNi=1L(y,f(x))=argminNi=1L(yi,Mm=1βmb(x,γm))

4. 算法。 前向分步算法。

  • 初始化: 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)

    在此框架之下,除了上节课的Adaboost之外,还可以套用多种其他的基函数,然后1)定义损失函数 2)给出迭代那一步的优化算法,就可以实现一种boost提升算法了。

    2. 应用回归问题

    先采用均方误差的损失函数,定义 L(y,f(x))=(yf(x))2

    ,这样就可以得到

    (β,γ)=argminNi=1(yifm1(xi)βb(xi,γ))2

    然后定义:

    rim=yifm1(xi),1iN

    argminβ,γNi=1(rimβb(xi,γ))2 。这里 (xi,rim)

    之后用回归树来求的话,就是梯度回归树算法。

    梯度回归树提升算法

    • 初始化: f0(x)=0
  • 迭代:For m=1 to M,计算 rim=yifm1(xi) 。由 (xi,rim) 用回归树求得 Tm(x)
  • .
  • fm(x)=fm1(x)+Tm(x)
  • 输出 fm(x)

    3. GTBA,梯度树提升算法

    先吹捧一下:这个算法就是此书作者本人开发的,然后已经搞出来了软件包,可以做回归也可以做分类,貌似效果还胜过随机森林(当然是作者自己给出的那些例子...)。

    损失函数 L(y,f(x))

    为可微的。

    我们的优化目标是 Ni=1L(yi,f(xi))

    ,也就是说实际上我们不是直接对 L(y,f(x)) 进行优化,而是仅仅在所有观测的数据点上优化,所以仅跟 f()

    在这些观测点上的值有关。感觉这里就是说,我们使用有限的观测到的信息来推断一个连续的函数,然后类推并用于其他未观测到的点。

    定义:

    f¯=f(x1)f(x2)f(xN)

    ,这样这个问题就从一个直接优化 f()

    的泛函问题转化为一个优化多元函数的问题...而对于一个多元函数,我们可以直接用梯度下降法。定义梯度为:

    f¯0,Lf¯|f¯0=g¯0

    ,这样 f¯1=f¯0g¯0 。类似的,我们可以定义 f¯m=f¯m1τg¯m1 ,其中 g¯m1=Lf¯|f¯m1

    。累加起来,就是

    f¯m=f¯0τg¯m1τg¯0

    ,这里 τ 可以是常量也可以随着 m

    改变。

    定义完梯度下降之后,就是GTBA算法了。

    • 初始化。
    • 迭代:For m=1 to M,计算 rim=L(yi,f(xi))f(xi)|fm1
    ,然后由 {
    (xi,rim),1iN}
    用回归树求得 Tm(x)
  • fm(x)=fm1(x)+Tm(x)
  • 输出 fm(x)

    一些梳理

    1. 参数。这里显然有如下参数需要设定:

    • M:迭代次数。这是这个算法最主要的参数,需要用Cross-validation来算。
    • J:树的大小。建议4-8,默认为6。
    • μ
    :收缩系数。 fm(x)=fm1(x)+μTm(x) 这里可以加上 μ
  • 这个参数,决定收缩的速度,0-1之间。
  • η
    • :次采样率,0-1直接,默认0.5。用于做subsampling。

    2. 特征变量评价

    这个算法的一大优势就是可以给出各个自变量的评价。比如 P>N

    的时候我们可能面临特征变量选择问题。

    用t表示树中的节点, v(t)

    表示t节点所用的变量, τ2(t)

    表示t节点产生的均方误差的减小值。之后定义:

    xτ=tI(v(t)=xτ)τ2(t)

    ,可用这个值来刻画变量的重要性,从而进行特征评价。

    3. 通用工具

    该算法对于数据无特殊要求,有一批 D={

    (xi,yi),1iN}

    都可以扔进去试试,故可以作为其他算法的benchmark。

    此外,从贝叶斯分类器的角度,我们要找的是 f(x)=argmaxP(G|x)

    ,这样除了原有可以观测到的 (xi,Gi) 之上,还可以衍生出一个 Gi 向量,即 Gi=(0,0,..,1,..,0) ,第k个位置为1如果观测到的 (xi) 对应第k类。一下子就可以扩展整个数据集,也可以进一步对每类都赋一个概率,不单单是0-1这样。

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

你可能感兴趣的文章
Mysql利用注解进行开发
查看>>
Mybatis一对多查询,多对一查询
查看>>
Spring配置bean.xml文件的头目录模板
查看>>
代理模式之------动态代理
查看>>
Spring实现AOP的三种方式
查看>>
Mybatis-Spring简单的配置和使用,配置事务
查看>>
SpringMVC的简单使用与配置
查看>>
SpringMVC和Mybatis整合使用的配置文件
查看>>
代码特效插件pycharm
查看>>
python实现tcp客户端从服务端下载文件
查看>>
将字符串 “k:1|k1:2|k2:3|k3:4” 转换成字典{“k”:1,”k1”:2,”k2”:3,”k3”:4}
查看>>
AttributeError: 'tuple' object has no attribute 'decode'
查看>>
node爬虫(牛刀小试)
查看>>
关于vue的seo优化
查看>>
字符串在html中的页面中的换行
查看>>
react父子组件间的通信和传值
查看>>
vue-cli3.0设置环境变量
查看>>
vue父组件直接操作子组件的方法(不通过$emit和$on)
查看>>
vue上传文件到UCloud
查看>>
获取input选择文件的本地地址
查看>>