经典的ID3算法
一、ID3的介绍
ID3算法最早是由罗斯昆(J. Ross Quinlan)于1975年在悉尼大学提出的一种分类预测算法,算法的核心是“信息熵”。ID3算法通过计算每个属性的信息增益,认为信息增益高的是好属性,每次划分选取信息增益最高的属性为划分标准,重复这个过程,直至生成一个能完美分类训练样例的决策树。
ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取
测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,
直到生成的决策树能完美分类训练样例。
ID3决策树是对数据进行分类,以达到预测的目的,决策树代表决策集的树形结构。决策树由决策节点、叶子
结点以及分支。决策树最上面的是根节点。每一个叶子结点代表一种可能的分类结果。如下图所示:
二、关于IDE3的基本理论知识
1、信息信息熵、信息增益
熵在信息学里,熵是对不确定性的度量。香农引入信息熵概念,将其的定义为离散随机事件出现的概率,
一个系统越是有序,信息熵就越低,反之一个系统越是混乱,它的信息熵就越高。信息熵被认为系统有序化程度
的一个度量。
若存在n个相同概率的的消息,则每个消息的概率是1/n,一个消息传递的信息量是-log2(1/n)
假如一个随机变量X的取值为{x1,x2.....xn},每一个值取到的概率分别是{p1,p2...pn},那么X的熵定义为:
意思一个变量的取值变化越多,那么它带的信息量就越大。
对于一个分类系统来说,类别C是变量,它的取值是C1,C2,C3......Cn,而每个类别出现的概率分别是:
P(C1),P(C2),P(C3).....P(Cn)。这里的n就是类别变量C的取值个数,这个系统的熵就可以表示为下式:
以上就是信息熵的定义,下面介绍信息增益。
信息增益是针对一个特征计算的值,简单来说就是系统有特征T和没有特征T两种情况下的信息量各是多少,然后
两者的差值就是特征T给系统带来的信息量,即信息增益。具体的用公式来说明比较麻烦,下面直接给例子说明。
2,举个经典的例子来说明
下表是一个关于天气的表,目标是play或not play
天气数据与是否打网球 | ||||
Outlook | Temperature | Humidity | Windy | Target |
sunny | hot | high | FALSE | no |
sunny | hot | high | TRUE | no |
overcast | hot | high | FALSE | yes |
rainy | mild | high | FALSE | yes |
rainy | cool | normal | FALSE | yes |
rainy | cool | normal | TRUE | no |
overcast | cool | normal | TRUE | yes |
sunny | mild | high | FALSE | no |
sunny | cool | normal | FALSE | yes |
rainy | mild | normal | FALSE | yes |
sunny | mild | normal | TRUE | yes |
overcast | mild | high | TRUE | yes |
overcast | hot | normal | FALSE | yes |
rainy | mild | high | TRUE | no |
表中一共14个例子,其中有5个no,9个play。对于该天气系统的熵(又称信息量)计算如下:
现在举例计算特征的信息增益,在决策树分类问题中特征值的信息增益也可以理解为以该特征划分前和划分后的
信息差值。假设以Outlook特征来划分。
Outlook有三个属性值,故有三个分支。由上图可知,分支sunny中,三个no,两个yes。
overcast中四个yes。rainy中三个yes,两个no
划分后有三个 分支,每个分支的信息熵计算如下:
划分后的系统信息熵计算如下:
每个分支都参与贡献信息量。Entropy(S|T)代表在特征T的条件下的条件熵,这里T就是Outlook。那么特征T为
系统带来的信息增益为
IG(T)=Entropy(S)-Entropy(S|T)=0.24675
信息增益的计算公式如下:
其中S为全部样本集合value(T)是属性T的所有取值的集合。v是其中一个属性值,Sv是S中属性T的值为v的样本集合。|Sv|是Sv中的样本个数。
在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,选择最大信息增益的属性作为节点来划分,因为信息增益越大,区分样本的能力就越强,越具有代表性,很显然这是一种自顶向下的贪心策略。以上就是ID3算法的核心思想。
ID3是一个经典的分类算法,已经实现的算法很多,但是基本思想都是一样的,个人觉得对于数据挖掘新手来说,ID3是一个很好的入门算法。
这里有一个Java实现的算法实例,感兴趣的朋友可以去看看。
http://www.cnblogs.com/zhangchaoyang/articles/2196631.html