zoukankan      html  css  js  c++  java
  • 决策树C4.5选择信息增益比而不考虑信息增益的原因


    从熵(Entropy)开始说起,熵最初是一个物理学概念,后来在数学中用来描述“一个系统的混乱程度”,因此一个系统的信息熵越高就越无序,信息熵越低就越有序,信息熵越高,使其有序所要消耗的信息量就越大。
    我们的目的就是将系统变得有序并找出确定的信息
    假设变量

    ,其中每个元素对应的概率(比例)为

    ,则对应熵的计算公式如下:

    而信息增益(Info-Gain)指的就是熵的减少量:
    IGain(S,A)=E(S)-E(A)
    上面公式中S和A分别代表操作前后的数据划分状态。
    下面举个例子,依然用天气预报数据集:



    在这个例子中,最后一列指是否出去玩,这里作为我们所要预测的标记值(label),而前四列就是我们需要借助的数据,每一列都是一个特征(feature)。
    初始状态下,label列总共为14行,有9个yes和5个no,所以label列初始信息熵为:

    假设我们先划分outlook这一列,分成sunny、rain、overcast三类,数量分别为5:5:4,考虑到每个类别下对应的label不同,可以计算出划分后的信息熵:



    其中E(S1)、E(S2)、E(S3)分别为每个类别下对应的label列的熵。

    而信息增益(Info-Gain)就是指划分前后信息熵的变化:
    IGain(S,A)=E(S)-E(A)
    在ID3算法中,信息增益(Info-Gain)越大,划分越好,决策树算法本质上就是要找出每一列的最佳划分以及不同列划分的先后顺序及排布。

    后面回到题中的问题,C4.5中使用信息增益率(Gain-ratio),ID3算法使用信息增益(Info-Gain),二者有何区别?

    根据前文的例子,Info-Gain在面对类别较少的离散数据时效果较好,上例中的outlook、temperature等数据都是离散数据,而且每个类别都有一定数量的样本,这种情况下使用ID3与C4.5的区别并不大。但如果面对连续的数据(如体重、身高、年龄、距离等),或者每列数据没有明显的类别之分(最极端的例子的该列所有数据都独一无二),在这种情况下,我们分析信息增益(Info-Gain)的效果:

    根据公式
    IGain(S,A)=E(S)-E(A),
    E(S)为初始label列的熵,并未发生变化,则IGain(S,A)的大小取决于E(A)的大小,E(A)越小,IGain(S,A)越大,而根据前文例子,

    若某一列数据没有重复,ID3算法倾向于把每个数据自成一类,此时

    这样E(A)为最小,IGain(S,A)最大,程序会倾向于选择这种划分,这样划分效果极差。

    为了解决这个问题,引入了信息增益率(Gain-ratio)的概念,计算方式如下:

    这里Info为划分行为带来的信息,信息增益率如下计算:

    这样就减轻了划分行为本身的影响。
    评论中很多人对文中信息量和熵的部分有疑问,这确实是个很绕的问题,目前对于信息的定义主要有以下几种:
    香农(C. E. Shannon)信息是不确定性的消除
    维纳信息定义 信息是独立于物质、能量的一种属性标示。
    逆香农信息定义 信息是确定性的增加。
    邓宇等人的定义 信息是事物现象及其属性标识的集合。
    上面几种定义各不相同,答主比较倾向于逆香农信息定义,但本质上还是香农那一套。

  • 相关阅读:
    【23设计模式】总结
    【JAVA】内部类,内部接口
    【JAVA】接口
    【JAVA】抽象类,抽象方法
    【JAVA】类加载器
    【JAVA】枚举
    【JAVA】序列化
    【JAVA】异常笔记
    汇编笔记_第十一章
    汇编笔记_第十章
  • 原文地址:https://www.cnblogs.com/wannaer/p/6826172.html
Copyright © 2011-2022 走看看