西瓜书(task2)

什么是决策树?

一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果。其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的”分而治之“(divide-and-conquer) 策略,如图下图所示(比如我们认为色泽青绿,根蒂蜷缩并且敲声浊响的瓜是好瓜)。


西瓜问题的决策树
决策树的生成是一个递归的过程,在决策树的基本算法当中,有三种情况会导致递归的结束:

(1) 当前结点包含的样本全属于同一类别,无需划分;

(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;

(3) 当前结点包含的样本集合为空,不能划分。

构建树的原则

我们构建一棵决策树的基本想法就是,我们希望决策树每个叶子节点包含的样本尽可能属于同一个类别,即结点的“纯度”越来越高。

决策树划分选择的方法

根据构建树的原则来看,即使得每个结点的纯度尽可能小,那么我们需要一些指标评价“纯度”这个概念。信息熵和基尼指数是两个常用的指标。

信息增益

”信息熵“ (information entropy)是度量样本集合纯度最常用的一种指标。

假定当前样本集合D中第k类样本所占的比例为 [公式] (k = 1,2,. . . ,IYI),则D集合的信息熵定义为:


其中Ent(D)的值越小,那么纯度越高。

现在考虑我们从节点D出发,开始划分子树,假设在D中的样本具有一个属性,属性a有V个取值,我们将其称之为{a1, a2, a3, ... , aV}。那么我们按照某个类别ai(i = 1,2,3 ... V)进行划分,那么就可以计算出对应子节点的信息熵,用本层节点的信息熵减去子节点的信息熵就可以得出两层的信息熵的差值,我们希望这个差值越大越好,即向着纯度越高的方向划分:


需要注意的是,我们需要给子节点的信息熵乘以权重,即划分子节点集合元素数量除以总的元素数量。

ID3决策树学习算法使用信息增益的准则划分属性。

增益率

但是直接使用信息熵的方法存在一个问题:比如考虑这样一个情况,我们希望划分通过一个人的身份证号,家庭地址,性别等信息将人群划分为多个类,如果使用身份证号作为划分,只计算Ent(DV)的话,或许能够得到一个较小的信息熵(每个节点只有一个样本,纯度很高),但是在面对新的样本的时候,由于树模型从未见过这个身份证号,会导致我们的模型泛化能力很差。

为了去除我们的树模型对取值较多的属性的偏好,那么我们使用增益率的算法,而不直接使用信息增益:


其中:


其中IV(a)的值会随着样本数量的增大而增大,但是这依旧存在着问题,那么就是我们的模型可能会对少样本产生偏好,所以一般的做法是我们先使用信息增益的方法找出高于平均水平的属性,然后再从中找出增益率最高的。

C4.5使用增益率作为准则划分属性。

基尼指数

基尼指数也是衡量纯度的一个重要标准,其定义为:


基尼系数
Gini系数反映了从数据集当中随机抽取两个样本,其类别标记不一致的概率。Gini系数越小,其纯度越高。那么对应样本D的基尼指数的定义为:


CART决策树使用基尼指数作为属性划分的标准。

剪枝处理

在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得"太好"了,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合的风险:

一般来说剪枝得手段可以分为两种:即预剪枝和后剪枝,预剪枝指的是在决策树得生成过程当中,对每个节点在划分前进行一个估计,若当前节点得划分不能带来决策树泛化性能提升,那么停止划分并且将当前结点标记为叶结点。后剪枝则是从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应地子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换成为叶结点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值