归纳决策树ID3

使用ID3归纳决策树,根据新的气象指标数据判断是否去打球。

数据集weather.arff:

@relation weather
@attribute Outlook {Sunny, Overcast, Rain}
@attribute Temperature {Hot, Mild, Cool}
@attribute Humidity {High, Normal, Low}
@attribute Windy {FALSE, TRUE}
@attribute Play {N, P}
@data
Sunny,Hot,High,FALSE,N
Sunny,Hot,High,TRUE,N
Overcast,Hot,High,FALSE,P
Rain,Mild,High,FALSE,P
Rain,Cool,Normal,FALSE,P
Rain,Cool,Normal,TRUE,N
Overcast,Cool,Normal,TRUE,P
Sunny,Mild,High,FALSE,N
Sunny,Cool,Normal,FALSE,P
Rain,Mild,Normal,FALSE,P
Sunny,Mild,Normal,TRUE,P
Overcast,Mild,High,TRUE,P
Overcast,Hot,Normal,FALSE,P
Rain,Mild,High,TRUE,N

ID3算法

1、构造树的基本思想:

构造决策树的基本思想是随着树深度的增加,节点的熵迅速地降低,为了得到一课高度最矮的决策树,我们希望熵降低的速度越快越好。

2、计算信息熵:

已知weather.arff文件中,打球的概率是9/14,不打的概率是5/14。此时的熵为:

H\left ( P \right )=-\sum_{i=1}^{n}p_{i}log_{2}p_{i}=-\frac{9}{14}log_{2}\frac{9}{14}-\frac{5}{14}log_{2}\frac{5}{14}=0.940

根据历史数据,属性outlook、temperature、humidity、windy在不同的取值下打球和不打球的次数统计如下:

outlook{(sunny:2P,3N),(overca:4P,0N),(rainy:3P,2N)},

temperat{(hot:2P,2N),(mild:4P,2N),(cool:3P,1N)},

humidity{(high:3P,4N),(normal:6P,1N)},

windy{(FALSE:6P,2N),(TRUE:3p,3N)},

已知变量outlook的值时,计算其信息熵:

outlook=sunny时,2/5的概率打球,3/5的概率不打球。

Entropy==-\frac{2}{5}log_{2}\frac{2}{5}-\frac{3}{5}log_{2}\frac{3}{5}=0.9709505944546686=0.971

同理计算:

outlook=overcast时,Entropy=0

outlook=rainy时,Entropy=0.971

数据集中,outlook为sunny、overcast、rainy的概率分别是5/14、4/14、5/14,

所以变量outlook的信息熵为:5/14 × 0.971 + 4/14 × 0 + 5/14 × 0.971 = 0.693

此时,系统熵就从0.940降低到了0.693,

3、选取根节点:

同样的方法,计算出temperature、humidity、windy的信息增益,此时信息增益为:gain(outlook)=0.940-0.693=0.247>gain(humidity)=0.152>gain(windy)=0.048>gain(temperature)=0.029

outlook的信息增益最大,它使系统的信息熵降低最快,所以决策树的根节点选取outlook。

4、建立决策树:

归纳决策树ID3_第1张图片

根节点选取后,如何确定N1取temperature、humidity还是windy?在已知outlook=sunny的情况,利用上述同样方法,根据历史数据,分别计算出信息增益gain(temperature)、gain(humidity)和gain(windy),选最大者为N1。

依此类推,构造决策树,直到系统的信息熵降为0。

你可能感兴趣的:(决策树,机器学习,算法)