关于决策树后剪枝和最大熵模型的一些直观理解

前言:
今天又看了一下李航的“统计学习方法”,每次看到决策树后剪枝和最大熵模型的时候,总觉得有些陌生,就是那种不管看几遍公式推导还是觉得理解不够到位的感觉,今天也不例外。于是我决定跳出公式,更加直观的去理解它们的原理,最后也算是有些新的感悟,就此做一个记录,同时希望能够有缘看到这篇文章的读者,对其中理解有误的地方指正出来,望不吝赐教。
ps:主要谈理解和思想,几乎不涉及公式推导和细节(并不是我懒得打公式),所以建议读者拿着原书对照着进行阅读。

一.决策树剪枝

统计学习方法中一共有两种决策树后剪枝的方法,我以前也没有仔细思考这两种剪枝到底有什么本质的区别,今天思考了一下,发现二者有着一个根本上的区别:

1.“决策树剪枝”(书中的名称,我直接沿用)是人为固定了正则项系数 α α ,然后对树进行从下自上的剪枝,通过剪枝前后的损失函数(个人认为这里是用验证集进行计算的损失函数,书中好像没提到)的变化而判断在每一个节点处是否剪枝。

2.”CART树剪枝”是找到一个递增的 α α 序列,这个序列正好一一对应到一组CART树的子树上。最终选择其中最优的一棵子树作为最终剪枝后的决策树,以及其对应的 α α 作为损失函数的正则项系数(因为是一一对应也可以看成选择了一个最优的惩罚项系数 α α )。

1的思想是比较简单直观的,我们可以先用训练集根据特征选择和停止条件,递归地生成一颗决策树,然后再定一个 α α ,得到损失函数的表达式,基于验证集的损失函数值对决策树进行自下而上的剪枝。

关键是2中的决策树剪枝(以下只要不特殊说明,均指的是2中的决策树剪枝),书上的公式实在是绕的我头晕,其实它的思想非常简单:
首先需要清楚的一点是,一般而言,决策树的损失函数由两部分组成,一是预测的错误率带来的损失,错误率越低,自然损失就越少,二是树的复杂度(一般和树的叶子节点数成正比)带来的损失(正则项),复杂度越高,损失就越大。接下来便是重点:如果此时树的正则项系数 α α 为0,那么树的复杂度变不会带来损失,此时当然是未剪枝时候的树 T0 T 0 的损失函数是最小的,任意位置的剪枝都会导致损失函数变大。此时我们将 α α 从0开始慢慢增大,也就是树的复杂度的代价越来越大,总会出现在某个值 α1 α 1 处,对某个节点进行剪枝后,损失函数不再变大,也就是说虽然此时错误率会提高(对于训练集而言),但是复杂度会降低,而且它俩带来的代价正好抵消。那么此时我们根据奥卡姆剃刀准则,对此处进行剪枝,而且我们可以发现,当 α α 继续变大的话,剪枝后的树比剪枝前的树损失函数更小。此时就有一个结论,当 α α 属于[0, α1 α 1 )时,原树是损失函数最小的,但是当超过 α1 α 1 时,便有损失函数更低的子树。

现在问题来了,我怎么知道此时应该对哪个点进行剪枝?这个某个节点指的是哪个?你在说**呢?
别慌,这就是书上那些公式的由来,我们既然已经知道一定有这么个 α1 α 1 ,那就可以把它算出来。对于每个节点 nodei n o d e i ,我们都能算出它的临界 αnodei α n o d e i 值(书中有详细说明如何计算),也就是当 α α 等于这个值时,便可以对这个节点进行剪枝了,但这些临界 αnodei α n o d e i 各不相同,我们应该如何选择呢?其实在上一段的分析中我们就已经说清楚了,我们要选择这些 αnodei α n o d e i 最小的那个(随着 α α 从0慢慢增大,第一个遇到的不就是最小的那个 αnodei α n o d e i 嘛)。

