大白话5分钟带你走进人工智能-第二十四节决策树系列之分裂流程和Gini系数评估(3)

 第二十四节决策树系列之分裂流程和Gini系数评估(3)
算法

上一节中咱们讲解了决策树的数学表达形式,本节的话咱们讲解决策树的分裂流程以及分裂条件的评估。咱们基于决策树的递归表达式上:app

                                    $G(\mathbf{x})=\sum_{c=1}^{C}[b(\mathbf{x})=c] \cdot G_{c}(\mathbf{x})$

就能够知道训练一颗决策树须要哪些条件?台湾大学林轩田教授给咱们一个总结。工具

       咱们翻译一下上面的话,if termination critertion met  return base hyponthesi gt(x)。若是咱们遇到终止条件,就返回基础的gt(x)的表达式。else 一、learn branching criteria b(x) ,学习bx的表达式。 二、将原始的数据集分红C份,将数据集分到各个子树里面。三、创建子树的Gc表达式。四、返回最后表达结果。

       因此决策树从迭代考虑分裂的话咱们须要4个条件: 一、分支个数(number of branches)即每次分裂要分红几支。 二、分支条件(branching criteria),当前分支判断的条件。 三、终止条件(termination criteria),不可能一直分下去,要有个终止条件。 四、基本算法(base hypothesis),叶子结点到底如何表达。四个问题搞明白了,如何获得一棵决策树咱们就明白了。学习

咱们的目标是经过大量的数据生成一棵很是好的树,用这棵树来预测新来的数据。好就是必定要能反映客观规律,在大数定理的理论支持下,若是收集的训练集足够庞大,训练集就必定程度上可以反映客观规律。而后咱们用生成好的树来预测新来的数据,举个例子来解释下如何生成决策树的4个条件?假如训练集上有100条数据,首先全部的数据都在根节点里面出现。咱们要给它分到各个子树里面,那么每次分裂要分红几份?这是第一个问题;假如分红两份的状况下,以什么条件来分份?什么分裂条件最好,必定是经过实际的计算,遍历全部的分裂条件,获得某种分裂条件下某种评分形式最高,就用什么做为分裂条件。因此第二个问题是以什么条件来分份。但何时中止分裂呢?数据不断分裂的递归过程,每一次分裂,尽量让类别同样的数据在树的一边,当树的叶子节点的数据都是一类的时候,则中止分类(if else语句)。这是第三个问题。分好的叶子节点里有yes和no两种表达,当新数据过来落到这些叶子结点上究竟是yes仍是no?这是第四个问题。大数据

假如如今有30个正例30个负例如图,哪一种分法更好?为何不直接给它30正例,30负例分好就能够?spa

由于分裂条件不能用到y上的信息,若是训练的时候把y用了,可是预测的时候没有y,拿不到y的数据。因此分裂只能让它经过x来分。既然只能经过x来分,无疑第二种更好,由于第二个里面每个节点里面,不管是左边包含大部分的正例的节点仍是右边包含大部分负例的节点,夹杂其余类别的都不多,因此分出来的纯度很高。由于它能够经过更少的分裂次数,达到一个比较好的效果, 因此这就引出了咱们但愿选择一个分裂条件,要用这种分裂条件分裂出来的两个节点,各自内部的纯度越高越好。 那么咱们就须要一个量化评估的方式来评估什么是纯度?这是咱们生成一颗决策树须要解决的其中的一个问题。

因此接下来咱们的文章会围绕着如下生成一颗决策树的几点考虑进行展开。翻译

一、第一个将原始数据集筛选.分类成子数据集的分类依据? 也就是须要计算分类后的纯度。3d

二、第二个对生成的子数据集不断分类 直到中止。那何时会中止,也就是中止的条件是什么?code

三、第三个只要中止了以后,你如今获得的是一个包含着若干数据点的一个节点,可是节点究竟是Y仍是N,或者多分类状况的时候是1仍是2仍是3仍是4,也须要经过落在最终叶子节点上的训练集上的数据的共性来表明这个节点。假如这个节点分出来的全都是正例,那么未来也得说,它判断出来为正例。如何定性的判断它的共性?blog

本节的话咱们讲解第一个问题,纯度的量化方式,即咱们分裂条件的计算标准。经常使用的纯度的计算方式有Gini系数,信息增益,信息增益率。而这三种计算方式所生成的树分别对应着,CART树,ID3树,C4.5树。对于CART树和ID3这两个树来说,它的默认分两支,永远只分两支,它是一个二叉树。对C4.5来讲,它能够分若干个节点。CART意思是Classification and Regression Trees,分类与回归树, 既能够处理分类问题,又能够处理回归问题。

咱们说下第一种定量的计算纯度的方式,基尼系数。公式以下:

                                                            $\operatorname{Gini}(D)=1-\sum_{i=1}^{n} p_{i}^{2}$

          pi表明各个类别的几率,对于离散的状况来讲,一般咱们认为在数据量足够大的状况下,频率能够近似等于几率。假设有10000条数据,其中有2000条是正例,8000条是负例,在不知道任何信息的状况下,拿一条新的数据,就判断属于正例的几率是多少,只有估计20%是最合理的。有可能估计错,但只有这么估计是最合理的。由于几率永远在小数据集上没有意义,拿了一条数据,说它几率是20%正例80%负例没有任何意义,由于有可能估计错;但一下拿来10万条数据,它最终在统计上会趋近于有20%的数据变成正例,80%数据变成负例。几率在大数据量上才有它的意义。咱们这里经过一个节点内各个label样本的占比(即频率)近似这里的各个类别的pi几率,因此从这里能看出决策树是有监督学习。由于是经过样本的label,获得各个类别的比例。因此训练的时候有人说用到y,是用在计算基尼系数上了,而不是用来做为分裂条件的。

         i表明着当前节点包含几种可能性,对分类来讲,也就是全部的类别占比。

