zoukankan      html  css  js  c++  java
  • 决策树算法

    学习了一下决策树算法(ID3)。

    基本的理论知识:

    信息熵:信息理论的鼻祖之一Claude E. Shannon(香农)把信息(熵)定义为离散随机事件的出现概率。一般而言,当一种信息出现概率更高的时候,表明它被传播得更广泛,或者说,被引用的程度更高。我们可以认为,从信息传播的角度来看,信息熵可以表示信息的价值。这样子我们就有一个衡量信息价值高低的标准,可以做出关于知识流通问题的更多推论。

    计算公式

    H(x) = E[I(xi)] = E[ log(2,1/p(xi)) ] = -∑p(xi)log(2,p(xi)) (i=1,2,..n)

    如果抛一个硬币,我们可以计算出-0.5log2 0.5 - 0.5log2 0.5 = 1。我们就可以用1个比特来表示结果。或者有32个球队,赢球的概率相同,那么信息熵为5,我们需要5比特来表示结果

     

    ID3的核心思想是:在决策树各节点上选择属性时,通过计算信息增益来选择信息熵。怎么选择呢,说白了就是如果一个信息熵很低,那么代表的就是确定度越高。如果一个硬币每次都是正面那直接选择正面啊。哈哈。

    所以我们怎么来选择哪一个分类属性呢,看用哪一个分类属性会使信息熵变低,不确定度减小。哈哈。

     

    ID3算法描述

    输入:样本集合S,属性集合A
        输出:id3决策树。
        1) 若所有种类的属性都处理完毕,返回;否则执行2)
        2)计算出信息增益最大属性a,把该属性作为一个节点。
            如果仅凭属性a就可以对样本分类,则返回;否则执行3)
        3)对属性a的每个可能的取值v,执行一下操作:
            i.  将所有属性a的值是v的样本作为S的一个子集Sv;
            ii. 生成属性集合AT=A-{a};
            iii.以样本集合Sv和属性集合AT为输入,递归执行id3算法;

    下面给出几个用到的公式。

    信息增益公式:

    Gain(X,T) =INFO(T) – INFO(X,T)

    Gain(X,T):选用X属性分类的得到的信息增益。

    INFO(T) :总的信息熵。

    INFO(X,T):用X分类的信息熵。    

    实例分析:

        这个例子来源于Quinlan的论文。
        假设,有种户外活动。该活动能否正常进行与各种天气因素有关。
        不同的天气因素组合会产生两种后果,也就是分成2类:能进行活动或不能。
        我们用P表示该活动可以进行,N表示该活动无法进行。
        下表描述样本集合是不同天气因素对该活动的影响。
                         Attribute                       class
        outlook    temperature    humidity    windy
        ---------------------------------------------------------
        sunny       hot             high           false       N
        sunny       hot             high           true         N
        overcast   hot             high           false       P
        rain           mild           high           false       P
        rain           cool           normal      false       P
        rain           cool           normal      true         N
        overcast   cool           normal      true         P
        sunn y      mild           high           false       N
        sunny       cool           normal      false       P
        rain           mild           normal      false       P
        sunny       mild           normal      true         P
        overcast   mild           high           true         P
        overcast   hot             normal      false       P
        rain           mild           high           true        N
        3.2
        该活动无法进行的概率是:5/14
        该活动可以进行的概率是:9/14
        因此样本集合的信息熵是:-5/14log(5/14) - 9/14log(9/14) = 0.940
        3.3
        接下来我们再看属性outlook信息熵的计算:
        outlook为sunny时,
        该活动无法进行的概率是:3/5
        该活动可以进行的概率是:2/5
        因此sunny的信息熵是:-3/5log(3/5) - 2/5log(2/5) = 0.971
        同理可以计算outlook属性取其他值时候的信息熵:
        outlook为overcast时的信息熵:0
        outlook为rain时的信息熵:0.971
        属性outlook的信息增益:gain(outlook) = 0.940 - (5/14*0.971 + 4/14*0 + 5/14*0.971) = 0.246
        相似的方法可以计算其他属性的信息增益:
        gain(temperature) = 0.029
        gain(humidity) = 0.151
        gain(windy) = 0.048
        信息增益最大的属性是outlook。

  • 相关阅读:
    CodeForces 681D Gifts by the List (树上DFS)
    UVa 12342 Tax Calculator (水题,纳税)
    CodeForces 681C Heap Operations (模拟题,优先队列)
    CodeForces 682C Alyona and the Tree (树上DFS)
    CodeForces 682B Alyona and Mex (题意水题)
    CodeForces 682A Alyona and Numbers (水题,数学)
    Virtualizing memory type
    页面跳转
    PHP Misc. 函数
    PHP 5 Math 函数
  • 原文地址:https://www.cnblogs.com/xiaokangzi/p/3581068.html
Copyright © 2011-2022 走看看