04-06 梯度提高树

更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython

梯度提高树

梯度提高树(gradien boosting decision tree,GBDT)在工业上用途普遍,属于最流行、最实用的算法之一,梯度提高树能够当作是提高树的优化版。算法

1、梯度提高树学习目标

  1. 梯度提高树和提高树
  2. 回归梯度提高树流程
  3. 梯度提高树优缺点

2、梯度提高树详解

2.1 梯度提高树和提高树

梯度提高树其实流程和提高树差很少,可是在损失函数拟合方面,提高树损失函数拟合用的是平方损失,而梯度提高树则是使用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个回归树。数据结构

\(t\)轮第\(i\)样本的损失函数的负梯度表示为
\[ r_{ti}=-{[\frac{\partial{L(y_i,f(x_i))}}{\partial{f(x_i)}}]}_{f(x)=f_{t-1}(x)} \]
利用\((x_i,r_{ti}),\quad(i=1,2,\cdots,m)\),咱们能够拟合一颗CART回归树,获得了第\(t\)棵回归树,它对应的叶节点区域为\(R_{tj},\quad(j=1,2,\cdots,J)\),其中\(J\)为叶子节点数。机器学习

3、回归梯度提高树流程

3.1 输入

\(m\)个数据\(n\)个特征的训练数据集\(T=\{(x_,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\),损失函数为\(L(y,f(x))\)函数

3.2 输出

回归树\(\hat{f(x)}\)学习

3.3 流程

  1. 初始化
    \[ f_0(x) = \underbrace{arg\,min}_c\sum_{i=1}^mL(y_i,c) \]
  2. \(i=1,2,\cdots,m\)
    1. \(i=1,2,\cdots,m\),计算
      \[ r_{mi}=-{[\frac{\partial{L(y_i,f(x_i))}}{\partial{f(x_i)}}]}_{f(x)=f_{m-1}(x)} \]
    2. \(r_{mi}\)拟合一个回归树,获得第\(m\)棵树的叶节点区域\(R_{mi},\quad{j=1,2,\cdots,J}\)
    3. \(j=1,2,\cdots,J\),计算
      \[ c_{mj} = \underbrace{arg\,min}_c\sum_{x_i\in{R_{mj}}}L(y_i,f_{m-1}(x_i)+c) \]
    4. 更新
      \[ f_m(x)=f_{m-1}(x)+\sum_{j=1}^Jc_{mj}I(x\in{R_{mj}}) \]
  3. 获得回归树
    \[ \hat{f(x)}=f_M(x)=\sum_{i=1}^M\sum_{j=1}^Jc_{mj}I(x\in{R_{mj}}) \]

4、梯度提高树优缺点

4.1 优势

  1. 相比较SVM,较少的调参时间便可获得一个准确率还不错的模型
  2. 相比较提高树,利用了损失函数的负梯度在当前模型的值做为提高树算法中残差值的近似值,即对于回归和分类问题找到了一种通用的拟合损失偏差的方法

4.2 缺点

  1. 因为弱学习器之间存在依赖,没法支持并行

5、小结

梯度提高树虽然在某种程度解决了提高树对于分类和回归问题使用不一样的损失函数的问题,而且使用损失函数的负梯度做为提高树算法残差值的近似值,提高了模型的准确度,可是他还没法作到并行。下面介绍的XgBoost做为GBDT的升级版,将会解决这个问题。优化

相关文章
相关标签/搜索