提升树

作者: shenghaishxt | 来源:发表于2019-03-15 17:12 被阅读0次

本文来自我的个人博客 https://www.zhangshenghai.com/posts/34928/

提升树模型

提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法。以决策树为基函数的提升方法称为提升树。提升树可以表示为决策树的加法模型:
f_M(x) = \sum_{m=1}^MT(x;\Theta_m)
其中,T(x;\Theta_m)表示决策树,\Theta_m为决策树的参数,M为树的个数。

提升树算法

提升树算法采用前向分布算法,首先确定初始提升树f_0(x) = 0,第m步的模型是:
f_m(x) = f_{m-1}(x) +T(x;\Theta_m)
其中,f_{m-1}(x)为当前模型,通过经验风险极小化确定下一棵决策树的参数\Theta_m
\hat \Theta_m = arg \quad min_{\Theta_m} \sum_{i=1}^N L(y_i, f_{m-1}(x_i)+T(x_i;\Theta_m))
当采用平方损失函数时,
L(y,f(x)) = (y-f(x))^2
其损失为
L(y_i, f_{m-1}(x_i)+T(x_i;\Theta_m) = [r-T(x;\Theta_m)]^2
这里r是残差,r = y-f_{m-1}(x)

对于提升树算法,通常使用平方误差损失函数解决回归问题,而使用指数损失函数解决分类问题,以及使用一般损失函数解决决策问题。对于二类分类问题,提升树算法只需将 AdaBoost 算法中的基本分类器限制为二类分类器即可。可以说这时的提升树算法是 AdaBoost 算法的特殊情况。本节主要叙述回归问题的提升树。

回归问题的提升树算法

输入:训练数据集T = \left\{ \left( x_{1}, y_{1} \right), \left( x_{2}, y_{2} \right), \cdots, \left( x_{N}, y_{N} \right) \right\},x_{i} \in \mathcal{X} \subseteq R^{n}, y_{i} \in \mathcal{Y} \subseteq R, i = 1, 2, \cdots, N

输出:回归提升树f_{M}\left(x\right)

  1. 初始化f_{0}\left(x\right)=0

  2. m=1,2,\cdots,M​
    2.1 计算残差
    \begin{align*} \\ & r_{mi}=y_{i}-f_{m-1}\left(x_{i}\right),\quad i=1,2,\cdots,N \end{align*}
    2.2 拟合残差r_{mi}学习一个回归树,得到T\left(x;\varTheta_{m}\right)
    2.3 更新f_{m}=f_{m-1}\left(x\right)+T\left(x;\varTheta_{m}\right)

  3. 得到回归提升树
    \begin{align*} \\ & f_{M} \left( x \right) = \sum_{m=1}^{M} T \left(x;\varTheta_{m}\right) \end{align*}

梯度提升

提升树利用加法模型与前向分布算法实现学习的优化过程,当损失函数是平方损失和指数损失函数时,每一步的优化是很简单的。但对于一般损失函数而言,往往每一步优化并不那么容易,于是梯度提升 (gradient boosting) 算法被提出。

梯度提升算法

输入:训练数据集T = \left\{ \left( x_{1}, y_{1} \right), \left( x_{2}, y_{2} \right), \cdots, \left( x_{N}, y_{N} \right) \right\},x_{i} \in \mathcal{X} \subseteq R^{n}, y_{i} \in \mathcal{Y} \subseteq R, i = 1, 2, \cdots, N,损失函数L\left(y,f\left(x\right)\right)

输出:回归树\hat f\left(x\right)​

  1. 初始化
    \begin{align*} \\ & f_{0}\left(x\right) = \arg \min_{c} \sum_{i=1}^{N} L \left(y_{i},c\right) \end{align*}

  2. m=1,2,\cdots,M
    2.1 对i=1,2,\cdots,N,计算
    \begin{align*} \\ & r_{mi}=- \left[ \dfrac {\partial L \left(y_{i},f\left(x_{i}\right) \right)}{\partial f \left(x_{i} \right)}\right]_{f\left(x\right)=f_{m-1}\left(x\right)} \end{align*}
    2.2 对r_{mi}拟合回归树,得到第m棵树的叶结点区域R_{mj},j=1,2,\cdots,J
    2.3 对j=1,2,\cdots,J,计算
    \begin{align*} \\ & c_{mj}=\arg \min_{c} \sum_{x_{i} \in R_{mj}} L \left( y_{i},f_{m-1} \left(x_{i}\right)+c \right) \end{align*}
    2.4 更新f_{m}\left(x\right)= f_{m-1}\left(x\right) + \sum_{j=1}^{J} c_{mj} I \left(x \in R_{mj} \right)

  3. 得到回归树
    \begin{align*} \\ & \hat f \left( x \right) = f_{M} \left( x \right) = \sum_{m=1}^{M} \sum_{j=1}^{J} c_{mj} I \left( x \in R_{mj} \right) \end{align*}

相关文章

  • 决策【GDBT】在kaggle上的利器(三)

    08 BDT(提升树) 我们先看下简单的提升树(Boosting Decision Tree),提升树是以 CAR...

  • 提升树

    本文来自我的个人博客 https://www.zhangshenghai.com/posts/34928/ 提升树...

  • GBDT

    简介 GBDT即梯度提升树,提升方法依然采用的是加法模型与前向分布算法。以决策树为基函数的提升方法称为提升树。对分...

  • 提升方法之提升树模型

    1 什么是提升树(Boosting Decision Tree-BDT)? 提升树模型是以分类树或回归树为基本分类...

  • GBDT, XGBoost, LightGBM

    GBDT 梯度提升树实在提升树的基础上发展而来的一种使用范围更广的方法,当处理回归问题时,提升树可以看作是梯度提升...

  • 聊一聊提升树这个概念

    一、概览 首先强调一点,先有提升树模型(总体概念),然后针对不同情况和不同损失函数,提出各自提升树,包含残差提升树...

  • 20.11.16 xgboost初探

    0. 提升树 首先要明确一点,xgboost 是基于提升树的。 什么是提升树,简单说,就是一个模型表现不好,我继续...

  • Spark之获取GBT二分类函数的概率值

      在Spark中,GBT(Gradient Boost Trees,提升树)函数用于实现机器学习中的提升树算法,...

  • 提升树算法

    提升方法采用加法模型(基函数的线性组合)和前向分步算法。 基本分类器或者,是由一个根结点直接连接两个叶结点的简单决...

  • XGBOOST

    在了解xgboost之前我们先了解一下梯度提升树(gbt) 梯度提升树 梯度提升是构建预测模型的最强大技术之一,它...

网友评论

      本文标题:提升树

      本文链接:https://www.haomeiwen.com/subject/jpermqtx.html