您的位置:首页 > 其它

决策树—ID3

2016-04-25 20:53 253 查看

决策树—ID3

基本概念

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

问题:

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



计算公式(信息熵)

以什么标准来确定分支呢,比如说我们是以outlook还是以temperature来做为第一个分类的标准呢?这里用到了信息熵。熵是不确定性/无序性的度量指标,一个系统越是有序,信息熵就越低,反之一个系统越是混乱,它的信息熵就越高。所以信息熵可以被认为是系统有序化程度的一个度量。

一个随机变量X的取值为X={x1,x2,…xn},每一个取到的概率是{p1,p2,…pn},那么X的熵定义为:

H(X)=−∑i=1npilog2piH\left( X \right) = - \sum\limits_{i = 1}^n {p_i \log _2 p_i }

意思是一个变量的变化情况可能越多,那么它携带的信息量就越大。

信息增益是针对特征而言的就是由于使用这个属性分割样例而导致的期望熵降低,公式是:

Gain(S,A)=E(S)−∑v∈values(A)|Sv|SE(Sv)Gain\left( {S,A} \right) = E\left( S \right) - \sum\limits_{v \in values(A)} {\frac{{\left| {S_v } \right|}}{S}} E\left( {S_v } \right)

values(A)是属性A所有可能值的集合,Sv 是S中属性A的值为v的子集。

计算举例:

在没有给定任何天气信息时,根据历史数据,我们只知道新的一天打球的概率是9/14,不打的概率是5/14。此时的熵E(S)为:

E(S)=−914log2914−514log2514=0.94E\left( S \right) = - \frac{9}{{14}}\log _2 \frac{9}{{14}} - \frac{5}{{14}}\log _2 \frac{5}{{14}} = 0.94

特征有4个:outlook,temperature,humidity,windy。根据信息增益来选取哪个特征作为根节点。

outlook=sunny时的信息熵E(outs):

E(Souts)=−25log225−35log235=0.971E\left( {S_{outs} } \right) = - \frac{2}{5}\log _2 \frac{2}{5} - \frac{3}{5}\log _2 \frac{3}{5} = 0.971

outlook=overcast时的信息熵E(outo):

E(Souto)=−log21=0E\left( {S_{outo} } \right) = - \log _2 1 = 0

outlook=rainy时的信息熵E(outr):

E(Souto)=−35log235−25log225=0.971E\left( {S_{outo} } \right) = - \frac{3}{5}\log _2 \frac{3}{5} - \frac{2}{5}\log _2 \frac{2}{5} = 0.971

则信息增益为:

Gain(S,outlook)=0.94−514×0.971−414×0−514×0.971=0.247Gain\left( {S,outlook} \right) = 0.94 - \frac{5}{{14}} \times 0.971 - \frac{4}{{14}} \times 0 - \frac{5}{{14}} \times 0.971 = 0.247

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

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



接下来计算sunny下的节点。在上表中将outlook=sunny的值划分出来:

outlooktemperaturehumiditywindyplay
sunnyhothighFALSEno
sunnyhothighTRUEno
sunnymildhighFALSEno
sunnycoolnormalFALSEyes
sunnymildhighTRUEyes
E(S)在上面已经求出来了,为0.971,

Gain(S,temperature)=0.971−25×E(hot)−25×E(mild)−15×E(cool)Gain\left( {S,temperature} \right) = 0.971 - \frac{2}{5} \times E\left( {hot} \right) - \frac{2}{5} \times E\left( {mild} \right) - \frac{1}{5} \times E\left( {cool} \right)

以此类推。

推荐C++代码ID3决策树代码

我就不粘贴了,大家一起学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: