西瓜书第四章——决策树

一、基本流程

决策树(decision tree) 是一类常见的机器学习方法。决策树有时指“学习方法”,有时指学得的树(即学得的模型)。决策树,顾名思义是基于树结构来进行决策的;决策时,通常会进行一系列的子决策(即按照样本的一个个属性来判断)。举个例子:查找某个人户口时,先看是哪个国家的,再看是哪个城市的,再看是哪个街区的,,,搜索越来越准确,最后落实到正确的地址。下面为针对西瓜问题的一棵决策树。
西瓜问题

二、决策树学习基本算法

学习算法
显然,决策树的生成过程是一个递归过程。个人理解,一条分支能够将训练样本分类好之后,此条分支即生成完成;然后再去生成代表其他属性值的分支。这里,分支完成的标志有三种情况,也是递归返回的三种情况:

  • 当前结点包含的样本全属于同一类别,无需划分; (即已经分好类的情况)
  • 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;(所有属性都被判断过,或者每个样本特征都相同导致无法划分)
  • 当前结点包含的样本集合为空,不能划分。(当前结点已经没有样本,不需要再划分)

处理方式:

  • 在第(1)种情形下,直接把当前结点标记为叶结点,类别也就是当前所有样本所属的这个类别;
  • 在第(2)种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;(所有属性都判断完了还没分好,这就看该结点下的这些样本哪一类多了)
  • 在第(3)种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别(也就是这种特征的样本,训练集中没有,所以要靠父结点来帮助,其实就是决策树能力不够,使得判断条件松了一级)。

三、划分选择

上述决策树的生成过程中,第 8 步骤最关键,即:从属性集 A 中选取最优划分属性。因为在我们每次判断一个属性后,都会划分出好几个样本集合,最终目的都是尽量让这些样本集合“纯度”达到最高,那每个属性划分当前样本集得到的效果不同,当然要选择划分效果最好的属性了。这里的评价划分属性的标准就是 信息增益 或者 增益率

3.1、信息增益与 ID3 决策树

首先定义信息熵:它是度量样本集合纯度最常用的一种指标。公式如下:
信息熵
其中 k 表示第 k 类,|y| 表示类别个数。信息熵也是度量样本集合不确定性的指标;信息熵越大,不确定性越大,纯度也就越低;信息熵越小,不确定性越小,纯度越高。
信息增益:这就考虑到属性划分了。假设属性 a 是离散的,且有V个可能取值;那对 a 属性划分将产生 V 个分支,每个分支下的样本集合记为 D^v,这些样本集合的信息熵都可以按上述公式计算得到,又因为 这些分支下的样本集合数量不同,所以按个数占比得出每个集合的权重,最后累加即得 用该属性划分能产生的 信息增益。公式如下:
信息增益
著名的 ID3 决策树学习算法就是以信息增益为准则来选择划分属性的。这里西瓜书上举的例子很清楚,在这里不再做演算。

3.2、增益率与 C4.5 决策树

通过 信息增益 来选择划分属性时,有一个问题:即对取值较多的属性有偏好。一个很极端的例子,假设每个西瓜的 编号 也作为一个属性,那每个西瓜被分到一条分支上,也就是一个分支包含一个西瓜,那显然根据信息熵的公式:每条分支上的不确定性都是 0,因为就一个样本。这样以 编号 划分出来的样本集合信息熵达到“最理想”,信息增益最高。但这完全没考虑到其他属性就结束了,这样的决策树显然不具有泛化能力,无法对新样本进行有效预测。

为了减少对取值多的属性的偏好带来的不利影响。著名的 C4.5 决策树算法不直接使用信息增益,而是使用"增益率" 来选择最优划分属性。公式如下:
增益率
其中 IV(a)为:
IV(a)
IV(a)称为属性 a 的固有值,a的取值越多,则IV(a)的值就越大。
需注意的是,增益率准则对可取值数目较少的属性有所偏好。因此 C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

3.3、基尼指数与 CART 决策树

基尼指数又是一种划分属性的准则,CART 决策树就是它的一种实现。在这里,数据集 D 的纯度可由 “基尼值” 来度量:
基尼值
直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此, Gini(D)越小,数据集D的纯度越高。
同样是考量某个属性 a 在划分之后的各个样本集合的纯度提升,基尼指数跟 增益率 很相似,可以对比着来记:
基尼指数
于是,我们在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性。

