【决策树】
决策树是基于树结构来进行决策的
简单来说,就是一棵树,其中根节点和内部节点是输入特征的判定条件,叶子节点是最终结果
<举一个通俗的例子解释一下决策树?>
 
😜母亲要给女儿介绍对象,女儿的挑剔过程就是一个典型的决策树。通过对年龄、颜值、收入、是否为公务员,将男生分为两个类别:见或不见
女儿的决策逻辑,就是一棵决策树,见下图👇
 
<了解一下几个概念>
 
【根节点】 Root Node,又称The Root。只有子节点,没有父节点的节点
【内部节点】Internal Nodes,又称节点。既有父节点,也有子节点的节点
【叶子节点】Leaf Nodes, Leaves,仅仅只有父节点的节点
 
<所以说....决策树由下面几种元素构成:>
  • 根节点:包含样本的全集
  • 内部节点:对应特征属性测试
  • 叶节点:代表决策的结果
决策树的特点:
  • 每个非叶节点表示一个属性测试。
  • 每个分支代表这个特征属性在某个值域上的输出。
  • 每个叶子节点存放一个类别(即决策结果)。
  • 每个节点包含的样本集合通过属性测试被划分到子节点中,根节点包含样本全集。
 
<决策树的构建>
算法的基本流程:
决策树的构造是一个递归的过程,有三种情形会导致递归返回:
  1. 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;(最好的情形)
  2. 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;(属性用完)
  3. 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。(数据用完)
 
决策树的生成主要分以下两步:
1. 节点的分裂:一般当一个节点所代表的属性无法给出判断时,则选择将这一节点分成2个子节点(如不是二叉树的情况会分成n个子节点)
2. 阈值的确定:选择适当的阈值使得分类错误率最小 (Training Error)
 
决策树学习的关键在于如何选择划分属性,不同的划分属性得出不同的分支结构,从而影响整颗决策树的性能。属性划分的目标是让各个划分出来的子节点尽可能地“纯”,即属于同一类别
 
<量化纯度的具体方法>
常用:
  • 信息增益 information gain --->对应算法:ID3
  • 信息增益率 gain ratio --->对应算法:C4.5
  • 基尼指数 gini index --->对应算法:CART
 
<分别怎么算呢?>
 
【信息熵】 information entropy。度量样本集合不确定度(纯度)的最常用的指标
假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为
离散属性 a 有 V 个可能的取值 {a1,a2,…,aV};样本集合中,属性 a 上取值为 av 的样本集合,记为 Dv
 
【信息增益】信息熵 - 条件熵
用属性 a 对样本集 D 进行划分所获得的“信息增益”
 
信息增益越大,表示使用该属性划分样本集D的效果越好。
 
【信息增益率】
HA(D)称为特征A的固有属性,取值越多时越大
信息增益率对可取值较少的特征有所偏好(分母越小,整体越大)
 
【基尼指数】反映从样本集D中随机抽取两个样本,其类别标记不一致的概率
Gini(D)越小越好
使用属性α划分后的基尼指数为:
在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性
 
<决策树常用算法>
  • ID3 (使用information gain划分属性,处理离散型特征,离散型response) 分类
  • C4.5 (使用gain ratio划分属性,处理离散型、连续型特征,离散型response)分类
  • CART(用gini index划分属性,处理离散型、连续型特征,离散型、连续型response)分类、回归
 
【ID3】
核心思想:以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间(C4.5 也是贪婪搜索)
大致步骤:
  1. 初始化特征集合和数据集合;
  2. 计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;
  3. 更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);
  4. 重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。
 
缺点:
  • ID3 没有剪枝策略,容易过拟合;
  • 信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;
  • 只能用于处理离散分布的特征;
  • 没有考虑缺失值。
 
【C4.5】
克服了 ID3 对特征数目的偏重这一缺点,引入信息增益率来作为分类标准
相对于ID3的缺点的改进:
  • 引入悲观剪枝策略进行后剪枝;
  • 引入信息增益率作为划分标准;
  • 将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
  • 对于缺失值的处理
  1. 在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
2. 选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。
 
信息增益率对可取值较少的特征有所偏好(分母越小,整体越大),因此 C4.5 并不是直接用增益率最大的特征进行划分,而是使用一个启发式方法:先从候选划分特征中找到信息增益高于平均值的特征,再从中选择增益率最高的。
 
缺点:
  • 剪枝策略可以再优化;
  • C4.5 用的是多叉树,用二叉树效率更高;
  • C4.5 只能用于分类;
  • C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
  • C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。
 
