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

  • 相关阅读:
    04 链表(上):如何实现LRU缓存淘汰算法?
    03 数组:为什么很多编程语言中数组都从0开始编号?
    02 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
    01 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
    Winform PictureBox图片旋转
    我的第一篇博客
    redis分布式锁实现与思考
    java 时间字符串中毫秒值时有时无,怎么解析
    spring 接收处理 json 类型的请求(spring 默认使用jackson 处理接收的数据), json 字段的中的Date 类型会自动 转换为 Long 类型
    java 中的正则使用
  • 原文地址:https://www.cnblogs.com/onemorepoint/p/6761778.html
Copyright © 2011-2022 走看看