决策树

   

这里会简要说明什么是决策树.

   

1.1.分类

   

每个节点按照条件的处理.

   

1.2.评分

   

可以按照某些标准来进行评分.例如按照相应的概率,超过50%的给予1,小于的给0.而只有对于是1的节点其子叶才有资格继承1.不过这样可能会忽略掉很多重要的信息.

   

评分,为的是想知道实际的可能性.例如只知道在某节点下a的可能性比b高,但是高多少,这里就需要评分的概念.

   

如果一个响应的先前概率是已知的,通过抽样数据建立的树结构产生的得分可以用来计算响应概率.也就是说这个模型能够适用于具有反映真实总体响应分布的预分类数据.这种方法成为逆向适应(backfitting).用树叶节点处的分类比例来代表从相似总体中抽取的一条属于该分支的概率.

   

之所以转化为概率是因为对于总体,一个属性或者数据的存在概率会更加代表一个总体的属性.比如,对于某个数据,可能单个看来很大,然而对于样本总体来说可能只是占据很小一部分.这时候,概率更有说服力.

   

1.3.估计

   

对于数值型目标而建立的决策树,成为回归树(regression tree).树的每一次拆分,为的是降低节点目标变量数值的方差(variance),而不是增加分类变量的纯度(purity).(当然,如果理解为一种属性的话,也可以说是增加变量的纯度)

   

1.4.树生长的姿态

   

二元树(binary tree)的每个节点都只有两条分支.有的也允许一个节点有多个分支,不过,每棵树的本质还是二元树.就算一个节点上可有有多个分支,但是每个分支的判定还是一次二元节点的判定.

   

比如说,对于一个(1,10)区间的划分,要划分成(1,3) (3,7) (7,10) 首先也要先划分成(1,3) (3,7) 当然,第一步怎样划分也是看纯度的,然后再进行第二次划分.

   

那,决策树是如何成长的呢?

   

2.1.发现拆分

   

所有情形的目标变量都是已知的.通过每个节点按照每个输入,经过一次次的拆分之后可以建立树.因此找到那些可以得到最佳拆分的条件(输入的条件往往不是单一的)比较重要.最佳拆分可以定义为:能够把记录很好地分割为不同组,使每个群里的单个类成为主导.拆分的度量,可以用纯度(purity)来描述.

   

当然,期望的好的拆分,两个子节点的纯度都是比较高的.如果其中一个很好(比如在一群动物里面抽取了两只猫)而另一个很低(取出来两只猫之后还是有很多猫猫狗狗)的话,意义还是不大的.

   

建立树的算法是穷举算法.每次纳入新的输入变量并测定该变量建议每个拆分所产生的纯度的增加值,在尝试输入所有变量之后,产生最佳划分的被用于初始划分,生成两个或者更多的节点.如果不可能再分(记录太少)或者没有能够将纯度改进,拆分完毕,成为一个叶节点.否则,继续重复上述步骤,用递归算法(recursive algorithm)的思想.

   

拆分,是针对目标变量的,而不是输入变量.对于分类目标变量,拆分的不论是数值型(方差归约或者F测试)还是分类型(Gini,信息增益或者卡方检验)都适用(注意,方差归约或者F测试也适用于分类型的).

   

1.数值型输入变量拆分

   

通常判定条件是" X < N "的类型,每次的拆分引起纯度的增加.为了提高效率,一些拆分算法实际上没有评估每个值,而是评估一些样本.

   

数值型输入的唯一用途是把他们数值和拆分点进行比较,并没有(像神经网络那样)与权重相乘或者加起来得到另外重要的数值.因此,决策树对于数值变量的离群值(outlier)或者倾斜分布(skewed distribution)不敏感.因为决策树使用的是这些数值变量的等级,并没有关心到数值的自己.

   

2.分类型输入变量拆分

   

想法比较简单,多一条路就多一条分支,不过如果完全都这样实行,会比较繁荣.

   

更多的方法,会是在单独分类的时候,合并类似结果.如果两个输入变量产生的输出分布差别不明显,就合并,这时候,需要用的检验工具就是卡方检验.

   

3.缺失值的拆分

   

有时候缺失值是带有预言价值的,可以替换为一个新的分支,而不是筛选掉.遇到空值的时候可以跳过,到下一个输入的拆分(保留了这一块的树枝)

   

2.2.生成完全树

   

