机器学习之决策树

一、信息熵

    1、比特化(Bits)

        当随机变量的概率为等概率时,可以用两个比特位来表示一个随机变量。

                E.g. P(X=A)=P(X=B)=P(X=C)=P(X=D)=1/4

                E(X)=(1/4*2) * 4=-log2(1/4) *(1/4) * 4=2

                

        当随机变量中每个变量出现的概率值不一样时,出现概率大的变量用较少的比特位来表示;出现概率较小的变量用较多的比特位来表示。

                E.g. P(X=A)=1/2, P(X=B)=1/4, P(X=C)=P(X=D)=1/8  

                E(X)=1/2*1+1/4*2+1/8*3+1/8*3

                      =-log2(1/2)*(1/2)-log2(1/4)*(1/4)-log2(1/8) *(1/8)*2=7/4

                 

        设随机变量X具有m个可能取值,分别为V1V2..., Vm,且各个值出现的概率分别为p1p2..., pm,那么对这组信息序列来说,可以用变量的期望来表示每个变量需要用多少个比特位来描述信息:

                

    2、信息熵(information entropy)

        信息量:指的是一个事件所蕴含的信息,如果一个事件发生的概率越大,就认为该事件所含的信息量就越少。发生概率为1的事件/确定发生的事件所携带的信息量为0(没有消除任何不确定性)。

        信息熵:描述系统信息量的不确定度,信息熵可以作为一个系统复杂程度的度量,如果系统越复杂、越无序、出现不同情况的种类越多,那么它的信息熵就是比较大的。非均匀分布比均匀分布的熵要小,因此比特化时可以用更短的编码来描述概率大的事件,用更长的编码来描述概率小的事件,这样总的编码长度就可以更短。

        在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性。若信源符号有n种取值,对应不同的概率,且各种符号的出现彼此独立。这时,信源的平均不确定性应当为单个符号不确定性-logPi的期望。信息量满足低概率事件对应于高的信息量,以2为底数是遵循信息论编码问题的普遍传统。

        因此随机变量X的信息熵可表示为:

                    ——pi 是选择该分类的概率。H值越小,则说明X的纯度就越高。

        信息熵的性质:

            (1)单调性

                    发生概率越高的事件,其所携带的信息熵就越低

            (2)非负性

                    信息熵不能为负

            (3)累加性

                    多个独立随机事件同时发生,总不确定性的度量可以表示为各个事件不确定性的度量的和

                            p(A,B)=p(A)p(B) H(A,B)=H(A)+H(B)

        Shannon从数学上证明了满足上面3个条件的随机变量不确定性度量函数具有唯一的形式,就是信息熵公式。

 

    3、条件熵

        给定条件X的情况下(X中每个的值都要取到),另一个随机变量Y的条件概率分布的熵对X的期望。

        条件熵相当于联合熵H(X,Y)减去事件X单独发生的熵,即在事件X发生的前提下,Y发生所带来的‘新’的熵。

                机器学习之决策树_第1张图片   

        互信息、条件熵与联合熵的关系:

                机器学习之决策树_第2张图片

        H(X,Y)为联合熵(joint entropy),I(X;Y)为互信息(信息增益) 

                    

                       

    4、交叉熵

        用于度量两个概率分布间的差异性信息,在信息论中,交叉熵是表示两个概率分布p(x)、q(x),其中p(x)表示真实分布,q(x)表示非真实分布,在相同的一组事件中,用非真实分布q来表示某个事件发生所需要的平均比特数。

        即如果用真实分布p(x)来衡量识别一个样本所需要的编码长度的期望为:

                

        如果用非真实分布q(x)来表示来自真实分布p(x)的平均编码长度,则为:

                ——交叉熵

        交叉熵可以用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统不确定性所需要付出的努力的大小。

 

二、决策树模型

        决策树(Decision Tree)是一种常用的有监督的分类算法,是在已知各种情况发生概率的基础上,通过构建决策树进行分析的一种方式,是一种直观的应用概率分析的一种图解法。决策树只需一次构建就可以反复使用,计算复杂度不高,输出结果易于理解,健壮性强,但有可能会产生过拟合问题。

        一般一棵决策树包含一个根节点、若干个内部节点和若干个叶结点,叶节点对应于决策结果,其他每个几点则对应于一个属性测试,每个分支表示一个测试输出,根节点包含样本全集。

        决策树的决策过程是从根节点开始,递归测试待分裂项中对应的特征,直到叶子节点,路径对应了一个判定测试序列。根据特征属性的类型不同,在构建决策树时采取不同的方式:

            特征是离散值,且不要求生成二叉决策树,此时一个特征就是一个分支;

            特征是离散值,且要求生成二叉树,按照特征属于此子集和不属于此子集分成两个分支。

            特征是连续值,可以确定一个值作为分裂点split_point,按照大于分裂点和小于等于分裂点生成两个分支。

 

        决策树分为分类树和回归树两类,前者用于分类标签值,后者用于预测连续值,常用算法有ID3、C4.5 、CART等。

            分类树采用信息增益、信息增益率、基尼不纯度来评价数的效果,预测类别一般为叶子结点中概率最大的类别。

            在回归树中,叶子结点的预测值一般为叶子节点中所有值的均值来作为当前叶子节点的预测值,一般使用均方差MSE作为树的评价指标。

 

        决策树分割特征选择

            决策树算法是一种‘贪心’算法策略,只考虑在当前数据特征情况下最好的分割方式,且不能进行回溯操作。

            对整体的数据集而言,按照所有的特征进行划分操作,对所有划分操作的结果集的‘纯度’进行比较;

            选择纯度越高的特征作为当前需要分割的数据集进行分割操作,持续这样的操作直到达到停止条件。

 

        决策树算法的停止条件

            决策树的构建过程是一个递归的过程,所以必须给定停止条件,否则过程将不会停止,一般可以设置以下停止条件:

                1)大于设置的决策树的最大深度max_depth

                2)小于设置的内部节点再划分所需最小样本数

                3)小于设置的叶节点最少样本数

                4)大于设置的最大叶节点数

                5)小于设置的节点划分不纯度(或当前节点包含的样本属于同一类别)

 

三、决策树量化纯度与模型评估

        可以使用三种评判标准对决策树进行纯度度量,分别是Gini不纯度、熵以及分类误差。

            ①Gini impurity:

            是指将来自集合中的某种结果随机应用在集合中,某一数据项的预期误差率,是对于混杂程度的预测的一种度量方式;

            即从一个数据集中随机选取子项,度量其被错误分类到其它组里的概率。

                    

            ②Information entropy:

                   

            ③Classification error

                    

        这三个公式值越大,表示数据越不纯;反之,值越小表示越纯。这三种公式效果差不多,一般情况下使用熵公式。

        三种纯度度量方式的对比

                 机器学习之决策树_第3张图片

 

        信息增益

            计算各个特征的量化纯度值后,根据信息增益选择当前数据集的分割特征;

            如果信息增益值越大,表示在该特征上损失的纯度越大,那么该特征就越应该在决策树的上层,计算公式为:

                    Gain=Δ=H(D)-H(D|A)

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

 

        效果评估

            与一般的分类算法一样,采用混淆矩阵计算准确率、召回率、精确率、R2值等指标;

            也可以采用叶子结点的纯度值总和来评估算法的效果,值越小效果越好。

                    

 

四、决策树生成算法

    1、ID3算法

        决策树的经典构造算法,使用信息熵按照最大信息增益原则来进行构建,每次迭代选择信息增益最大的特征作为分割特征,一旦按某个特征分割后,该特征在之后的算法执行中将不再起作用。ID3决策树可以有多个分支,但不能处理特征值为连续的情况。

        假设当前样本集合D中第i类样本所占的比例为pik=1,2,...|γ|),则D的信息熵为:

                

        假设离散特征a有V个可能的取值{a1,a2,...,aV},若使用a对样本集D进行划分,则会产生V个分支节点,其中第v个分支节点包含了D中所有在特征a上取值为av的样本,记为Dv

                

        ID3算法的优缺点

            优点:决策树构建速度快,实现简单。

            缺点:计算依赖于特征数目较多的特征,而特征值最多的属性并不一定最优;ID3不是递增算法;生成的是单变量决策树,对于特征之间的关系不会考虑;抗噪性差;只适合小规模的数据集,需要将数据放入内存中。

 

    2、C4.5算法

        C4.5算法在ID3算法的基础上进行改进,使用信息增益率作为选择分支的准则,在决策树的构造过程中会进行剪枝操作进行优化,可以处理特征为连续值的问题。

                机器学习之决策树_第4张图片

        其中IV(a)为a的固有值(intrinsic value),a的可能取值数目越多,则IV(a)的值通常会越大。

        周志华《机器学习》中提到,增益率准则对可取值数目较少的特征有所偏好,因此C4.5算法并不是直接选择增益率最大的候选划分特征,而是使用了一个启发式方法:先从候选划分特征中找出信息增益高于平均水平的特征,再从中选择增益率最高的特征

        C4.5算法的优缺点

            优点:产生的规则易于理解,模型准确率较高,实现简单。

            缺点:对数据集需要进行多次顺序扫描和排序,效率较低;只适合小规模数据集,需要将数据放入内存中。

 

    3、CART算法(Classification And Regression Tree)

        分类回归树是二叉树,采用二元切分法每次将数据切成两份,分别进入左子树、右子树,划分的依据是Gini index,可以用于分类和回归两类问题。

                机器学习之决策树_第5张图片

        在候选特征中,选择使得划分后基尼指数最小的特征作为最优划分特征,即:

                 

 

    ID3、C4.5、CART三种算法总结

        ID3和C4.5算法只适用于处理小规模的数据集(数据可以全部放入内存中)

        ID3和C4.5算法都是单变量决策树

        当特征取值较多时,使用C4.5而不是ID3算法

        三种算法的区别在于对决策树的评价标准不同

        ID3和C4.5算法构建的是多叉树,CART算法构建的是二叉树

机器学习之决策树_第6张图片

 

 五、决策树优化

    剪枝优化(pruning)

        修剪决策树过多的节点,降低决策树的复杂度,以避免过拟合问题。

    随机森林(random forest)

        利用训练数据产生多棵决策树,形成一个森林;使用这个森林对数据进行预测,选取最多的结果作为预测结果。

 

    1、剪枝分类

        预剪枝(prepruning):通过修改停止条件来及早地停止决策树的生长,结果是决策树一般比较小,不能给出数据总体的概况,容易引起欠拟合问题。

        后剪枝(post-pruning): 将数据集分为测试集和训练集,构建足够大、足够复杂的决策树,然后从上到下遍历叶子节点,用测试集判断将这些叶子节点合并是否能降低测试误差,是的话就合并。后剪枝的主要问题是计算效率较低。

        一般地,为了寻求最佳模型可以同时使用两种剪枝技术。

 

    2、后剪枝步骤:
        对于给定的决策树T0

        计算所有内部非叶子节点的剪枝系数;

        查找最小剪枝系数的节点,将其子节点进行删除操作,进行剪枝得到决策树Ti;如果存在多个最小剪枝系数节点,选择包含数据项最多的节点进行剪枝操作;

        重复上述操作,直到产生的剪枝决策树Tk只有一个节点;

        得到决策树T0,T1,T2,...,Tk

        使用测试集进行交叉验证,从子树序列中选择最优子树Tα

 

    3、决策树剪枝损失函数及剪枝系数

        完全树的损失函数

                

        添加剪枝系数α,剪枝后的损失函数为:

                Cα(T)=C(T)+α|T|

        其中,T为任意子树,|T|为子树的叶子节点个数,α≥0为参数,C(T)为对训练数据的预测误差。

        对于固定的α,一定存在使损失函数Cα(T)最小的子树Tα,当α大的时候,Tα偏小,当α小的时候,Tα偏大;当α=0时,完全树是最优的,当α→∞时,根节点的树是最优的。

        从完全树T0开始剪枝,对它的任意内部节点t,以t为单节点树的损失函数为:

                Cα(t)=C(t)+α

        以t为根节点的子树|Tt|的损失函数为:

                Cα(Tt)=C(Tt)+α|Tt|

        当α=0以及α充分小时,有不等式:

                Cα(Tt) ≤ Cα(t)

        当α增大时,在某一值有:

                Cα(Tt) = Cα(t)         

                此时Ttt有相同的损失函数,而t的节点更少,因此t比Tt更可取,对Tt进行剪枝。

        当α再增大时,不等式反向。

 

六、决策树可视化化

        决策树可视化可以方便我们直观的观察所构建的树模型,可以使用matplotlib编写决策树可视化函数(参见《机器学习实战》),也可以方便的通过graphviz服务进行可视化,安装步骤如下:

    1、安装grapviz服务

            下载安装包(msi安装包):http://www.graphviz.org

            执行下载好的安装包(双击msi安装包);

            将graphviz的根目录下的bin文件夹路径添加到PATH环境变量中。

    2、安装Python的graphviz插件:pip/conda install graphviz

    3、安装Python的pydotplus插件:pip/conda install pydotplus


你可能感兴趣的:(机器学习)