四、剪枝处理

剪枝是决策树学习算法对付"过拟合"的主要手段。决策树生成过程中,为了尽可能正确划分好训练样本,算法会尽可能把每个属性按优先划分顺序都判别一遍,每个属性的判别都会生出数个分支,这样有可能导致:生成不必要的分支,分的太细从而分错,也就是过拟合的情况。所以,可以通过剪枝来降低这种风险。

剪枝分为预剪枝后剪枝。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

4.1、预剪枝

大致流程:在每个结点划分前后,会有两棵决策树,两棵决策树会将训练样本划分成不同的结果,划分出的数个样本集合如果包含多类,则按样本数最多的类为准,这样就相当于有两个决策数模型。接下来,使用我们准备好的验证集合,分别验证这两个模型,看结点划分后的验证集精度是否比不划分时的高,如果更好了,则采取划分;否则就到此结束分支的延伸。
例如:
预剪枝
在②的结点处,如果此时不往下划分,则使用验证集验证得到精度为:71.4%;如果往下按照“色泽”属性划分,验证集验证得到的决策树,精度却下降到了57.1%,这是因为:不划分时,有 { 4,5,8,11,12 } 都分类正确;而划分后,只有 { 4,8,11,12 } ,5号样本又被分错了,所以不升反降,没必要再将此分支进行下去,就剪去。【具体样本看——西瓜书表4.2】

4.2、后剪枝

后剪枝
后剪枝是在一棵完整的决策树模型上改进,如果剪去某个结点下的分支能够让验证集精度更高,则剪去。这里不再讨论具体例子了,熟悉思路后就很好理解了。

五、连续与缺失值

5.1、连续值处理

到目前为止,我们讨论的样本属性都默认是离散的,现实任务中常有连续属性,所以在决策树学习中就使用 连续属性离散化技术 来解决这一问题,最简单的策略是 二分法。这正是 C4.5 决策树算法采用的机制。
首先统计 样本集上连续属性 a的所有取值,假如有 n 个,那么我们使用 n-1 个候选划分点将这些值划分到不同区间。划分方式是中位点(先将 n 个属性值按大小排序):
候选划分点
我们的目标是:找到一个最优的候选划分点,使得将连续属性按此划分之后的信息增益最大,即公式:
信息增益选候选划分点
特别的:因为连续属性值只能划分成区间,所以在这次如果划分了此连续属性后,以后也有可能继续划分此连续属性(即拿另一个候选划分点划出更小范围的两个区间——两个分支)。

5.2、缺失值处理

现实任务中常会有不完整的样本,如某些属性值缺失。如果只是丢弃这些有缺失值的样本,显然是对数据信息的浪费。

这里有两个问题:

  • 如何得到最优划分属性?
    求最优划分属性的时候,要计算划分此属性后的信息增益,要将每个样本分到特定分支下,这就要对比属性值,那属性值缺失的样本则不知道分到哪一支下。
  • 给定划分属性,如何对有缺失值的样本划分?

大体思路:在不知道将有缺失值的样本划到哪儿的时候,就将此样本划到所有分支中去,只不过到每个分支下的权重不同(权重具体看每个分支下有多少样本)。就是让这一个样本以不同概率划入到不同的分支中去。
基本概念
上述公式,知道是什么含义即可。,对属性 a , ρ表示无缺失值样本所占的比例 ,第二个公式表示无缺失值样本中第 k 类所占的比例 ,第三个公式则表示无缺失值样本中在属性 a 上取值为 a^v的样本所占的比例。

信息增益公式在缺失值情况下的改进:
信息增益
信息熵
C4.5决策树就使用了上述缺失值的解决方案。这里按此方案生成一棵决策树的例子也不再赘述,按照公式来即可。

总结

第四章讲述了决策树学习模型,其关键是 最优划分属性的选择,这里分别讲解信息增益、增益率、基尼指数几种方式为准则进行决策树的划分选择;然后又针对决策树可能出现过拟合的情况,使用了预剪枝或后剪枝的方法减少这方面的影响;最后对现实任务中有可能出现属性 连续或缺失的复杂情形,分别提出了解决方案,即二分法划分连续属性,按概率划入带缺失值样本。决策树是一类常见的机器学习方法,希望能多加巩固!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值