经过不断的递归,会生成一棵树.由根节点开始拆分,后面对于每个子节点都会用类似的方式拆分.所有输入又被重新看做候选拆分器,就算已经拆分过也好,都会继续这样被看做拆分器.只有一个值的属性输入不会被拆分,因为根本不可以拆分.在靠近根部做过拆分器的输入随着拆分的增加可能很快就成为单一的值(或者属性),这样对于每个剩下的输入的最好拆分也就慢慢浮现了(因为越来越细).当发现拆分没有给节点的纯度带来显著的增加,或者节点记录的数目达到某一预设的下限,又或者树的深度到了预设,那么分支就要被放弃,该节点就成为名符其实的叶节点.

   

对于决策树,在发觉规则(尤其是潜规则)这一块,是比较有用的.

   

2.3.度量决策树的有效性

   

可以把决策树用在测试集(不是建立树的那个)的正确率来表明.穿过树的每条路径都表示一个规则.每个节点(不论是枝还是叶)我们都可以测量:

   

进入该节点的记录数目

每个类中记录的比例

如果是叶节点,记录如何分类

每个节点正确分类的百分比

训练集和测试集分布之间的差异

   

一般来说,每个节点正确分类的百分比比较重要.有时,在靠近根部的正确率还高点.

   

那,拆分的准则又应该是什么呢?采用不用的准则会导致树性能和外观上都有有所不同.下面将会是一些介绍:

   

3.1.纯度和发散性

   

纯度和发散性是互补的,用1减去纯度就是发散性.纯度,范围是0(样本中没有两项是同一类的)到1(样本中所有的项都是同一类的).评价决策树拆分的时候有些度量方法习惯赋予纯的节点最低分数,有些给纯的节点高分数.不过,目的都是一样的,为的都是优化纯度.

   

纯度的度量包括:

   

基尼(Gini,也叫总体发散性)

(entropy,也叫信息增益)

信息增益比率

卡方检验

   

目标变量是数值型,除了上述,还有:

   

方差归约

F测试

   

纯度度量方法取决于目标变量是分类型还是数值型.

   

3.2.基尼(总体发散性)

   

假如在一个总体里,有9个a,1个b,这时基尼 = 0.9 ^ 2 + 0.1 ^ 2 = 0.82 . 纯节点的基尼是1.纠结的是,这个东西用在二分的情况比较适合.

基尼的曲线如下(说白了就是抛物线):

   

   

屏幕剪辑的捕获时间: 12/22/2012 4:57 PM

显然,在极限情况(0或者1)是最纯的.

   

3.3.熵(信息增益)

   

熵描述的是一个系统的紊乱程度.比如说,一个可能有16个状态的情况,如果是二分,就需要log2(16)就是4个比特位来枚举它们,或者识别它们.这时,熵可以看做是确定系统状态要确定的时候需要的是否问题(类似二分)个数.

   

对于决策树某个节点,熵是该节点所代表的,加入该节点下面的一个事例是a1,P(a1)是所占的比例,那么该点的熵就是(这里的log2 2是底数)

   

-1*( (P(a1)*log2(P(a1))) + (P(a2)*log2(P(a2))) + (P(a3)*log2(P(a3))) + … + (P(an)*log2(P(an))) )

   

针对是二分的情形,有如下的曲线:

   

   

屏幕剪辑的捕获时间: 12/22/2012 4:55 PM

可见,还是二分的时候是最值.

   

假设x是0到0.5,y也是,而 z = -1 .* ((x .* log(x)/log(2))+ (y .* (log(y))/log(2)) + (1-x-y).*log(1-x-y)/log(2) )

这时候的熵的分布如下:

   

   

屏幕剪辑的捕获时间: 12/22/2012 5:24 PM

最值会出现在哪里呢? 没错,在均分的地方,1/3

下面是在一个维度上的映射:

   

   

屏幕剪辑的捕获时间: 12/22/2012 5:26 PM

   

一个子节点的熵是如是计算,那么对于一个节点总体来说,加入其下有两个节点,节点1占该节点总体的P(1),熵是E(1),节点2的就是P(2),E(2),那么这个节点拆分后的系统熵的总和就是P(1)*E(1)+P(2)*E(2),这个拆分引起的总熵减少为1(这里是父节点的熵)-P(1)*E(1)+P(2)*E(2) 我们希望的,是这一项(不是总熵,而是它和父节点的熵的差)得到更大的值,这样,分的的类会更加纯.

   

例如,对于某个节点,其中的一个子分支(假设分支是1)是纯的话,E(1) = 0 , 那样那样的话上述的那个值就是1 . 如果另外的那个分支也是纯的,那么这个值也是1.当然,这也是最完美的划分.

   

再如,如果是对半掺杂,就是说最乱的时候,这样,就如上曲线图所示,熵最大,因此也是最不希望的情况.

   

