分类算法精华理解

来源:互联网 发布:苹果医药软件 编辑:程序博客网 时间:2024/05/16 14:39

一、决策树Decision Tree

1.1 抛开那些复杂的理论,首先需要牢记的就是信息熵公式:Information entropy = -plog2(p).

1.2 ID3算法的信息增益

1.2.1  利用决策列(就是训练集中已经知道的类别那一列来计算整体信息熵,以两个类别为例C1, C2)对所有数据进行划分。假如n个训练集中有n1个子集属于同类,另外n2属于另一个类。那么p1=n1/n  p2=n2/n。两个类别的信息熵之和就是整体信息量。

         info(training_set) = -p1*log2(p1) + (-p2*log2(p2)) = -p1*log2(p1) -p2*log2(p2)

1.2.2  然后就是针对训练集中的每个属性计算其带来的信息量,可以分为两步。第一步,查看该属性列中的值属于多少类别。用SQL语言来理解就是 SELECT DISTINCT Atrr FROM training_set。如果有三个不同的值a1 a2 a3, 这里同样用这三个符号来表示三个子类的数目。(从我的经验来看,很多人都是因为一个算法介绍中使用符号太多而知难而退的)。

        这一步可以产生一个大致的公式框架:info_Atrr(training_set) =  (a1/n) *(a1带来的信息量) + (a2/n)*(a2带来的信息量) + (a3/n) * (a3带来的信息量)

第二步就是考虑不同子类的数据集中,由决策列对子集进行划分产生的信息量。最开始求整体信息量的时候,没有考虑其他属性的感受,直接用决策列去划分n个数据集,求信息熵总量。

        从树结构去看,一开始就是以决策列为根节点,产生了一个二叉树。但用计算属性的信息量时,就是以各属性为根结点,然后再以决策列为子结点进行分支,得到的是一个三层分支数。



这样的话,第二步之后的公式就呼之欲出啦。

                     Info_Atrr(training_set) = (a1/n)*[-p11*log2(p11) -p12*log2(p12)]  + (a2/n)*[-p21*log2(p21) -p22*log2(p22)]  + (a3/n)*[-p31*log2(p31) -p32*log2(p32)] 

最好求该属性的信息增益 gain = info(training_set) - info_Atrr(training_set)


1.3 C4.5的信息增益率

1.3.1 使用信息增益的话其实是有一个缺点,那就是它偏向于具有大量值的属性。信息熵指的是信息的不纯度,如果某一个属性的不同值越多,划分的每个类的子集数目就少,所谓林子大了什么鸟都有,但是林子小了,多样化就少了,信息就越纯。这样该列的信息量少,导致信息增益很大。被选中的概率就越大。

1.3.2 信息增益率就使用“信息分裂”来取代信息熵,只用上面第一个公式就可以了。

     p1=-(a1/n)*log2(a1/n)  p2=-(a2/n)*log2(a2/n)  p3=-(a3/n)*log2(a3/n)

       C4.5的框架就是求了下用属性列进行划分得到的信息熵之和: splitInfo_Atrr(training_set) =  p1 + p2 + p3

      这样就很容易理解,我用哪个属性去当根结点,那么概率就是每个子类的数目/n。然后求和。

最终的信息增益率就是 gain_Atrr = info(training_set) / split_Atrr(training_set)


1.3.2 我导师读研的时候实现了一个Fast C4.5算法,接下来将对这个算法进行详细介绍,并挣钱通过Map/Reduce来改写。






0 0
原创粉丝点击