咱们所谓统计纯度就是统计某一个节点内部的纯度。举个例子说明下,假如一个节点有2000个正例,8000个负例,也就是正负0.8:0.2的比例,在这种状况下,p(i)有几种可能?两种。一个是p(Y)即0.2,一个是p(N)即0.8。根据公式,这时这个节点内部的基尼系数是1-(0.2^2+0.8^2)。假如一个节点内所有是正例的话,正负比例为1:0,此时基尼系数等于0;最纯不过。假如比例是0.5:0.5 ,此时基尼系数等于0.5。因此咱们能够总结出基尼系数用来评估纯度时,数值 越低表明着越纯。

所以如今就有一个工具,能够定性的去计算,这个节点里边纯仍是不纯,能够必定程度上经过基尼系数来判断。这是判断一个节点纯仍是不纯,而每次的分裂不只仅分列出一个节点,怎么评估此次分裂的好坏呢?好比下面例子:

                 从D分到D1,D2。怎么综合的看这一次分裂到底好很差呢?用D1或者D2,仍是二者都要用。其实是把二者结合起来再实现加权平均。公式以下:

                假如原始数据有100条,分到左节点94条,右节点6条。假设左边基尼系数是0.5,右边基尼系数是0。

             这次的分裂效果能直接说(0.5+0)/2吗,其实是不公平的。由于0.5是说明这94条数据分的纯度,而0是这6条数据分的纯度,说明这6条很纯。因此咱们须要把左节点和右节点个数的占比做为权重加权平均做为本次分裂的评判标准。有了上述评判标准,咱们再回到咱们所说的对于一个数据集的分裂过程。对于一个数据集来讲,咱们须要遍历全部的维度去分裂,怎么遍历每一个维度?假设数据集有6个维度以下:

 

假如这里面维度的数据有两种状况,连续性数据和离散型数据,那么每一个维度的分裂条件的取值该怎么取呢?好比对于第一个维度x1有10000条数据,连续性数据,咱们要作的首先是对这10000个数据进行排序,从大到小排列出来。而后依次的再每两个数据中间取中位数做为分裂数值计算基尼得分。好比数据状况是1.88m,1.78m,1.68m,咱们就要取(1.88+1.78)/2=1.83 ,而后大于1.83的放在左边,小于1.83的放在右边,计算下此时的基尼得分。而后再取(1.78+1.68)/2=1.73当作x1维度的分列条件,大于1.73的放在左边,小于1.73的放在右边,计算下此时基尼得分。假若有10000条数据,就会有9999个这种中位数,而后分别计算出它们的基尼系数。保留最小的那个基尼系数对应的数值就表明着用x1维度去分最好的分裂结果,假如此时经过x1计算的基尼系数是0.1。而后咱们再遍历x2,假如x2,是离散性数据呢?咱们该怎么选择x2中的数值进行分裂呢?对于连续型数据咱们能够进行排序,可是对于离散性数据,咱们不能排序,实际上就变成排列组合了,假若有100个类别,第1个类别和剩下99个类别是一种分法,第1和第2个类别做为一个节点和剩下98个又是一种分法,第1和第3个做为一个节点和剩下98个又是一种分法,这样的状况太多了。因此咱们通常不这样作,既然Cart树是二分类数据,只能分两个节点,因此咱们就干脆给它分两类,第一种分裂状况是等于1类别和不等于1类别,第二种分裂状况是等于2类别和不等于2类别,而后依次遍历全部这种状况计算下分别的基尼系数,求最小的那一个做为x2维度下分裂条件数值,这样咱们就获得x2做为分裂维度下所求得的基尼系数。假设是0.05,此时咱们就再也不用x1这个维度分裂了。而后再依次对x3,维度进行分裂。因此咱们就是这样依次试着每个维度做为分裂条件,而后计算基尼系数,去获得最终最小的那个基尼系数所对应的维度的取值。当根节点分裂完两个子树以后,如果子节点不纯,再依次进行上述方法再分便可。

经过基尼系数来选择一个最好的分类标准,就是尝试进行若干种分裂方式,哪一种最后结果最好,纯度最高,就选哪一种,由于纯度高表明着将来子树会少分几回。 

一般一棵树要分多少层?若是不加限制的话,可能会分红几百层,对于Cart树来讲,就会有一个致命的缺陷,它是按照计算纯度来评价分裂好坏,若是不对它进行限制,让它一直分裂纯度会达到100%,最极端状况,每一个叶子节点有一个数据,总能让它分到纯度最高,至关于就是记录了一下。因此生成的树一般会人为限制它的层数,不让它太深。

下节的话咱们讲解另外两种评估纯度的计算方式。

相关文章
相关标签/搜索