提升方法与梯度提升决策树

提升方法与前向分步算法

提升方法

  • 从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱学习器,提升为强学习器
  • 两个问题:
    • 在每一轮如何改变训练数据的权值或概率分布
    • 如何将弱学习器组合成一个强学习器

前向分步算法

  • AdaBoost另一种解释:

    • 加法模型
    • 损失函数为指数函数
    • 学习算法为前向分步算法
    • 二类分类学习方法

前向分步算法(Forward Stagewise Algorithm)

  • 考虑加法模型(additive model)
    \[f(x)=\sum \limits_{m=1}^M \beta_m b(x;\gamma_m) \]
  • 其中,\(b(x;\gamma_m)\)为基函数,\(\beta_m\)为基函数的系数,\(\gamma_m\)为基函数参数
  • 给定训练数据及损失函数\(L(y, f(x))\)条件下,学习加法模型成为经验风险极小化即损失函数极小化问题
    \[\mathop{\min} \limits_{\beta,\gamma} \sum \limits_{i=1}^N L(y_i, \beta b(x_i; \gamma)) \]
  • 前向分步算法如下:
    • 输入:训练集,损失函数\(L\),基函数集\(\{b(x;\gamma)\}\)
    • 输出:加法模型\(f(x)\)
      1. 初始化\(f_0(x)=0\)
      2. 对\(m=1,2,\cdots,M\)
      • 极小化损失函数,得到参数
        \[(\beta_m, \gamma_m)=\mathop{\arg\min}\limits_{\beta, \gamma}\sum \limits_{i=1}^N L(y_i, \ f_{m-1}(x)+\beta b(x; \gamma))\]
      • 更新
        \[f_m(x)=f_{m-1}(x) + \beta_m b(x;\gamma_m) \]
      1. 得到加法模型
        \[f(x)=f_M(x)=\sum \limits_{m=1}^M \beta_m b(x; \gamma_m) \]

提升树原理

提升树算法

  • 如果将输入空间\(\mathcal{X}\)划分为\(J\)个互不相交的空间\(R_j\)(回归树叶节点个数),并且在每个区域确定输出的常量\(c_j\)(\(c_j\)就是回归或者分类的值),那么树可以表示成
    \[T(x;\Theta)=\sum \limits_{j=1}^J c_j I(x \in R_j)\]
  • 回归问题提升树使用以下前向分步算法:
    \[f_0(x)=0\]
    \[f_m(x)=f_{m-1}(x)+T(x;\Theta_m) \]
    \[f_M(x)=\sum \limits_{m=1}^M T(x;\Theta_m) \]
  • 在第\(m\)步,需求解
    \[\hat{\Theta}_m=\mathop{\arg \min}\limits_{\Theta_m} \sum \limits_{i=1}^N L(y_i, f_{m-1}(x_i)+T(x_i; \Theta_m)) \]
    平方误差损失函数
    \[L(y, f_{m-1}(x)+T(x;\Theta_m))=[y-f_{m-1}(x)+T(x;\Theta_m)]^2=[r-T(x;\Theta_m)]^2\]
    \(r=y-f_{m-1}(x)\)是残差。因此只需要简单地拟合当前模型的残差
  • 回归问题的提升树算法:
    • 输入:训练集
    • 输出:提升树\(f_M(x)\)
      1. 初始化\(f_0(x)=0\)
      2. 对\(m=1,2,\cdots,M\)
        • 计算残差
          \[r_{mi} = y_i-f_{m-1}(x_i) \]
        • 拟合残差\(r_{mi}\),学习一个回归树,得到\(T(x;\Theta_m)\)
        • 更新
          \[f_m(x)=f_{m-1}(x) + T(x;\Theta_m) \]
      3. 得到回归问题提升树
        \[f_M(x)=\sum \limits_{m=1}^M T(x;\Theta_m) \]

梯度提升

  • 当损失函数是平方损失或者指数损失,优化简单
  • 梯度提升解决其他优化问题
    • 利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值
  • 梯度提升算法:
    • 输入:训练集;损失函数\(L(y, f(x))\)
    • 输出:回归树\(\hat{f}(x)\)
      1. 初始化
        \[f_0(x)=\mathop{\arg\min}\limits_{c}\sum \limits_{i=1}^N L(y_i, c) \]
        其中,\(c\)是回归值,它是只有一个根节点的树
      2. 对于\(m=1,2,\cdots,M\)
        • 对\(i=1,2,\cdots,N\),计算
          \[r_{mi}=-\left[ \frac{\partial L(y_i, f(x_i))}{\partial f(x_i)} \right] \]
        • 对\(r_{mi}\)拟合一个回归树,得到第\(m\)棵树的叶节点区域\(R_{mj}\)
        • 对\(j=1,2,\cdots,J\),为每个叶节点计算最好的回归值
          \[c_{mj}=\arg\min\limits_{c}\sum \limits_{x_i \in R_{mj}} L(y_i, f_{m-1}(x_i)+c) \]
        • 更新
          \[f_m(x)=f_{m-1}(x)+\sum \limits_{j=1}^J c_{mj}I(x\in R_{mj}) \]
      3. 得到回归树
        \[\hat{f}(x)=f_M(x)=\sum \limits_{m=1}^M\sum \limits_{j=1}^J c_{mj}I(x\in R_{mj}) \]

梯度提升与梯度下降的区别联系

  • 联系

    • 每轮迭代,利用损失函数相对于模型的负梯度方向的信息对当前模型更新
  • 区别
    • 梯度下降:模型以参数化形式表示,模型更新等价于参数更新
    • 梯度提升:模型直接定义在函数空间中,扩展了可使用的模型种类

