决策树CART、ID3、C4.5原理梳理

《老饼讲解机器学习》icon-default.png?t=N7T8https://www.bbbdata.com/text/10


目录

一. 学习决策树原理的顺序

二.CART分类树

(一)分类树模型结构

(二).分类树构建过程

(二).剪枝(防止过拟合)

三. CART回归树模型

四. ID3算法

五.C4.5算法

(一) ID3的缺陷

(二) C4.5打上补丁

六.决策树演进与对比


能来看算法原理的,估计都对决策树有一些初步理解了。
决策树算法原理其实非常简单, 但由于网上杂文过多,往往把概念弄得非常混乱,造成原理理解困难。

本文对原理进行简单介绍与梳理 。

一. 学习决策树原理的顺序

决策树算法有CART,ID3,C4.5 几种,如果把多种算法原理概念混在一起,必然很难理解。
思想起源来自于ID3,所以一般会先介绍ID3,但我建议不要从ID3入手,学习路线线最好如下安排:
理解CART分类树---->理解CART回归树--->理解ID3算法---->理解C4.5算法。

为什么先理解CART分类树
(1) matlab,python的sklearn都只实现CART算法,没有ID3,C4.5算法。
(2)CART和ID3(c4.5)是两条支线。现在人们所说的决策树,现在基本都是暗指CART,而非ID3,C4.5,所以没有必要纠结着ID3,C4.5不放。
重要的事说三遍, 先理解CART,先理解CART,先理解CART,再理解ID3,C4.5。
CART更加成熟,更加合理,更加实用,更加容易理解,越不成熟,越不合理的东西越难理解。
(3)CART(classification and regression tree)望文思义就是分类与回归树,使用得更多的是分类树,而回归树是在分类树的基础上的改动成适用于回归问题。

二.CART分类树

(一)分类树模型结构

CART分类树的结构就是一棵二叉树,每个节点有一个变量与一个判断值,该变量<=值,则判为左节点,否则为右节点。
树的训练则是指构建这样一棵树,使它能够较好的预测新样本。

(二).分类树构建过程

构建过程是逐节点构建的方式,直到所有样本都分配到叶子节点,即完成树的构建。

构建树的核心问题是:
(1)节点是作为叶子,还是继续分裂(即叶子准则)。
(2)如果分裂,该选择哪个变量作为判断值,变量的阈值是多少。
(3)叶子节点的所属类别是哪个。

所以,构建树是一个while循环过程,例如一开始根节点是150个样本,则开始while循环,
如图所示,根据分裂准则,确定了变量与阈值,则可把根节点分为左右两个子节点,假设现在50个分配到左节点,100个分配到右节点。
再根据叶子准则,判断到左节点是叶子,不再分裂。右节点不是叶子,则继续把这100个样本分裂...直到所有样本都落在叶子节点。

现在,只要确定以上三个核心问题即可。
1.叶子准则
(1) 节点样本<min_samples_split则作为叶子
(2) 超过了树分枝最大深度max_depth,则作为叶子
(3) 其它类似的条件。

2.确定节点变量与阈值
分裂选择哪个变量,和阈值是多少?
这个问题极其简单,先定一个分裂收益评估函数,把所有变量和阈值的可能组合都代进去算一遍,哪个收益大,就用哪组[变量,阈值],
怎么比较哪种分裂效果更好?主要评估子节点的清晰度。如果左节点上全是A类,那左节点就很清晰了。如果左节点上A,B两类各占50%,那就还不是很明朗。
也即是,从节点中任意抽取两个样本,这两个样本不属同一类的概率P=\displaystyle 1-\sum\limits _{k=1}^{K}\left ( \frac{N^{c_k}}{N} \right )^2
(这概率的怎么来的后面会放链接)越小说明节点分得越清晰,这个概率称为基尼系数(GINI)。
分裂后有左右两个节点,取两个节点的加权概率即可

G=\displaystyle \frac{N_L}{N} *\left [ 1-\sum\limits _{k=1}^{K}\left ( \frac{N_L^{c_k}}{N_L} \right )^2 \right ] +\frac{N_R}{N} *\left [ 1-\sum\limits _{k=1}^{K}\left ( \frac{N_R^{c_k}}{N_R} \right )^2 \right ]


G越小,就代表分得越清晰。(如果是定义收益函数,收益函数需要越大越好,则取上式相反数)
通过比较每种分裂的GINI系数,最后取GINI系数(即在左/右节点随机抽两个样本,两个样本不属同一类的概率)最小的分裂对应的[特征-阈值] 即可。

3.叶子节点类别判定
叶子节点上的样本,哪类样本最多,叶子就属于哪一类。
在构建完树后,预测时只要判断新样本落在哪个叶子,就预测为哪一类。
至此,CART回归树的建树原理就结束了。

(二).剪枝(防止过拟合)

剪枝分为预剪枝和后剪枝,

1.预剪枝
预剪枝就是在构建树过程设定一个条件,防止节点分度分裂,好家伙,其实就是叶子准则,设严此,就是预剪枝了。

2.后剪枝
后剪枝就是在树构建完后再剪掉一些叶子节点。通常使用的是CCP(Cost Complexity Pruning)后剪枝法。
损失函数定义为树的代价+复杂度:

L=\displaystyle \sum \limits _{i=1}^{T} \frac{N_i}{N} L_i +\alpha T

其中
T :叶子节点个数 
N :所有样本个数
N_i :第 i 个叶子节点上的样本数 
L_i : 第i个叶子节点的损失函数(常用的有:错误占比,GINI系数,和熵。)
α  :待定系数,用于惩罚节点个数,引导模型用更少的节点。