=========================================分界线=================================================

   

对比gini和熵

   

例如,我们针对以下的情况:

   

对于一个有10个白球和10个黑球的分类情况:

   

第一种分类:

91白

9白1

   

第二种分类:

6

410白

   

gini评分:

   

一样是按照比例划分:

   

Gini(1) = 0.5 * (0.9 ^ 2 + 0.1 ^ 2) * 2 = 0.82 (由于左右两边的都一样)

Gini(2) = ( 6 / 20 ) * 1 + ( 14 / 20 ) * ( ( 4 / 14 ) ^ 2 + ( 10 / 14 ) ^ 2 ) = 0.7143

   

这时候可以看到,第一种情况的gini比较大.我们知道gini的评分是越纯的越接近1.因此gini会更加偏好去两个都不是最纯但是都比较纯的情况(并不是单一分支上有最纯的情况)

   

评分:

   

同样按照比例划分:

   

E(1) = -0.5 * ( 0.9 * log( 0.9 ) / log (2) + 0.1 * log ( 0.1) / log(2) ) * 2 = 0.468995593589281

对于E(2):

左边的都是黑色,因此E(2左) = 0

E(2右) = -( (4 / 14) * log (4 / 14) / log (2) + (10 / 14) * log (10 / 14) / log(2)) = 0.863120568566631

因此

E(2) = (6 / 20) * E(2左) + (14 / 20) * E(2右) = 0.7 * 0.863120568566631 + 0 = 0.604184397996642

   

父节点的熵(因为父节点黑白对半)

E(root) = - 0.5 * log (0.5) / log (2) * 2 = 1

   

因此 用E(root) 减去两种划分的熵,可以得到各自情况的信息增益:

   

E(root) - E(1) = 1 - 0.468995593589281 = 0.531004406410719

E(root) - E(2) = 1 - 0.604184397996642 = 0.395815602003358

   

可知,用来评分,依然对第一种更加偏好,因为得到更多的信息增益.但是对比之下,对于基尼而言对于的信息更敏感,

 

================================================分界线=====================================

   

3.4.信息增益比率

   

为每个值都创建一个单独分支来处理分类型输入变量的话,用熵来划分会比较麻烦.完全归因于分支数的熵规约被称为拆分的本证信息(intrisinc information).对于随机的n路划分,每个分支的概率是1/n.因此n路拆分的熵就是n*1/n*log(1/n) ,就是log(1/n). 如果对归因于拆分的本证信息没有任何操作,分支会非常密集.而这样的密集树每个节点有很少的数目记录,是不稳定模型的构建办法.

   

因而,现在的做法是用由拆分引起总的信息增益与单独归因于评价拆分准则而创建的分支数的本证信息的比率.

   

3.5.方差归约

   

对于连续变量的拆分,最好的方法是减少目标变量的方差.底低方差的样本比较接近均值,高方差的比较偏离.

对于上面的情况:

   

   

对于一个有10个白球和10个黑球的分类情况:

   

第一种分类:

91白

9白1

   

第二种分类:

6

410白

   

如果黑球 = 1 , 白球 = 0 父节点均值 = 0.5 , 方差 = 0.5 ^ 2 = 0.25 .

   

对于第一种分类:

左边: 均值 = 0.9 , 方差 = (9 * 0.1 ^ 2 + 0.9 ^ 2)/10 = 0.09

右边: 均值 = 0.1 , 方差 = (9 * 0.1 ^ 2 + 0.9 ^ 2)/10 = 0.09

因此总方差(按照比例) = 0.09 , 方差归约 = 0.25 - 0.09 = 0.16

   

对于第二种分类:

左边: 均值 = 1 , 方差 = 0

右边: 均值 = 4 / 14 = 0.2857 , 方差 = (4 * (1 - 4 / 14) ^2 + 10 * (4 / 14) ^ 2) / 14 = 0.2041

因此总方差(按照比例) = 0 * 6 / 20 + 14 * 0.2041 / 20 = 0.1429

方差归约 = 0.25 - 0.1429 = 0.1071

   

可见,还是偏向于第一类的分类.

   

3.6.F测试

   

F测试的观测对象是两个总体:一个是所有样本作为总体,另一个是在中间样本.关注的是这两个总体的方差.如果样本是在总体随机抽取的,这两个值会比较接近.用中间样本的估计值除以样本估计值可以得到这个分值,这个分值越大,说明在决策树里把总体拆分的组分布的差异比较明显.

   

   

 

   

posted @ 2012-12-26 11:04  方包  阅读(2800)  评论(0编辑  收藏  举报