十大经典算法——决策树

一、概述

本节我们先来了解一下什么是决策树,以及决策树中的一些术语,方便我们来进行后面的学习,假如现在有了一棵决策树,它是如何完成分类功能的呢?让我们来看下面的例子,如图所示:
《十大经典算法——决策树》

杨杨是个大美女,但是从小热爱学习的她,一直读到了研究生都么有考虑个人问题,现在到了婚嫁的年龄,家里开始催促,于是她想为自己找个如意郎君,家里人就告诉她,你要看男孩家是不是有车,是不是房,薪资怎么样等等一系列的要求,于是在家人的极力帮助下,为杨杨找来了几位单身男士,杨杨又不知如何抉择,我作为杨杨的好朋友,当然是将如图所示的结婚与否的结构图赠与她啦,并告诉她,这图可是我经过吴恩达教授的机器学习,然后根据很多已有的样本学出来的很是精确的预测模型哦,它一定可以帮到你的。于是杨杨就带着我的模型去见了那些单身男士,

上图就是一棵决策树,既然称之为树,当然他就具有树的特点(节点和有向边),节点又分为内部节点和叶子节点,图中绿色圆圈就代表了内部节点(表示了一个特征或属性),橙色的圆圈代表了叶子节点(最终的类别),有向边代表了在某个特征下可能的取值。

经过上面的分析想必大家已经懂得了给定一棵树之后如何分类的了,但是如何生成那颗树呢,这才是我们需要知道的重点,接下来就让我们真正的开始吧。。。。。。

二、树的生成

树的生成分为三步:特征选择阶段,树的生成阶段,树的剪枝阶段。具体是个怎么回事呢,我们可以先看下下面的例子:

《十大经典算法——决策树》

现有15个男士的结婚数据,他们的个人情况如上图所示,数据中包含了男士的4个特征:1薪资情况,有三个可能的取值;2是否有车,有两个可能取值;3是否有房,有两个可能取值;4长相情况,有三种可能的取值;最优一列是一个女生是否嫁给他的情况,也就是最终的类别,可以看出这是一个二分类的问题。我们的目的呢,就是根据已有的数据来学习到一个决策树,这样我们就可以帮助杨杨来选择一个不错的如意郎君啦!
可是现在有四个特征,我们该拿哪个作为第一个内部节点呢?这里就需要我们进行树的生成的第一步:特征选择。

2.1特征选择阶段

首先让我们来了解下信息论中的几个概念:熵,条件熵,互信息,信息增益。

熵:表示随机变量的不确定性的程度。定义公式为:
H(Y)=ni=1pilogpi H ( Y ) = − ∑ i = 1 n p i log ⁡ p i
其中 pi p i 代表了Y时间中第i个可能发生的概率,n代表了事件Y有n中可能。总之记住一句话,熵越大,这个事件的发成的不确定性就越大。假如:抛掷一枚硬币,当质地均匀时,出现正反的概率一样,我们很难猜出抛出的是正面还是反面,这时的熵就很大;但是当正面渡了一层铅时,由于重力原因,我们可以知道基本上每次都会出现反面,这种更加确定的情况熵就很小。

条件熵:定义如下图所示
《十大经典算法——决策树》
其中 pi=P(X=xi) p i = P ( X = x i ) ,X,Y代表了两个事件,而它们之间有时有联系的(也就是联合概率分布),条件熵 H(Y|X) H ( Y | X ) 代表了在一直随机变量X的情况下,Y的不确定性的大小。

互信息:熵 H(Y) H ( Y ) 和条件熵 H(Y|X) H ( Y | X ) 的差称之为互信息。定义如下:
g(Y,X)=H(Y)H(Y|X) g ( Y , X ) = H ( Y ) − H ( Y | X )
在决策树中,类与特征的互信息也称之为信息增益:表示在已知特征X的信息而使得类Y的信息的不确定性减少的程度。很拗口?是的,官方定义一般都是这样。总结一下就是这样的,在已知特征X的信息情况下,信息增益越大,类Y的不确定性就越小。所以,我们以信息增益大的特征作为我们的首要内部节点。

介绍完比较拗口又乏味的理论,下面我们就来用上述例子来具体算一下所谓的信息增益,这样你就不会烦躁于这些概念了。上述例子中嫁否就是类Y,薪资情况,是否有车,是否有房,长相情况分别是特征 X1 X 1 X2 X 2 X3 X 3 X4 X 4
首先我们来计算特征 X1 X 1 对训练数据集Y的信息增益:我们就要用到公式 g(Y,X1)=H(Y)H(Y|X1) g ( Y , X 1 ) = H ( Y ) − H ( Y | X 1 )
1、从公式可以看出我们需要先计算出 H(Y) H ( Y ) ,Y有两种取值嫁( p1 p 1 ),不嫁( p2 p 2 ),总共15个样本,嫁有9个,不嫁有6个,所以 p1=915 p 1 = 9 15 p2=615 p 2 = 6 15 ,代入到公式 H(Y)=ni=1pilogpi H ( Y ) = − ∑ i = 1 n p i log ⁡ p i ,得到H(Y)=0.971
2、接下来我们算条件熵 H(Y|X1) H ( Y | X 1 ) X1 X 1 取值有三种,高薪( x1 x 1 ),一般( x2 x 2 ),穷鬼( x3 x 3 )。条件熵公式 H(Y)=ni=1piH(Y|X1=xi) H ( Y ) = ∑ i = 1 n p i H ( Y | X 1 = x i ) ,总共15个样本,高薪有5个,所以 p1=515 p 1 = 5 15 ,同理 p2=515 p 2 = 5 15 p3=515 p 3 = 5 15 ,接下来我们算 H(Y|X1=x1) H ( Y | X 1 = x 1 ) ,即已知高薪情况下Y的熵,我们只需提取1-5这5个都是样本的情况下算H(Y),步骤同1, H(Y|X1=x1)=25log22535log235 H ( Y | X 1 = x 1 ) = − 2 5 log 2 ⁡ 2 5 − 3 5 log 2 ⁡ 3 5 ,同理再计算出 H(Y|X1=x2)=15log21545log245 H ( Y | X 1 = x 2 ) = − 1 5 log 2 ⁡ 1 5 − 4 5 log 2 ⁡ 4 5
H(Y|X1=x3)=25log22535log235 H ( Y | X 1 = x 3 ) = − 2 5 log 2 ⁡ 2 5 − 3 5 log 2 ⁡ 3 5 ,最后在带入到条件熵公式,计算出条件熵公式 H(Y|X1)=0.888 H ( Y | X 1 ) = 0.888
3、得到最终的信息增益: g(Y,X1)=0.9710.888=0.083 g ( Y , X 1 ) = 0.971 − 0.888 = 0.083

2.2树的生成阶段

树的生成算法有ID3算法,C4.5算法,CART算法。
我们先来了解下ID3算法,它主要的思想就是比较各个特征的信息增益值,将信息增益大的作为最有特征,也就是内部节点,还是刚刚的例子,我们接下来就算出特征 X2 X 2 X3 X 3 X4 X 4 的信息增益:
g(Y,X2)=H(Y)[615H(Y|X2=x1)+915H(Y|X2=x2)]=0.9710.551=0.420 g ( Y , X 2 ) = H ( Y ) − [ 6 15 H ( Y | X 2 = x 1 ) + 9 15 H ( Y | X 2 = x 2 ) ] = 0.971 − 0.551 = 0.420
g(Y,X3)=H(Y)[815H(Y|X3=x1)+715H(Y|X3=x2)]=0.9710.6927=0.2783 g ( Y , X 3 ) = H ( Y ) − [ 8 15 H ( Y | X 3 = x 1 ) + 7 15 H ( Y | X 3 = x 2 ) ] = 0.971 − 0.6927 = 0.2783
g(Y,X4)=H(Y)[415H(Y|X4=x1)+515H(Y|X4=x2)+615H(Y|X4=x3)]=0.9710.608=0.363 g ( Y , X 4 ) = H ( Y ) − [ 4 15 H ( Y | X 4 = x 1 ) + 5 15 H ( Y | X 4 = x 2 ) + 6 15 H ( Y | X 4 = x 3 ) ] = 0.971 − 0.608 = 0.363
现在我们算完了四个特征的信息增益,通过比较,显而易见 X2 X 2 (是否有车)的信息增益最大,所以特征 X2 X 2 就被选作了最优特征,作为第一个内部节点。所以目前生成的树,如下图所示:《十大经典算法——决策树》
接下来又该怎么办呢,我还是不知道该做什么了,别着急,接下来就和上面没什么区别了。我们选择把 X2 X 2 特征已经提取了,它有两个选择,每个选择下的内部节点又该是什么呢?我们将上诉样本在这个基础上分成两部分,“是”的部分包括(3、4、8、10、13、14)6个样本,“否”的部分包含剩下的9个样本。我们就在各自的样本下计算剩余三个特征的信息增益,比较出信息增益最大的特征作为下一内部节点,直到所有的样本指向同一类为止!
有车情况下的内部节点,先将样本提取出来:
《十大经典算法——决策树》
H(Y1)=12log21212log212=1 H ( Y 1 ) = − 1 2 log 2 ⁡ 1 2 − 1 2 log 2 ⁡ 1 2 = 1
g(Y1,X1)=H(Y1)[26H(Y1|X1=x1)+26H(Y1|X1=x2)+26H(Y1|X1=x3)]=10.3333=0.6667 g ( Y 1 , X 1 ) = H ( Y 1 ) − [ 2 6 H ( Y 1 | X 1 = x 1 ) + 2 6 H ( Y 1 | X 1 = x 2 ) + 2 6 H ( Y 1 | X 1 = x 3 ) ] = 1 − 0.3333 = 0.6667
g(Y1,X3)=H(Y1)[26H(Y1|X3=x1)+46H(Y1|X3=x2)]=10.5409=0.4591 g ( Y 1 , X 3 ) = H ( Y 1 ) − [ 2 6 H ( Y 1 | X 3 = x 1 ) + 4 6 H ( Y 1 | X 3 = x 2 ) ] = 1 − 0.5409 = 0.4591
g(Y1,X4)=H(Y1)[16H(Y1|X4=x1)+26H(Y1|X4=x2)+36H(Y1|X4=x3)]=10.7925=0.2075 g ( Y 1 , X 4 ) = H ( Y 1 ) − [ 1 6 H ( Y 1 | X 4 = x 1 ) + 2 6 H ( Y 1 | X 4 = x 2 ) + 3 6 H ( Y 1 | X 4 = x 3 ) ] = 1 − 0.7925 = 0.2075
通过比较以上信息增益,那么就选择出 X1 X 1 特征作为有车情况下的下一个内部节点。
接下来看无车的情况:
《十大经典算法——决策树》
H(Y2)=39log23969log269=0.9183 H ( Y 2 ) = − 3 9 log 2 ⁡ 3 9 − 6 9 log 2 ⁡ 6 9 = 0.9183
g(Y2,X1)=H(Y2)[39H(Y2|X1=x1)+39H(Y2|X1=x2)+39H(Y2|X1=x3)]=0.91830.9183=0 g ( Y 2 , X 1 ) = H ( Y 2 ) − [ 3 9 H ( Y 2 | X 1 = x 1 ) + 3 9 H ( Y 2 | X 1 = x 2 ) + 3 9 H ( Y 2 | X 1 = x 3 ) ] = 0.9183 − 0.9183 = 0
g(Y2,X3)=H(Y1)[69H(Y2|X3=x1)+39H(Y2|X3=x2)]=0.91830.7394=0.1789 g ( Y 2 , X 3 ) = H ( Y 1 ) − [ 6 9 H ( Y 2 | X 3 = x 1 ) + 3 9 H ( Y 2 | X 3 = x 2 ) ] = 0.9183 − 0.7394 = 0.1789
g(Y2,X4)=H(Y1)[16H(Y2|X4=x1)+26H(Y2|X4=x2)+36H(Y2|X4=x3)]=0.91830.8889=0.0294 g ( Y 2 , X 4 ) = H ( Y 1 ) − [ 1 6 H ( Y 2 | X 4 = x 1 ) + 2 6 H ( Y 2 | X 4 = x 2 ) + 3 6 H ( Y 2 | X 4 = x 3 ) ] = 0.9183 − 0.8889 = 0.0294
通过比较以上信息增益,那么就选择出 X3 X 3 特征作为无车情况下的下一个内部节点。
所以现在的树的构建情况如下图所示:
《十大经典算法——决策树》
以此类推相信大家也知道了如何去构建一棵完整的决策树了吧,但是到最后大家可能会发现,用了所有的特征,但是还有有些样本没有完全分类(没能到达叶子结点),这就说明我们的特征选取不好,以上只是我自己编造的数据,所以存在一写不合理的地方,

    原文作者:常用算法
    原文地址: https://blog.csdn.net/Michael__Corleone/article/details/78150582
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