【机器学习实录】——决策树(Decision tree)

目录

1.基本概念

1.1 定义

1.2 策略

1.3 解释

1.4 决策树生长与最优属性的选择

1.4.1 决策树生长流程

1.4.2 递归停止条件

1.4.3 最优属性选择

1. 信息论知识补充:

(1)信息熵

(2)熵的增益

(3)信息增益存在的问题

(4)增益率

2.其他划分标准

1.5 决策树剪枝(pruning)

1.6 连续值和缺失值的处理


1.基本概念

1.1 定义

决策树:基于结构进行决策的处理机制,不断根据某属性进行划分的过程,通常会进行一系列的判断或是“子决策”。

是一种常用的有监督的分类算法。

1.2 策略

“分而治之”,递归进行。

1.3 解释

如下图,当我们需要判断一个西瓜是否为好瓜,我们先判断色泽是否为青绿,如果为正,我们继续进行下一个判断。其中:

1. 每个内部结点表示一种属性的测试

2. 每个分支表示一个测试输出

3. 每个叶节点代表一种类别

【根节点Root】:色泽

【内部结点Node】:根蒂,敲声 等

【叶节点Leaf】: 比如与色泽青绿对应的是坏瓜这个叶节点

【分支Branch】:对于色泽来说,有两个分支,指的是该属性取值为 [青绿] 和 [非青绿] 的两种可能结果。

显然,我们能够明白每一个决策都是建立在之前决策的基础之上的,决策树的最终目的是将样本越分越”纯“

1.4 决策树生长与最优属性的选择

1.4.1 决策树生长流程

决策树的决策过程就是从根结点开始,测试待分类项中对应的特征属性,并按照其值选择输出分支,直到叶子结点,将叶子结点的存放的类别作为决策结果。简单说来,决策树的总体流程是自根至叶的递归过程,在每个中间结点寻找一个「划分」(split or test)属性

  • 从逻辑角度,是if-else语句的组合

  • 从几何角度,是根据某种准则划分特征空间

1.4.2 递归停止条件

  1. 对于一个节点,全是同类样本,那不用执行下一步细分判断

  2. 对于一个节点,仍然有异类样本,但是没有下一个属性去判断了,也要终止

  3. 对于一个属性的其中一个分类,若数据集中的数据完全没有对应分类中的数据,即空集,那也要终止。

1.4.3 最优属性选择

1. 信息论知识补充:

自信息:,本质上就是一个单位,当b=2时单位为bit,当b=e时单位为nat

假设当前数据集D 中共有y类样本,随机变量X的每个取值x都对应一个p(x) ,这里的p(x)就是 第x类样本所占的比例。

(1)信息熵

(自信息的期望):度量随机变量X的不确定性,信息熵越大越不确定。公式如下:

对信息熵的理解:

其实我们看随机变量X,注意它是一个变量,它是不确定的,当我们某个取值最大时,比如等于p(x=a)=1,那么变量就变成了常量,那其他x取值的概率都等于0,此时信息熵是最小的,因为此时是完全确定的。

当所有可能取值的概率都相等时,信息熵最大,,为 log(\left | y \right |)  ,不确定性最大。

解释一下这里的信息熵是怎么计算的

因为我们的决策树模型是一个分类算法,我们想区分鸵鸟和非鸵鸟

- 对于左侧的数据集,总共4个动物,其中有4个鸵鸟,占比4/4,非鸵鸟占比为0,所以 p(x)就是4/4,按照公式计算即可

- 对于右侧的数据集,总共4个动物,其中1个鸵鸟,鸵鸟占比1/4.非鸵鸟占比3/4,同样按照公式计算即可

(2)熵的增益

上一层的熵-当前一层熵的总和

  • 数学意义:熵的变化量

  • 决策树:根节点的熵-当前子节点的熵的和

众所周知,一个数据集/事物涵盖了许多属性,如何确定划分属性?

比如,一个西瓜的属性有根蒂,敲声,纹理,颜色,触感等等

总体思路:计算每个属性的信息增益,比较其大小,大者则被选为划分属性,典型的决策树算法ID3就是基于信息增益来挑选每一节点分支用于划分的属性(特征)的。

