决策树(上)-ID3、C4.5、CART

参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解决策树):

1.https://zhuanlan.zhihu.com/p/85731206

2.https://zhuanlan.zhihu.com/p/29980400

3.https://github.com/Vay-keen/Machine-learning-learning-notes/blob/master/%E5%91%A8%E5%BF%97%E5%8D%8E%E3%80%8AMachine%20Learning%E3%80%8B%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0(5)--%E5%86%B3%E7%AD%96%E6%A0%91.md


决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。本文将分三篇介绍决策树,第一篇介绍基本树(包括 ID3、C4.5、CART),第二篇介绍 Random Forest、Adaboost、GBDT,第三篇介绍 Xgboost 和 LightGBM。

在进入正题之前,先让我们了解一些有关信息论的知识!

信息论

1.信息熵

在决策树算法中,熵是一个非常非常重要的概念。一件事发生的概率越小,我们说它所蕴含的信息量越大。比如:我们听女人能怀孕不奇怪,如果某天听到哪个男人怀孕了,我们就会觉得emmm…信息量很大了。

所以我们这样衡量信息量:

 

 其中,P(y)是事件发生的概率。信息熵就是所有可能发生的事件的信息量的期望:

表达了Y事件发生的不确定度。

决策树属性划分算法

众所周知,决策树学习的关键在于如何选择最优划分属性,一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。

1.ID3

(1)思想

从信息论的知识中我们知道:信息熵越大,从而样本纯度越低,。ID3 算法的核心思想就是以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间(C4.5 也是贪婪搜索)。

(2)划分标准(详细过程以及公式推导见西瓜书即可)

ID3算法使用信息增益为准则来选择划分属性,“信息熵”(information entropy)是度量样本结合纯度的常用指标,假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为:

3.png

假定通过属性划分样本集D,产生了V个分支节点,v表示其中第v个分支节点,易知:分支节点包含的样本数越多,表示该分支节点的影响力越大。故可以计算出划分后相比原始数据集D获得的“信息增益”(information gain)。

4.png

信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

(3)缺点

  • ID3 没有剪枝策略,容易过拟合;
  • 信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;
  • 只能用于处理离散分布的特征;
  • 没有考虑缺失值。

 

2. C4.5

2.1 思想

C4.5 算法最大的特点是克服了 ID3 对特征数目的偏重这一缺点,引入信息增益率来作为分类标准。

C4.5 相对于 ID3 的缺点对应有以下改进方式:

  • 引入悲观剪枝策略进行后剪枝;
  • 引入信息增益率作为划分标准;
  • 可以处理连续值:将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
  • 可以处理缺失值:对于缺失值的处理可以分为两个子问题:
  • 问题一:在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
  • 问题二:选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
  • 针对问题一,C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
  • 针对问题二,C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。

2.2 划分标准

利用信息增益率可以克服信息增益的缺点,其公式为:

5.png

 

注意:信息增益率对可取值较少的特征有所偏好(分母越小,整体越大),因此 C4.5 并不是直接用增益率最大的特征进行划分,而是使用一个启发式方法:先从候选划分特征中找到信息增益高于平均值的特征,再从中选择增益率最高的。

2.3 剪枝策略(预剪枝+后剪枝)

决策树解决过拟合的主要方法:剪枝、随机森林

2.3.1 预剪枝

(1) 在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。在构造的过程中先评估,再考虑是否分支。衡量决策树泛化性能提升的方法:

  • 节点内数据样本低于某一阈值;
  • 所有节点特征都已分裂;
  • 节点划分前准确率比划分后准确率高。

(2)优缺点

  • 降低过拟合风险、显著减少决策树的训练时间开销和测试时间开销。
  • 预剪枝基于“贪心”策略,有可能会带来欠拟合风险。
2.3.2 后剪枝(C4.5采用的是基于后剪枝的悲观剪枝方法)

(1) 后剪枝是先从训练集生成一棵完整的决策树,然后自底向上地对非叶子结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

(2) 后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但同时其训练时间会大的多。

2.4 缺点

  • 剪枝策略可以再优化;
  • C4.5 用的是多叉树,用二叉树效率更高;
  • C4.5 只能用于分类;
  • C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
  • C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。

 

3. CRAT

ID3 和 C4.5 虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但是其生成的决策树分支、规模都比较大,CART 算法的二分法可以简化决策树的规模,提高生成决策树的效率。

Cart算法的两个主要步骤为:(1)将样本递归划分进行建树过程 ; (2)用验证数据进行剪枝.

3.1 思想

