ID3算法是个递归求熵算法,我总是无法在VB数据表中实现 如:输入天气、温度、湿度、风和类别属性“适合出行(是/否)”这样一个数据表。如何生成决策树。求各位大虾救命呀!!!!

解决方案 »

  1.   

    ding  什么是 ID3算法?
      

  2.   

    我把算法写出来,请各位老大帮我实现(用VB窗体实现,可视化演示,VB显示一个表,就能生成一个决策树))
    是一个递归算法
    Function ID3(R:一个非类别的属性集合,C:类别属性,S:一个训练集)
    Begin 
    If     S为空, 返回一个值为FAILURE的单个节点;
    If     S是由其值均为相同类别属性值的记录组成,
    返回一个带有该值的单个节点;
    If    R为空,则返回一个单节点,其值为在S记录中找出的频率最高的类别属性值;
    将R中属性之间具有最大gain(D,S)值的属性赋值给D;
    将属性D的值赋值给{dj |j =1,2,3 …m};
    将分别由对应于D的值为dj的记录组成的S的子集赋给{sj|j=1,2,3 …,m};
    返回一颗树,其根标记为D,树枝标记为d1, d2,…,dm ;
    在分别递归构造以下树:ID3(R-{D},C,S 1) , ID3(R-{D},C,S2) …, ID3(R-{D},C,Sm) ;
    End ID3;
    如图:
    属性 天气 气温 湿度 风 适合打高尔夫
    1 多云 热 高 无风 不适合
    2 晴 热 高 无风 适合
    3 多云 热 高 大风 不适合
    4 晴 热 高 中风 适合
    5 雨 适中 高 无风 不适合
    6 多云 热 高 中风 不适合
    7 雨 热 正常 无风 适合
    8 雨 适中 高 中风 不适合
    9 雨 冷 正常 中风 不适合
    10 晴 冷 正常 大风 适合
    11 雨 热 正常 大风 不适合
    12 晴 冷 正常 中风 适合
    13 多云 适中 高 中风 不适合
    14 多云 冷 正常 无风 适合
    15 多云 适中 高 无风 不适合
    16 雨 适中 正常 无风 不适合
    17 多云 冷 正常 中风 适合
    18 雨 适中 正常 中风 不适合
    19 多云 适中 正常 中风 适合
    20 多云 适中 正常 大风 适合
    21 晴 适中 高 大风 适合
    22 晴 适中 高 中风 适合
    23 晴 热 正常 无风 适合
    24 雨 适中 高 大风 不适合
    GAIN天气熵=7/24(-7/7LOG2(7/7)-0)+9/24(4/9LOG2(4/9)+5/9LOG2(5/9))+8/24(1/8LOG2(1/8)+7/8LOG2(7/8)=0.5529
    同理:GAIN 气温熵=0.9173 湿度熵=0.9184 风熵=1 所以选最小的天气建树最后递归生成树:
                      天气晴                多云                        雨适合)            湿度                       气温
                   高      正常     
              ( 适合)    (不适合)        热       冷      适中
                                                   (不适合)(不适合)
                                            风
                                      大风      无风
                                   (适合)   ( 不适合)
      

  3.   

    确实够复杂的,呵呵,那位有工夫帮他看看,
    不过我觉得既然是个分类问题为什么不用SVM啊,
    只是个建议,你用现在的24种情况进行“学习”,然后分类啊