04-05 提升树

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

提升树

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

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

一、提升树学习目标

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

二、提升树引入

假设Nick的年龄是25岁。

  1. 第1棵决策树

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

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

三、提升树详解

3.1 加法模型

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

\[
f_M(x)=\sum_{i=1}^MT(x;\theta_m)
\]

其中$T(x;\theta_m)\(表示决策树;\)\theta_m$表示决策树的参数;$M$为树的个数。

3.2 前向分步算法

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

\[
f_m(x)=f_{m-1}(x)+T(x;\theta_m)
\]

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

\[
\hat{\theta_m}=\underbrace{arg\,min}_{\theta_m}\sum_{i=1}^mL(y_i,f_{m-1}(x_i)+T(x_i;\theta_m))
\]

3.3 提升树与AdaBoost算法

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

假设提升树在$t-1$轮的强学习器为$f_(x)$,目标函数是

\[
L(y,f_{m-1}(x))
\]

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

\[
L(y,f_m(x))=L(y_i,f_{m-1}(x)+T(x;\theta_m))
\]

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

3.4 回归提升树

有$m$个数据$n$个特征的训练数据集$T={(x_,y_1),(x_2,y_2),\cdots,(x_m,y_m)}$,如果将输入空间划分为$k$互不相交的区域$R_1,R_2,\cdots,R_j$,并且在每个区域上确定输出的常量$c_j$,决策树可以表示为

\[
T(x;\theta)=\sum_{j=1}^Jc_jI(x\in{R_j})
\]

其中,$\theta={(R_1,c_1),(R_2,c_2),\cdots,(R_J,c_J)}表示树的区域划分和各区域上的常数,$J$是回归树的叶节点个数。

3.4.1 前向分步算法

\[
\begin{align}
& f_0(x)=0 \& f_1(x)=f_0(x)+T(x;\theta_1) \& \cdots \& f_m(x)=f_{m-1}(x)+T(x,\theta_m),m=1,2,\cdots,M \& f_M(x)=\sum_{m=1}^MT(x;\theta_m)
\end{align}
\]

在第$m$步$f_m(x)=f_(x)+T(x,\theta_m)$的时候,给定了$f_(x)$,需要求解第$m$棵的参数$\hat{\theta_m}$

\[
\hat{\theta_m} = \underbrace{arg\,min}_{\theta_m}\sum_{i=1}^mL(y_i,f_{m-1}(x_i)+T(x_i;\theta_m))
\]

3.4.2 平方误差损失函数

对于第$m$棵树的参数$\hat{\theta_m}$,可以采用平方误差损失函数$L(y,f(x))=(y-f(x))^2$求解,树的损失变为

\[
\begin{align}
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
\end{align}
\]

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

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

四、回归提升树流程

4.1 输入

有$m$个数据$n$个特征的训练数据集$T={(x_,y_1),(x_2,y_2),\cdots,(x_m,y_m)}$。

4.2 输出

回归提升树$f_M(x)$。

五、流程

  1. 初始化$f_0(x)=0$
  2. 对$m=1,2,\cdots,M$
    1. 计算残差$r_=y_i-f_(x_i),\quad$
    2. 拟合残差$r_$学习一个回归树,得到$T(x;\theta_m)$
    3. 更新$f_m(x)=f_(x)+T(x;\theta_m)$
  3. 得到回归提升树

\[
f_M(x)=\sum_{i=1}^MT(x;\theta_m)
\]

六、提升树优缺点

6.1 优点

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

6.2 缺点

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

七、小结

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

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

原文地址:https://www.cnblogs.com/nickchen121/p/11686747.html

时间: 2024-11-29 12:07:16

04-05 提升树的相关文章

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

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

统计学习方法笔记 提升树

提升树是以分类树或回归树为基本分类器的提升方法 提升树被认为是统计学习中性能最好的方法之一 提升方法实际采用加法模型(基函数的线性组合)与前向分步算法 以决策树为基函数的提升方法称为提升树 ? 对分类问题决策树是二叉分类树 对回归问题决策树是二叉回归树 ? 提升树模型可以表示为决策树的加法模型: T(x;Θm)表示决策树: Θm为决策树的参数: M为树的个数. 提升树算法采用前向分步算法. 首先确定初始提升树f0(x)=0,第m歩的模型是 fm-1(x)为当前模型,通过经验风险极小化确定下一棵决

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

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

MFC DAY03 04 05

一 MFC的消息映射机制(3) 1 消息映射机制的使用 1.1 自己的类必须派生自 CCmdTarget 1.2 自己的类内 必须添加声明宏 DECLARE_MESSAGE_MAP 1.3 自己的类外 必须添加实现宏 BEGIN_MESSAGE_MAP( theClass, baseClass ) END_MESSAGE_MAP( ) 2 消息映射机制的实现 2.1 数据结构 struct AFX_MSGMAP_ENTRY (静态数组的每个元素) { UINT nMessage; // 消息ID

shell 如何生成一个序列 01 02 03 04 05

seq 命令介绍 用途: seq - print a sequence of numbers 语法: seq [OPTION]... LAST seq [OPTION]... FIRST LAST seq [OPTION]... FIRST INCREMENT LAST 常用选项 -s, --separator=STRING use STRING to separate numbers (default: \n) -w, --equal-width equalize width by paddi

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

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

梯度提升树GBDT原理

1.模型 提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法.以决策树为基函数的提升方法称为提升树(boosting tree).对分类问题决策树是二叉分类树,对回归问题决策树是二叉决策树.提升树模型可以表示为决策树的加法模型: 其中,表示决策树:为决策树的参数:M为树的个数 2.学习过程 回归问题提升树使用以下前向分布算法: 在前向分布算法的第m步,给定当前模型,需求解 得到,即第m棵树的参数 当采用平方误差损失函数时, 其损失变为 其中,是当前模型拟合数据的残差(residual)

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

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

【Spark MLlib速成宝典】模型篇07梯度提升树【Gradient-Boosted Trees】(Python版)

目录 梯度提升树原理 梯度提升树代码(Spark Python) 梯度提升树原理 待续... 返回目录 梯度提升树代码(Spark Python) 代码里数据:https://pan.baidu.com/s/1jHWKG4I 密码:acq1 # -*-coding=utf-8 -*- from pyspark import SparkConf, SparkContext sc = SparkContext('local') from pyspark.mllib.tree import Gradi

第04次作业-树

第04次作业-树 1.学习总结 1.1树结构思维导图 1.2 树结构学习体会 树的结构是一种非线性结构,一对多,定义也是递归的,有一个根结点和任意个子树. 我的学习体会:我觉得树相比之前的一对一的线性结构来说,难度增大了很多,树的实现又会借用到之前学的栈啊,队列啊,就像是之前所学的大杂烩,并且会用上递归,虽然递归可读性很好,但是想出怎么写也是很难,看懂容易,自己写递归不容易. 树可以应用在查找,如二叉搜索树,用在求类似最优路径的问题,如哈夫曼树,应用在做计算表达式,把表达式转化成树,再求值,能算