《机器学习实战》笔记(2):决策树

注意:本人意在讲解数学原理,具体代码不做解释。

1. 简介

       决策树也是一种分类方法,如下图是一个邮件分类的决策树流程图,方框中的是邮件特征,也是树的层数,椭圆框的则是最终分类的组别,也是树的叶子。

构造决策树的关键问题就在于按顺序找出最具有决定性的特征,例如上图特征"发送邮件地址..."决定性大于"包含单词曲棍球",所以分类排在前面,如何定量分析各特征的决定性呢?一种方法就是引入信息增益或者信息熵的概念,也叫香农熵。

2. 香农熵

       香农熵就是一种衡量信息无序性的量,香农熵越高,无序性就越高,计算表达式如下:

下面举个例子计算香农熵,对于给定的数据集,如下

 转换成编程语言就是

def createDataSet():
    dataSet = [[1, 1, 'yes'],
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]
    labels = ['no surfacing','flippers']
    #change to discrete values
    return dataSet, labels

由题可知,该例有两个分类,即属于鱼类(yes)和不属于(no),yes的概率为0.4,no为0.6,因而计算香农熵为

E=-(0.4*log_2(0.4)+0.6*log_2(0.6))))=0.971

相关代码自查。

3. 选择最佳特征

        那么我们的问题是选择最好的用于划分数据集的特征,现在有两个特征,不浮出水面和脚蹼,每个特征的值分别有两个:有(1)和没有(0)。我们先看特征不浮出水面可以划分为两个数据集,即

 那么香农熵分别为:E_1=-(frac{2}{3}*log_2(frac{2}{3})+frac{1}{3}*log_2(frac{1}{3}))=0.918E_2=1*log_2(1)=0,所以总的香农熵为E=E_1+E_2=0.918

同样的看第二个特征的话就是[[1,'yes'],[1,'yes'],[1,'no'],[1,'no']]和[[0,'no']],同样计算香农熵为

E=-(frac{1}{2}*log_2(frac{1}{2})+frac{1}{2}*log_2(frac{1}{2}))+0=2

可知前一个特征划分出来的香农熵要少,所以第一个特征为主要特征。那么可以构造决策树如下:

有了决策树,就可以用于进行给定特征但未知分类的分类了。 

最后说明一点,基于这种计算信息增益方式的构造决策树方法叫做ID3算法,还有其它诸如计算信息增益率的C4.5,以及CART,等,相关细节自查。

原文地址:https://www.cnblogs.com/hzcya1995/p/13281751.html