zoukankan      html  css  js  c++  java
  • ID3算法(1)

      1 简述

    1.1
        id3是一种基于决策树的分类算法,由J.Ross Quinlan
    在1986年开发。id3根据信息增益,运用自顶向下的贪心策略
    建立决策树。信息增益用于度量某个属性对样本集合分类的好坏程度。
    由于采用了信息增益,id3算法建立的决策树规模比较小,
    查询速度快。id3算法的改进是C4.5算法,C4.5算法可以
    处理连续数据,采用信息增益率,而不是信息增益。
    理解信息增益,需要先看一下信息熵。

    1.2 信息熵
        信息熵是随机变量的期望。度量信息的不确定程度。
    信息的熵越大,信息就越不容易搞清楚。处理信息就是
    为了把信息搞清楚,就是熵减少的过程。
        Entropy(X) = -Sum(p(xi) * log(p(xi))) {i: 0 <= i <= n}
        p(x)是概率密度函数;对数是以2为底;

    1.3 信息增益
        用于度量属性A降低样本集合X熵的贡献大小。信息增益
    越大,越适于对X分类。
        Gain(A, X) = Entropy(X) - Sum(|Xv| / |X| * Entropy(Xv))  {v: A的所有可能值}
        Xv表示A中所有为v的值;|Xv|表示A中所有为v的值的数量;

    2 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算法;

    3 一个的例子
        3.1
        这个例子来源于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。

        3.4
        根据outlook把样本分成3个子集,然后把这3个子集和余下的属性
        作为输入递归执行算法。

    原文链接:http://blog.csdn.net/leeshuheng/article/details/7777722

  • 相关阅读:
    CodeForces 19D Points (线段树+set)
    FZU 2105 Digits Count
    HDU 5618 Jam's problem again(三维偏序,CDQ分治,树状数组,线段树)
    HDU 5634 Rikka with Phi (线段树)
    Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)
    Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)
    Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)
    Java实现 蓝桥杯 算法提高VIP Substrings(暴力)
    Java实现 蓝桥杯 算法提高VIP Substrings(暴力)
    Java实现 蓝桥杯 算法提高VIP Substrings(暴力)
  • 原文地址:https://www.cnblogs.com/onemorepoint/p/6761778.html
Copyright © 2011-2022 走看看