本文主要介绍CART算法,包括CART分类树/回归树的详细步骤和在sklearn中的参数等。

0x01、CART算法简介

CART(Classification and Regression Tree,分类与回归树)算法是决策树的一种实现,既可用于分类也可用于回归。它是一种二分递归分割技术,即把当前样本划分为两个子样本(即使特征有多个取值,也把数据分为两部分,当前被划分进同一部分的特征在之后的分割过程中将有机会被划分开来),使得生成的每个非叶子结点都有两个分支,因此CART算法生成的决策树是结构简洁的二叉树。

CART算法的几个特点:

(1)由任务目标决定CART是分类树还是回归树。当CART是分类树时,采用基尼系数(gini)作为特征划分的度量;当CART是回归树时,采用均方误差(mse)作为特征划分的度量。

(2)CART算法不仅可以处理二分属性,可以用来处理标称属性和连续属性(回归),简单来说,就是如果特征值大于或等于给定值就将该记录划分到左子树,否则就划分到右子树。

(3)决策树生成只考虑了对训练数据进行更好的拟合,而决策树剪枝考虑了减小模型复杂度。决策树生成学习局部的模型,决策树剪枝学习 整体的模型。一般选择损失函数最小作为剪枝的标准。

0x02、CART算法架构

1、CART算法总体描述

(1)决策树生成

a. 依次遍历每个特征A的可能取值a,对每个切分点(A, a)计算其基尼系数(分类树)或均方误差(回归树);

b. 选择最优切分点,然后使用该切分点将当前的数据集切分成两个子集;

c. 对上述切出的两个子集分别递归调用(a)和(b),直至满足停止条件,生成CART决策树。

(2)剪枝

a. 从决策树底端开始不断剪枝,直到决策树的根结点,形成一个子树序列;

b. 通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

下面分别详细讨论特征选择过程和剪枝过程。

2、特征选择过程

(1)分类树

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

【定义:基尼指数】分类问题中,假设有 K 个类,样本点属于第 k 类的概率为, 则概率分布的基尼指数定义为:

对于二分类问题,若样本点属于第1个类的概率是 p,则概率分布的基尼指数为:

对于给定的样本集合 ,其基尼指数为:(  是 中属于第 k 类的样本子集,是类的个数。)

【特征选择过程】若样本集合  根据特征 是否取某一可能值  被分割成  和 两部分,即

, 

则在特征  的条件下,集合  的基尼指数定义为:

基尼指数  表示集合 的不确定性,基尼指数  表示经  分割后集合 的不确定性。基尼指数越大,样本集合的不确定性也就越大。

(2)回归树(最小二乘回归树,least squares regression tree)

假设 XY 分别为输入和输出变量,并且 Y 是连续变量,给定训练数据集  。

一棵回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入的空间划分为 M 个单元 ,并且每个单元  上有一个固定的输出值 ,于是回归树模型可表示为:

当输入空间的划分确定时,可以用平方误差      来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。易知单元  上的  的最优值  是  上的所有输入示例  对应的输出  的均值,即:

采用启发式的方法,对输入空间进行划分。选择第 j 个变量  和它取的值 s,作为切分变量(splitting variable)和切分点(splitting point),并定义两个区域:

  和  

然后寻找最优切分变量 j 和最优切分点 s,即需求解:

对固定输入变量 j 可以找到最优切分点

  和  

遍历所有输入变量,找到最优的切分变量 j,构成一个对  。依此将输入空间划分为两个区域。即完成一次特征选择过程。

3、剪枝过程

CART剪枝算法从完全生长的决策树底端剪去一些子树,使决策树模型变简单,从而能够对未知数据有更准确的预测。

(1)剪枝,形成一个子树序列

在剪枝过程中,计算子树的损失函数:

其中,T 为任意子树, 为对训练数据的预测误差(如基尼指数), 为子树的叶结点个数, 为参数, 为参数是  时的子树 T 的整体损失,参数 权衡训练数据的拟合程度与模型的复杂度。

对固定的  ,一定存在使损失函数  最小的字数,将其表示为  在损失函数  最小的意义下是最优的,且这样的最优子树是唯一的。

用递归的方法对树进行剪枝。将  从小增大, ,产生一系列的区间  ;剪枝得到的子树序列对应着区间  的最优子树序列  ,序列中的子树是嵌套的。

从整体树  开始剪枝。对  的任意内部结点 t,以 t 为单结点树的损失函数是:

t 为根结点的子树  的损失函数是:   ,

(i)当 =0 及  充分小时,有不等式   ;

(ii)当  增大是,在某一  值,有   ;

(iii)当  再增大时,有   。

只要   ,  与 t 有相同个损失函数值,而 t 的结点少,因此 t 比  更可取,对  进行剪枝。

为此,对  中的每一个内部结点,计算

它表示剪枝后整体损失函数减少的程度。在  中剪去  最小的 ,将得到的子树作为 ,同时将最小的  设为  。 为区间  的最优子树。如此剪枝下去,直至得到根结点。在这一过程中,不断地增加  的值,产生新的区间。

(2)在剪枝得到的子树序列中通过交叉验证选取最优子树

利用独立的验证数据集,测试子树序列  中各棵子树的平方误差(回归)或基尼指数(分类)。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子树序列中,每棵子树  都对应于一个参数  。所以,当最优子树  确定时,对应的  也确定了,即得到最优决策树 

0x03、CART算法详细步骤

1、CART分类树生成算法

输入:训练数据集 ,停止计算的条件;

输出:CART分类树。

根据训练数据集 ,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:

(1)设结点的训练数据集为 ,计算现有特征对该数据集的基尼指数。此时,对每个特征 ,对其可能取的每个值 ,根据样本点对 的测试为“是”或“否”,将 分割成 两部分,计算 时的基尼指数:

(2)在所有可能的特征 以及它们的所有可能的切分点 中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。

(3)对两个子结点递归调用(1)和(2),直到满足停止条件(结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值,或没有更多特征)。

(4)生成CART分类树。

2、CART回归树生成算法

输入:训练数据集  

输出:CART回归树  。

在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:

(1)选择最优切分变量与切分点:遍历变量 j,对固定的切分变量扫描切分点 s,选择使下式达到最小值的  :

(2)用选定的对  划分区域并决定相应的输出值:

  ,  

  ,  , 

(3)继续对两个子区域调用(1)和(2),直到满足停止条件;

(4)将输入空间划分为 M 个区域  ,生成回归树

3、CART剪枝算法

输入:CART算法生成的决策树;

输出:最优决策树  。

(1)设  ;

(2)设  ;

(3)自下而上地对各内部结点 t 计算:对训练数据的预测误差  的叶结点个数  ( 表示 t 为根结点的子树),以及:

 , 

(4)对  的内部结点 t 进行剪枝,并对叶结点 t 以多数表决法决定其类,得到树 T

(5)设 

(6)若  不是由根结点及两个叶结点构成的数,则回到步骤(2),否则令  ;

(7)采用交叉验证法在子树序列  中选取最优子树  。

0x04、CART算法在sklearn中的实现

sklearn.tree.DecisionTreeClassifier中,当参数criterion的值为“gini”时,就是一个CART树的实现。

参数说明:

(1)因参数 min_impurity_split 和 presort 将会在之后的版本中删除 ,这里就不列出了;

(2)标粗的三个参数random_state, min_impurity_decrease 和 ccp_alpha是最近几个版本新增的参数。

参数 参数类型 默认值 参数含义 详细说明
criterion

决策树:

{'gini','entropy'}
回归树:{'mse','friedman_mse',

'mse'}

决策树:

'gini'

回归树:

'mse'

特征选择标准 对决策树:gini:基尼系数,entropy:信息增益。
对回归树:可以使用"mse"或者"mae",前者是均方差,后者是和均值之差的绝对值之和。推荐使用默认的"mse"。一般来说"mse"比"mae"更加精确。
splitter {'best','random'} "best" 特征划分点选择标准 best:在所有划分中找出最优的划分点,适合数据量不大的时候;random:随机的在部分划分中找局部最有的划分点,适合数据量非常大的时候。
max_depth int None 树的最大深度 None:不限制子树的深度。样本多,特征多时,一般需要限制深度。
min_samples_split int/float 2 内部节点再划分所需最小样本数 限制子树继续划分的条件。如果节点的样本数少于min_samples_split,则不会继续在尝试选择最优特征来进行划分。若样本数量非常大(例如10w),则推荐增大这个值。
min_samples_leaf int/float 1 叶节点所需的最少样本数 若某叶子节点样本数小于min_samples_leaf,则会和兄弟节点一起被剪枝。若样本数量级非常大(例如10w),则推荐增大这个值。
min_weight_fraction_leaf float 0 叶子节点最小的样本权重和 限制叶子节点所有样本权重和的最小值,如果小于这个值则会和兄弟节点一起被剪枝。默认0表示不考虑权重问题。若样本缺失值较多或分布类别偏差很大,则可引入样本权重。
max_features int/float
/{'auto','sqrt','log2'}
None 划分时考虑的最大特征数 None:考虑所有特征;log2:最多考虑log2N个特征数;sqrt或auto:最多考虑平方根个特征;int:考虑绝对特征数;float:考虑特征百分比。如果特征数不多,使用None,如果特征数非常多,可灵活使用其他,以控制决策树的生成时间。
random_state int
/随机状态实例
None 控制分类器的随机性 当max_features小于特征数量时,在找到最优分割前,算法会在每次分割时随机选择特征,但即使max_feature等于特征数量,最优分割每次仍会不同。每次分割时需随机选择一个分割标准。
max_leaf_nodes int None 最大叶子节点数 防止过拟合。默认None即不限制最大叶子节点数。若加限制,则算法会建立在最大叶子节点数内最优的决策树。若特征数量大,则可限制,可通过交叉验证得到。
min_impurity_decrease float 0 节点划分最小不纯度 限制决策树的增长。若某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。
class_weight 字典/"balanced" None 类别权重 指定样本各类别的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。Balanced:算法自己计算权重,样本量少的类别权重会高。
不适用于回归树。
ccp_alpha 非负的浮点型 0 复杂度参数

