数据挖掘算法 1 ID3(python)

一 概念公式:

1信息熵:

若有n个消息,其给定各个方向概率分布为P=(p1,p2…pn),则由该分布传递的信息量称为P的熵,记为

2:信息增益:

信息增益度是两个信息熵之间的差值,记为Gain(P1)=entropy(p0,p1)-entropy(p0)

 

二 算法思想:

首先计算各个属性的所有取值的信息熵,然后根据当前属性的取值概率计算出当前属性的总的信息熵,接下来计算当前属性的信息增益度,最后通过所有属性的信息增益比较,增益大的先构造来构造决策树。希望随着决策树深度的增加,节点的熵迅速地降低,并且熵降低的速度越快越好,这样我们有望得到一棵高度最矮的决策树。

 

三 实例题目:

我们统计了14天的气象数据(指标包括outlook,temperature,humidity,windy),并已知这些天气是否打球(play)。如果给出新一天的气象指标数据:sunny,cool,high,TRUE,判断一下会不会去打球。

outlook temperature humidity windy play
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

 

四实例解剖

1.目标:属性有4个:outlook,temperature,humidity,windy。我们首先要决定哪个属性作树的根节点。

2.计算:对每项指标分别统计:在不同的取值下打球和不打球的次数。设打球概率为P(Y),不打球概率为P(N)

 

outlook=sunny时,P(Y)=2/5,P(N)=3/5。此时entropy(sunny)=0.970

outlook=overcast时,P(Y)=1,P(N)=0,此时entropy(overcast)=0

outlook=rainy时,P(Y)=3/5,P(N)=2/5,entropy(rainy)=-3/5Log2(3/5)-2/5Log2(2/5)=0.442+0.528=0.970

而根据历史统计数据,outlook P(sunny)=5/14,P(overcast)=4/14, P(rainy)=5/14,

所以entropy(outlook)=P(sunny)*entropy(sunny)+P(overcast)*entropy(overcast)+ P(rainy)* entropy(rainy)

=5/14× 0.971 + 4/14 × 0 + 5/14 × 0.971 = 0.693

这样的话系统熵就从0.940下降到了0.693,信息增溢gain(outlook)为0.940-0.693=0.247

同样可以计算出gain(temperature)=0.029,gain(humidity)=0.152,gain(windy)=0.048。

gain(outlook)最大(即outlook在第一步使系统的信息熵下降得最快),所以决策树的根节点就取outlook。

数据挖掘算法 1 ID3(python)_第1张图片

接下来要确定N1取temperature、humidity还是windy?在已知outlook=sunny的情况,根据历史数据,我们作出类似table 2的一张表,分别计算

gain(temperature)、gain(humidity)和gain(windy),选最大者为N1。

3.依此类推,构造决策树。当系统的信息熵降为0时,就没有必要再往下构造决策树了,此时叶子节点都是纯的--这是理想情况。最坏的情况下,决策树的高度为属性(决策变量)的个数,叶子节点不纯(这意味着我们要以一定的概率来作出决策)。

 

五实例实现:

 

 

你可能感兴趣的:(数据挖掘算法 1 ID3(python))