如何计算:

信息增益描述了一个特征带来的信息量的多少。在决策树分类问题中,信息增益就是决策树在进行属性选择划分前和划分后的信息差值。典型的决策树算法ID3就是基于信息增益来挑选每一节点分支用于划分的属性(特征)的。

我们看如下例子:

分析数据集,有17个训练样例|y|=2,正例8个,占8/17,反例9个,占9/17

对于根节点,其信息熵为:

由上例,可以计算出每一个属性的信息增益,然后比较其大小,大的就被作为“划分属性”,通过计算每个属性的信息增益,我们发现【纹理】最大,于是使用纹理作为划分属性,那么下一个划分属性如何确定呢?

纹理有三个取值:【清晰】、【稍糊】、【模糊】

对于纹理等于清晰的分支,可以看到有9个样例{1,2,3 ,4 ,5 ,6 ,8 ,10 ,15},可以选用的属性有{色泽,根蒂,敲声,脐部,触感}(注意:此时应该去除纹理这个属性)

同样进行信息增益的计算,下面以计算色泽的信息增益为例

import math
def Entlog2(x):
    return -x*math.log(x,2)
d1=Entlog2(3/4)+Entlog2(1/4) #青绿
d2=Entlog2(3/4)+Entlog2(1/4) #乌黑
d3=Entlog2(1) #浅白
d=4/9*d1+4/9*d2+1/9*d3
# d=0.721
D=Entlog2(7/9)+Entlog2(2/9) #纹理的Ent
D-0.721
# result= 0.0432

 如果计算出来的信息增益没有最大的(就是有好几个最大的)那就随便选一个好了

(3)信息增益存在的问题

实际上,信息增益追求的就是每次能尽可能的将划分结果分的干净一点。

但是,我们进一步想,这样做会不会使得其划分属性会尽可能多呢?,因为属性越多越精细自然分到每个属性的数据量越少,也就越干净。

比如说,我们拿到了人这个数据集,那如果根据【电话号码】这个属性进行划分,可想而知,每个电话号码下对应一个人,是足够干净的,但是我们并不想这样做,别忘了机器学习的目的是根据已有样本对未知数据进行预测,如果此时再来一个人的数据,我们无法对他进行分类,那这个模型的构建显然是泛化能力极低的。

所以我们提出对ID3算法的进一步改进,即增益率,典型的决策树算法ID3就是基于信息增益来挑选每一节点分支用于划分的属性(特征)的。

(4)增益率

其中IV(a)指的是分支率,Gain指的是增益大小,我们希望的是,分支尽可能少而且增益尽可能大

对于C4.5算法中,我们采用启发式的办法:先从候选划分属性中找出信息增益水平高于平均水平的,在从中选取增益率最高的。

技巧:其实,上述行为体现的是一种规范化的思想,本来对于不同属性,其分支不同,是不能直接比较的,但是我们将其规范化,就变得可比较了

特殊形式:归一化:将数值规范到【0,1】之间

2.其他划分标准

基尼指数:从一个袋子里随便抓两个球,若为同类则表示纯度为1,用1-纯度,则表示其不纯度,我们将其最小化,则Gini越小,数据集的纯度越高。

1.5 决策树剪枝(pruning)

  • 目的:防止决策树过拟合的最根本方法

  • 做法:因为可能会导致分支过多,所以主动去掉一些分支

通常,使用单只决策树的时候是需要进行剪枝操作的

  • 基本策略:

    • 预剪枝(pre-pruning):提前终止某些分支的生长

在决策树生长过程中,对每个结点在划分前进行估计,若当前结点的划分不能带来决策树泛化性能的提升,则停止划分并将当前结点标记为叶结点。

  •  后剪枝(post-pruning):生成一棵完全树,再“回头”剪枝

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

1.6 连续值和缺失值的处理

当处理多维数据时,我们经常会遇到样本属性值缺失的问题,如果直接扔掉,会造成对数据的极大浪费

如何解决?涉及到以下两个问题:

Q1:如何进行划分属性选择?

Q2:定划分属性,若样本在该属性上的值缺失,如何进行划分?

基本思路:样本赋权,权重划分

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值