用于最小代价复杂度修剪的复杂度参数。

将会选择最大代价复杂度小于ccp_alpha的子树。默认不修剪。

参考:
[1]. 李航. 统计学习方法(第二版)

[2]. 决策树及其变种算法-知乎

[3]. CART算法-知乎

[4]. CART分类与回归树 学习笔记-博客园

[5]. scikit-learn决策树算法类库使用小结 - 博客园

[6]. 决策树算法原理(CART分类树)- 博客园

机器学习系列(2)——CART算法相关推荐

  1. 机器学习系列之EM算法

    机器学习系列之EM算法 我讲EM算法的大概流程主要三部分:需要的预备知识.EM算法详解和对EM算法的改进. 一.EM算法的预备知识 1.极大似然估计 (1)举例说明:经典问题--学生身高问题 我们需要 ...

  2. 机器学习系列------1. GBDT算法的原理

    GBDT算法是一种监督学习算法.监督学习算法需要解决如下两个问题: 1.损失函数尽可能的小,这样使得目标函数能够尽可能的符合样本 2.正则化函数对训练结果进行惩罚,避免过拟合,这样在预测的时候才能够准 ...

  3. em算法怎么对应原有分类_机器学习系列之EM算法

    我讲EM算法的大概流程主要三部分:需要的预备知识.EM算法详解和对EM算法的改进. 一.EM算法的预备知识 1.极大似然估计 (1)举例说明:经典问题--学生身高问题 我们需要调查我们学校的男生和女生 ...

  4. 机器学习系列(4)_机器学习算法一览,应用建议与解决思路

    作者:寒小阳 时间:2016年1月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50469334 声明:版权所有,转载请联系作者并注明出 ...

  5. 【机器学习实战 第九章】树回归 CART算法的原理与实现 - python3

    本文来自<机器学习实战>(Peter Harrington)第九章"树回归"部分,代码使用python3.5,并在jupyter notebook环境中测试通过,推荐c ...

  6. k近邻法matlab_机器学习系列(一)K近邻算法(KNN,KNearestNeigh

    本文源自微信公众号[Python编程和深度学习]原文链接:机器学习系列(一)K-近邻算法(KNN,K-Nearest-Neighbor),欢迎扫码关注鸭! 目录 一.算法概述 二.Python代码 三 ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法5:决策树之CART算法

    目录 CART概述 回归树 分类树 剪枝 Python实现示例:分类树 在数学推导+纯Python实现机器学习算法4:决策树之ID3算法中笔者已经对决策树的基本原理进行了大概的论述.本节将在上一讲的基 ...

  8. 机器学习第五篇:详解决策树-CART算法

    01|前言: 本篇接着上一篇决策树详解,CART是英文"classification and regression tree"的缩写,翻译过来是分类与回归树,与前面说到的ID3.C ...

  9. 机器学习系列-强填EM算法在理论与工程之间的鸿沟(下)

    前言 在上一篇文章<机器学习系列-强填EM算法在理论与工程之间的鸿沟(上)>中,小夕用优(恐)雅(怖)的数学理论来向读者解释了EM算法的工作原理.那么从工程角度出发的EM算法又是怎样的呢? ...

最新文章

  1. jquery选择器的一些处理
  2. linux重装alsa,centos 6 安装alsa
  3. VTK:可视化之BackgroundColor
  4. PHP 学习 第一天
  5. c 语言读文件数据库,C语言文件怎么读取?
  6. MySQL:数据库还原问题
  7. SVN 服务器的安装和配置(Gentoo)
  8. php安装扩展写kafca,安装PHP的kafka扩展
  9. 请求方报超时,服务日志中记录的时间却少有超时
  10. python cv.rectangle_Python OpenCV cv2.rectangle()用法及代码示例
  11. Hello designer|PPT笔记
  12. erdas几何校正_实验一 ERDAS介绍与图像几何校正
  13. 《数据库原理》——知识点总结(期末复习)
  14. C程序-超简单的猜数字-游戏
  15. 异步加载loading
  16. 把代码做成笔记——Jupyter Notebook
  17. 京东实习测开HR面(过)
  18. Laravel接入SDK淘宝客调用
  19. HTML5中新增的元素有哪些
  20. [高项]应急储备VS管理储备

热门文章

  1. 如何访问群晖服务器共享文件夹,如何在局域网内访问 Synology NAS 上的文件
  2. 快速获取微信公众号文章的技巧
  3. H5调用用户摄像头并实现拍照功能
  4. 小平方水果店怎么摆放,水果店陈列怎么比较好
  5. IEEE1588(PTP)-1-PTP与NTP之间的异同
  6. 数据库Mysql汉化方法与替换包
  7. windows ntp客户端配置,连接linux npt服务。
  8. x61s 安装ubuntu问题总结
  9. RT3070无线网卡AP模式
  10. 离散数学学习笔记-02-命题逻辑