说到决策树(Decision tree),我们很自然会想到用其做分类,每个叶子代表有限类别中的一个。但是对于决策树解决回归问题,一直是一知半解,很多时候都是一带而过。

对于一个回归问题,我们第一时间想到的可能就是线性回归(linear regression),当线性回归不好的时候,可能想着用 SVR(Support Vector Regression)试试。但回归树(regression tree)也很重要,现在 shallow learning 被 SVM 和树模型统治,随机森林、GBDT、xgboost、lightGBM 大行其道,所以知道什么是回归树很有必要。

常用的决策树有 ID3、C4.5、CART 等,其中 CART 就可以用来做回归问题,CART 全称就是 Classification And Regression Tree(分类和回归树)。至于 ID3 和 C4.5,能不能用来做回归问题,等了解完 CART 回归树再讨论。

接下来我们介绍将 CART 用于回归问题。

回归树

回归树(regression tree),顾名思义,就是用树模型做回归问题,每一片叶子都输出一个预测值。预测值一般是该片叶子所含训练集元素输出的均值,即 \(c_{m} = ave(y_i | \bm x_i \in leaf_m)\)。

CART 在分类问题和回归问题中的相同和差异:

  • 相同:

    • 在分类问题和回归问题中,CART 都是一棵二叉树,除叶子节点外的所有节点都有且仅有两个子节点;
    • 所有落在同一片叶子中的输入都有同样的输出。
  • 差异:
    • 在分类问题中,CART 使用基尼指数(Gini index)作为选择特征(feature)和划分(split)的依据;在回归问题中,CART 使用 mse(mean square error)或者 mae(mean absolute error)作为选择 feature 和 split 的 criteria。
    • 在分类问题中,CART 的每一片叶子都代表的是一个 class;在回归问题中,CART 的每一片叶子表示的是一个预测值,取值是连续的。

下面以 criteria = 'mse' 为例,介绍 CART 回归树。

理论解释

给定一个数据集 \(D = \{(\bm x_1, y_1), (\bm x_2, y_2), ..., (\bm x_i, y_i), ...,(\bm x_n, y_n)\}\),其中 \(\bm x_i\) 是一个 m 维的向量,即 \(x_i\) 含有 m 个 features。

回归问题的目标就是构造一个函数 \(f(\bm x)\) 能够拟合数据集 \(D\) 中的元素,使得 mse 最小,即:
\[
\min \frac{1}{n} \sum_{i = 1}^{n} (f(\bm x_i) - y_i)^2
\tag{1}
\]

用 CART 进行回归,目标自然也是一样的,最小化 mse。

假设一棵构建好的 CART 回归树有 \(M\) 片叶子,这意味着 CART 将输入空间 \(\bm x\) 划分成了 \(M\) 个单元 \(R_1, R_2, ..., R_M\),同时意味着 CART 至多会有 \(M\) 个不同的预测值。CART 最小化 mse 公式如下:
\[
\min \frac{1}{n} \sum_{m = 1}^{M}\sum_{\bm x_i \in R_m} (c_m - y_i)^2
\tag{2}
\]
其中,\(c_m\) 表示第 \(m\) 片叶子的预测值。
想要最小化 CART 总体的 mse,只需要最小化每一片叶子的 mse 即可,而最小化一片叶子的 mse,只需要将预测值设定为叶子中含有的训练集元素的均值,即:
\[
c_{m} = ave(y_i | \bm x_i \in leaf_m)
\tag{3}
\]

所以,在每一次的划分中,选择切分变量(splitting variable)和切分点(splitting point)时(也就是选择 feature 和将该 feature space 一分为二的 split),使得模型在训练集上的 mse 最小,也就是每片叶子的 mse 之和最小。

这里采用启发式的方法,遍历所有的切分变量和切分点,然后选出 叶子节点 mse 之和最小 的那种情况作为划分。选择第 \(j\) 个 feature \(\bm x^{(j)}\) 和它取的值 \(s\),作为切分变量和切分点,则切分变量和切分点将父节点的输入空间一分为二:
\[
\begin{split}
R_1\{j, s\} = \{\bm x| \bm x^{(j)} \le s\} \\
R_2\{j, s\} = \{\bm x| \bm x^{(j)} > s\}
\end{split}
\tag{4}
\]

CART 选择切分变量 \(j\) 和 切分点 \(s\) 的公式如下:
\[
\min_{j, s} \left[\min_{c_1} \sum_{\bm x_i \in R_1\{j, s\}} (y_i - c_1)^2 + \min_{c_2} \sum_{\bm x_i \in R_2\{j, s\}} (y_i - c_2)^2 \right]
\tag{5}
\]

采取遍历的方式,我们可以将 \(j\) 和 \(s\) 找出来:先固定 feature \(j\) 再选出在该 feature 下的最佳划分 \(s\);对每一个 feature 都这样做,那么有 \(m\) 个feature,我们就能得到 \(m\) 个 feature 对应的最佳划分,从这 \(m\) 个值中取最小值即可得到令全局最优的 \((j, s)\)。式(5)中,第一项 \(\min_{c_1} \sum_{x_i \in R_1\{j, s\}} (y_i - c_1)^2\) 得到的 \(c_1\) 值按照式(3)就是 \(ave(y_i | \bm x_i \in R_1\{j, s\})\),同理,第二项中 \(c_2 = ave(y_i | \bm x_i \in R_2\{j, s\})\) 。

算法流程

ID3 和 C4.5 能不能用来回归?

CART 是一棵二叉树,那么只要回归树不是一棵二叉树,那么就不是 CART 树了。

