zoukankan      html  css  js  c++  java
  • 04-05 提升树


    更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

    提升树

    提升树(boosting tree)是以分类树或回归树作为弱学习器的强学习器。

    提升树模型用的是加法模型,算法用的是前向分步算法,弱学习器是决策树的集成学习方法。

    一、提升树学习目标

    1. 加法模型
    2. 前向分步算法
    3. 提升树与AdaBoost算法
    4. 回归提升树流程
    5. 提升树优缺点

    二、提升树引入

    假设Nick的年龄是25岁。

    1. 第1棵决策树

    把Nick的年龄设置成初始值0岁去学习,如果第1棵决策树预测Nick的年龄是12岁,即残差值为2512=13
    2. 第2课决策树
    1. 把Nick的年龄设置成残差值13岁去学习,如果第2棵决策树能把Nick分到13岁的叶子节点,累加两棵决策树的预测值加和12+13=25,就是Nick的真实年龄25岁
    2. 如果第2棵决策树的得到的是10岁,残差值为251210=3
    3. 第3课决策树

    把Nick的年龄设置成残差值3岁去学习……
    4. 继续重复上述过程学习,不断逼近Nick的真实年龄

    三、提升树详解

    3.1 加法模型

    提升树模型可以表示为决策树的加法模型

    fM(x)=i=1MT(x;θm)

    其中T(x;θm)表示决策树;θm表示决策树的参数;M为树的个数。

    3.2 前向分步算法

    提升树模型使用的是前向分布算法,即假设初始提升树f0(x)=0,第m步的模型是

    fm(x)=fm1(x)+T(x;θm)

    其中fm1(x)为当前模型,通过经验风险极小化确定一下课决策树的参数θm

    θm^=argminθmi=1mL(yi,fm1(xi)+T(xi;θm))

    3.3 提升树与AdaBoost算法

    AdaBoost算法使用的是前向分步算法,利用前一轮弱学习器的误差率更新训练数据的权重;提升树使用的也是前向分步算法,但是提升树如其名,他的弱学习器只能使用决策树,一般使用CART树,然后他的迭代思路也与AdaBoost算法不同

    假设提升树在t1轮的强学习器为ft1(x),目标函数是

    L(y,fm1(x))

    在第t轮的目标则是找到一个弱学习器(决策树)ht(x),最小化第t轮的目标函数

    L(y,fm(x))=L(yi,fm1(x)+T(x;θm))

    但是当AdaBoost算法中的弱学习器为二类分类树的时候,其实AdaBoost就是提升树,即可以说分类提升树算法是AdaBoost算法的一种特殊情况。

    3.4 回归提升树

    m个数据n个特征的训练数据集T={(x,y1),(x2,y2),,(xm,ym)},如果将输入空间划分为k互不相交的区域R1,R2,,Rj,并且在每个区域上确定输出的常量cj,决策树可以表示为

    T(x;θ)=j=1JcjI(xRj)

    其中,θ={(R1,c1),(R2,c2),,(RJ,cJ)}J$是回归树的叶节点个数。

    3.4.1 前向分步算法

    (1)f0(x)=0(2)f1(x)=f0(x)+T(x;θ1)(3)(4)fm(x)=fm1(x)+T(x,θm),m=1,2,,M(5)fM(x)=m=1MT(x;θm)

    在第mfm(x)=fm1(x)+T(x,θm)的时候,给定了fm1(x),需要求解第m棵的参数θm^

    θm^=argminθmi=1mL(yi,fm1(xi)+T(xi;θm))

    3.4.2 平方误差损失函数

    对于第m棵树的参数θm^,可以采用平方误差损失函数L(y,f(x))=(yf(x))2求解,树的损失变为

    (6)L(y,fm1(x)+T(x;θm))=[yfm1(x)T(x;θm)]2(7)=[rT(x;θm)]2

    其中r=yfm1(x)是当前模型拟合数据的残差。

    对于回归提升树,只需简单地拟合当前模型的残差。

    四、回归提升树流程

    4.1 输入

    m个数据n个特征的训练数据集T={(x,y1),(x2,y2),,(xm,ym)}

    4.2 输出

    回归提升树fM(x)

    五、流程

    1. 初始化f0(x)=0
    2. m=1,2,,M
      1. 计算残差rmi=yifm1(xi),i=1,2,,m
      2. 拟合残差rmi学习一个回归树,得到T(x;θm)
      3. 更新fm(x)=fm1(x)+T(x;θm)
    3. 得到回归提升树

    fM(x)=i=1MT(x;θm)

    六、提升树优缺点

    6.1 优点

    1. 既可以解决分类问题,又可以解决回归问题

    6.2 缺点

    1. 弱学习器之间存在依赖关系,难以并行训练
    2. 提升树只是简单的拟合模型的残差,并不准确

    七、小结

    提升树属于Boosting系列算法,他和AdaBoost有相似之处的,并且当AdaBoost算法中的弱学习器为二类分类树的时候,梯度提升树就是一种特殊的AdaBoost算法。

    由于提升树是由简单的残差计算得到的,所以在某种程度上来说,提升树是有一定缺陷的,为了解决这个问题,一般会采用梯度提升树来弥补。

  • 相关阅读:
    2016去哪儿编程题:乘坐公交
    lintcode:交错正负数
    lintcode:Ugly Number I
    KMP算法
    适配器模式
    迭代器模式
    命令模式
    外观模式
    工厂方法模式
    代理模式
  • 原文地址:https://www.cnblogs.com/abdm-989/p/14111587.html
Copyright © 2011-2022 走看看