然后根据损失函数进行剪枝,使 L最小。
后剪枝是使用者的后期操作,所以程序一般只提供一条 \alphaα的所有可能取值,与对应的叶子加权损失函数\displaystyle \sum \limits _{i=1}^{T} \frac{N_i}{N} L_i的值,供使用者自行选择α 。

具体计算方法参考《决策树后剪枝原理:CCP剪枝法》。

三. CART回归树模型

决策树用于回归
回归与分类的不同,在于回归的输出变量y为连续数值变量。
整体算法类似于分类树,关键有以下两点修改:
(1)叶子节点输出的不是类别,而是节点上所有y的均值。
(2)构树过程中节点分割评估不用基尼指数,改用 平方差\displaystyle \sum\limits ^{N_{L}}_{i=1}\left ( \text{y}_i-\bar{\text{y}}_L \right )^2 +\sum\limits ^{N_{R}}_{i=1}\left ( \text{y}_i-\bar{\text{y}}_R \right )^2

至此,CART回归树也就讲完了。信息熵呢?信息增益比呢?怎么没有讲?那是ID3,C4.5的概念。所以说不要混在一起~! 

四. ID3算法

ID3与CART分类树的差异:
1.树结构不同:ID3决策树模型也是一棵树。输入变量必须全是枚举型。每个节点选择一个变量,按该变量所有可能取值分叉。

2.输入变量不同:CART是连续变量,用阈值切割,而ID3输入变量必须全是枚举型按变量所有可能取值分叉。
3.分叉依据不同:ID3是全分叉,因此没有阈值一说,仅需比较不同变量的分叉质量即可。
分叉依据的是信息增益(Gain):

G=\displaystyle \sum \limits_{i=1}^{M}\dfrac{N_i}{N}\left ( \sum \limits_{k=1}^{K} \dfrac{N_{ik}}{N_i} \log_2\dfrac{N_{ik}}{N_i} \right ) -\sum \limits_{k=1}^{K} \dfrac{N_{k}}{N} \log_2\dfrac{N_{k}}{N}

M   : 分叉子节点个数
N    : 所有子节点的总样本数(也即父节点的样本数)
N_i   : 第 i 个子节点上样本个数
N_{ik} :第 i 个子节点上第k类样本的个数
N_k  :父节点上第 k 类样本的个数

其中H=\displaystyle -\sum \limits _{k=1}^{K} \dfrac{N_k}{N} \log _2 \dfrac{N_k}{N}称为熵。

4.没有剪枝:对,ID3是较原始的一个算法,没有剪枝。

五.C4.5算法

C4.5就是对ID3的补充,就是对ID3打补丁

(一) ID3的缺陷

(1)变量偏好多枚举值:
ID3更偏好优先分叉枚举值多的变量。因为ID3用信息增益评估分叉质量,该评估函数会更偏好枚举值多的变量。
(如果变量A有2个枚举,B有10个枚举,肯定就偏好B了,因为B一下子把节点分叉成10个子节点,而A只分成2个子节点。分成10个子节点的确定性肯定比2个会更强些。)
(2) ID3容易过拟合。
(3) ID3不支持连续变量。
(4) 不支持数据有缺失值。

(二) C4.5打上补丁

(1) 变量偏好纠正:使用信息增益比

信息增益比:

G_r=\dfrac{G}{H(A)}=\displaystyle \dfrac{ \sum \limits_{i=1}^{M}\dfrac{N_i}{N}\left ( \sum \limits_{k=1}^{K} \dfrac{N_{ik}}{N_i} \log_2\dfrac{N_{ik}}{N_i} \right ) -\sum \limits_{k=1}^{K} \dfrac{N_{k}}{N} \log_2\dfrac{N_{k}}{N}}{ \sum \limits_{k=1}^{K^{(v)}} \dfrac{N_{k}^{(v)}}{N^{(v)}} \log_2\dfrac{N_{k}^{(v)}}{N^{(v)}} }

分子就是ID3中的信息增益, 分母则是全体样本中变量v的熵
分母符号说明:
K^{(v)}  :  全体样本(划重点,是全体样本)变量v的枚举个数
N^{(v)}  :  全体样本个数。
N_{k}^{(v)} :全体样本变量v第k个枚举值的样本个数。

(2) 过拟合处理:添加剪枝
剪枝方法就是CART中所说的CCP,与CART不同的是,损失函数中节点的损失用熵函数,而不是GINI。

L=\displaystyle \sum \limits _{i=1}^{T}\left [ \dfrac{N_i}{N}H(T)\right ] + \alpha T

(3) 连续变量处理:与CART类似。
(4)变量有缺失值的处理:很复杂和别扭。

六.决策树演进与对比

1.树结构:ID3不是二叉树,C4.5在输入是连续变量时是二叉树,CART一定是二叉树。非二叉树都可以用二叉树替代,统一用二叉树更加简单优雅。
2.分裂依据:ID3分裂时用熵,C4.5用熵增益,CART用GINI。GINI很容易理解,就是抽出两个样本不属同一类的概率。GINI没有log,计算也方便。(熵也可迁移到CART中用,但CART更偏向用GINI)。
3.特征数据类型:ID3的输入变量是枚举类型,C4.5是枚举与数值兼容,CART是数值类型。完全抛弃了枚举,是因为枚举型问题可以转化为数值类型问题。
4.缺失值支持:ID3不支持缺失值,C4.5支持缺失值,CART不支持缺失值。最后抛弃了缺失值的兼容,是缺失值处理极其复杂与不够优雅。统一在入模前把缺失问题处理,更加清晰,可控。
5.剪枝:ID3没有剪枝,C4.5有剪枝,CART有剪枝。

备注:一般软件包(python,matlab)只支持CART,不支持ID3,C4.5

相关文章

 《一个简单的决策树分类例子

sklearn决策树结果可视化

sklearn决策树参数详解

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值