决策树:属性的选择(续)

接先前一节总结决策树的,还有一些问题。上节的参考:

决策树:从特征的重要程度说起

上节主要介绍了决策树的构造方法,以及非常重要一部分是对于每个节点的特征属性是怎么选择的,这是决策树的核心。

比较原始的是基于信息熵与信息增益的方法做的,这也对应着最开始的ID3方法。为了改进ID3,出现了基于信息增益率的特征选择以及基于基尼系数的特征选择方法。对应起来就是:

(1)信息增益 -> ID3
(2)信息增益率 -> C4.5
(3)基尼指数 -> CART

  • 信息增益

信息增益的做法最简单,上节主要探讨的是这种,简单来说就是几个步骤:

(1)首先计算一个未挑选属性之前,从样本分类角度来看的一个系统的信息熵。用实例假设好理解,假设100个样本,每个样本有7维特征A-G,100个样本中20个类别1,30个样本为类别2,50个为类别3,那么基于类别的系统的信息熵就是info(F) = -sum(plogp) = -20/100 * log(20/100)-30/100 * log(30/100) - 50/100*log(50/100)

(2)计算挑选一个属性后,按该属性分类完的分类系统信息熵。假设以A属性划分,划分完可以分为两半,假设一半40个样本(10个类1,10个类2,20个类3),另一半60个样本(10个类1,20个类2,30个类3),那么从类别角度来看系统的信息熵为:info(F|A) = -(sum(组1) +sum(组2)) = -([10/40 * log(10/40) + 10/40 * log(10/40) + 20/40 * log(20/40)] + [10/60 * log(10/60) + 20/60 * log(20/60) + 30/60 * log(30/60)]), info(F|A)此为A划分条件下的信息熵.

(3)A属性信息增益为 g(F,A) =(info(F) - info(F|A))

(4)选择A-G中最大的信息增益作为分裂节点。

  • 信息增益率

上面这个过程中有一个非常重要的环节,就是步骤(2),我们上面说以属性A进行划分为两半,那么究竟是怎么划分的呢?为什么就划分为2半而不是3半呢?

首先划分为两半是简单的以为属性A的特征值只有两个,比如只有0与1,那么可以正好划分为两半,而实际情况通常不是这样的,属性A所对应的特征值对不同的样本可能是很分散的,我们假设A的取值可以是0-9中间的任何一个,那么这个时候我们要以哪个数划分呢?划分为几半呢?

首先说说划分为几半,A的取值可以是0-9,理论上都可以划分为10份吧,每个树对应一份,这样的缺点是对应的分叉太多了,而决策树构造的树基本上都是二分叉的,简单。既然是二分叉,0-9中选择哪个数来分叉比较好呢?

这就涉及到一个分叉数了,如果A的取值更多,比如有1000个,那么通常设置一个分叉数10,也就是0-100为一个分割区间,100-200为一个分割区间等等来进行划分。

我们还是假设A的取值可以是0-9,假设分叉数为5,也就是0-2一个区间,2-4为一个区间,等等,共5个区间。然后按照这5个区间去划分所有样本,这样就有5个子集合了,然后去做步骤(2),这时可以发现,现在的sum求信息熵里面是不是就有5个了。

至此,我们终于可以引出信息增益的弊端了。因为我们是靠信息增益来选择属性的,当A的取值很多的时候,那么A的分叉数就会很多,导致每个子集都很纯,因为分的太细了嘛,这样sum出来的信息熵就会很小,也就是信息增益很大,那么就很大可能选择A作为节点的分割属性。所以结论就是,信息增益的方法进行属性选择的时候会偏向取值较多的特征。

解决这个问题的根本方法就是如何避免属性A取值较多的情况,解决的一个方法就是信息增益率。

信息增益率怎么做的呢?同样先按照上面方法计算信息增益。只是多了一个步骤,还会计算一个分裂信息熵。还是假设A有10个取值,分裂成5个区间,那么分裂信息熵的着眼目标不是类标签,而是分裂值,什么意思呢,假设0-2的区间有10个样本(至于里面有几个0类别,有几个1类别,不管),2-4有8个样本,等等。总样本数假设是100的话,那么分裂信息熵就是H(A) = sum(-p*log§) = -(10/100) * (10/100) - (8/100) * (8/100) - …
这就是分裂信息熵,可以看到,加入分裂份数越多,也就是属性A的取值越多的话,sum里面的项越多,这个值也就越大(想想为什么)。那么信息增益率的计算就是g(F,A)/H(A), 其中g(F,A)是前面的信息增益。

  • 基尼指数:Gini

最后来看下基尼指数(基尼不纯度),定义就是表示在样本集合中一个随机选中的样本被分错的概率。Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。

基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率。

用公式表示就是:
在这里插入图片描述

其实基尼指数的功能对标的是p*log§的功能,举个例子,还是假设按照属性A进行分割,100个样本分成了两半,一半40个样本(10个类0,30个类1),一半60个样本(20个类0,40个类1),这样子集1中,Gini1§ = 1 - [(10/40) * (10/40) + (30/40) * (30/40)], 子集2的Gini2§ = 1 - [(20/60) * (20/60) + (40/60) * (40/60)]

那么基于A属性划分得到的Gini = Gini1+ Gini2. 这样对所有属性选择Gini最小的属性作为分割属性。

其实可以看到,Gini的方法同样会面对假如A的特征值有很多的情况。对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本集D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值),也就是比如A的取值[0-2]一个区间,剩下的[2-9]一个区间计算基尼指数,[2-4]为一个,剩下的区间为一个,依次类推最后选择最佳的。

相比而言,基尼指数只是换了一种方式计算信息熵而已,剩下的计算方法都相似,一个小区别就是基尼指数不需要计算log,而是p*p的方式,所以它的速度更快点,大多数时候,二者没有特别的效果优劣;

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值