之后便是重复以上的过程,我们把剪枝过后的树当成新的树,重复以上过程,随着 α α 增大,当达到某一个值 α2 α 2 时,我们需要继续剪枝,但在[ α1 α 1 , α2 α 2 )上, T1 T 1 是损失函数最小的树,如此往复,直到达到停止条件。

最后我们就得到了一个 α α 序列和子树序列,我们再用验证集去分别算出每个子树的损失函数,最终选择损失函数最小的那个子树作为最终的决策树。

具体算法书中写的还是比较清楚的,我只是对算法进行一个更加直观的理解,总结一下就是说:我们希望找到一个尽可能稠密的,且具有包含关系的子树序列{ T0T1T2... T 0 ⊋ T 1 ⊋ T 2 . . . },而且每个子树 Ti T i 在区间[ αi,αi+1 α i , α i + 1 )上是损失函数最小的(选你总是有道理的嘛,总是有点本事才选你),但是我们没法事先知道如何去取一个合适的惩罚系数 α α , 所以我们通过验证集损失函数最小的原理选择出最终的决策树 Ti T i ,它恰好也对应了一个惩罚系数 αi α i ,这个惩罚系数就是比较的合理的。

二.最大熵模型

如果说上面决策树还是挺绕的(写的确实很繁琐,不过我觉得只要没有废话,那么写的越长就应该越容易让人理解)。那么下面的最大熵模型就真的是非常直观的理解了,我用简单几句话就能讲清楚其大概思路。

最大熵模型基于最大熵原理,最大熵原理的基本思想,就是你要得到一个模型,使得它在满足给定的条件下,预测事件可能性P的熵H(P)尽可能的大(最大化),什么意思呢?比如说此时箱子里只有红球和白球两种球,但你不知道各自的数量是多少,那么此时我们就可以根据最大熵原理,红球白球各自占1/2的比例。这里的熵是作用于这个可能性P的.

接下来就是最大熵模型了,首先我们手上有一些训练集 (xi,yi) ( x i , y i ) 我们的目标是求 P(y|x) P ( y | x ) ,是一个判别模型,而我们的熵H就是直接作用在 P(y|x) P ( y | x ) 上的,那我们的目标就是

maxH(p)=Σx,yP~(x)P(y|x)logP(y|x) m a x H ( p ) = − Σ x , y P ~ ( x ) P ( y | x ) l o g P ( y | x )
除此之外我们还有特征函数带来的约束条件。重点就在于这个特征函数的约束条件了,我们一定会有这样的疑问:这个特征函数代表了什么意义?它是怎么确定的?我们先借用一下书上的定义:
EP~(f)=Σx,yP~(x,y)f(x,y) E P ~ ( f ) = Σ x , y P ~ ( x , y ) f ( x , y )
EP(f)=Σx,yP~(x)P(x,y)f(x,y) E P ( f ) = Σ x , y P ~ ( x ) P ( x , y ) f ( x , y )
EP~(f)=EP(f) E P ~ ( f ) = E P ( f )

这个式子到底有什么意义呢? 接下来便是重点:假设现在我们有很多观察到的现象(总样本),观察到的样本形成了经验分布 P~(x,y) P ~ ( x , y ) P~(x) P ~ ( x ) ,首先我们作出假设,当样本量足够大的时候,对于任意的 x x P~(x) 几乎是等于实际值 P(x) P ( x ) 的,这是合理的。对 P~(x,y) P ~ ( x , y ) 却不这么去假设,但我们可以根据一个先验的经验,去人为定义在哪些时候(或者说在哪些(x,y)上),会有 P(x,y) P ( x , y ) = P~(x,y) P ~ ( x , y ) ,也就是对于这一组(x,y)而言,观测到的分布即为真实分布.所以这个特征函数 f(x,y) f ( x , y ) 的作用就是如此,当它等于1时,说明在这时,我们先验地认为 P(x,y)=P~(x,y) P ( x , y ) = P ~ ( x , y ) ,当它等于0时,说明此时我们先验地认为 P(x,y)=tildeP(x,y) P ( x , y ) = t i l d e P ( x , y ) 并不成立,把上面说的这些公式话的话,就是上面那三行定义了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值