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,等,相关细节自查。

  • 相关阅读:
    [引用]SQLServer占CPU100%
    负能量程序员杂谈(2)- 管理中的情和义
    负能量程序员杂谈(1)-世界上最单纯的职业:程序员
    FLV文件格式官方规范详解
    rtmp官方标准规范详细解析
    万恶的KPI、新兴的OKR及让人纠结的程序员考核
    管理点滴(一)
    选拨管理者的一个必要条件
    团队管理的简单总结:少即是多,体力透支,负能量管理,自我进化团队,沟通
    我的2015计划,目标
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13281751.html
Copyright © 2011-2022 走看看