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

1、前言

    决策树是目前机器学习算法中使用较多的一种算法,即使在各大竞赛中(kaggle、天池等),使用较多的集成学习(GBDT、XGBoost、LightGBM、catboost等)其基学习器也是树模型(一般为CART树)。
  本文将根据周志华老师的《机器学习》(西瓜书)一书,对相关概念及原理进行通俗解释。

2、相关概念

  利用《机器学习》书中的一句话概括什么是决策树:我们要对"这是好瓜吗?"这样的问题进行决策时,通常会进行一系列的判断或"子决策"我们先看"它是什么颜色?",如果是"青绿色",则我们再看"它的根蒂是什么形态?",如果是"蜷缩",我们再判断"它敲起来是什么声音?",最后,我们得出最终决策:这是个好瓜。,决策树如下:

简单判断西瓜的决策树

注:以上内容及图片均来自周志华老师《机器学习》,如有侵权,请与我联系删除

2.1 问题引出

    根据以上简单描述,想要产生一棵决策树,有以下问题需要解决:

  • (1)每次选择哪个属性(特征)对数据进行划分?对于最终叶节点应归属于哪一类?
  • (2)对于属性为连续变量时,如何进行划分?
  • (3)对于属性中包含缺失值,如何处理?
2.2 划分属性选择

  选择划分属性的原则是,划分之后各个分支中样本尽可能的属于同一类别,也就是各个分支的“纯度”要相对较高。
  根据对“纯度”度量的不同的计算方法,目前常用的分类器有ID3、C4.5、CART等,具体各种计算方法,在前面文章信息论中已有详细描述,可进行参考。
  对于最终划分的叶节点,选择样本最大的类别作为该节点最终类别。

2.2.1 ID3树

  ID3算法是通过计算划分之后的信息增益进行属性选择,如果某个属性信息增益较大,则说明利用该属性划分之后纯度提升较大,也就是划分之后每个分支中类别更“纯”。所以ID3算法每次会选择信息增益最大的属性进行划分。
案例:(《机器学习》一书P76页中有详细计算过程,可进行参考,这里不再描述)。

2.2.2 C4.5树

  通过对ID3算法的了解,可以发现一个问题,如果某个属性可选择的值太多(划分的分支太多),则该属性计算出的信息增益将非常大,所以ID3算法其实是偏向可取值较多的属性的。
  为了避免以上问题,于是出现了C4.5算法。C4.5是通过比较各个属性的“增益率”来选择最优划分属性的。但是在实际算法中,如果直接采用“增益率”来选择划分属性,则将偏向取值类别较少的属性,所以C4.5选择划分属性过程为:先利用信息增益选出高于平均水平的属性,然后再从这些属性中选择增益率最高的属性。

2.2.3 CART树

  CART树是一种二叉树,在这里是通过比较各个属性的“基尼指数”进行属性选择。
  基尼指数通俗理解:从划分的分支中,随机抽取两个样本,则这两个样本不属于同一类别的概率。所以CART树每次会选择基尼指数最小的属性进行划分。
注:这里所说的基尼指数只是在CART决策树模型中会使用,集成学习算法中的CART树并不一定使用的是基尼指数进行属性选择。

3 连续属性与缺失属性

3.1 连续值

  在真实数据中,大部分属性都是连续变量,那对于这样的属性,一般是将该属性进行“二分”(C4.5算法使用的就是“二分法”)。
  例如连续变量属性A取值有[0,2,5,1.3,2.8,4.6],则:

  • <1> 先将A进行排序,得到[0,1.3,2,2.8,4.6,5];
  • <2> 然后将各个中位点作为候选划分点(小于等于该该中位点的划分为一个分支,大于中位点划份为另外一个分支);
  • <3> 通过比较各个划分点的纯度进而选择划分点,为了使该划分点在属性中出现,会选择该属性中小于等于中位数的最大值作为划分点。
    注:连续变量的属性可以继续出现在后代节点的划分属性,但是离散变量属性不可以。
3.2 缺失值

  在实际应用中,很多数据可能在某些属性上的取值没有给出,即该值缺失,如果直接将该样本剔除,可能会遗漏重要的信息,所以应该对包含缺失值的样本也进行使用。
 对于缺失值的学习,需要解决两个问题:

  • (1)如何选择划分属性?
  • (2)对于在某划分属性上为缺失值的样本,应该将该样本划分到哪个分支上去?
3.2.1 缺失值中选择划分属性:

对于属性a:

  • <1>计算该属性中无缺失的样本所占比例;

  • <2>将该属性中缺失值剔除,然后计算相应的信息增益,其中表示属性a上没有缺失值的样本集合;

  • <3>计算该属性的最终的信息增益

3.2.2 对划分属性为缺失值的样本划分:

  对于在某划分属性上为缺失值的样本,原则上是将该样本划分到每一个分支上,但是该样本在每个分支中的权重将不一样。具体就是在该样本原始权重(一般原始权重为1)基础上乘以,(表示对于属性a,在剔除缺失值样本后的无缺失值样本中,属性a取值为v的样本所占的比例)

4 剪枝

  在决策树生成过程中,为了使训练样本尽可能被分类正确,则会划分出很多的分支,最终导致模型在训练集上表现很好,但是在测试集上表现非常差,也就是过拟合现象。为了避免这样过拟合现象,剪枝处理是一种重要的方法。剪枝分为预剪枝与后剪枝。

4.1 预剪枝

  预剪枝是指在对每个节点划分之前,预计算划分之前与划分之后对于测试样本(这里假定使用留出法)的泛化性能,这里使用精确度(预测正确的样本占总样本的比例),如果精确度增大,则进行划分,如果没有增大,则不进行划分。
优点:降低过拟合风险,并且减少了模型训练开销。
缺点:在某划分节点上可能只是当时的精确度降低了,但是在后续继续划分中可能会有较大的提升,此时不对其划分可能增加欠拟合风险。

4.2 后剪枝

  后剪枝是先按照前面提到的方法,生成一颗完整的树,然后从最下面一个划分节点开始计算划分前与划分后的泛化性能提升,如果划分前更好,则该划分节点将不再划分,变为叶节点。
优点:欠拟合风险小,且泛化性能优于预剪枝。
缺点:模型训练开销比预剪枝大。

5 算法比较

算法 支持类型 树结构 节点划分选择 连续值处理 缺失值处理 剪枝 特征属性多次使用
ID3 分 类 多叉树 信息增益 不支持 不支持 不支持 不支持
C4.5 分 类 多叉树 信息增益率 支持 支持 支持 不支持
CART 分类、回归 二叉树 分类:基尼系数回归:均方误差 支持 支持 支持 支持

注:对三种算法区别的自我理解:
  上述三种算法中对各种特殊需求的支持度只是在当时算法提出时没有考虑,例如ID3不支持连续值的处理,只是当时提出ID3算法时没有考虑,后续发现有这个需求,所以对算法进行了升级,出现了C4.5,其它同理。
  以上内容如有理解不当,请指出,谢谢!另,文章中有些内容来源于一些书籍或其他博客,这里就不一一列举,如有侵权,请与我联系删除。

你可能感兴趣的:(决策树(ID3、C4.5、CART))