GBDT优缺点

  • 优点:

    • 预测阶段计算速度快,树与树之间可以并行计算
    • 分布稠密的数据集上,泛化能力和表达能力好
    • 使用决策树的GBDT具有可解释性和鲁棒性,能自动发现特征间的高阶关系,不需要对数据做特殊预处理如归一化等
  • 局限性:
    • 高维稀疏数据集上,表现不如SVM或者神经网络
    • 处理数值型特征效果明显,文本分类特征上不是最好
    • 训练过程需要串行训练

XGBoost和GBDT的联系和区别

  • GBDT是机器学习算法,XGBoost是该算法的工程实现
  • 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型复杂度,有利于防止过拟合,提高泛化能力
  • GBDT训练时只用了代价函数的一阶信息,XGBoost同时使用了一阶和二阶导数
  • 传统的GBDT使用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器
  • 传统的GBDT在每轮迭代时使用全部数据,XGBoost则采用了与随机森林类似的策略,支持对数据进行采样
  • 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习缺失值的处理策略

原文地址:https://www.cnblogs.com/weilonghu/p/11923062.html

时间: 2024-10-02 22:39:10

提升方法与梯度提升决策树的相关文章

【机器学习基础】梯度提升决策树

引言 上一节中介绍了<随机森林算法>,该算法使用bagging的方式作出一些决策树来,同时在决策树的学习过程中加入了更多的随机因素.该模型可以自动做到验证过程同时还可以进行特征选择. 这一节,我们将决策树和AdaBoost算法结合起来,在AdaBoost中每一轮迭代,都会给数据更新一个权重,利用这个权重,我们学习得到一个g,在这里我们得到一个决策树,最终利用线性组合的方式得到多个决策树组成的G. 1. 加权的决策树算法(Weighted Decision Tree Algorithm) 在引言

提升方法 - 2 - 前向分布算法和提升树

声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了弄懂其中的内容查阅了很多资料,所以里面应该会有引用其他帖子的小部分内容,如果原作者看到可以私信我,我会将您的帖子的地址付到下面. 3,如果有内容错误或不准确欢迎大家指正. 4,如果能帮到你,那真是太好了. 上一节讲解了Adaboost算法,下面我们要通过Adaboost的另一种解释引申到前向分布算法,进而通过

04-06 梯度提升树

目录 梯度提升树 一.梯度提升树学习目标 二.梯度提升树详解 2.1 梯度提升树和提升树 三.回归梯度提升树流程 3.1 输入 3.2 输出 3.3 流程 四.梯度提升树优缺点 4.1 优点 4.2 缺点 五.小结 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ 梯度提升树 梯度提升树(gradien boosting decision tree,GBDT)在工业上用

笔记︱决策树族——梯度提升树(GBDT)

笔记︱决策树族--梯度提升树(GBDT) 本笔记来源于CDA DSC,L2-R语言课程所学进行的总结. 一.介绍:梯度提升树(Gradient Boost Decision Tree) Boosting算法和树模型的结合.按次序建立多棵树,每棵树都是为了减少上一次的残差(residual),每个新的模型的建立都是为了使之前模型的残差往梯度方向减少.最后将当前得到的决策树与之前的那些决策树合并起来进行预测. 相比随机森林有更多的参数需要调整. ---------------------------

Spark2.0机器学习系列之6:GBDT(梯度提升决策树)、GBDT与随机森林差异、参数调试及Scikit代码分析

概念梳理 GBDT的别称 GBDT(Gradient Boost Decision Tree),梯度提升决策树.     GBDT这个算法还有一些其他的名字,比如说MART(Multiple Additive Regression Tree),GBRT(Gradient Boost Regression Tree),Tree Net等,其实它们都是一个东西(参考自wikipedia – Gradient Boosting),发明者是Friedman. 研究GBDT一定要看看Friedman的pa

机器学习之路:python 综合分类器 随机森林分类 梯度提升决策树分类 泰坦尼克号幸存者

python3 学习使用随机森林分类器 梯度提升决策树分类 的api,并将他们和单一决策树预测结果做出对比 附上我的git,欢迎大家来参考我其他分类器的代码: https://github.com/linyi0604/MachineLearning 1 import pandas as pd 2 from sklearn.cross_validation import train_test_split 3 from sklearn.feature_extraction import DictVe

吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingRegressor回归模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_regression(): ''' 加载用于回归问题的数据集 ''' #使用 scikit-learn 自带的一个糖尿病病人的数据集 diabetes = datasets.load_di

mllib之随机森林与梯度提升树

随机森林和GBTs都是集成学习算法,它们通过集成多棵决策树来实现强分类器. 集成学习方法就是基于其他的机器学习算法,并把它们有效的组合起来的一种机器学习算法.组合产生的算法相比其中任何一种算法模型更强大.准确. 随机森林和梯度提升树(GBTs).两者之间主要差别在于每棵树训练的顺序. 随机森林通过对数据随机采样来单独训练每一棵树.这种随机性也使得模型相对于单决策树更健壮,且不易在训练集上产生过拟合. GBTs则一次只训练一棵树,后面每一棵新的决策树逐步矫正前面决策树产生的误差.随着树的添加,模型

scikit-learn 梯度提升树(GBDT)调参小结

在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn GBDT类库概述 在sacikit-learn中,GradientBoostingClassifier为GBDT的分类类, 而GradientBoostingRegressor为GBDT的回归类.两者的参数类型完全相同,当然有些参数比如损失函数loss的可选择项并不相同.这些参数中,类似于Adabo