• 决策树算法推导


    决策树

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

    1 决策树算法—ID3

    1.1 决策树的背景

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

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

    在生成决策树的过程,会用到信息熵和信息增益:
    信息熵(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.

  • 相关阅读:
    MQ消息队列(2)—— Java消息服务接口(JMS)
    MQ消息队列(1)—— 概念和使用场景
    SpringBoot — HelloWorld开发部署
    redis的配置文件介绍
    Redis info 参数详解
    10 分钟彻底理解 Redis 的持久化和主从复制
    Docker Yearning + Inception SQL审核平台搭建
    Inception SQL审核注解
    运行python脚本后台执行
    解决yum [Errno 256] No more mirrors to try
  • 原文地址:https://www.cnblogs.com/mysterygust/p/16367186.html
Copyright © 2020-2023  润新知