Java教程

决策树算法推导

本文主要是介绍决策树算法推导,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

决策树(本文使用id3算法的准则决策)

1. 决策树的背景

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

2. 决策树实战

在生成决策树的过程,会用到信息熵和信息增益:

信息熵(information entropy)是度量样本集合的纯度。假定当前样本集合 \(D\) 中第\(k\)类样本所占的比例为\(p_k\),则 \(D\) 的信息熵定义为:

\[Ent(D)=-\sum_{k=1}^{|y|}{p_klog_{2}p_k} \]

一般认为,熵值越大纯度越小,混乱程度越大。

注意:计算信息熵时,若\(p=0\),则\(plog_2{p}=0\).

根据熵的定义计算每个分支的信息熵:

假设离散属性\(a\)有\(V\)个可能的取值\(\{a^1,a^2,...,a^V\}\),若使用\(a\)来对样本集\(D\)进行划分,则会产生\(V\)个分支结点,其中第\(v\)个分支结点包含了\(D\)中所有在属性\(a\)上取值为\(a^v\)的样本,记为\(D^v\).考虑到分支结点包含的样本数目不同,给予每个分支结点一个权重\(\frac{|D^v|}{|D|}\),即样本数越多的分支结点的影响越大。下面是用属性\(a\)对数据集\(D\)进行划分所获得的信息增益(information gain)为:

\[Gain(D,a)=Ent(D)-\sum_{v=1}^V{\frac{|D^v|}{|D|}Ent(D^v)} \]

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

表一

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

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

标签集{9是,6否}

\[Ent(D) =-(\frac{9}{15}log_2{\frac{9}{15}+\frac{6}{15}log_2{\frac{6}{15}}}) =0.97 \]

graph TB id1[年龄]--青年-->id2[2是</br>3否</br>5] id1[年龄]--中年-->id3[3是</br>2否</br>5] id1[年龄]--老年-->id4[4是</br>1否</br>5]

\[Ent(青年) = -(\frac{2}{5}log_2{\frac{2}{5}}+\frac{3}{5}log_2{\frac{3}{5}})=0.97 \\ Ent(中年) = -(\frac{3}{5}log_2{\frac{3}{5}}+\frac{2}{5}log_2{\frac{2}{5}})=0.97 \\ Ent(老年) = -(\frac{4}{5}log_2{\frac{4}{5}}+\frac{1}{5}log_2{\frac{1}{5}})=0.72 \\ w_{青年}=\frac{5}{15} \\ w_{中年}=\frac{5}{15} \\ w_{老年}=\frac{5}{15} \\ Gain(D,年龄) = Ent(D)-\frac{1}{3}(0.97+0.97+0.72)=0.083 \]

graph TB id1[有工作]--是-->id2[5是</br>0否</br>5] id1[有工作]--否-->id3[4是</br>6否</br>10]

\[Ent(是) = -(\frac{0}{5}log_2{\frac{0}{5}}+\frac{5}{5}log_2{\frac{5}{5}})=0 \\ Ent(否) = -(\frac{6}{10}log_2{\frac{6}{10}}+\frac{4}{10}log_2{\frac{4}{10}})=0.97 \\ w_{是}=\frac{5}{15}=\frac{1}{3} \\ w_{否}=\frac{10}{15}=\frac{2}{3} \\ Gain(D,有工作)=0.97-0.97\times{\frac{2}{3}}=0.97\times{\frac{1}{3}}=0.324 \]

graph TB id1[有自己的房子]--是-->id2[6是</br>0否</br>6] id1[有自己的房子]--否-->id3[3是</br>6否</br>9]

\[Ent(是) = -(\frac{0}{6}log_2{\frac{0}{6}}+\frac{6}{6}log_2{\frac{6}{6}})=0 \\ Ent(否) = -(\frac{3}{9}log_2{\frac{3}{9}}+\frac{6}{9}log_2{\frac{6}{9}})=0.917 \\ w_{是}=\frac{6}{15}=\frac{2}{5} \\ w_{否}=\frac{9}{15}=\frac{3}{5} \\ Gain(D,有自己的房子)=0.97-0.917\times{\frac{3}{5}}=0.420 \]

graph TB id1[信贷情况]--一般-->id2[1是</br>4否</br>5] id1[信贷情况]--好-->id3[4是</br>2否</br>6] id1[信贷情况]--非常好-->id4[4是</br>0否</br>4]

\[Ent(一般) = -(\frac{1}{5}log_2{\frac{1}{5}}+\frac{4}{5}log_2{\frac{4}{5}})=0.72 \\ Ent(好) = -(\frac{4}{6}log_2{\frac{4}{6}}+\frac{2}{6}log_2{\frac{2}{6}})=0.917 \\ Ent(非常好) = -(\frac{4}{4}log_2{\frac{4}{4}}+\frac{0}{4}log_2{\frac{0}{4}})=0 \\ w_{一般}=\frac{5}{15} \\ w_{好}=\frac{6}{15} \\ w_{非常好}=\frac{4}{15} \\ Gain(D,信贷情况) = Ent(D)-(\frac{1}{3}\times0.72+\frac{2}{5}\times0.917)=0.97-0.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(没房子)=-(\frac{3}{9}\times{log_2{\frac{3}{9}}}+\frac{6}{9}\times{log_2{\frac{6}{9}}})=0.917 \]

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

graph TB id1[年龄]--青年-->id2[1是</br>3否</br>4] id1[年龄]--中年-->id3[0是</br>2否</br>2] id1[年龄]--老年-->id4[2是</br>1否</br>3]

\[Ent(青年)=-(\frac{1}{4}\times{log_2{\frac{1}{4}}}+\frac{3}{4}\times{log_2{\frac{3}{4}}})=0.8113 \\ Ent(中年)=-(\frac{0}{2}\times{log_2{\frac{0}{2}}}+\frac{2}{2}\times{log_2{\frac{2}{2}}})=0 \\ Ent(老年)=-(\frac{2}{3}\times{log_2{\frac{2}{3}}}+\frac{1}{3}\times{log_2{\frac{1}{3}}})=0.9183 \\ w_{青年} = \frac{4}{9} \\ w_{中年} = \frac{2}{9} \\ w_{老年} = \frac{3}{9} \\ Gain(没房子,年龄)=0.917-(\frac{4}{9}\times0.8113+\frac{2}{9}\times0+\frac{3}{9}\times0.9183)=0.2503 \]

graph TB id1[有工作]--是-->id2[3是</br>0否</br>3] id1[有工作]--否-->id3[0是</br>6否</br>6]

\[Ent(是)=-(\frac{3}{3}\times{log_2{\frac{3}{3}}}+\frac{0}{3}\times{log_2{\frac{0}{3}}})=0 \\ Ent(否)=-(\frac{0}{6}\times{log_2{\frac{0}{6}}}+\frac{6}{6}\times{log_2{\frac{6}{6}}})=0 \\ w_{是} = \frac{3}{9} \\ w_{否} = \frac{6}{9} \\ Gain(没房子,年龄)=0.917-(\frac{3}{9}\times0+\frac{6}{9}\times0)=0.917 \]

graph TB id1[信贷情况]--一般-->id2[0是</br>4否</br>4] id1[信贷情况]--好-->id3[2是</br>2否</br>4] id1[信贷情况]--非常好-->id4[1是</br>0否</br>1]

\[Ent(一般) = -(\frac{0}{4}log_2{\frac{0}{4}}+\frac{4}{4}log_2{\frac{4}{4}})=0 \\ Ent(好) = -(\frac{2}{4}log_2{\frac{2}{4}}+\frac{2}{4}log_2{\frac{2}{4}})=1 \\ Ent(非常好) = -(\frac{1}{1}log_2{\frac{1}{1}}+\frac{0}{1}log_2{\frac{0}{1}})=0 \\ w_{一般}=\frac{4}{9} \\ w_{好}=\frac{4}{9} \\ w_{非常好}=\frac{1}{9} \\ Gain(D,信贷情况) = Ent(D)-(\frac{4}{9}\times0+\frac{4}{9}\times1+\frac{1}{9}\times0)= 0.4726 \]

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

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

表三

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

表四

ID 年龄 信贷情况 类别
1 青年 一般
2 青年
5 青年 一般
6 中年 一般
7 中年
15 老年 一般
graph TB id1[有自己的房子]--否-->id3[有工作] id1[有自己的房子]--是-->id2[是] id3[有工作]--否-->id5[否] id3[有工作]--是-->id4[是]

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

这篇关于决策树算法推导的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!