ID3算法
信息熵:
熵是度量样本集合纯度最常用的一种指标,代表一个系统中蕴含着多少信息量,信息量越大表面一个系统不确定性就越大,就存在跟多的可能性,即信息熵越大
假定当前样本集合D中第k类样本所占的比例为Pk(k=1,2,……,|y|),则D的信息熵为:
Ent=−∑k=1∣y∣pklog2pk
其中,|y|表示样本类被种数,pk表示第k类样本所占比例,且0≤pk≤1,∑k=1npk=1
信息熵满足以下不等式:
0≤Ent(D)≤log2∣y∣ y表示样本D中的个数
若令|y|=n,pk=xk,那么信息熵Ent(D)就可以看作一个n元的实值函数,即
Ent(D)=f(x1,……,xn)=−∑k=1nxklog2xk,其中:0≤xq≤1,∑k=1nxk=1
引入拉格朗日乘子法λ
L(x1,……xn,λ)=−∑k=1nxklog2xk+λ(∑k=1nxk−1)
对L分别关于x,λ求一阶偏导,并令偏导等于0:
∂x1∂(x1,……,xn,λ)=∂x1∂[−∑k=1nxklog2xk+λ(∑k=1nxk−1)]=0
=−log2x1−x1⋅x1ln21+λ=0
=−log2x1−ln21+λ=0
⇒λ=log2x1+ln21
同理可推:
λ=log2x1+ln21=log2x2+ln21=……=log2xn+ln21
对于任意的x,满足约束条件:
∑k=1nxk=1
因此:
x1=x2=x3……=xn=n1
最大值点还是最小值点需要做个简单的检验:
当x1=x2=x3……=xn=n1时:
f(n1,……n1)=−∑k=1nn1log2n1=−n⋅log2n1=log2n
将x1=1,x2=x3=……=xn=0时:
f(1,0,……,0)=−1⋅log21−0⋅log20……−0⋅log20=0
显然log2n≥0,所以x1=x2……=xn=n1为最大值点,最大值为log2n
下面考虑求f(x1,……,xn)的最小值,仅考虑0≤xk≤1,f(x1,……,xn)可以看作是n个互不相关一元函数的加和,即:
f(x1,……,xn)=∑k=1ng(xk)
g(xk)=−xklog2xk,0≤xk≤1
求g(xi)的最小值,但因为其表达式相同。所以只求出一个就可。
求g(x1)的最小值,首先对g(x1)关于x1求一阶、二阶导数:
g(x1)′=dx1d(−x1log2x1)=−log2x1−x1⋅x1ln21=−log2x1−ln2
g(x1)′′=dx1d(−log2x1−ln21)=−x1ln21
在定义域0≤xk≤1上,始终有g′′(x1)=−x1ln21<0,即g(xi)为开口向下的凹函数,最小值在边界x1=0或x1=1处取得:
g(0)=−0log20=0
g(1)=−1log21=0
g(x1)的最小值即为0,同理可得g(x2)……g(xn)的最小值也0,那么f(x1,……,xn)的最小值此时为0
如果令某个xk=1,那么根据约束条件∑k=1n=1可知:
x1=x2=……=xk+1=……=xn=0
带入f(x1,……,xn)得:
f(0,0……0,1,0……0)=0
所以xk=1,x1=x2=……=xk−1=xk+1=……=xn=0,一定是f(x1,……,xn)在满足约束条件下的最小值点,其最小值和为0。
所以说:0≤Ent(D)≤log2n
信息增益
假定离散属性α有V个可能的取值α1,α2……αV,如果使用特征a来对数据集D进行划分,则会产生V个分支结点,其中第v个结点包含了数据集D中所有在特征α上取值为αV的样本总数,记住Dv。再考虑到不同的分支结点所包含的样本数量不同,给分支结点赋予不同的权重,这样对样本数越多的分支点的影响就会越大,因此,就能够计算出特征对样本集D进行划分所获得的“信息增益”:
Gain(D,α)=Ent(D)−∑v=1V∣D∣∣Dv∣Ent(Dv)
该数据集包含十七个样本、有五个属性。类别为好瓜(8/17)、坏瓜(9/17)
Ent(D)=−178∗log2178−179∗log2179=0.9975
下面计算每个信息的信息增益
属性a1:色泽
Gain(D,a1)=Ent(D)−∑v=13Ent(Dv)
=Ent(D)−(DD1×Ent(D1)+DD2×Ent(D2)+DD3×Ent(D3))
对数据集进行色泽划分:D1青绿(包含6个样本)、D2乌黑(6个样本)、D3浅白(5个样本)
=0.9975−(176(−63log263−63log263)+176(−64log264−62log262+175(−51log251−54log254))
=0.1091
同理可求属性a2:根蒂
Gain(D,a2)=0.1427
属性a3:敲声
Gain(D,a3)=0.1408
属性a4:纹理
Gain(D,a4)=0.3808
属性a5:脐部
Gain(D,a5)=0.2892
比较所得纹理属性的信息增益最大
然后对每一个分支节点做进一步划分,以下图中分支节点(“纹理=清晰”)为例,该结点包含的样本集合中有编号{1、2、3、4、5、6、8、10、15}的九个样例,可用属性集合为{色泽、根蒂、敲声、脐部、触感},基于样本集合(“纹理=清晰”)
样本集合(“纹理=清晰”)的信息熵为:
Ent(D2)=−97log297−92log292=0.7642
我们接下来选择色泽属性α1
Gain(D2,α1)=Ent(D2)−∑v=13D2∣D2v∣Ent(D2v)
=Ent(D2)−(D2D21×Ent(D21)+D2D22×Ent(D23)D2D23×Ent(D23))
=0.0431
根蒂属性,α2:
Gain(D2,α2)=0.4581
敲声属性α3:
Gain(D2,α3)=0.3308
脐部属性α4:
Gain(D2,α4)=0.4581
触感属性α5:
Gain(D2,α5)=0.4581
属性 |
信息增益 |
色泽 |
0.0431 |
根蒂 |
0.4581 |
敲声 |
0.3308 |
脐部 |
0.4581 |
触感 |
0.4581 |
随机选择最大的其中之一作为划分属性,这里选择“根蒂”作为划分属性。
继续对上图中的每个分支结点递归进行划分,以上图中的结点{“根蒂=蜷缩”}为例,设该样本集为{1,2,3,4,5},共五个样本,但这五个样本的label均为好瓜。因此均为正样本。得到的分支节点图为:
接下来对上图中结点(“根蒂=稍蜷”)进行划分,该点的样本集为{6,8,15},共3个样本。可用特征集为色泽、敲声、肚脐、触感进行计算信息增益、得到下表
属性 |
信息增益 |
色泽 |
0.251 |
敲声 |
0 |
脐部 |
0 |
触感 |
0.251 |
色泽触感作为最大,这里我们选择色泽。
青绿为好瓜,递归返回对乌黑进行划分。色泽等于浅白此点为空,类别按照父节点中类别最高的样本所以色泽为浅白的类别为好瓜。
最终决策树如下图所示
ID3算法的不足:
- ID3没有考虑连续性
- ID3采用信息熵大的特征优先建立决策树的节点,取值比较多的特征比取值少的特征信息增益大。
- 未对缺失值做考虑
- 没有考虑过拟合的情况