决策树

决策书既可以用于分类也可以用于回归分析,本文的决策书仅针对与分类 

一、基本知识

1、什么是分类决策树?

     分类决策树模型是一种描述对实例进行分类的树形结构。由结点和有向边组成,结点分为内部结点和叶结点,内部结点表示特征,叶节点表示类,有向边则表示某一个特征的取值

2、分类决策树学习算法的过程?

(1)特征选择-即选择哪个特征用于划分空间

       特征选择的原则是什么?按照这一特征将数据集分成若干个子集,各个子集在当前条件下具有最好的分类

       例如文章最开头的那个例子,如果选择年龄这个特征,可以分为“青年”“中年”“老年”三个数据集,青年:3是2否,中年3是2否,老年4是2否;如果选择有工作这个特征,可以分为“是”和“否”两个自己,有工作:5是0否,无工作:*是*否,可以看出来,当有工作这个特征取“是”这个特征值时,类全为“是”,直观上,按照“有工作”这个特征比“年龄”这个特征划分的结果要好。

       下文将具体讲解三种特征选择准则,信息增益,信息增益率,基尼指数,三种特征选择对应三种决策树算法,分别是ID3、C4.5和CART

(2)决策树生成

       利用(1)中的准则选择分类特征,从根节点开始递归的产生决策树。即首先选取一个特征作为树的根节点,该特征将数据集划分为若干个子集,再为子集选择另一个特征继续划分,直到所有的结点都只有一个类型,即成为叶结点;如若这个过程中所有特征都用尽,有些数据集还未能够正确分类,那么选择该数据集中最多的类型作为其类型(多数表决)。

(3)树剪枝

      由于生成的决策树可能存在过拟合的问题,比如数据集中存在噪声,在生成决策树过程中也将这些数据考虑在内,使得决策树泛化能力减弱。

     决策树的剪枝往往从已生成的树上剪掉一些叶节点或叶节点以上的字数,并将其父节点或者根节点作为新的叶节点

二、特征选择

1、熵(entropy)

 (1)什么是熵?

    熵,是信息论中的一个概念,反映了随机变量的不确定性,熵越大,不确定性越大

    理论上来讲:,对数通常取以2为底或者以e为底,对应的熵的单位分别为比特、纳特

    举例来说,三个事件,A=“一个箱子,有一个白球和一个黑球,取一个球” B=“一个箱子,全是白球,取一个球” C="一个箱子,全是黑球,取一个球"

    p(A=取到白球)=0.5,p(A=取到黑球)=0.5; p(B=取到白球)=1;p(c="取到黑球")=1,可以分别算出

    取2为底,H(A)=-0.5log0.5-0.5log0.5=1   H(B)=H(C)=0,所以A的不确定性更大

    抛开理论,什么叫不确定性?就是说这件事件你不确定是不是会发生,如果p=1,就代表了这件事肯定会发生,p=0即这件事肯定不会发生,没有其他情况,那么不确定性就自然为0;再比如这件事发生的概率为0.9,不发生的概率为0.1,那便可以预测这件事更有可能发生,即不确定性还是比较低的;如果说这件事发生的概率为0.5,发生与不发生的概率是一样的,你便根本无法去预测是否会发生,即不确定性非常大

(2)什么是条件熵?

    条件熵,已知随机变量X的条件下,随机变量Y的不确定性

         

    最开始的例子,X代表年龄,x1=青年,x2=中年,x3=老年,Y代表分类,D代表数据集,Di代表子数据集

    以X=x1为例,p(X=x1)=|D1|/|D|=5/15=1/3;    H(Y|X=x1)=(-3/5*log3/5-2/5*log2/5)

    由此可以求出H(Y|X)

(3)什么是经验熵和经验条件熵?

       如果熵和条件熵中的概率是由数据估计(特别是极大似然估计)得到时,所对应的熵和条件熵分别成为经验熵和经验条件熵

2、信息增益

(1)什么是信息增益?

    特征A对训练数据集D的信息增益g(D,A),定义为数据集D的经验熵H(D)与特征A给定条件下D的经验熵H(D|A)之差,即g(D,A)=H(D)-H(D|A)

    一般的,熵与条件熵之差称为互信息,决策树学习中的信息增益等价于训练数据集中类与特征的互信息

(2)为什么选择信息增益作为一种特征选择原则?

      H(D):对数据集D进行分类的不确定性

      H(D|A):在特征A给定的条件下对数据集D进行分类的不确定性

      g(D,A)=H(D)-H(D|A):由于特征A而使得对数据集D的分类的不确定性减小的程度

      --->信息增益越大的特征,分类能力更强

(3)信息增益算法?

       计算每个特征的信息增益,选择信息增益大的特征作为分类特征

(4)信息增益有什么不足?

       倾向于选择具有大量值的属性

       假设存在这样一个极端属性A,使得将每条数据都划分成不同的子集,比如ID信息,此时的H(D|A=ai)=-1/1log(1/1)=0---->-->H(D|A)=1/n*0+1/n*0...=0,H(D)-D(D|A)此时的信息增益最大,但是显然用这个属性进行分类没有意义,所以在某些情况下信息增益可能并不理想,由此引入了一种更好的方法,信息增益率

3、信息增益率(gain radio)

(1)什么是信息增益率?

       特征A的信息增益与数据集D的经验熵之比 gR(D,A)=g(D,A)/H(A)(《统计学习方法》关于信息增益比貌似有错误)

(2)为什么选择信息增益率?

       克服了信息增益算法具有倾向于大量值的属性的问题

      g(D,A)--特征A的信息增益

      H(A)---在数据集D中,A的熵,在这个公式里被叫做分裂信息度量,分裂信息用来衡量属性分裂数据的广度和均匀,引用一张图片

      

(3)信息增益率算法?

       计算每个特征的信息增益率,选择信息增益率大的特征作为分类特征

(4)信息增益率有什么不足

       当某一个子数据集Di过大,比如一种极端情况,只有一个子集,那么此时的H(A)->0,此时的信息增益率最大,显然这是对信息增益的过分补偿,倾向选择那些“具有小量值”的属性,这种情况的信息增益其实也是最小的

       可以增加约束,即要求选取的特征的信息增益必须较大,至少大过平均增益

4、基尼指数

   (1)什么是基尼指数?

        同熵相似,基尼指数也可以表示数据集的不确定性,基尼指数越大,不确定性越大

        假设有K个类,第k类的概率为pk,则概率分布的基尼指数为:

         (展开即可得,因为p1+p2+.....+pk=1)

        对于给定的数据集D,其基尼指数为:

        

(2)基于特征A的基尼指数

       与上述信息增益、信息增益率不同,基尼指数仅考虑每个特征的二元划分

       假如特征A具有v个不同的属性值(a1,a2,...av),基于A的二元划分存在2v-2种不用的划分(除去幂集和空集)

       如果A的一个二元划分点a,将D划分为D1和D2,则给定该划分,D的基尼指数为:

       

       对于特征A的所有的二元划分,计算D的基尼指数,选择使得基尼指数最小的那个点作为A的最优切分点

(3)基尼指数算法?

      对于所有特征,利用(2)中的方法计算基尼指数和最优切分点,在所有特征以及他们的最优切分点中,选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点 

(4)为什么基尼指数可以作为划分原则?

       基尼指数Gini(D):反映数据集的不确定性

       基尼指数Gini(D,A):反应在特征A的条件下,数据集的不确定性

       我们分类的过程,也就是使得降低不确定性(也可以称之为不纯度)的过程,自然要选择基尼指数最小的作为分类特征,这一点和信息增益类似,选择信息增益大的特征,即选择对于不确定性降低最多的特征

三、决策树生成

1、ID3、C4.5

输入:数据集D,特征集A,阈值ε 

输出:决策树T

(1)用数据集D构建ROOt结点

(2)如果D中的数据同属一类,则T为单结点树,将该类作为该结点的类标记,返回T

(3)如果D中的特征集A为空,则T为单结点树,将D中最多的类作为该结点的类标记,返回T

(4)根据相应的“特征选择算法”选择特征

   (4.1)如果该特征的‘信息增益’|‘信息增益率’小于阈值ε(对于不确定性的减少程度特别小,即再分下去也没有什么意义了),则置为单结点,并将数据集中最大的类作为该结点的类标记,返回T

   (4.2)否则,根据该特征的每个特征值,划分不同的数据子集,构建子结点对于每个子结点递归调用(1)-(4)

2、CART

(1)(2)(3)同ID3、C4.5

(4)计算基尼指数,选择使得基尼指数最小的特征及其对应的最优切分点

   (4.1)如果该特征的基尼指数小于阈值ε(基尼指数降低到一定范围,不确定性非常第,即样本基本属于同一类),则置为单结点,并将数据集中最大的类作为该结点的类标记,返回T

   (4.2)否则,根据该特征及其最优切分点,划分2个不同的数据子集,构建子结点对于每个子结点递归调用(1)-(4)

四、剪枝

1、为什么要剪枝?

在决策树创建过程中,由于数据中的噪声或者离群点,许多分枝反应的是训练数据中的异常,通过剪枝来处理这种过拟合问题

2、剪枝方法?

(1)前剪枝:提前停止树的创建,一旦停止,当前结点就成为叶结点,不再继续划分,选择最多的类作为该结点的类,上述“决策树的生成”中设置的阈值,便起到了前剪枝的功能,但是选取一个恰当的阈值非常困难,如果阈值过高,导致树过分简化;如果阈值过低,又起不到太好的剪枝作用

(2)后剪枝:树创建完成后,剪去子树

3、C4.5中的悲观剪枝

4、CART中的代价复杂度剪枝

 

posted @ 2014-12-19 12:24  李闹闹童鞋  阅读(812)  评论(0编辑  收藏  举报