在分类问题中,ID3、C4.5 和 CART 的区别就在与划分子节点的策略不同,信息增益、增益比、基尼指数;而在回归问题中,criteria 是 mse 或者 mae,这种情况下,分类时的 ID3、C4.5、CART 之间的区别就没了,那么就是每个父节点划分成多少个子节点的问题了,如果还是二叉树,那么就认为是 CART 回归树,否则就不是了。

如果你在同一个时刻对某一个 feature \(\bm x^{(j)}\) 选择两个切分点 \(s_1\) 和 \(s_2\) 来划分父节点,那么就将产生三个区间 \(R_1\{j, s_1\}, R_2\{j, s_1, s_2\}, R_3\{j, s_2\}\),这种做法无疑增大了遍历的难度,如果选择更多个切分点,那么遍历的难度会指数上升。如果我们想要细分多个区域,让 CART 回归树更深即可,这样遍历的难度会小很多。

所以,固然可以构建非 CART 回归树,但是不如 CART 回归树来的更简单。

回归树示例

Decision Tree Regression -- scikit-learn

References

《统计学习方法》-- 李航
Decision Tree Regression -- scikit-learn

回归树(Regression Tree)的更多相关文章

  1. CART分类与回归树与GBDT(Gradient Boost Decision Tree)

    一.CART分类与回归树 资料转载: http://dataunion.org/5771.html        Classification And Regression Tree(CART)是决策 ...

  2. 集成方法:渐进梯度回归树GBRT(迭代决策树)

    http://blog.csdn.net/pipisorry/article/details/60776803 单决策树C4.5由于功能太简单.而且非常easy出现过拟合的现象.于是引申出了很多变种决 ...

  3. 用决策树模型求解回归问题(regression tree)

    How do decision trees for regression work? 决策树模型既可以求解分类问题(对应的就是 classification tree),也即对应的目标值是类别型数据, ...

  4. 利用CART算法建立分类回归树

    常见的一种决策树算法是ID3,ID3的做法是每次选择当前最佳的特征来分割数据,并按照该特征所有可能取值来切分,也就是说,如果一个特征有四种取值,那么数据将被切分成4份,一旦按某特征切分后,该特征在之后 ...

  5. CART分类与回归树 学习笔记

    CART:Classification and regression tree,分类与回归树.(是二叉树) CART是决策树的一种,主要由特征选择,树的生成和剪枝三部分组成.它主要用来处理分类和回归问 ...

  6. class-决策树Decision Tree

    顾名思义,决策树model是树形结构,在分类中,表示基于特征对实例进行分类的过程.可以认为是"if-else"的合集,也可以认为是特征空间,类空间上条件概率分布.主要优点是分类速度 ...

  7. CART决策树(分类回归树)分析及应用建模

    一.CART决策树模型概述(Classification And Regression Trees)   决策树是使用类似于一棵树的结构来表示类的划分,树的构建可以看成是变量(属性)选择的过程,内部节 ...

  8. 决策树的剪枝,分类回归树CART

    决策树的剪枝 决策树为什么要剪枝?原因就是避免决策树“过拟合”样本.前面的算法生成的决策树非常的详细而庞大,每个属性都被详细地加以考虑,决策树的树叶节点所覆盖的训练样本都是“纯”的.因此用这个决策树来 ...

  9. 【机器学习】迭代决策树GBRT(渐进梯度回归树)

    一.决策树模型组合 单决策树C4.5由于功能太简单,并且非常容易出现过拟合的现象,于是引申出了许多变种决策树,就是将单决策树进行模型组合,形成多决策树,比较典型的就是迭代决策树GBRT和随机森林RF. ...

随机推荐

  1. VueJs(12)---vue-router(导航守卫,路由元信息)

    vue-router(导航守卫,路由元信息) 之前泄露两篇有关vue-router博客: VueJs(10)---vue-router(进阶1) VueJs(11)---vue-router(进阶2) ...

  2. 20岁少年小伙利用Python_SVM预测股票趋势月入十万!

      在做数据预处理的时候,超额收益率是股票行业里的一个专有名词,指大于无风险投资的收益率,在我国无风险投资收益率即是银行定期存款. pycharm + anaconda3.6开发,涉及到的第三方库有p ...

  3. mysql 基本命令操作

    1. 查看存储引擎 show engines; 2. 查看数据存储位置 show variables like 'datadir': 3. 存储引擎 create table mytest engin ...

  4. 杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例

    案例设计背景介绍: 编写一个新浪微博用户注册的程序,要求使用HashSet集合实现.  假设当用户输入用户名.密码.确认密码.生日(输入格式yyyy-mm-dd为正确).手机号码(手机长度为11位,并 ...

  5. linux下c编程 基础

    1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理 ...

  6. MySql中innodb存储引擎事务日志详解

    分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据 ...

  7. SSM-Spring-05:Spring的bean是单例还是多例,怎么改变?

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- Spring的bean是单例的 它在Spring容器初始化的时候创建对象 可以修改为多例,在此bean节点中添 ...

  8. 传统IT公司/创业公司/互联网大公司的offer如何选择?[转载+原创]

    背景介绍: 第一家工作的公司是一家跨国外企安全公司, 骄傲的称自己不是互联网公司而是传统软件公司, 第二家公司是当下最热的知识分享社区, 创业公司. 第三家公司是挤走谷歌, 曾一度称霸中国的搜索引擎公 ...

  9. Linux时间子系统之(一):时间的基本概念

    专题文档汇总目录 Notes:Linux时间基准点:Linux时间和broken-down time(struct tm):不同精度的时间表示time_t.timeval.timespec. 原文地址 ...

  10. tkinter中布局pack、place和grid(八)

    tkinter中布局pack.place和grid pack布局 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuy ...