顾名思义,CART算法(classification and regression tree)分类和回归算法,是一种应用广泛的决策树学习方法,既然是一种决策树学习方法,必然也满足决策树的几大步骤,即:1特征的选择 2决策树的生成 3 决策树的剪枝 三大步骤,CART算法既可以用于分类还可以用于回归。

CART是在给定输入随机变量X的条件下输出随机变量Y的条件概率分布的学习方法,CART 有个特性就是其假设决策树全部是二叉树,也就是说其结点只有两种选择,‘是’和‘否’,说专业点就是决策树递归的二分每个特征,最终得到决策树,通过不断的划分,将特征空间划分为有限个单元,并在这些单元上确定预测的概率分布。

下面将从CART 的生成和剪枝两部分对CART算法进行详细的介绍和归纳总结

一 CART的生成

正如上文中所讲,CART决策树的生成就是递归的构建二叉树,但是针对分类和回归使用的策略是不一样的,对于回归树,使用的是平方误差最小准则;而对于分类树,使用的是基尼指数最小化准则。

 1 回归树的生成

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

一个回归树是对应着输入空间(特征空间)的一个划分以及在划分单元上的输出之,此处假设已将输入空间划分为M个单元R1,R2,R3......Rm,并在每一个单元Rm上有固定的输出值Cm,那么回归树的模型则可以表示为:

这个公式不难理解,将特征空间进行了一定的划分,给一个划分赋予对应的值,那么当一个新的样本点到来的时候,根据它所属的单元赋予对应的值,这应该也就是回归树的含义了吧~  PS:若理解有错请批评指正

另一方面,当输入空间的划分确定,便可以用平方误差来表示回归树对训练数据的误差:,利用平方误差最小的准则来求解每个单元上的最优值,直观理解,根据平方误差最小准则,这个最优值其实就是本单元上所有输入值对应的y的平均值,因为只有这样才能使得平方误差最小,仔细考虑一下确实是这样。公式表达则是:

这样一来,对于回归树,问题应该就只剩下如何进行特征空间的划分了,李老师书中所说,这里采用的是启发式的方法,选择第j个变量和它对应的取值s,作为切分变量和切分点,定义两个区域:

 和  就是利用切分变量和切分点划分成两个区域!

然后寻找最优切分变量j和切分点s,求解以下公式:

当j固定时,可以找到最优的切分点s,然后遍历所有的输入变量,找到最优的切分点j,构成一个(j,s)对,依次将输入空间划分,重复上述过程,直到划分完成为止,这样就形成了一颗回归树。

总结最小二乘回归树算法步骤:

输入:训练数据集D

输出:回归树f(x)

1 首先对特征空间进行划分,注意选择顺序,先遍历变量j,然后对固定的变量j找到最优的切分点s,然后选择使得下式最小的键值对(j,s),即:

用此键值对(j,s)对输入空间进行划分,然后取划分空间内y的平均值作为其输出值,公式如下:

 and

3 继续对两个子空间调用步骤1和2 直到满足相应的输出条件,生成决策树

2 分类树的生成

分类树的策略用的是基尼指数,那么首先介绍基尼指数的概念:

 没错,这就是所谓的基尼指数啦!

对于二分类问题,它的基尼指数又是什么样子呢? 读者仔细思考一下,发现哇,原来相加的两项完全一样啊,没错就是

那给定一个训练集,它的基尼指数又是什么呢? 假设训练集中有K类,C1,C2,C3......Ck 那么其基尼指数为:

 和上式的第二项对应,更进一步,如果训练样本被特征A的是否取某一个值a而被分成D1和D2两部分,那么在特征A的条件下的基尼指数为:

,相当于对根据特征A划分的两个小集合分别求基尼指数然后根据经验概率取期望得到特征A下的D的基尼指数。

基尼指数表示集合D的不确定性,而基尼指数Gini(D,A)表示经A=a分割后集合的不确定性,基尼指数越大,集合不确定性就越大,这跟熵的概念类似,心细的读者也发现,本篇文章和上篇在公式上有诸多相似之处。

分类树生成算法总结

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

输出:CART 分类树

1 训练数据集为D,计算现有特征对训练数据集的基尼指数,此时对于每一个特征A,对其可能取得每一个值a,根据此值将训练样本切分为D1和D2两部分,然后根据上式计算A=a基尼指数

2 在所有可能的特征以及所有可能的值里面选择基尼指数最小的特征及其切分点作为最优的特征及切分点,从结点生成两个子结点,将训练数据集分配到子结点中去

3 递归的调用1 2 直到满足停止的条件

4 生成分类决策树

那么计算停止的条件可以是什么呢?这里简单列举一下:结点中的样本数小于阈值 样本集的基尼指数小于阈值 或者特征已经用完了都可以作为停止的条件哦

好啦,总结到这里基本上算是讲完了CART算法的大概了,下面的部分主要讲的是CART算法的剪枝,很难啊 好气啊!


CART的剪枝

CART剪枝算法由两步组成 1首先从生成算法产生的决策树T0底端开始不断的剪枝,直到T0的根结点,形成子树序列{T0,T1,T2,T3......Tn} T0就是没剪的,T1就是剪了一个叶结点的,T2就是又剪了一点的这样子哦!

然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树,具体操作如下:

1 剪枝,形成子树序列

在剪枝的过程中,计算子树的损失函数: (之前篇幅中介绍过)

可以用递归的方法对树进行剪枝,将从小增大,,产生一系列的区间(ai,ai+1),i=0,1,2......n的最优子树序列{T0,T1......Tn},序列中的子树是嵌套的,这句的意思是不同的产生的子树是完整最优子树一部分一部分的缺少这个意思吧?

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

