决策树算法 (CART分类树)

article/2025/11/11 1:48:48

决策树算法 (ID3,C4.5)

CART回归树

决策树的后剪枝

  

  在决策树算法原理(ID3,C4.5)中,提到C4.5的不足,比如模型是用较为复杂的熵来度量,使用了相对较为复杂的多叉树,只能处理分类不能处理回归。对这些问题,CART(Classification And Regression Tree)做了改进,可以处理分类,也可以处理回归。

1. CART分类树算法的最优特征选择方法

  ID3中使用了信息增益选择特征,增益大优先选择。C4.5中,采用信息增益比选择特征,减少因特征值多导致信息增益大的问题。CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(比)相反。

  假设K个类别,第k个类别的概率为pk,概率分布的基尼系数表达式:

  如果是二分类问题,第一个样本输出概率为p,概率分布的基尼系数表达式为:

  对于样本D,个数为|D|,假设K个类别,第k个类别的数量为|Ck|,则样本D的基尼系数表达式:

  对于样本D,个数为|D|,根据特征A的某个值a,把D分成|D1|和|D2|,则在特征A的条件下,样本D的基尼系数表达式为:

  比较基尼系数和熵模型的表达式,二次运算比对数简单很多。尤其是二分类问题,更加简单。

    和熵模型的度量方式比,基尼系数对应的误差有多大呢?对于二类分类,基尼系数和熵之半的曲线如下:

  基尼系数和熵之半的曲线非常接近,因此,基尼系数可以做为熵模型的一个近似替代。

  CART分类树算法每次仅对某个特征的值进行二分,而不是多分,这样CART分类树算法建立起来的是二叉树,而不是多叉树。

2. CART分类树算法具体流程

  CART分类树建立算法流程,之所以加上建立,是因为CART分类树算法有剪枝算法流程。

  算法输入训练集D,基尼系数的阈值,样本个数阈值。

  输出的是决策树T。

  算法从根节点开始,用训练集递归建立CART分类树。

  (1)、对于当前节点的数据集为D,如果样本个数小于阈值或没有特征,则返回决策子树,当前节点停止递归。

  (2)、计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归。

  (3)、计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数,对于离散值和连续值的处理方法和基尼系数的计算见第二节。缺失值的处理方法和C4.5算法里描述的相同。

  (4)、在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2。

  (5)、对左右的子节点递归的调用1-4步,生成决策树。

  对生成的决策树做预测的时候,假如测试集里的样本A落到了某个叶子节点,而节点里有多个训练样本。则对于A的类别预测采用的是这个叶子节点里概率最大的类别。

例:根据下表所给的训练集,应用CART算法生成决策树。

