数据科学之机器学习8: 决策树之ID3

artical 23

“文章原创,转载请注明出处”


ID3算法的核心问题就在于:如何选取在决策树的每个节点处要测试的属性。那么如何去选择呢?当然,我们要选取分类能力最好的属性,那么怎么去确定哪个属性是分类能力最好的呢?ID3算法中,使用信息增益作为评判标准。在看信息增益之前,我们先看看这个决策树的构造过程:

一、构造过程


  1. 选取分类能力最好的属性作为决策树根部节点的测试;
  2. 为根节点属性的每一个可能值产生一个分支;
  3. 以各个分支节点为根节点,重复上述过程。

二、信息增益


1. 熵

在看信息增益之前,首先需要介绍一个概念,那就是香农熵,简称为。相信学过物理的应该大都听过这个名词,在热力学中不就有个熵增原理嘛。其实,熵是信息论中广泛使用的一个度量标准,刻画了任意样例集合的纯度。

熵是信息的期望值,所以可以用熵来刻画一个数据集的纯度。若用 xi,i=1,2,,n 来表示数据集所包含的属性,那么这个数据集的熵为:

H=i=1np(xi)l(xi)

其中, p(xi) 表示选取 xi 作为分类的最终类别的概率; l(xi) xi 的信息,定义为: l(xi)=log2p(xi)

2. 信息增益

有了熵之后就可以刻画一个数据集的纯度,也就是熵值。那么什么信息增益呢?

简单来说,一个属性的信息增益就是:使用这个属性分割样例集合而导致的熵值降低。那么要选取分类能力最好的属性,就是要选取使得信息增益最大的那个属性。

一个属性A对样例集合S的信息增益定义为:

Gain(S,A)=H(S)vA#Sv#SH(Sv)

其中, Sv 表示集合S中,属性A取值为 v 的那部分数据; #Sv 表示,集合S中,属性A取值为 v 的个数; #S 表示集合S中观测的个数。

3. 简单的例子

序号ageincomebuy_iphone
1seniorhighyes
2seniorlowno
3youthhighyes
4youthlowno
5seniorhighyes
6youthhighyes
7seniorhighno

考虑上面这个问题,我们来计算一下各个属性的信息增益。

首先,我们可以看到,这个数据集S最终分类buy_iphone有两种取值: yes,no 。则数据集S的熵值为:

H(S)=47log24737log2370.985

若按照age分类,age有两个属性: senior,youth ,分别有4个和3个。age = senior时,yes有2个,no有2个则有:

Hage(Ssenior)=24log22424log2241
Hage(Syouth)=23log22313log2130.918

则有:

Hage(S)=47×1+37×0.918=0.965

则age属性的信息增益为:

H(S)Hage(S)=0.9850.965=0.020

那么属性income的信息增益怎么去计算,可以动手试试。

三、ID3算法的伪代码


定义:
  • data:为训练样本集
  • label:为目标属性 (比如例子中的属性buy_iphone)
  • attrs:出目标属性外,供算法学习测试使用的其它属性 (比如例子中的age和income属性)
伪代码:

ID3(data, label, attrs):

  1. 创建决策树的Root节点;
  2. 若lable中取值单一,则返回 label=label 的单节点树;
  3. 若attrs为空,则返回 label=(data中取值最多的那个label) 的单节点树;
  4. 否则:
    1. 选取attrs中分类能力最好的属性作为Root的决策属性,记为A;
    2. 对A的每一个可能取值vi:
      1. 在Root添加一个分支对应 A = vi
      2. data_vi = data中 A = vi 的子集,label_vi 表示 data_vi 所对应的目标属性取值;
      3. 若 data_vi 为空集:
        1. 在新分支下加一个叶子节点,节点 label =(data中取值最多的那个label) ;
        2. 否则,加一个子树:ID3(data_vi, label_vi, attrs);
  5. 结束
  6. 返回Root

四、R语言实现


我的项目


转自:http://jackycode.github.io/blog/2014/04/14/id3/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值