CART 在 C4.5 的基础上进行了很多提升。

  • C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
  • C4.5 只能分类,CART 既可以分类也可以回归;
  • CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
  • CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
  • CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。

3.2 划分标准(Cart分类树、Cart回归树)

首先我们来看看Cart分类树!

CART决策树(分类树)使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好,这和信息增益(率)正好相反,基尼指数定义如下:

6.png

进而,使用属性α划分后的基尼指数为:

7.png


 

接下来让我们通过一个实例,从实例中去了解如何创建一棵Cart分类树。 如下图所示

在上述图中,共10条数据,属性有3个,分别是有房情况(离散属性且2种取值)婚姻状况(离散属性且有3种取值)年收入(连续属性),拖欠贷款者属于分类的结果。

对于离散属性(2种取值与多种取值)连续属性我们该如何进行Gini系数的计算以及划分呢?

1.首先来看有房情况这个属性,因为该属性只有“是”“否”两种取值,所以其Gini系数比较容易计算,那么按照它划分后的Gini指数计算如下:

 

 2.接下来对婚姻状况进行计算,我们发现婚姻状况一共有三种取值:单身、已婚、离异,又因为Cart分类树只能是二叉树,所以我们只能对多种取值的属性进行组合:

 

 3.最后对年收入属性进行计算。年收入属性为连续值,Cart分类树又是如何对连续值属性进行处理的呢?(Cart分类树对于连续值的处理其实和C4.5算法对于连续值的处理类似,只不过Cart使用Gini指数,C4.5使用信息增益率)

将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5/Cart 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益/Gini系数,并选择信息增益最大/Gini系数最小的点作为该连续特征的二元离散分类点;

通过计算我们可以发现,(单身或离异,已婚) 和 (<=97,>97)这种划分其Gini系数最小(假设我们选择年收入)。所以根节点分裂为两个子节点,其中一个为叶子结点。对于另外一个结点我们继续使用上述方法在婚姻状况、有房情况中选择最佳特征以及最佳切分点,反复循环直到满足条件为止。


 接下来让我们看看Cart回归树(最小二乘回归树)

众所周知,决策树学习的关键在于如何选择最优划分属性,然而对于Cart回归树而言,还有一个重要的问题就是:如何决定树中叶节点的输出值?

回归树的模型可以表示如下:

[公式]

上式中, [公式] 为对应叶子节点的输出值, [公式] 为指示函数,当x属于 [公式] 时,值为1,否则为0。

回归树的建立过程,优化策略或损失函数为最小化平方误差,即最小化下式:

[公式]

 

(1)问题1:怎样对输入空间进行划分?即如何选择划分点?

CART回归树的建树过程是二分裂节点,并且保证分裂的结果符合最小化平方误差,这里采用了比较暴力的遍历法,即遍历所有特征j和每个特征的多个阈值s,以平方误差最小的组合作为分裂依据,数学描述如下:

[公式] 
上式中,R为以s为分割点分割的左右子树样本合集,c为该集合的均值。

确定了j,s后,就可以就行分裂了,将树分裂为左右两个区域:

[公式]

(2)问题2:如何决定树中叶节点的输出值?

分裂完毕以后,要确定每个叶子结点的输出值,使用类别均值:

[公式]

接下来让我们通过一个实例,从实例中去了解如何创建一棵Cart回归树。 如下图所示

3.3 剪枝策略(简略版本,具体推导见李航 统计学习方法)

采用一种“基于代价复杂度的剪枝”方法进行后剪枝,这种方法会生成一系列树,每个树都是通过将前面的树的某个或某些子树替换成一个叶节点而得到的,这一系列树中的最后一棵树仅含一个用来预测类别的叶节点。然后用一种成本复杂度的度量准则来判断哪棵子树应该被一个预测类别值的叶节点所代替。这种方法需要使用一个单独的测试数据集来评估所有的树,根据它们在测试数据集熵的分类性能选出最佳的树。

3.4类别不平衡

CART 的一大优势在于:无论训练数据集有多失衡,它都可以将其消除不需要建模人员采取其他操作。

CART 使用了一种先验机制,其作用相当于对类别进行加权。这种先验机制嵌入于 CART 算法判断分裂优劣的运算里,在 CART 默认的分类模式中,总是要计算每个节点关于根节点的类别频率的比值,这就相当于对数据自动重加权,对类别进行均衡。

4.总结

最后通过总结的方式对比下 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 是通过代价复杂度剪枝

posted @ 2019-11-16 20:18  控球强迫症  阅读(...)  评论(... 编辑 收藏