chilu's note:
由于ID3算法中,信息增益对特征值越多的有偏好;越细小的分割分类错误率越小,所以ID3会越分越细 👇
比如以第一个属性👇为例:设阈值小于70可将样本分为2组,但是分错了1个。如果设阈值小于70,再加上阈值等于95,那么分错率降到了0,但是这种分割显然只对训练数据有用,对于新的数据没有意义,这就是所说的过度学习(Overfitting)
分割太细了,训练数据的分类可以达到0错误率,但是因为新的数据和训练数据不同,所以面对新的数据分错率反倒上升了。
所以,C4.5优化项要除以分割太细的代价,这个比值即信息增益率。分得太细,分母增加,(信息增益率会降低)
 
【CART】Classification and Regression Tree 分类回归树
是一个二叉树,也是回归树,也是分类树
只能将一个父节点分为2个子节点。CART用GINI指数来决定如何分裂
CART 包含的基本过程:
  • 分裂:分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;
  • 剪枝:采用代价复杂度剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象,直到只剩下根节点。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;
  • 树选择:用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证)。
CART 在 C4.5 的基础的提升:
  • C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
  • C4.5 只能分类,CART 既可以分类也可以回归;
  • CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
  • CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
  • CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。
gini index越小,不纯度越低,特征越好
 
缺失值处理:
  1. 如何在特征值缺失的情况下进行划分特征的选择?
CART 算法使用了一种惩罚机制来抑制提升值,从而反映出缺失值的影响(例如,如果一个特征在节点的 20% 的记录是缺失的,那么这个特征就会减少 20% 或者其他数值)
  1. 选定该划分特征,模型对于缺失该特征值的样本该进行怎样处理?
CART 算法的机制是为树的每个节点都找到代理分裂器,无论在训练数据上得到的树是否有缺失值都会这样做。在代理分裂器中,特征的分值必须超过默认规则的性能才有资格作为代理(即代理就是代替缺失值特征作为划分特征的特征),当 CART 树中遇到缺失值时,这个实例划分到左边还是右边是决定于其排名最高的代理,如果这个代理的值也缺失了,那么就使用排名第二的代理,以此类推,如果所有代理值都缺失,那么默认规则就是把样本划分到较大的那个子节点。代理分裂器可以确保无缺失训练数据上得到的树可以用来处理包含确实值的新数据。
 
优点:
无论训练数据集有多失衡,它都可以将其自动消除不需要建模人员采取其他操作
CART 使用了一种先验机制,其作用相当于对类别进行加权。这种先验机制嵌入于 CART 算法判断分裂优劣的运算里,在 CART 默认的分类模式中,总是要计算每个节点关于根节点的类别频率的比值,这就相当于对数据自动重加权,对类别进行均衡。
对于一个二分类问题,节点 node 被分成类别 1 当且仅当:
比如二分类,根节点属于 1 类和 0 类的分别有 20 和 80 个。在子节点上有 30 个样本,其中属于 1 类和 0 类的分别是 10 和 20 个。如果 10/20>20/80,该节点就属于 1 类。
 
回归树与分类树建立的不同之处:
1. 连续值处理
对于连续值的处理,CART 分类树采用基尼系数的大小来度量特征的各个划分点。在回归模型中,我们使用常见的和方差度量方式,对于任意划分特征 A,对应的任意划分点 s 两边划分成的数据集D1和 D2 ,求出使D1和D2各自集合的均方差最小,同时 D1 和D2的均方差之和最小所对应的特征和特征值划分点。表达式为:
其中,c1为D1 数据集的样本输出均值,c2为 D2数据集的样本输出均值。
2. 预测方式
CART 分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。而回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。
 
<剪枝>prunning
剪枝策略分为:
预剪枝(preprunning)在构造的过程中先评估,再考虑是否分支
后剪枝(post-prunning)在构造好一颗完整的决策树后,自底向上,评估分支的必要性
评估指的是性能度量,即决策树的泛化性能
 
【预剪枝】在构造数的过程中,对一个节点考虑是否分支时,首先计算决策树不分支时在测试集上的性能,再计算分支之后的性能,若分支对性能没有提升,则选择不分支(即剪枝)
 
【后剪枝】在构造好一颗完整的决策树后,从最下面的节点开始,考虑该节点分支对模型的性能是否有提升,若无则剪枝,即将该节点标记为叶子节点,类别标记为其包含样本最多的类别。
 
预剪枝:
在节点划分前来确定是否继续增长,及早停止增长的主要方法有:
  • 节点内数据样本低于某一阈值;
  • 所有节点特征都已分裂;
  • 节点划分前准确率比划分后准确率高。
优缺点:
预剪枝不仅可以降低过拟合的风险而且还可以减少训练时间,但另一方面它是基于“贪心”策略,会带来欠拟合风险。
 
后剪枝:
在已经生成的决策树上进行剪枝,从而得到简化版的剪枝决策树。
C4.5 采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。C4.5 通过训练数据集上的错误分类数量来估算未知样本上的错误率。
优缺点:
后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但同时其训练时间会大的多。
 
基于代价复杂度的剪枝:
CART采用一种“基于代价复杂度的剪枝”方法进行后剪枝,这种方法会生成一系列树,每个树都是通过将前面的树的某个或某些子树替换成一个叶节点而得到的,这一系列树中的最后一棵树仅含一个用来预测类别的叶节点。然后用一种成本复杂度的度量准则来判断哪棵子树应该被一个预测类别值的叶节点所代替。这种方法需要使用一个单独的测试数据集来评估所有的树,根据它们在测试数据集熵的分类性能选出最佳的树。
算法:
 
我们每次剪枝都是针对某个非叶节点,其他节点不变,所以我们只需要计算该节点剪枝前和剪枝后的损失函数即可。
 
<比较ID3、C4.5、CART的差异>
除了之前列出来的划分标准、剪枝策略、连续值、缺失值处理方式等之外,我再介绍一些其他差异:
 
划分标准的差异:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺点,偏向于特征值小的特征,CART 使用基尼指数克服 C4.5 需要求 log 的巨大计算量,偏向于特征值较多的特征。
使用场景的差异:ID3 和 C4.5 都只能用于分类问题,CART 可以用于分类和回归问题;ID3 和 C4.5 是多叉树,速度较慢,CART 是二叉树,计算速度很快;
样本数据的差异:ID3 只能处理离散数据且缺失值敏感,C4.5 和 CART 可以处理连续性数据且有多种方式处理缺失值;从样本量考虑的话,小样本建议 C4.5、大样本建议 CART。C4.5 处理过程中需对数据集进行多次扫描排序,处理成本耗时较高,而 CART 本身是一种大样本的统计方法,小样本处理下泛化误差较大 ;
样本特征的差异:ID3 和 C4.5 层级之间只使用一次特征,CART 可多次重复使用特征;
剪枝策略的差异:ID3 没有剪枝策略,C4.5 是通过悲观剪枝策略来修正树的准确性,而 CART 是通过代价复杂度剪枝。

 

<决策树的优缺点>
优点
  • 决策树易于理解和解释,可以可视化分析,容易提取出规则;
  • 可以同时处理标称型和数值型数据;(categorical,numerical)
  • 比较适合处理有缺失属性的样本;
  • 能够处理不相关的特征;
  • 测试数据集时,运行速度比较快;
  • 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。
缺点
  • 容易发生过拟合(随机森林可以很大程度上减少过拟合);
  • 容易忽略数据集中属性的相互关联;
  • 对于那些各类别样本数量不一致的数据,在决策树中,进行属性划分时,不同的判定准则会带来不同的属性选择倾向;信息增益准则对可取数目较多的属性有所偏好(典型代表ID3算法),而增益率准则(CART)则对可取数目较少的属性有所偏好,但CART进行属性划分时候不再简单地直接利用增益率尽心划分,而是采用一种启发式规则)(只要是使用了信息增益,都有这个缺点,如RF)。
  • ID3算法计算信息增益时结果偏向数值比较多的特征。

 

<总结>
 
ID3
C4.5
CART
划分标准
信息增益
信息增益率
基尼指数
属性类型
离散型
离散型/连续型
离散型/连续型
使用场景
分类问题
分类问题
分类/回归问题
剪枝策略
无剪枝
悲观剪枝策略
基于代价复杂度的剪枝
优点
1.搜索空间完整
2.鲁棒性好,不受噪声影响
3.可训练缺少属性值的实例
1.克服ID3对特征数目偏重的缺点
2.可将连续特征离散化
3.引入悲观剪枝策略进行后剪枝
1.可处理分类/回归问题
2.二叉树,运算速度快
3.使用gini index,减少大量对数运算(效率高)
缺点
1. 没剪枝策略,容易过拟合
2.信息增益对可取值数目较多的特征有偏好
3.只能处理离散型特征
1.用的是多叉树,效率不如二叉树高
2.只能用于分类问题
3.使用熵模型时有大量耗时的对数运算,连续值还有排序运算(耗时长)
 
决策树优点
1.易理解和解释,可做可视化分析,容易提取规则
2.可同时处理离散型和连续型数据
3.适合处理有缺失属性的样本
4.能处理不相关的特征
5.训练速度快
决策树缺点
1.容易发生过拟合
2.容易忽略数据集中数据的相互关联
3.ID3算法计算信息增益时结果偏向可取数目较多的特征
4.C4.5算法计算信息增益率时偏向可取数目较少的特征
 

 

references: