机器学习-ID3决策树算法

 数据集为西瓜数据集2.0,如下所示:

编号,色泽,根蒂,敲声,纹理,脐部,触感,好瓜
1,   青绿,蜷缩,浊响,清晰,凹陷,硬滑,是
2,   乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,是
3,   乌黑,蜷缩,浊响,清晰,凹陷,硬滑,是
4,   青绿,蜷缩,沉闷,清晰,凹陷,硬滑,是
5,   浅白,蜷缩,浊响,清晰,凹陷,硬滑,是
6,   青绿,稍蜷,浊响,清晰,稍凹,软粘,是
7,   乌黑,稍蜷,浊响,稍糊,稍凹,软粘,是
8,   乌黑,稍蜷,浊响,清晰,稍凹,硬滑,是
9,   乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑,否
10,  青绿,硬挺,清脆,清晰,平坦,软粘,否
11,  浅白,硬挺,清脆,模糊,平坦,硬滑,否
12,  浅白,蜷缩,浊响,模糊,平坦,软粘,否
13,  青绿,稍蜷,浊响,稍糊,凹陷,硬滑,否
14,  浅白,稍蜷,沉闷,稍糊,凹陷,硬滑,否
15,  乌黑,稍蜷,浊响,清晰,稍凹,软粘,否
16,  浅白,蜷缩,浊响,模糊,平坦,硬滑,否
17,  青绿,蜷缩,沉闷,稍糊,稍凹,硬滑,否

ID3决策树算法以信息增益为准则来选择最优划分属性。

求信息熵:

python实现求信息熵函数ent,代码如下:

import math

def ent(*pk: float) -> float:
    sum = 0.0
    for p in pk:
        if p == 0.0:
            sum += 0
        else:
            sum += -1 * p * math.log(p, 2)
    return sum
根结点信息熵:
p1 = 8/17
p2 = 9/17
Ent(D) = ent(p1, p2) = 0.9975025463691153

以色泽为划分属性的各结点信息熵:
1.色泽:青绿D1
p1 = 3/6
p2 = 3/6
Ent(D1) = ent(p1, p2) = 1.0
2.色泽:乌黑D2
p1 = 4/6
p2 = 2/6
Ent(D2) = ent(p1, p2) = 0.9182958340544896
3.色泽:浅白D3
p1 = 1/5
p2 = 4/5
Ent(D3) = ent(p1, p2) = 0.7219280948873623

以根蒂为划分属性的各结点信息熵:
......

求信息增益:

以色泽为划分属性的信息增益:
Gain(D,色泽) = Ent(D) - 6/17Ent(D1) - 6/17Ent(D2) - 5/17Ent(D3)
         =0.9975025463691153-6/17*1.0-6/17*0.9182958340544896-5/17*0.7219280948873623
         =0.10812516526536536
同样方法可计算其他属性的信息增益:
Gain(D,根蒂) = 0.143
Gain(D,敲声) = 0.141
Gain(D,纹理) = 0.381
Gain(D,脐部) = 0.289
Gain(D,触感) = 0.006
可以看出属性“纹理”的信息增益最大,于是它被选为最优划分属性。
机器学习-ID3决策树算法_第1张图片

      此后,决策树算法对分支结点清晰、稍糊和模糊做进一步划分,方法同上,选择各个结点具有最大信息增益的属性作为最优划分属性。

最终得到决策树:

机器学习-ID3决策树算法_第2张图片

你可能感兴趣的:(机器学习,人工智能,自然语言处理,决策树)