3. CART分类树算法对连续特征和离散特征的处理

  CART分类树算法对连续值的处理,思想和C4.5相同,都是将连续的特征离散化。唯一区别在选择划分点时,C4.5是信息增益比,CART是基尼系数。

  具体思路:m个样本的连续特征A有m个,从小到大排列a1,a2,......,am,则CART取相邻两样本值的平均数做划分点,一共取m-1个,其中第i个划分点Ti表示为:Ti = (ai + ai+1)/2。分别计算以这m-1个点作为二元分类点时的基尼系数。选择基尼系数最小的点为该连续特征的二元离散分类点。比如取到的基尼系数最小的点为at,则小于at的值为类别1,大于at的值为类别2,这样就做到了连续特征的离散化。

  注意的是,与ID3、C4.5处理离散属性不同的是,如果当前节点为连续属性,则该属性在后面还可以参与子节点的产生选择过程。

  CART分类树算法对离散值的处理,采用的思路:不停的二分离散特征。

  在ID3、C4.5,特征A被选取建立决策树节点,如果它有3个类别A1,A2,A3,我们会在决策树上建立一个三叉点,这样决策树是多叉树。

  CART采用的是不停的二分。会考虑把特征A分成{A1}和{A2,A3}、{A2}和{A1,A3}、{A3}和{A1,A2}三种情况,找到基尼系数最小的组合,比如{A2}和{A1,A3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的样本。由于这次没有把特征A的取值完全分开,后面还有机会对子节点继续选择特征A划分A1和A3。这和ID3、C4.5不同,在ID3或C4.5的一颗子树中,离散特征只会参与一次节点的建立。

4. CART回归树建立算法

  CART回归树

  CART回归树和CART分类树的建立类似,这里只说不同。

  (1)、分类树与回归树的区别在样本的输出,如果样本输出是离散值,这是分类树;样本输出是连续值,这是回归树。分类树的输出是样本的类别,回归树的输出是一个实数。

  (2)、连续值的处理方法不同。

  (3)、决策树建立后做预测的方式不同。

  分类模型:采用基尼系数的大小度量特征各个划分点的优劣。

  回归模型:采用和方差度量,度量目标是对于划分特征A,对应划分点s两边的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小。表达式为:

其中,c1为D1的样本输出均值,c2为D2的样本输出均值。

  对于决策树建立后做预测的方式,CART分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。回归树输出不是类别,采用叶子节点的均值或者中位数来预测输出结果。

5、CART树算法的剪枝

  CART树的生成:基于训练数据集,递归构建二叉决策树。CART树的剪枝:用验证数据集对生成的树进行剪枝并选择最优子树,损失函数最小作为剪枝的标准。

  CART分类树的剪枝策略在度量损失的时候用基尼系数;CART回归树的剪枝策略在度量损失的时候用均方差。

  决策树很容易对训练集过拟合,导致泛化能力差,所以要对CART树进行剪枝,即类似线性回归的正则化。CART采用后剪枝法,即先生成决策树,然后产生所有剪枝后的CART树,然后使用交叉验证检验剪枝的效果,选择泛化能力最好的剪枝策略。

  剪枝损失函数表达式:

  α为正则化参数(和线性回归的正则化一样),C(Tt)为训练数据的预测误差,|Tt|是子树T叶子节点数量。

  当α = 0时,即没有正则化,原始生成的CART树即为最优子树。当α = ∞时,正则化强度最大,此时由原始的生成CART树的根节点组成的单节点树为最优子树。当然,这是两种极端情况,一般来说,α越大,剪枝剪的越厉害,生成的最优子树相比原生决策树就越偏小。对于固定的α,一定存在使得损失函数Cα(Tt)最小的唯一子树。

  剪枝的思路:

  对于位于节点t的任意一颗子树Tt,如果没有剪枝,损失函数是:

  如果将其剪掉,仅保留根节点,损失函数是:

  当α = 0或α很小,

,当α增大到一定程度时

  当α继续增大时不等式反向,即满足下式:

  Tt和T有相同的损失函数,但T节点更少,因此可以对子树Tt进行剪枝,也就是将它的子节点全部剪掉,变为一个叶子结点T。

  

  交叉验证策略:

  如果我们把所有节点是否剪枝的值α都计算出来,然后针对不同α对应的剪枝后的最优子树做交叉验证。这样可以选择最好的α,有了这个α,用对应的最优子树作为最终结果。

  有了上面的思路,CART树的剪枝算法:

  输入是CART树建立算法得到的原始决策树T。

  输出是最优决策树Tα。

  算法过程:

  (1)、初始化αmin = ∞,最优子树集合ω = {T}。

  (2)、从叶子结点开始自下而上计算内部节点 t 的训练误差损失函数Cα(Tt)(回归树为均方差,分类树为基尼系数),叶子节点数|Tt|,以及正则化阈值

,更新αmin = α

  (3)、得到所有节点的α值得集合M。

  (4)、从M中选择最大的值αk,自上而下的访问子树 t 的内部节点,如果

时,进行剪枝。并决定叶子节点 t 的值。如果是分类树,这是概率最高的类别,如果是回归树,这是所有样本输出的均值。这样得到αk对应的最优子树Tk

  (5)、最优子树集合ω = ωυTk,M = M - {αk}。

  (6)、如果M不为空,则回到步骤4。否则就已经得到了所有的可选最优子树集合ω。

  (7)、采用交叉验证在ω选择最优子树Tα。

6. CART算法小结 

 算法支持模型树结构特征选择 连续值处理缺失值处理   剪枝
 ID3   分类 多叉树 信息增益 不支持 不支持 不支持
 C4.5   分类 多叉树 信息增益比 支持 支持 支持
 CART 分类回归 二叉树

 基尼系数

 均方差

 支持 支持 支持

ωCART算法缺点:

(1)、无论ID3,C4.5,CART都是选择一个最优的特征做分类决策,但大多数,分类决策不是由某一个特征决定,而是一组特征。这样得到的决策树更加准确,这种决策树叫多变量决策树(multi-variate decision tree)。在选择最优特征的时,多变量决策树不是选择某一个最优特征,而是选择一个最优的特征线性组合做决策。代表算法OC1。

(2)、样本一点点改动,树结构剧烈改变。这个通过集成学习里面的随机森林之类的方法解决。

7. 决策树算法小结

  这里不纠结ID3、C4.5、CART,这部分来自scikit-learn英文文档。

优点:

  1. 简单直观,生成的决策树很直观。
  2. 基本不需要预处理,不需要提前归一化和处理缺失值。
  3. 使用决策树预测的代价是O(log2m)。m为样本数。
  4. 既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
  5. 可以处理多维度输出的分类问题。
  6. 相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以很好解释。
  7. 可以交叉验证的剪枝来选择模型,从而提高泛化能力。
  8. 对于异常点的容错能力好,健壮性高。

缺点:

  1. 决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。
  2. 决策树会因为样本发生一点的改动,导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。 
  3. 寻找最优的决策树是一个NP难题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习的方法来改善。
  4. 有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。
  5. 如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

http://chatgpt.dhexx.cn/article/mb1yXj0P.shtml

相关文章

决策树算法总结

决策树算法常用于解决分类问题,该方法的优势在于其数据形式非常容易理解。 概述 决策树(decision tree)是一类常见的机器学习方法.以二分类任务为例,我们希望从给定训练数据集学得一个模型用以对新示例进行分类&…

决策树算法原理简介

1,决策树概念简介 不同的算法模型适合于不同类型的数据。 首先,在了解树模型之前,自然想到树模型和线性模型有什么区别呢?其中最重要的是,树形模型是一个一个特征进行处理,之前线性模型是所有特征给予权重相加得到一个…

机器学习——决策树算法

文章目录 一、决策树介绍二、利用信息增益选择最优划分属性三、ID3代码实现1.jupyter下python实现2. 使用sklearn实现ID3 四、C4.5算法实现五、CART算法实现六、总结参考文献 一、决策树介绍 决策树是一种基于树结构来进行决策的分类算法,我们希望从给定的训练数据集…

机器学习算法:决策树算法

1.基本定义 决策树(Decision Tree)是一种基本的分类和回归算法。该算法模型呈树形结构,主要由结点和有向边组成。结点又分为两种类型:内部结点和叶子结点。内部结点表示在一个属性或特征上的测试,每一个结点分枝代表一个测试输出,…

决策树算法应用及结果解读

作者:林骥 来源:林骥 引言 本文是我写的人工智能系列的第 8 篇文章,文末有前面 7 篇文章的链接,推荐你阅读、分享和交流。 1. 决策树算法简介 决策树是一种应用非常广泛的算法,比如语音识别、人脸识别、医疗诊断、模式…

机器学习算法(3)之决策树算法

前言:首先,在了解树模型之前,自然想到树模型和线性模型有什么区别呢?其中最重要的是,树形模型是一个一个特征进行处理,之前线性模型是所有特征给予权重相加得到一个新的值。决策树与逻辑回归的分类区别也在…

机器学习基础 决策树算法

文章目录 一、决策树算法简介二、决策树分类原理1. 熵1.1 概念1.2 案例 2. 决策树的划分依据一----信息增益2.1 概念2.2 案例 3. 决策树的划分依据二----信息增益率3.1 概念3.2 案例3.2.1 案例一3.2.2 案例二 3.3 为什么使用C4.5要好 4. 决策树的划分依据三 ----基尼值和基尼指…

【机器学习常见算法】决策树算法(含示例代码)

决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规 则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各 种问题时…

【决策树】深入浅出讲解决策树算法(原理、构建)

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​个人主页:有梦想的程序星空​个人介绍:小编是人工智能领域硕士,全栈工程…

协方差矩阵推导

协方差定义:,其中分别为向量的均值。 设已知矩阵 则 样本自由度m-1,设,,则

协方差矩阵到底有什么用?

我们知道,线性代数,可以完成空间上的线性变换——旋转,缩放。对于协方差,我们隐约可以想到,它能解释一个随机变量,它在各个维度的变化程度。但是,这种认识其实还是处于比较浅层次的。数学嘛&…

22协方差矩阵 matlab,协方差协方差矩阵【matlab实例】

[今天看论文的时候又看到了协方差矩阵这个破东西,以前看模式分类的时候就特困扰,没想到现在还是搞不清楚,索性开始查协方差矩阵的资料,恶补之后决定马上记录下来,嘿嘿~ 协方差矩阵 协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计…

透彻理解协方差矩阵

2018-12-30 11:27:05 协方差及协方差矩阵有着特别广泛的应用,在多元高斯分布、高斯过程、卡尔曼滤波等算法中多有用到,本文从协方差、协方差矩阵讲起,并重点讲解协方差矩阵在高斯分布中的用法及意义,也是讲解高斯过程、贝叶斯优化…

使用matlab编写协方差矩阵计算矩阵

Dr.Can在他的教学视频(【卡尔曼滤波器】2_数学基础_数据融合_协方差矩阵_状态空间方程_观测器问题)中使用了足球运动员的数据介绍了协方差矩阵的概念和计算方法,原始数据如下图,那么协方差矩阵到底是什么?他有什么用&a…

PCA与协方差矩阵

一、协方差矩阵 一个维度上方差的定义: 协方差的定义: (a) 协方差就是计算了两个维度之间的相关性,即这个样本的这两个维度之间有没有关系。 协方差为0,证明这两个维度之间没有关系,协方差为正&…

浅谈协方差矩阵2

在之前的博客中介绍过一次协方差矩阵: 浅谈协方差矩阵_Yunlong_Luo的博客-CSDN博客 这次希望在之前的基础上,把协方差矩阵介绍的更清楚一些,本文的很多素材来自于: A geometric interpretation of the covariance matrix 期望和…

浅析协方差矩阵

统计学的基本概念 概率论里面有几个基本的概念,分别是:样本的均值、方差、标准差。首先,我们给定一个含有n个样本的集合,下面给出这些概念的公式描述: 均值: 标准差: 方差: 均值描述…

协方差矩阵用途

协方差两个用途: 各有缺陷 第二个用途:马氏距离(曼哈顿距离) 例如 欧式距离定义 马氏距离: 马氏距离意义: 案例: 鸢尾花案例 随机向量的变换 实际案例: 随机变量的线性组合

协方差矩阵-Covariance Matrix

首先我们要明白,协方差实际是在概率论和统计学中用于衡量两个变量的总体误差,当然方差是协方差的一种特殊情况,即当两个变量是相同情况。它表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。如果两个变量的变化趋势一致&…

协方差矩阵(Covariance Matrix)

群体均值和协方差矩阵定义 (Population Mean and Covariance Matrix) 1、学术定义 2、常规定义 协方差矩阵中每个元素的求法 用中文来描述,就是: 协方差(i,j)(第i列的所有元素-第i列的均值)*&#xff…