目录
6.决策树一定是二叉树么?二叉树与多分支决策树相比各有什么特点
一、决策树概念
决策树是一种自上而下, 对样本数据进行树形分类的过程, 由结点和有向边组成。 结点分为内部结点和叶结点, 其中每个内部结点表示一个特征或属性, 叶结点表示类别。 从顶部根结点开始, 所有样本聚在一起。 经过根结点的划分, 样本被分到不同的子结点中。 再根据子结点的特征进一步划分, 直至所有样本都被归到某一个类别(即叶结点) 中。一般而言, 决策树的生成包含了特征选择、 树的构造、 树的剪枝三个过程,
二、决策树启发函数
从若干不同的决策树中选取最优的决策树是一个NP完全问题, 在实际中我们通常会采用启发式学习的方法去构建一棵满足启发式条件的决策树。
1. ID3——最大信息增益
对于样本集合D, 类别数为K, 数据集D的经验熵表示为
其中Ck是样本集合D中属于第k类的样本子集, |Ck|表示第K类样本个数个数, |D|表示样本总数。
某个特征A对于数据集D的经验条件熵H(D|A)为
其中, Di表示D中特征A取第i个值的样本子集, Dik表示Di中属于第k类的样本子集。
于是信息增益g(D,A)可以表示为二者之差,
计算实例:
样本属性集
则,每个特征信息增益为:
2. C4.5——最大信息增益比
特征A对于数据集D的信息增益比定义为
其中称为数据集D关于A的取值熵
计算实例:
根据增益比公式得知:
3. CART——最小基尼系数
Gini描述的是数据的纯度, 与信息熵含义类似。
CART在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。但与ID3、 C4.5不同的是, CART是一颗二叉树, 采用二元切割法, 每一步将数据按特征A的取值切成两份, 分别进入左右子树。 特征A的Gini指数定义为
计算实例:
年龄 | 不见 | 见 | 属性样本数 | 写代码 | 不见 | 见 | 该属性样本数 | |
老 | 1 | 0 | 1 | 会 | 0 | 2 | 2 | |
年轻 | 2 | 2 | 4 | 不会 | 3 | 0 | 3 | |
长相 | 不见 | 见 | 属性样本数 | 工资 | 不见 | 见 | 该属性样本数 | |
帅 | 1 | 0 | 1 | 高 | 2 | 1 | 3 | |
一般 | 2 | 3 | 3 | 中等 | 0 | 1 | 1 | |
丑 | 1 | 0 | 1 | 低 | 1 | 0 | 1 |
GINI(年龄=老)= GINI(年龄=年轻)=
GINI(写代码=会)= GINI(写代码=不会)=
Outlook | Yes | No | Number of instances |
---|---|---|---|
Sunny | 2 | 3 | 5 |
Overcast | 4 | 0 | 4 |
Rain | 3 | 2 | 5 |
还有一种参考 https://blog.csdn.net/u012421852/article/details/79808307 ,不知道哪个正确
4. 启发函数区别
(1)构造角度
首先, ID3是采用信息增益作为评价标准,会倾向于取值较多的特征。 因为, 信息增益反映的是给定条件以后不确定性减少的程度, 特征取值越多就意味着确定性更高, 也就是条件熵越小, 信息增益越大。 这在实际应用中是一个缺陷。 比如, 我们引入特征“DNA”, 每个人的DNA都不同, 如果ID3按照“DNA”特征进行划分一定是最优的(条件熵为0) , 但这种分类的泛化能力是非常弱的。 因此, C4.5实际上是对ID3进行优化, 通过引入信息增益比, 一定程度上对取值比较多的特征进行惩罚, 避免ID3出现过拟合的特性, 提升决策树的泛化能力。
(2)样本类型
ID3只能处理离散型变量, 而C4.5和CART都可以处理连续型变量。 C4.5处理连续型变量时, 通过对数据排序之后找到类别不同的分割线作为切分点, 根据切分点把连续属性转换为布尔型, 从而将连续型变量转换多个取值区间的离散型变量。 而对于CART, 由于其构建时每次都会对特征进行二值划分, 因此可以很好地适用于连续性变量。
(3)应用角度
ID3和C4.5只能用于分类任务, 而CART(Classification and Regression Tree, 分类回归树) 从名字就可以看出其不仅可以用于分类, 也可以应用于回归任务(回归树使用最小平方误差准则) 。
(4)实现细节、 优化过程
ID3对样本特征缺失值比较敏感, 而C4.5和CART可以对缺失值进行不同方式的处理; ID3和C4.5可以在每个结点上产生出多叉分支, 且每个特征在层级之间不会复用, 而CART每个结点只会产生两个分支, 因此最后会形成一颗二叉树, 且每个特征可以被重复使用; ID3和C4.5通过剪枝来权衡树的准确性与泛化能力, 而CART直接利用全部数据发现所有可能的树结构进行对比。
三、决策树剪枝策略
预剪枝, 即在生成决策树的过程中提前停止树的增长
后剪枝, 是在已生成的过拟合决策树上进行剪枝, 得到简化版的剪枝决策树。
1. 预剪枝
预剪枝的核心思想是在树中结点进行扩展之前, 先计算当前的划分是否能带来模型泛化能力的提升, 如果不能, 则不再继续生长子树。 此时可能存在不同类别的样本同时存于结点中, 按照多数投票的原则判断该结点所属类别。 预剪枝对于何时停止决策树的生长有以下几种方法。
- 当树到达一定深度的时候, 停止树的生长。
- 当到达当前结点的样本数量小于某个阈值的时候, 停止树的生长。
- 计算每次分裂对测试集的准确度提升, 当小于某个阈值的时候, 不再继续扩展。
优点:
思想直接、 算法简单、 效率高等特点, 适合解决大规模问题
缺点:
如何准确地估计何时停止树的生长(即上述方法中的深度或阈值) , 针对不同问题会有很大差别, 需要一定经验判断。
存在一定局限性, 有欠拟合的风险, 虽然当前的划分会导致测试集准确率降低, 但在之后的划分中, 准确率可能会有显著上升。
2. 后剪枝
后剪枝的核心思想是让算法生成一棵完全生长的决策树, 然后从最底层向上计算是否剪枝。 剪枝过程将子树删除, 用一个叶子结点替代, 该结点的类别同样按照多数投票的原则进行判断。 同样地, 后剪枝也可以通过在测试集上的准确率进行判断, 如果剪枝过后准确率有所提升, 则进行剪枝。
常见的后剪枝方法包括错误率降低剪枝(Reduced Error Pruning, REP) 、 悲观剪枝(Pessimistic Error Pruning, PEP) 、 代价复杂度剪枝(Cost ComplexityPruning, CCP) 、 最小误差剪枝(Minimum Error Pruning, MEP) 、 CVP(CriticalValue Pruning) 、 OPP(Optimal Pruning) 等方法, 这些剪枝方法各有利弊, 关注不同的优化角度, 本文选取著名的CART剪枝方法CCP进行介绍。
代价复杂剪枝主要包含以下两个步骤。
- 从完整决策树T0开始, 生成一个子树序列, 其中由生成, 为树的根结点。
- 在子树序列中, 根据真实误差选择最佳的决策树。
步骤(1) 从T0开始, 裁剪Ti中关于训练数据集合误差增加最小的分支以得到Ti+1。 具体地, 当一棵树T在结点t处剪枝时, 它的误差增加可以用R表示, 其中表示进行剪枝之后的该结点误差, 表示未进行剪枝时子树Tt的误差。 考虑到树的复杂性因素, 我们用|L(Tt)|表示子树Tt的叶子结点个数, 则树在结点t处剪枝后的误差增加率为
在得到Ti后, 我们每步选择α最小的结点进行相应剪枝
在步骤(2) 中, 我们需要从子树序列中选出真实误差最小的决策树。 CCP给出了两种常用的方法:
- 基于独立剪枝数据集, 该方法与REP类似, 但由于其只能从子树序列{T0,T1,T2,...,Tn}中选择最佳决策树, 而非像REP能在所有可能的子树中寻找最优解, 因此性能上会有一定不足。
- 基于k折交叉验证, 将数据集分成k份, 前k-1份用于生成决策树, 最后一份用于选择最优的剪枝树。 重复进行N次, 再从这N个子树中选择最优的子树。
优点:
相比于预剪枝, 后剪枝方法通常可以得到泛化能力更强的决策树,
缺点:
时间开销会更大
四、常见问题
1. C4.5 如何处理连续型数值
C4.5决策树可以支持多叉树的形式,因此对于数目大于等于3的离散特征,可以采用多分叉的形式
C4.5算法中策略是采用二分法将连续属性离散化处理:假定样本集D的连续属性有n个不同的取值,对这些值从小到大排序,得到属性值的集合。把区间的中位点的中位点作为候选划分点,于是得到包含n-1个元素的划分点集合。
对连续属性的处理如下:
- 对特征的取值进行升序排序
- 两个特征取值之间的中点作为可能的分裂点,将数据集分成两部分,计算这N-1种情况下每个可能的分裂点的信息增益。优化算法就是只计算分类属性发生改变的那些特征取值,可以显著减少运算量。
- 选择修正后信息增益最大的分裂点作为该特征的最佳分裂点
- 计算最佳分裂点的信息增益率(Gain Ratio)作为特征的Gain Ratio。注意,此处需对最佳分裂点的信息增益进行修正:减去log2(N-1)/|D|(N是连续特征的取值个数,D是训练数据数目,此修正的原因在于:当离散属性和连续属性并存时,C4.5算法倾向于选择连续特征做最佳树分裂点)
经证明,在决定连续特征的分界点时采用增益这个指标(因为若采用增益率,splittedinfo影响分裂点信息度量准确性,若某分界点恰好将连续特征分成数目相等的两部分时其抑制作用最大),而选择属性的时候才使用增益率这个指标能选择出最佳分类特征
2.信息增益率的优缺点
优点:
信息增益对可取值数目较多的属性有所偏好,信息增益率可减少这种不利影响
缺点:
信息增益率偏向于取值较少的特征。当特征取值较少时,信息增益率求解分母较少,因而结果较大。基于以上缺点, 并不直接选择信息增益率最大的特征,而是先在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中在选择信息增益率最高的特征
3. C4.5对ID3做了哪些改进
ID3的缺点:
- 1.偏向于取值较多的属性的属性敏感。极端情况下,若某个属性对于每个样本都是唯一的,若采用该属性进行划分,会得到很大的信息增益。
- 2. ID3不能处理具有连续值的属性
- 3. ID3不能处理属性具有缺失值的样本
- 4. 会生成很深的树,容易产生过拟合
C4.5 改进:
- 1. 采用信息增益率来选择属性
- 2. 可以处理连续值
- 3. 缺失值处理。通常是赋予常见值,或者属性均值。或者为该属性的每个可能值赋予一个概率,将该属性以概率形式赋值
C4.5 缺点:
- 1. 算法低效,在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,导致算法低效
- 2. 内存受限,适合能够驻留于内存的数据集,当训练集大的无法在内存容纳时程序无法进行
4. CART 与C4.5区别
(1)功能:二者都是决策树,CART:分类、回归 C4.5:分类
(2)C4.5通过划分特征空间逼近离散函数值,使用信息增益率作为划分依据。分类规则是互斥并且完备的。互斥:每一条样本记录不会同时匹配上两条分类规则。完备:每条样本记录在决策树中都能蒙匹配上一条规则
CART对特征空间进行二元划分,使用GINI系数作为分类依据,回归时采用均方误差作为评价。能对标量属性与连续属性进行分裂。分裂标量属性:分为 等于和不等于;分裂连续属性:分为大于和小于。
(3)CART对于特征的利用可重复。C4.5不能重复利用数据
5. 简述分类树与回归树
分类树
以C4.5分类树为例,C4.5分类树在每次分枝时,是穷举每一个feature的每一个阈值,找到使得按照feature<=阈值,和feature>阈值分成的两个分枝的熵最大的阈值(熵最大的概念可理解成尽可能每个分枝的男女比例都远离1:1),按照该标准分枝得到两个新节点,用同样方法继续分枝直到所有人都被分入性别唯一的叶子节点,或达到预设的终止条件,若最终叶子节点中的性别不唯一,则以多数人的性别作为该叶子节点的性别。
总结:分类树使用信息增益或增益比率来划分节点;每个节点样本的类别情况投票决定测试样本的类别。
回归树总体流程也是类似,区别在于,回归树的每个节点(不一定是叶子节点)都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差即(每个人的年龄-预测年龄)^2 的总和 / N。也就是被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最可靠的分枝依据。分枝直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。
总结:回归树使用最小均方差划分节点;每个节点样本的均值作为测试样本的回归预测值。
6.决策树一定是二叉树么?二叉树与多分支决策树相比各有什么特点
不一定。CART为二叉树,ID3与C4.5可为多分支。
二叉树不像多叉树会形成过多的数据碎片,但儿茶决策树可能会得到更深的最终决策树
7. 决策树需要归一化么
概率模型不需要归一化,因为他们不关心变量的值,而是关心变量的分布和变量之间的条件概率。决策树是概率模型,数值缩放不影响分裂点位置
8. CART对离散分布、且取值数目>=3的特征的处理
CART树是二叉树,所以对于样本的有N>=3个取值的离散特征的处理时也只能有两个分支,这就要通过组合的创建二取值序列并取GiniGain最小者作为树分叉决策点。如某特征值具有[‘young’,’middle’,’old’]三个取值,那么二分序列会有如下3种可能性:
[((‘young’,), (‘middle’, ‘old’)), ((‘middle’,), (‘young’, ‘old’)), ((‘old’,), (‘young’, ‘middle’))]
采用CART算法,就需要分别计算按照上述List中的二分序列做分叉时的Gini指数,然后选取产生最小的GINIGain的二分序列做该特征的分叉二值序列参与树构建的递归。
因此CART不适用于离散特征由多个取值可能的场景,若使用CART,最好预先人为的离散特征的取值缩减。对于二分后的左右分支,若特征取值tuple中元素多于两个,该特征还可继续参与当前子数据集的二分。
9. 决策树对线性数据的处理
你正在一个时间序列数据集上工作,开始用决策树算法,因为你知道它在所有类型数据上的表现都不错。后来,你尝试了时间序列回归模型,并得到了比决策树模型更高的精度。这种情况会发生吗?为什么?
会发生。时间序列数据具有线性关系,另一方面决策树是检测非线性交互最好的算法。决策树没能提高好的预测原因在于决策树不能想回归模型一样做到对线性关系那么好的映射。因此,若数据集满足线性假设,则线性回归模型是更好地选择
10. 决策树的优缺点
优点:
- 易于理解,可解释性高
- 数据处理简单,不需要归一化、缺失值处理等
- 可同时处理数据性和常规性属性,其他技术往往要求数据属性的单一
- 在相对短的时间内能够对大型数据源做出可行且效果良好的效果
缺点:
- 容易生成复杂的树结构,造成过拟合。剪枝可缓解过拟合
- 不适合处理高维数据,当属性数量过大,部分决策树不太实用
- 对异常值过于敏感,容易导致树结构的巨大的变换
- 泛化能力较差,对没有出现过的值较难处理
参考文献: