作者:蓝鲸
算法决策树是一种通过对历史数据进行测算实现对新数据进行分类和预测的算法。简单来说决策树算法就是通过对已有明确结果的历史数据进行分析,寻找数据中的特征。并以此为依据对新产生的数据结果进行预测。
决策树由3个主要部分组成,分别为决策节点,分支,和叶子节点。其中决策树最顶部的决策节点是根决策节点。每一个分支都有一个新的决策节点。决策节点下面是叶子节点。每个决策节点表示一个待分类的数据类别或属性,每个叶子节点表示一种结果。整个决策的过程从根决策节点开始,从上到下。根据数据的分类在每个决策节点给出不同的结果。
构造决策树的方法有很多种,ID3是其中的一种算法。ID3算法最早是由罗斯昆(J. Ross Quinlan)1975年在悉尼大学提出的一种分类预测算法,核心是“信息熵”。ID3算法认为“互信息”高的属性是好属性,通过计算历史数据中每个类别或属性的“信息熵”获得“互信息”,并选择“互信息”最高的类别或属性作为决策树中的决策节点,将类别或属性的值做为分支继续进行分裂。不断重复这个过程,直到生成一棵完整的决策树。
信息熵的含义及分类
信息熵是信息论中的一个重要的指标,是由香农在1948年提出的。香农借用了热力学中熵的概念来描述信息的不确定性。因此信息学中的熵和热力学的熵是有联系的。根据Charles H. Bennett对Maxwell’s Demon的重新解释,对信息的销毁是一个不可逆过程,所以销毁信息是符合热力学第二定律的。而产生信息,则是为系统引入负(热力学)熵的过程。 所以信息熵的符号与热力学熵应该是相反的 。
简单的说信息熵是衡量信息的指标,更确切的说是衡量信息的不确定性或混乱程度的指标。信息的不确定性越大,熵越大。决定信息的不确定性或者说复杂程度主要因素是概率。决策树中使用的与熵有关的概念有三个:信息熵,条件熵和互信息。下面分别来介绍这三个概念的含义和计算方法。
信息熵是用来衡量一元模型中信息不确定性的指标。信息的不确定性越大,熵的值也就越大。而影响熵值的主要因素是概率。这里所说的一元模型就是指单一事件,而不确定性是一个事件出现不同结果的可能性。例如抛硬币,可能出现的结果有两个,分别是正面和反面。而每次抛硬币的结果是一个非常不确定的信息。因为根据我们的经验或者历史数据来看,一个均匀的硬币出现正面和反面的概率相等,都是50%。因此很难判断下一次出现的是正面还是反面。这时抛硬币这个事件的熵值也很高。而如果历史数据告诉我们这枚硬币在过去的100次试验中99次都是正面,也就是说这枚硬币的质量不均匀,出现正面结果的概率很高。那么我们就很容易判断下一次的结果了。这时的熵值很低,只有0.08。
条件熵是通过获得更多的信息来消除一元模型中的不确定性。也就是通过二元或多元模型来降低一元模型的熵。我们知道的信息越多,信息的不确定性越小。例如,只使用一元模型时我们无法根据用户历史数据中的购买频率来判断这个用户本次是否也会购买。因为不确定性太大。在加入了促销活动,商品价格等信息后,在二元模型中我们可以发现用户购买与促销活动,或者商品价格变化之间的联系。并通过购买与促销活动一起出现的概率,和不同促销活动时购买出现的概率来降低不确定性。
这是一家高尔夫球俱乐部的历史数据,里面记录了不同天气状况用户来打高尔夫球的历史记录。我们要做的是通过构建决策树来预测用户是否会来打高尔夫球。这里用户是否来打球是一个一元模型,具有不确定性,熵值很高。我们无法仅通过Yes和No的频率来判断用户明天是否会来。因此,需要借助天气的信息来减少不确定性。下面分别记录到了4种天气情况,我们通过计算条件熵和互信息来开始构建决策树的第一步:构建根决策点。
构建根决策点的方法就是寻找4种天气情况中与打高尔夫球相关性最高的一个。首先我们来看Play Golf这个一元模型的熵,来看看这件事的不确定性有多高.
在一元模型中,仅通过历史数据的概率来看预测Play Golf是一件非常不确定的事情,在14条历史数据中,打球的概率为64%,不打球的概率为36%。熵值达到了0.940。这与之前抛硬币的例子很像。在无法改变历史数据的概率时,我们需要借助更多的信息来降低不确定性。也就是计算条件熵。
计算二元模型的条件熵需要知道Play Golf与4种天气情况一起出现的联合概率,以及在不同天气情况下Play Golf出现的条件概率。下面我们分别来计算这两类概率。
联合概率
条件概率
在已知Play Golf的一元模型熵和不同天气条件下的二元模型熵后。我们就可以通过互信息来度量哪种天气与Play Golf的相关性最高了。
在整个决策树中,Outlook因为与Play Golf的相关性最高,所以作为决策树的根节点。以Outlook作为根节点后,决策树出现了三个分支,分别是Outlook的三个不同的取值Sunny,Overcast和Rainy。其中Overcast所对应的Play Golf都是Yes,因此这个分支的叶子节点为Yes。(后面构建分支决策节点时会看到)另外两个分支我们将使用和前面一样的方法,通过计算熵,条件熵和互信息来挑选下一个分支的决策节点。
下面我们继续构建Sunny,Overcast和Rainy这三个分支的决策节点,首先来看下Overcast节点,这个节点只有一种结果,因此无需在继续分裂。
构建分支节点
Outlook 节点Overcast分支
在Outlook根节点下的Overcast分支中,Play Golf只有一种结果Yes,因此Overcast分支停止分裂。叶子节点的值为Yes。
在Outlook根节点下的Sunny分支中,单独形成了另一个表。此时由于Outlook以及作为决策树的根节点了,因此所需考虑的天气情况为3种,我们继续对这个表确定决策节点。从3种天气情况中找出Sunny分支下的决策节点。方法及步骤和前面一致,计算熵,条件熵和互信息,并以互信息最大的作为Sunny分支的决策节点进行分裂。
计算三种天气情况与Play Golf的互信息值,也就是相关性。值越大相关性越高。三种天气中Wind的互信息值最高,为0.971。说明Sunny分支下Wind和Play Golf的相关性最高。因此选择Wind作为Sunny分支的决策节点。
在Outlook根节点的Sunny分支下,经过计算互信息的值Wind与Play Golf相关性最高,因此Wind作为Sunny的决策节点。Wind有两个分支,分别为FALSE和TRUE。当Wind为FALSE时,Play Golf的结果为Yes。Wind为TRUE时结果为No。
Outlook根节点还有一个分支是Rainy。以下是Outlook下Rainy的分支数据表。我们从这个表中挑选出Rainy分支下的决策节点。由于Outlook以及作为决策树的根节点,Wind成为了Sunny分支下的决策节点,因此我们需要考虑的天气情况就只剩下两种Temp和Humidity。
Play Golf熵减去两种天气与Play Golf的条件熵获得互信息的值。Humidity值最大,说明相关性最高。因此Humidity被选为Rainy分支的决策节点。
在Outlook的Rainy分支下,Humidity作为决策节点有两个分支,分别为High和Normal。所有High分支都对应Play Golf的No,所有Normal分支都对应了Play Golf的Yes。因此停止继续分裂。
通过将决策树中每个决策点还原为原始数据表可以发现,每一个决策点都对应了一张数据表。从根决策节点开始,我们通过计算熵寻找与Play Golf最相关的天气信息,来建立决策点及分支,并反复迭代这一过程。直到最终构建完整的决策树。
文章开始的时候我们说过,决策树是用来进行分类和预测的。具体过程如下。当我们构建好决策树后,当有新的信息发送时,我们利用已有的决策树逻辑对新的信息结构进行判断。当信息的内容与决策树一致时,就进入下一分支进行判断,并通过叶子节点获得分类的结果。例如,当新的一天开始时,我们就可以通过4个天气特征来判断用户是否会来打高尔夫球。以下是具体预测流程的示意图,首先寻找新信息中的根决策节点Outlook,根据Outlook的取值进入到Sunny分支,在Sunny分支中继续判断下一决策点Windy的取值,新的信息中Windy的取值为FALSE,根据决策树中的逻辑返回Yes。因此在新信息中通过对天气情况的判断预测用户会来打高尔夫球。
via:tuicool
End.
http://www.36dsj.com/archives/44255