而以t为根结点的子数的损失函数是 

=0时候,<  因为对于单结点和多结点树很明显多结点树的分类效果在训练数据集上的误差要小很多

继续增大到某一处,会出现二者相等的情况,再继续增大,则二者反向。

只要=,则Tt和t有着相同的损失函数值,t的结点较少,t比Tt更可取,对Tt进行剪枝。

2在剪枝得到的子树序列T0,T1,....Tn中通过交叉验证选取最优子树

利用平方误差准则或者是基尼指数准则,在新的验证集中分别测试子树序列,选取里面最优的子树进行输出,便是裁剪之后的子树

总结一下剪枝算法的步骤

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

输出: 最优的决策树Ta

1 设k=0,T=T0

2 设=Na(正无穷)

3自下而上的对内部结点t进行计算C(Tt),|Tt|和g(t)==min(,g(t))

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

5 设k=k+1,k=,Tk=T

6 如果Tk不是由根结点及两个叶结点构成的树,回到步骤3,否则另Tk=Tn

7 采用交叉验证法在子树序列上进行验证选取最优子树T

本篇绝大多数内容取自与李航老师的《统计学习方法》一书,只是对它进行了归纳总结,加强记忆,有兴趣深入了解的同学可以购买正版书籍进行阅读!希望我的归纳能让您更好的理解书中的内容!

决策树之CART算法的更多相关文章

  1. 《机器学习实战》学习笔记第九章 —— 决策树之CART算法

    相关博文: <机器学习实战>学习笔记第三章 —— 决策树 主要内容: 一.CART算法简介 二.分类树 三.回归树 四.构建回归树 五.回归树的剪枝 六.模型树 七.树回归与标准回归的比较 ...

  2. 决策树2 -- CART算法

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结.不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,因为本人在学习初始时有非常多数学知识都已忘记.所以为 ...

  3. 决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)

    1. 1.问题的引入 2.一个实例 3.基本概念 4.ID3 5.C4.5 6.CART 7.随机森林 2. 我们应该设计什么的算法,使得计算机对贷款申请人员的申请信息自动进行分类,以决定能否贷款? ...

  4. 决策树模型 ID3/C4.5/CART算法比较

    决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...

  5. 机器学习技法-决策树和CART分类回归树构建算法

    课程地址:https://class.coursera.org/ntumltwo-002/lecture 重要!重要!重要~ 一.决策树(Decision Tree).口袋(Bagging),自适应增 ...

  6. python数据分析算法(决策树2)CART算法

    CART(Classification And Regression Tree),分类回归树,,决策树可以分为ID3算法,C4.5算法,和CART算法.ID3算法,C4.5算法可以生成二叉树或者多叉树 ...

  7. 机器学习总结(八)决策树ID3,C4.5算法,CART算法

    本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...

  8. 03机器学习实战之决策树CART算法

    CART生成 CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有 ...

  9. 决策树-Cart算法二

    本文结构: CART算法有两步 回归树的生成 分类树的生成 剪枝 CART - Classification and Regression Trees 分类与回归树,是二叉树,可以用于分类,也可以用于 ...

随机推荐

  1. 2017.11.23 利用Cookie管理实现自动登陆

    Cookie管理 Cookie对象是由服务器产生并保存在客户端的信息,常用他记录用户个人信息以及个性化设置.用户每次访问网点时,应用程序就可以检索以前保存的信息 Cookie对象属于的类是javax. ...

  2. 今天 小小收获, 看了 sam Xiao 的好帖子 明白了 泛型委托 的 意思。

    Func<int,int,int> cAdd1 = (int x, int y) => { return x + y; }; int result= aAdd1(1,2); cons ...

  3. python3 安装turtle tkitnter 报错

    导入tkinter模块后,运行出现No module named _tkinter, please install the python-tk package ubuntu运行tkinter错误   ...

  4. 武者Vue

    1 - Introduction 2 - The Vue Instance 3 - Data & Methods 4 - Data Binding 5 - Events 6 - Event M ...

  5. 【课堂笔记精选】为了能够用“Unity”软件做游戏,我要从最基础的开始复习JavaScript

    [声明]在“随笔”模块,只是知识点,但是在“文章”模块(https://www.cnblogs.com/Robot-DX3906/articles/10579584.html)里面,有更多内容. 20 ...

  6. LeetCode426.Convert Binary Search Tree to Sorted Doubly Linked List

    题目 Convert a BST to a sorted circular doubly-linked list in-place. Think of the left and right point ...

  7. 全文检索(Lucene&Solr)

    全文检索(Lucene&Solr) 1)什么是全文检索?为什么需要全文检索? 结构化数据(mysql等)方便查询,而非结构化数据(如多篇文章)是难以查询到自己需要的,所以要使用全文检索. 全文 ...

  8. 判断移动端和pc端最简单的方法

    <!DOCTYPE html><html><head> <title></title> <script type="text ...

  9. 超简单开发自己的php框架一点都不难

    (转)https://blog.csdn.net/qq_33862644/article/details/79344331 写框架的极简思路: 接收,打印参数想怎么弄.如 获取配置文件的方法,根据传过 ...

  10. 裸机——ADC

    1.首先是ADC的基本知识 模拟信号,连续的 数字信号,离散的 模拟信号,现实世界的很多东西都是连续的,所以使用模拟信号才能准确描述,但是模拟信号不方便控制. 数字信号,计算机中的信号大都为数字的,数 ...