决策树算法小结

选自《跟着迪哥学python 》

 

决策树其实就是和传统的if-else差不多了,就是有点象二分法分类树了。但先看下熵的概念:
熵指物体内部的混乱程度,怎么理解混乱程度呢?可以分别想象两个场景:第一个场景是,当你来到义乌小商品批发市场,市场里有很多商品,看得人眼花缭乱,这么多商品,好像哪个都想买,但是又比较纠结买哪个,因为可以选择的商品实在太多。
根据熵的定义,熵值越高,混乱程度越高。这个杂货市场够混乱吧,那么在这个场景中熵值就较高。但是,模型是希望同一类别的数据放在一起,不同类别的数据分开。那么,如果各种类别数据都混在一起,划分效果肯定就不好,所以熵值高意味着数据没有分开,还是混杂在一起,这可不是模型想要的。
第二个场景是当你来到一个苹果手机专卖店,这一进去,好像没得选,只能买苹果手机。这个时候熵值就很低,因为这里没有三星、华为等,选择的不确定性就很低,混乱程度也很低。
如果数据划分后也能像苹果专卖店一样,同一类别的都聚集在一起,就达到了分类的目的,解释过后,来看一下熵的公式:

对于一个多分类问题,需要考虑其中每一个类别。式中,n为总共的类别数量,也就是整体的熵值是由全部类别所共同决定的;pi为属于每一类的概率。式(7.1)引入了对数函数,它的作用是什么呢?先来观察一下图7-3。
如果一个节点中所有数据都属于同一类别,此时概率pi值就为1。在对数图中,当x=1时对应的输出值恰好为0,此时熵值也就为0。因为数据都是一个类别的,没有任何混乱程度,熵值就为最低,也就是0。

决策树算法小结_第1张图片

再举一个极端的例子,如果一个节点里面的数据都分属于不同的类别,例如10个数据属于各自的类别,这时候概率pi值就很低,因为每一个类别取到的概率都很小,观察图7-3可以发现,当x取值越接近于0点,其函数值的绝对值就越大。
由于概率值只对应对数函数中[0,1]这一部分,恰好其值也都是负数,所以还需在熵的公式最前面加上一个负号,目的就是负负得正,将熵值转换成正的。并且随着概率值的增大,对数函数结果越来越接近于0,可以用其表示数据分类的效果。
下面再通过一个数据例子理解一下熵的概念:假设A集合为[1,1,1,1,1,1,1,1,2,2]、B集合为[1,2,3,4,5,6,7,8,9,10]。在分类任务中,A集合里面的数据相对更纯,取到各自类别的概率值相对较大,此时熵值就偏低,意味着通过这次划分的结果还不错。反观B集合,由于里面什么类别都有,鱼龙混杂,取到各自类别的概率值都较低,由于对数函数的作用,其熵值必然偏高,也就是这次划分做得并不好。

下面通过一个实例来看一下决策树的构建过程,这里有14条数据,表示迪哥在各种天气状况下是否去打球。数据中有4个特征,用来描述当天的天气状况,最后一列的结果就是分类的标签,如表7-1所示。
决策树算法小结_第2张图片

数据集包括14天的打球情况(用yes或者no表示),所给的数据特征有4种天气状况(outlook、temperature、humidity、windy):
•outlook表示天气状况,有3种取值,分别是sunny、rainy、overcast。
•temperature表示气温,有3种取值,分别是hot、cool、mild。
•humidity表示潮湿度,有2种取值,分别是high、normal。
•windy表示是否有风,有2种取值,分别是TRUE、FALSE。
目标就是构建一个决策树模型,现在数据集中有4个特征,所以要考虑的第一个问题就是,究竟用哪一个特征当作决策树的根节点,可以有4种划分方式(见图7-5)。
决策树算法小结_第3张图片

根据上图的划分情况,需要从中选择一种划分当作根节点,如何选择呢?这就要用到前面介绍的信息增益。
在历史数据中,迪哥有9天打球,5天不打球,所以此时还未经过划分的数据集熵值应为:
决策树算法小结_第4张图片

为了找到最好的根节点,需要对4个特征逐一分析,先从outlook特征开始。
当outlook=sunny时,总共对应5条数据,其中有2天出去打球,3天不打球,则熵值为0.971(计算方法同上)。
当outlook=overcast时,总共对应4条数据,其中4天出去打球,此时打球的可能性就为100%,所以其熵值为0。
当outlook=rainy时,总共对应5条数据,其中有3天出去打球,2天不打球,则熵值为0.971。
outlook取值为sunny、overcast、rainy的概率分别为5/14、4/14、5/14,最终经过outlook节点划分后,熵值计算如下(相当于加权平均):
5/14×0.971+4/14×0+5/14×0.971=0.693
以outlook作为根节点,系统的熵值从初始的0.940下降到0.693,增益为0.247。用同样的方式可以计算出其他特征的信息增益,以temperature、humidity、windy分别作为根节点的信息增益为gain(temperature)=0.029,gain(humidity)=0.152,gain(windy)=0.048。这相当于遍历所有特征,接下来只需选择信息增益最大的特征,把它当作根节点拿出即可。

你可能感兴趣的:(决策树算法小结)