数据挖掘算法——ID3(决策树)

来源:互联网 发布:linux环境安装jmeter 编辑:程序博客网 时间:2024/05/16 16:34

决策树算法:决策树是对数据进行分类,以此达到预测的目的。该决策树方法先根据训练集数据形成决策树,如果该树不能对所有对象给出正确的分类,那么选择一些例外加入到训练集数据中,重复该过程一直到形成正确的决策集。决策树代表着决策集的树形结构。决策树由决策结点、分支和叶子组成。决策树中最上面的结点为根结点,每个分支是一个新的决策结点,或者是树的叶子。每个决策结点代表一个问题或决策,通常 对应于待分类对象的属性。每一个叶子结点代表一种可能的分类结果。沿决策树从上到下遍历的过程中,在每个结点都会遇到一个测试,对每个结点上问题的不同的测试输出导致不同的分支,最后会到达一个叶子结点,这个过程就是利用决策树进行分类的过程,利用若干个变量来判断所属的类别。

ID3 (Iterative Dichotomiser 3) 是由Ross Quinlan提出的分类预测算法;用以给一个数据集创建决策树。该算法是以信息论为基础,以信息熵信息增益为衡量标准,从而实现对数据的归纳分类。

预备知识

  1. 信息的定量描述:衡量信息多少的物理量称为信息量

    • 若概率很大,受信者事先已有所估计,则该消息信息量就很小;
    • 若概率很小,受信者感觉很突然,该消息所含信息量就很大。

    信息量的定义:若一个消息x出现的概率为p,则这一消息所含的信息量为:I=log2p 其中,对数的底大于1。以2为底时,单位为 bit(binary unit,比特)

    例如:抛一枚均匀硬币,出现正面与反面的信息量是多少?
    出现正面与反面的概率均为0. 5,故,I()=log212=1b。当然,I()=log212=1b

  2. 信源含有的信息量是信源发出的所有可能消息的平均不确定性,香农把信源所含有的信息量称为信息熵(entropy)。是指每个属性所含信息量的统计平均值。m种属性的平均信息量为:
    H(x)=mi=0p(xi)I(xi)=mi=0p(xi)log2p(xi)

    例如:抛一枚均匀硬币的信息熵是多少?H(x)=2i=1p(xi)log2p(xi)=(0.5log212+0.5log212)=1b
    H(x)=0意味着数据集X被完美的分类了(即所有元素都属于同一类别)。ID3会为每一个属性计算信息熵,具有最小信息熵的属性在本次迭代中用来划分数据集X

  3. 条件自信息量:
    在事件yj出现的条件下,随机事件xi发生的条件概率为p(xi|yj) ,则它的条件自信息量定义为条件概率对数的负值:I(xi|yj)=log2p(xi|yj)

  4. 条件熵
    计算当一个特征t不能变化时,系统的信息量是多少。这个信息量其实也有专门的名称,就叫做“条件熵”
    当计算条件熵而需要把每一种可能都要固定一下,计算n个值,然后取均值才是条件熵。而取均值是要用每个值出现的概率来算的。
    在给定yj条件下,xi(i=1…n)的条件自信息量为I(xi|yj), X集合的条件熵H(X|yj)为:
    H(X|yj)=nip(xi|yj)I(xi|yj)
    在给定Y(即各个yj )条件下,X集合的条件熵H(X|Y)为:
    H(X|Y)=yjYp(yj)H(X|yj) ——-条件熵H(X|Y)表示已知属性Y后,X的不确定度.

  5. 信息增益(Information Gain)
    IG(Y)是表示集合X被属性Y分类之前和之后熵的差异。即:集合X原来的熵和已知属性Y之后的熵之差。表示属性Y被固定前后集合X的不确定性降低了多少。
    IG(Y,X)=H(X)H(X|Y)=H(X)yjYp(yj)H(X|yj)
    ID3会为每一个属性计算信息熵,具有最大信息增益的属性在本次迭代中用来划分数据集X
    信息增益的问题:
    信息增益最大的问题还在于它只能考察特征对整个系统的贡献,而不能具体到某个类别上,这就使得它只适合用来做所谓“全局”的特征选择(指所有的类都使用相同的特征集合),而无法做“本地”的特征选择(每个类别有自己的特征集合)
    关于信息增益可参考此文

算法示例

下面我们以是否打球这个例子看一下ID3算法的计算过程:
ID3算法示例
从图中我们很容易得到这些信息:
活动进行与否的概率分别为:914514;我们用p()p()表示。同理有
p()=914p()=514
p()=514p()=414p()=914

天气\活动(概率) 进行 取消 晴 25 35 阴 1 0 雨 35 25

活动有两个属性,进行和取消,p()=914p()=514;故活动的熵为:
H()=914log2914514log2514=0.94

天气有三个属性,晴、阴和雨;其在已知天气的情况下活动的条件熵分别为:
H(|)=25log22535log235=0.971
H(|)=44log244=0
H(|)=35log23525log225=0.971

由此得到在已知天气的情况下活动的条件熵为:
H(|)=p()H(|)+p()H(|)+p()H(|)=5140.971+4140+5140.971=0.693

从而得到天气的信息增益:IG()=H()H(|)=0.940.693=0.246

同理可得到:IG()=0.029IG(湿)=0.151IG()=0.048

取最大的信息增益来划分,即天气,得到如下决策树:
ID3构建决策树

ID3算法的缺点:
(1)ID3算法往往偏向于选择取值较多的属性,而在很多情况下取值较多的属性并不总是最重要的属性,即按照使熵值最小的原则被ID3算法列为应该首先判断的属性在现实情况中却并不一定非常重要。例如:在银行客户分析中,姓名属性取值多,却不能从中得到任何信息。
(2)ID3算法不能处理具有连续值的属性,也不能处理具有缺失数据的属性。
(3)用信息增益作为选择属性的标准存在一个假设,即训练子集中的正、反例的比例应与实际问题领域中正、反例的比例一致。一般情况很难保证这两者的比例一致,这样计算训练集的信息增益就会存在偏差。
(4)在建造决策树时,每个结点仅含一个属性,是一种单变元的算法,致使生成的决策树结点之间的相关性不够强。虽然在一棵树上连在一起,但联系还是松散的。
(5)ID3算法虽然理论清晰,但计算比较复杂,在学习和训练数据集的过程中机器内存占用率比较大,耗费资源。
(6)当训练数据集加大时,决策树结构会发生变化。

计算过程

ID3(A:条件属性集合,d:决策属性,U:训练集) 返回一棵决策树
{
if U为空,返回一个值为Failure的单结点;//一般不会出现这种情况,为了程序的健壮性
if U是由其值均为相同决策属性值的记录组成,返回一个带有该值的单结点;//此分支至此结束
if A为空,则返回一个单结点,其值为在U的记录中找出的频率最高的决策属性值;//这时对记录将出现误分类
将A中属性之间具有最大IG(d,a)的属性赋给a;
将属性a的值赋给{aj|j=1,2,,m}
将分别由对应于a的值的aj的记录组成的U的子集赋值给{uj|j=1,2,,m}
返回一棵树,其根标记为a,树枝标记为a1,a2,,am
再分别构造以下树:ID3(Aa,d,u1)ID3(Aa,d,u2)ID3(Aa,d,um);//递归算法
}

参考:
https://en.wikipedia.org/wiki/ID3_algorithm
http://wenku.baidu.com/view/7aa9fbd776eeaeaad1f3305d.html
http://blog.csdn.net/lixuemei504/article/details/7278748
http://www.dzsc.com/data/html/2011-8-29/95580.html

1 0