分类算法之决策树ID3详解:
首先回顾决策树的基本知识:(1)数据是怎么分类的;(2)如何选择分类的属性;(3)什么时候停止分类
定义:决策树(Decision Tree)是在已知各种情况发生概率基础之上,通过构成决策树来求取净现值的期望值大于等于零的概率。评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。
本文章主要详细讲解了ID3算法:我们已周志华书上西瓜的例子举例,判断新记录西瓜是否是甜的,西瓜包含了(色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率)等属性,通过这些属性判断西瓜是好瓜还是坏瓜:
这个问题当然可以用朴素贝叶斯法求解,分别计算在给定属性条件下好瓜和坏瓜的概率,选概率大者作为推测结果。
现在我们使用ID3归纳决策树的方法来求解该问题。
预备知识:
(1)信息熵
所以我们按这个例子解出:设西瓜数据集为S,共有17个样本,目标属性好瓜有两种标签{c1=是,c2=否}
17个样本分布为:8个样本的类标号取值为是,9个样本的类标号取值为否,C1=是在所有样本S中的概率为8/17;C2=否在所有样本S中概率为9/17。
因此数据集S的熵为:Entropy(S) = Entropy(8/17,9/17)=-8/17log(8/17)-9/17log(9/17)=0.99
(1)信息增益
我们还是以西瓜数据源为例:(1)从上一个知识我们计算得到信息熵为0.99;(2)属性纹理有三个可能取的值{清晰,模糊,稍糊},他将S划分为三个子集{S1,S2,S3},S1=清晰的样本子集共有9个,S2=模糊的样本子集共有3个,S3=稍糊的样本子集共有5个,所以下面开始计算样本S1,S2,S3的熵:
(1)对样本子集S1中好瓜属性为‘是’的=7个,‘否’的=2个:
Entropy(S1) = Entropy(7/9,2/9)=-7/9log(7/9)-2/9log(2/9)=0.76
(2)对样本子集S2中好瓜属性为‘是’的=0个,‘否’的=3个:
Entropy(S2) = Entropy(0,1)=0
(3)对样本子集S3中好瓜属性为‘是’的=1个,‘否’的=4个:
Entropy(S3) = Entropy(1/5,4/5)=-1/5log(1/5)-4/5log(4/5)=0.72
所以利用纹理这个属性划分S的熵为:
Entropy纹理(S)=9/17Entropy(S1)+3/17Entropy(S2)+5/17Entropy(S3)=0.61
(3)用决策树预测:
决策树的形式类似于“如果纹理怎么样,是好瓜;否则,怎么着怎么着”的树形分叉。那么问题是用哪个属性(即变量,如纹理、色泽、根蒂等)最适合充当这颗树的根节点,在它上面没有其他节点,其他的属性都是它的后续节点。那么借用上面所述的能够衡量一个属性区分以上数据样本的能力的“信息增益”(Information Gain)理论。如果一个属性的信息增益量越大,这个属性作为一棵树的根节点就能使这棵树更简洁,比如说一棵树可以这么读成,如果纹理清晰,就是好瓜;纹理模糊,再按色泽、根蒂等分情况讨论,此时用纹理作为这棵树的根节点就很有价值。如果说,纹理模糊,再又根蒂蜷缩,就是好瓜;如果纹理清晰,再又怎么怎么分情况讨论,这棵树相比就不够简洁了。
下面我们用python实现这颗树:
(1)读取文本数据:
(2)然后确定决策树如何划分,首先获得信息熵:
(3)利用信息增益来决定该如何对数据集进行划分:
(4)当然这里用到一个方法对数据集进行划分:
(5)迭代创建决策树模型:
(5)最后我们运行得到结果:
结果图: