决策树
1. 决策树归纳的特点
-
决策树归纳是一种构建分类模型的非参数方法,换句话说,它不要求任何先验假设,不假定类和其他属性服从一定的概率分布
-
找到最佳的决策树是NP完全问题,许多决策树算法都采用启发式的方法指导对假设空间的搜索
-
已开发的构建决策树技术不需要昂贵的计算代价,即使训练集非常大,也可以快速建立模型。决策树一旦建立,未知样本样本分类非常快,最坏情况下的时间复杂度为 O ( w ) O(w) O(w),其中 w w w是树的最大深度
-
决策树是学习力散值函数的典型代表。然而它不能很好地推广到某些特定的布尔问题。一个著名的例子是奇偶函数,当奇数(偶数)个布尔属性为真时其值为0(1),对这样的函数建模需要一棵具有 2 d 2^d 2d个节点的满决策树,其中 d d d是布尔属性的个数
-
决策树算法对噪声的干扰具有相当好的鲁棒性
-
冗余属性不会对决策树的准确率造成不利的影响。一个属性如果在数据中与另一个属性是强关联的,那么它是冗余的。在两个冗余的属性中,如果已经选择其中一个作为用于划分的属性,另一个将被忽略
-
由于大多数的决策树算法都采用自顶向下的递归划分法,因此沿着树向下,记录会越来说越少。在叶节点,记录太少,对于叶节点代表的类,不能做出具有统计意义的判决,这就是所谓的数据碎片问题解决该问题的一种可行方法是,当样本树小于某个特定阈值时停止分裂
-
子树额能在决策树中重复多次,这使得决策树过于复杂,并且可能更难解释。当决策树的每个内部节点都依赖单个属性测试时,就会出现这种情形。由于大多数的决策树算法都采用分治划分策略,因此在属性空间的不同部分可以使用相同的测试条件,从而导致子树重复问题
-
使用一次只涉及一个属性的测试条件的决策树很难将下图所示的数据分开,斜决策树可以克服这个局限,该斜决策树只有一个节点,其测试条件为 x + y < 1 x + y < 1 x+y<1
尽管这种技术具有很强的表达力,并且能产生更紧凑的决策树,但是为给定的节点找出最佳测试条件的计算可能相当复杂。构造归纳提供另一种将数据划分成其次非矩形区域的方法,该方法创建复合属性,代表已有属性的算术或逻辑组合。新属性提供了更好的类区分能力,并在决策树归纳之前就增广到数据集中。与斜决策树不同,构造归纳不需要昂贵的花费,因为在构造决策树之前,它只需要一次性地确定属性的所有相关组合。相比之下,在扩展每个内部节点时,斜决策树都需要动态地确定正确的属性组合。然而,构造归纳会产生冗余的属性,因为新创建的属性是已有属性的组合
-
不纯性度量方法的选择对决策树算法的性能影响很小
2. 模型的过分拟合
即使训练误差还在继续降低,但是检验误差开始增大,这种现象称为模型过分拟合
造成过分拟合的一些潜在因素:
-
噪声导致的过度拟合
-
缺乏代表性样本导致的过分拟合
当决策树的叶节点没有足够的代表性样本时, 很可能做出错误的预测 -
多重比较过程
决策树算法从候选集 { x 1 , x 2 , x 3 , . . . , x k } \left \{x_1, x_2, x_3, ..., x_k\right\} {x1,x2,x3,...,xk}中选择最佳属性 x m a x x_{max} xmax来划分数据,在这种情况下,算法实际上是使用多重比较过程来决定是否需要扩展决策树。更具体的说,这是测试 Δ ( T 0 , T m a x ) > α \Delta(T_0, T_{max})>\alpha Δ(T0,Tmax)>α,而不是测试 Δ ( T 0 , T x ) > α \Delta(T_0, T_{x})>\alpha Δ(T0,Tx)>α,随着候选个数 k k k的增加,找到 Δ ( T 0 , T m a x ) > α \Delta(T_0, T_{max})>\alpha Δ(T0,Tmax)>α的几率也在增大。除非根据 k k k修改增益函数 Δ \Delta Δ或阈值 α \alpha α,否则算法会不经意间在模型上增加一些棋牌性的节点,导致模型过分拟合。当选择属性 x m a x x_{max} xmax的训练记录很小时,这种影响就会变得更加明显,因为当训练记录较少时,函数 Δ ( T 0 , T m a x ) \Delta(T_0, T_{max}) Δ(T0,Tmax)的方差会很大,因此找到 Δ ( T 0 , T m a x ) > α \Delta(T_0, T_{max})>\alpha Δ(T0,Tmax)>α的概率就增大了。决策树增长到一定的深度就会发生这种情形,这样就会降低节点所覆盖的记录,提高了添加不必要节点的可能性。
我们给出一个小例子来辅助理解下这个过程:
假如一个分析师预测对数据的概率是0.5,在10次中至少8次对的概率是 C 10 8 + C 10 9 + C 10 10 2 = 0.0547 \frac{C_{10}^{8}+C_{10}^{9}+C_{10}^{10}}{2}=0.0547 2C108+C109+C1010=0.0547, 但是在50个分析师中要求至少有一个人在10次预测中至少做出8次正确预测的概率为 1 − ( 1 − 0.0547 ) 50 = 0.9399 1-(1-0.0547)^{50}=0.9399 1−(1−0.0547)50=0.9399,显然是相当高的概率
3. 估计泛化误差
3.1 再代入估计
在代入估计方法假设训练数据集能很好地代表整个数据,因而可以使用训练误差提供对泛化误差的乐观估计。然而,训练误差通常是泛化误差的一种很差的估计。
3.2 结合模型复杂度
Occam’s razor(奥卡姆剃刀):给定两个具有相同泛化误差的模型,较简单的模型比较复杂的模型更可取
悲观误差估计 使用训练误差与模型复杂度惩罚项的和计算泛化误差估计
e g ( T ) = ∑ i = 1 k [ e ( t i ) + Ω ( t i ) ] ∑ i = 1 k n ( t i ) = e ( T ) + Ω ( T ) N t e_g(T) = \frac{\sum_{i=1}^{k}[e(t_i)+\Omega(t_i)]}{\sum_{i=1}^{k}n(t_i)}=\frac{e(T)+\Omega(T)}{N_t} eg(T)=∑i=1kn(ti)∑i=1k[e(ti)+Ω(ti)]=Nte(T)+Ω(T)
其中, n t n_t nt是节点 t t t分类的训练记录数, e ( t ) e(t) e(t)是被误分类的记录数, k k k是决策树的叶节点数, e ( T ) e(T) e(T)是决策树的总训练误差, N t N_t Nt是训练记录数, Ω ( t i ) \Omega(t_i) Ω(ti)是每个节点 t i t_i ti对应的惩罚项
0.5的惩罚项意味着只要至少能够改善一个训练记录的分类,节点就应当扩展,因为扩展一个节点等价于总误差增加0.5,代价比犯一个训练错误小
1的惩罚项意味着除非能减少一个以上训练记录的误分类,否则节点不应当扩展
最小描述长度(MDL)原则 A,B都是已知属性x值的给定记录,A知道每个记录的确切类别标号,B却不知道这些信息。如果A决定建立一个分类模型,概括x和y之间的关系,在传输给B前,模型用压缩形式编码。如果模型的准确率是100%,那么传输的代价就等于模型编码的代价;否则,A还必须传输哪些记录被模型错误分类信息。
传输的总代价: c o s t ( m o d e l , d a t a ) = c o s t ( m o d e l ) + c o s t ( d a t a ∣ m o d e l ) \mathcal {cost(model,data) = cost(model) + cost(data|model)} cost(model,data)=cost(model)+cost(data∣model)
其中,等式右边的第一项是模型编码的开销,而第二项是误分类记录编码的开销。根据MDL原则,我们寻找最小化开销函数的模型
3.3 估计统计上界
泛化误差也可以用训练误差的统计修正来估计,因为泛化误差倾向于比训练误差大,所以统计修正通常可以选择计算训练误差的上界,考虑到达决策树一个特定叶节点的训练记录数
3.4 使用确认集
把原始的训练数据集分成两个较小的子集,一个用于训练,一个用于确认集,用于估计泛化误差。典型的做法是,保留2/3的训练集建立模型,剩余1/3用于估计误差
该方法常常用于通过参数控制获得具有不同复杂度模型的分类技术
4. 处理决策树归纳中的过拟合
先剪枝(提前终止规则) 树增长算法在产生完全拟合整个训练数据集的完全增长的决策树之前就停止决策树的增长,为了做到这一点,需要采用更具有限制性的结束条件,如对观察到的不纯性度量的增益设阈值
后剪枝 两种方法:
- 新的叶节点替换子树,该叶节点的类标号由子树下记录中的多数类决定
- 用子树中最常使用的分支代替子树
当模型不能再改进时终止剪枝步骤
5.评估分类器的性能
5.1 保持方法(holdout)
将被标记的原始数据划分为两个不相交的集合
局限性:
- 用于训练的被标记样本较少,因此,建立的模型不如使用所有被标记样本建立的模型好
- 一方面,训练集小,模型方差大;另一方面,如果训练集太大,根据用较小的检验集估计的准确率又不太可靠
5.2 随机二次抽样
可以多次重复保持方法来改进对分类器性能的估计,这种方法称作随机二次抽样
随机二次抽样并没有控制每个记录用于训练和检验的次数,因此,有些用于训练的记录使用的频率可能比其他记录高很多
5.3 交叉验证
每个记录用于训练的次数相同,并且恰好检验一次
如果每个检验集只有一个记录,这就叫留一方法(Leave-One-Out Cross Validation,LOO-CV),其缺点是计算开销大,每个检验集只有一个记录,性能估计度量的方差偏高
5.4 自助法(bootstrap)
迄今为止,我们介绍的方法都是假定训练记录采用不放回抽样
在自助法中,训练记录采用有放回抽样。如果原始数据有 N N N个记录,一个记录被自助抽样抽取的概率是 1 − ( 1 − 1 / N ) N 1-(1-1/N)^N 1−(1−1/N)N,当 N N N充分大时,其概率极限为 1 − e − 1 = 0.632 1-e^{-1}=0.632 1−e−1=0.632,故大小为 N N N的自助样本大约包含原始数据中63.2%的记录,没有抽中的记录就成为检验集的一部分。抽样过程重复 b b b次,产生 b b b个自助样本
对于常用的 .632自助,它通过组合每个自助样本的准确率 ϵ i \epsilon_i ϵi和由包含所有标记样本的训练集计算的准确率 a c c s acc_s accs 计算总准确率 a c c b o o t acc_{boot} accboot
a c c b o o t = 1 b ∑ i b ( 0.632 ϵ i + 0.368 a c c s ) {acc_{boot} = \frac{1}{b}\sum_{i}^{b}(0.632\epsilon_i + 0.368acc_s)} accboot=b1∑ib(0.632ϵi+0.368accs)