zoukankan      html  css  js  c++  java
  • 机器学习实战读书笔记(2)决策树

    信息熵是什么?
    1. 信息论之父 C. E. Shannon 在 1948 年发表的论文“通信的数学理论( A Mathematical Theory of Communication )”中, Shannon 指出,任何信息都存在冗余,冗余大小与信息中每个符号(数字、字母或单词)的出现概率或者说不确定性有关。
    Shannon 借鉴了热力学的概念,把信息中排除了冗余后的平均信息量称为“信息熵”,并给出了计算信息熵的数学表达式。
     
    2.生活实例:
    赌马比赛里,有4匹马 {A,B,C,D} ,获胜概率分别为 {frac{1}{2},frac{1}{4},frac{1}{8},frac{1}{8}}
     R代表根节点

    接下来,让我们将哪一匹马获胜视为一个随机变量 Xin{A,B,C,D} 。假定我们需要用尽可能少的二元问题来确定随机变量 X 的取值。

    例如:问题1:A获胜了吗?问题2:B获胜了吗?问题3:C获胜了吗?最后我们可以通过最多3个二元问题,来确定 X 的取值,即哪一匹马赢了比赛。

    如果 X=A ,那么需要问1次(问题1:是不是A?),概率为 frac{1}{2}

    如果 X=B ,那么需要问2次(问题1:是不是A?问题2:是不是B?),概率为 frac{1}{4}

    如果 X=C ,那么需要问3次(问题1,问题2,问题3),概率为 frac{1}{8} ;

    如果 X=D ,那么同样需要问3次(问题1,问题2,问题3),概率为 frac{1}{8}

    那么很容易计算,在这种问法下,为确定 X 取值的二元问题数量为:

    注意:1=log(2) ,2=log(4),3=log(8)

    那么我们回到信息熵的定义,会发现通过之前的信息熵公式,神奇地得到了:

    其中:log(2)=-log(1/2),log(4)=-log(1/4),log(8)=-log(1/8) 

    Shannon公式:

    ================

    3,一个例子:

    ================

    任务:

    根据天气预测否去打网球

    数据:

    复制代码
    这个数据集来自Mitchell的机器学习,叫做是否去打网球play-tennis,以下数据仍然是从带逗号分割的文本文件,复制到纪事本,把后缀直接改为.csv就可以拿Excel打开:

    *play-tennis data,其中6个变量依次为:编号、天气{Sunny、Overcast、Rain}、温度{热、冷、适中}、湿度{高、正常}、风力{强、弱}以及最后是否去玩的决策{是、否}。一个建议是把这些数据导入Excel后,另复制一份去掉变量的数据到另外一个工作簿,即只保留14个观测值。这样可以方便地使用Excel的排序功能,随时查看每个变量的取值到底有多少。*/

    NO. , Outlook , Temperature , Humidity , Wind , Play
    1 , Sunny , Hot , High , Weak , No
    2 , Sunny , Hot , High , Strong , No
    3 , Overcast , Hot , High , Weak , Yes
    4 , Rain , Mild , High , Weak , Yes
    5 , Rain , Cool , Normal , Weak , Yes
    6 , Rain , Cool , Normal , Strong , No
    7 , Overcast , Cool , Normal , Strong , Yes
    8 , Sunny , Mild , High , Weak , No
    9 , Sunny , Cool , Normal , Weak , Yes
    10 , Rain , Mild , Normal , Weak , Yes
    11 , Sunny , Mild , Normal , Strong , Yes
    12 , Overcast , Mild , High , Strong , Yes
    13 , Overcast , Hot , Normal , Weak , Yes
    14 , Rain , Mild , High , Strong , No
    复制代码

    用决策树来预测:

    决策树的形式类似于“如果天气怎么样,去玩;否则,怎么着怎么着”的树形分叉。那么问题是用哪个属性(即变量,如天气、温度、湿度和风力)最适合充当这颗树的根节点,在它上面没有其他节点,其他的属性都是它的后续节点。

    那么借用上面所述的能够衡量一个属性区分以上数据样本的能力的“信息增益”(Information Gain)理论。

    如果一个属性的信息增益量越大,这个属性作为一棵树的根节点就能使这棵树更简洁,比如说一棵树可以这么读成,如果风力弱,就去玩;风力强,再按天气、温度等分情况讨论,此时用风力作为这棵树的根节点就很有价值。如果说,风力弱,再又天气晴朗,就去玩;如果风力强,再又怎么怎么分情况讨论,这棵树相比就不够简洁了。

    用熵来计算信息增益:

    复制代码
    1 计算分类系统熵
    类别是 是否出去玩。取值为yes的记录有9个,取值为no的有5个,即说这个样本里有9个正例,5 个负例,记为S(9+,5-),S是样本的意思(Sample)。那么P(c1) = 9/14, P(c2) = 5/14
    这里熵记为Entropy(S),计算公式为:
    Entropy(S)= -(9/14)*log2(9/14)-(5/14)*log2(5/14)用Matlab做数学运算
    
    
    2 分别以Wind、Humidity、Outlook和Temperature作为根节点,计算其信息增益

    我们来计算Wind的信息增益
    当Wind固定为Weak时:记录有8条,其中正例6个,负例2个;
    同样,取值为Strong的记录6个,正例负例个3个。我们可以计算相应的熵为:
    Entropy(Weak)=-(6/8)*log(6/8)-(2/8)*log(2/8)=0.811
    Entropy(Strong)=-(3/6)*log(3/6)-(3/6)*log(3/6)=1.0

    现在就可以计算出相应的信息增益了:
    所以,对于一个Wind属性固定的分类系统的信息量为 (8/14)*Entropy(Weak)+(6/14)*Entropy(Strong)
    Gain(Wind)=Entropy(S)-(8/14)*Entropy(Weak)-(6/14)*Entropy(Strong)=0.940-(8/14)*0.811-(6/14)*1.0=0.048
    这个公式的奥秘在于,8/14是属性Wind取值为Weak的个数占总记录的比例,同样6/14是其取值为Strong的记录个数与总记录数之比。

    同理,如果以Humidity作为根节点:
    Entropy(High)=0.985 ; Entropy(Normal)=0.592
    Gain(Humidity)=0.940-(7/14)*Entropy(High)-(7/14)*Entropy(Normal)=0.151
    以Outlook作为根节点:
    Entropy(Sunny)=0.971 ; Entropy(Overcast)=0.0 ; Entropy(Rain)=0.971
    Gain(Outlook)=0.940-(5/14)*Entropy(Sunny)-(4/14)*Entropy(Overcast)-(5/14)*Entropy(Rain)=0.247
    以Temperature作为根节点:
    Entropy(Cool)=0.811 ; Entropy(Hot)=1.0 ; Entropy(Mild)=0.918
    Gain(Temperature)=0.940-(4/14)*Entropy(Cool)-(4/14)*Entropy(Hot)-(6/14)*Entropy(Mild)=0.029
    这样我们就得到了以上四个属性相应的信息增益值:
    Gain(Wind)=0.048 ;Gain(Humidity)=0.151 ; Gain(Outlook)=0.247 ;Gain(Temperature)=0.029
    最后按照信息增益最大的原则选Outlook为根节点。子节点重复上面的步骤。这颗树可以是这样的,它读起来就跟你认为的那样:

    通俗理解决策树算法中的信息增益


    https://zhuanlan.zhihu.com/p/26596036
     
     
     
  • 相关阅读:
    Unity3d之UGUI- Image拦截Button响应事件
    hdu1114Piggy-Bank(完全背包)
    cf455A boredom
    hdu2084数塔(入门级dp)
    小米线刷出现remote: partition table doesn't exist
    km算法
    hdu1069 Girls and Boys
    CF1203C Common Divisors
    魔法部落
    java命令行运行出现找不到或无法加载类
  • 原文地址:https://www.cnblogs.com/davidwang456/p/8604419.html
Copyright © 2011-2022 走看看