分治的思想构造决策树----其实就是C4.8(j48)的原理补充

Constructing Decision Tree:决策树可以通过递归来构建,首先选择一个属性作为根节点,并对该属性的每一个值新建一个分支。这样就把案例集合分割成子集,属性的每个值一个子集。如此,就可以对每个分支进行递归重复操作。直到任何时候节点上的所有实例具有相同的分类,才停止树的扩张。

     问题a:如何决定先选择哪个属性分类?  Which is the best choice?(以weather数据为例)

 

解决方法:  1.所有的yes和no类都在叶子上显示,如果每一片叶子都有唯一的类 yes或者no,那么就不用再分割啦。   因为我们找到了最小树,

                  如果我们对于每一个节点纯度有评估,我们可以选择那个产生最纯的子节点的属性

                  2.上图A中每个节点的信息(熵)值如下图,Info([2,3])表示的是Sunny中两个yes,三个no中,要确定一个新的实例是yes类还是no类,所需要的总的信息。

                             信息熵:表示为了精确的确定一个新的实例是yes类还是no类,所需要的总的信息。

                          

                    计算分割之后的总的信息熵,包括各个新建的分支。

                      Info(OutLook)after=5/14*Info([2,3])+4/14*Info([4,0])+5/14*Info([3,2])=0.693bits

                      分割之前OutLook的信息熵为

                        Info(OutLook)=Info([9,5])=0.940bits

                      信息增量

                               Gain(OutLook)=Info(OutLook)-Info(OutLook)after=0.247bits

                          

 

               3.从上面图可知outLook属性先分裂,分裂后的图如下:

                                        

             4.一直重复上述步骤,最后得到的决策树为

                                           

问题b:多分支属性问题?如果在某个属性中,数据集中的每一个实例都有不同的值,这将产生Overfitting问题?

          问题描述     1.为天气数据加一个IDCode属性(数据集中的每一个实例都有不同的值),最后产生的决策树如下

                             

                            

                        2.可以计算出分裂后的信息熵变成0啦。而最初信息熵为Info([9,5])=0.940bits,最终增益信息绝对是最大的。

   问题解决方法:为解决上面问题,我们引入了固有信息熵的概念,就是指不考虑类时的信息熵。

                                   选择分裂属性时是用Gain ratio=Gain/Split info (增益比例=原增益信息/固有信息熵)

                            引入此概念后,上述的固有信息熵为            

 

    

                   从上面图片可知按照Gain ratio(增益比例)来选,还是先分裂OutLook属性 。  0.156>0.152>0.049>0.029

 

 

 

 

 

 

                   

 

 

 

       

posted @ 2017-07-27 16:48  张秀杰  阅读(711)  评论(0编辑  收藏  举报