zoukankan      html  css  js  c++  java
  • 《机器学习实战》笔记(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,等,相关细节自查。

  • 相关阅读:
    vue开发chrome扩展,数据通过storage对象获取
    Vue手动集成less预编译器
    Google Translate寻找之旅
    Javascript Range对象的学习
    Javascript Promises学习
    SublimeText 建立构建Node js系统
    We're sorry but demo3 doesn't work properly without JavaScript enabled. Please enable it to continue.
    npm安装包出现UNMET DEPENDENCY报错
    (转载)命令行说明中格式 尖括号 中括号的含义
    Linux重启网卡服务Failed to start LSB: Bring up/down networking.
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13281751.html
Copyright © 2011-2022 走看看