决策树算法推导

决策树

罗斯.昆兰 - 是数据挖掘和决策论的计算机科学研究员。他发明了ID3算法和C4.5算法。

1 决策树算法—ID3

1.1 决策树的背景

决策树是一种常见的机器学习方法。决策树由根节点、内部节点、叶子节点和边组成。叶子节点对应每个决策结果,内部节点和根结点对应一个属性的测试。

1.2 ID3算法数学推导(离散变量)

在生成决策树的过程,会用到信息熵和信息增益:
信息熵(information entropy)是度量样本集合的纯度。假定当前样本集合 D 中第k类样本所占的比例为pk,则 D 的信息熵定义为:

Ent(D)=k=1|y|pklog2pk

一般认为,熵值越大纯度越小,混乱程度越大。
注意:计算信息熵时,若p=0,则plog2p=0.
根据熵的定义计算每个分支的信息熵:
假设离散属性aV个可能的取值{a1,a2,...,aV},若使用a来对样本集D进行划分,则会产生V个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为av的样本,记为Dv.考虑到分支结点包含的样本数目不同,给予每个分支结点一个权重|Dv||D|,即样本数越多的分支结点的影响越大。下面是用属性a对数据集D进行划分所获得的信息增益(information gain)为:

Gain(D,a)=Ent(D)v=1V|Dv||D|Ent(Dv)

一般,信息增益越大,则意味着使用属性a来划分所获得的纯度提升越大。

表一

ID 年龄 有工作 有自己的房子 信贷情况 类别
1 青年 一般
2 青年
3 青年
4 青年 一般
5 青年 一般
6 中年 一般
7 中年
8 中年
9 中年 非常好
10 中年 非常好
11 老年 非常好
12 老年
13 老年
14 老年 非常好
15 老年 一般

属性集{年龄,有工作,有自己的房子,信贷情况}

标签集{9是,6否}

Ent(D)=(915log2915+615log2615)=0.97

青年

中年

老年

年龄

2是
3否
5

3是
2否
5

4是
1否
5

Ent()=(25log225+35log235)=0.97Ent()=(35log235+25log225)=0.97Ent()=(45log245+15log215)=0.72w=515w=515w=515Gain(D,)=Ent(D)13(0.97+0.97+0.72)=0.083

有工作

5是
0否
5

4是
6否
10

Ent()=(05log205+55log255)=0Ent()=(610log2610+410log2410)=0.97w=515=13w=1015=23Gain(D,)=0.970.97×23=0.97×13=0.324

有自己的房子

6是
0否
6

3是
6否
9

Ent()=(06log206+66log266)=0Ent()=(39log239+69log269)=0.917w=615=25w=915=35Gain(D,)=0.970.917×35=0.420

一般

非常好

信贷情况

1是
4否
5

4是
2否
6

4是
0否
4

Ent()=(15log215+45log245)=0.72Ent()=(46log246+26log226)=0.917Ent()=(44log244+04log204)=0w=515w=615w=415Gain(D,)=Ent(D)(13×0.72+25×0.917)=0.970.6068=0.363

从上面计算可以看出,“有自己的房子”的属性划分数据集后的信息增益最大,所以选择“有自己的房子”作为根结点

表二
(a)“没有房子”的列表

ID 年龄 有工作 信贷情况 类别
1 青年 一般
2 青年
3 青年
5 青年 一般
6 中年 一般
7 中年
13 老年
14 老年 非常好
15 老年 一般

(b)“有房子”的列表

ID 年龄 有工作 信贷情况 类别
4 青年 一般
8 中年
9 中年 非常好
10 中年 非常好
11 老年 非常好
12 老年

类别标记{6否,3是}

Ent()=(39×log239+69×log269)=0.917

计算表二中每个属性的信息增益:

青年

中年

老年

年龄

1是
3否
4

0是
2否
2

2是
1否
3

Ent()=(14×log214+34×log234)=0.8113Ent()=(02×log202+22×log222)=0Ent()=(23×log223+13×log213)=0.9183w=49w=29w=39Gain()=0.917(49×0.8113+29×0+39×0.9183)=0.2503

有工作

3是
0否
3

0是
6否
6

Ent()=(33×log233+03×log203)=0Ent()=(06×log206+66×log266)=0w=39w=69Gain()=0.917(39×0+69×0)=0.917

一般

非常好

信贷情况

0是
4否
4

2是
2否
4

1是
0否
1

Ent()=(04log204+44log244)=0Ent()=(24log224+24log224)=1Ent()=(11log211+01log201)=0w=49w=49w=19Gain(D,)=Ent(D)(49×0+49×1+19×0)=0.4726

从上面计算可以看出,“有工作”的属性划分“没有房子”数据集后的信息增益最大,所以选择“有工作”作为没有自己房子的下一个结点

下表是“有房子”的列表:

表三

ID 年龄 有工作 信贷情况 类别
3 青年
13 老年
14 老年 非常好

表四

ID 年龄 信贷情况 类别
1 青年 一般
2 青年
5 青年 一般
6 中年 一般
7 中年
15 老年 一般

有自己的房子

有工作

参考文献:
周志华. 机器学习[M].北京:清华出版社,2016:73-93.

posted @   编码雪人  阅读(252)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示