《数据挖掘(完整版)》笔记 - 决策树

决策树

1. 决策树归纳的特点

  • 决策树归纳是一种构建分类模型的非参数方法,换句话说,它不要求任何先验假设,不假定类和其他属性服从一定的概率分布

  • 找到最佳的决策树是NP完全问题,许多决策树算法都采用启发式的方法指导对假设空间的搜索

  • 已开发的构建决策树技术不需要昂贵的计算代价,即使训练集非常大,也可以快速建立模型。决策树一旦建立,未知样本样本分类非常快,最坏情况下的时间复杂度为O(w)O(w)O(w),其中www是树的最大深度

  • 决策树是学习力散值函数的典型代表。然而它不能很好地推广到某些特定的布尔问题。一个著名的例子是奇偶函数,当奇数(偶数)个布尔属性为真时其值为0(1),对这样的函数建模需要一棵具有2d2^d2d个节点的满决策树,其中ddd是布尔属性的个数

  • 决策树算法对噪声的干扰具有相当好的鲁棒性

  • 冗余属性不会对决策树的准确率造成不利的影响。一个属性如果在数据中与另一个属性是强关联的,那么它是冗余的。在两个冗余的属性中,如果已经选择其中一个作为用于划分的属性,另一个将被忽略

  • 由于大多数的决策树算法都采用自顶向下的递归划分法,因此沿着树向下,记录会越来说越少。在叶节点,记录太少,对于叶节点代表的类,不能做出具有统计意义的判决,这就是所谓的数据碎片问题解决该问题的一种可行方法是,当样本树小于某个特定阈值时停止分裂

  • 子树额能在决策树中重复多次,这使得决策树过于复杂,并且可能更难解释。当决策树的每个内部节点都依赖单个属性测试时,就会出现这种情形。由于大多数的决策树算法都采用分治划分策略,因此在属性空间的不同部分可以使用相同的测试条件,从而导致子树重复问题

  • 使用一次只涉及一个属性的测试条件的决策树很难将下图所示的数据分开,斜决策树可以克服这个局限,该斜决策树只有一个节点,其测试条件为 x+y<1x + y < 1x+y<1
    《数据挖掘(完整版)》笔记 - 决策树
    尽管这种技术具有很强的表达力,并且能产生更紧凑的决策树,但是为给定的节点找出最佳测试条件的计算可能相当复杂。

    构造归纳提供另一种将数据划分成其次非矩形区域的方法,该方法创建复合属性,代表已有属性的算术或逻辑组合。新属性提供了更好的类区分能力,并在决策树归纳之前就增广到数据集中。与斜决策树不同,构造归纳不需要昂贵的花费,因为在构造决策树之前,它只需要一次性地确定属性的所有相关组合。相比之下,在扩展每个内部节点时,斜决策树都需要动态地确定正确的属性组合。然而,构造归纳会产生冗余的属性,因为新创建的属性是已有属性的组合

  • 不纯性度量方法的选择对决策树算法的性能影响很小

2. 模型的过分拟合

即使训练误差还在继续降低,但是检验误差开始增大,这种现象称为模型过分拟合

造成过分拟合的一些潜在因素:

  1. 噪声导致的过度拟合

  2. 缺乏代表性样本导致的过分拟合
    当决策树的叶节点没有足够的代表性样本时, 很可能做出错误的预测

  3. 多重比较过程
    决策树算法从候选集{x1,x2,x3,...,xk}\left \{x_1, x_2, x_3, ..., x_k\right\}{x1​,x2​,x3​,...,xk​}中选择最佳属性xmaxx_{max}xmax​来划分数据,在这种情况下,算法实际上是使用多重比较过程来决定是否需要扩展决策树。更具体的说,这是测试Δ(T0,Tmax)>α\Delta(T_0, T_{max})>\alphaΔ(T0​,Tmax​)>α,而不是测试Δ(T0,Tx)>α\Delta(T_0, T_{x})>\alphaΔ(T0​,Tx​)>α,随着候选个数kkk的增加,找到Δ(T0,Tmax)>α\Delta(T_0, T_{max})>\alphaΔ(T0​,Tmax​)>α的几率也在增大。除非根据kkk修改增益函数Δ\DeltaΔ或阈值α\alphaα,否则算法会不经意间在模型上增加一些棋牌性的节点,导致模型过分拟合。

    当选择属性xmaxx_{max}xmax​的训练记录很小时,这种影响就会变得更加明显,因为当训练记录较少时,函数Δ(T0,Tmax)\Delta(T_0, T_{max})Δ(T0​,Tmax​)的方差会很大,因此找到Δ(T0,Tmax)>α\Delta(T_0, T_{max})>\alphaΔ(T0​,Tmax​)>α的概率就增大了。决策树增长到一定的深度就会发生这种情形,这样就会降低节点所覆盖的记录,提高了添加不必要节点的可能性。

我们给出一个小例子来辅助理解下这个过程:

假如一个分析师预测对数据的概率是0.5,在10次中至少8次对的概率是C108+C109+C10102=0.0547\frac{C_{10}^{8}+C_{10}^{9}+C_{10}^{10}}{2}=0.05472C108​+C109​+C1010​​=0.0547, 但是在50个分析师中要求至少有一个人在10次预测中至少做出8次正确预测的概率为1(10.0547)50=0.93991-(1-0.0547)^{50}=0.93991−(1−0.0547)50=0.9399,显然是相当高的概率

3. 估计泛化误差

3.1 再代入估计

在代入估计方法假设训练数据集能很好地代表整个数据,因而可以使用训练误差提供对泛化误差的乐观估计。然而,训练误差通常是泛化误差的一种很差的估计。

3.2 结合模型复杂度

Occam’s razor(奥卡姆剃刀):给定两个具有相同泛化误差的模型,较简单的模型比较复杂的模型更可取

悲观误差估计 使用训练误差与模型复杂度惩罚项的和计算泛化误差估计

eg(T)=i=1k[e(ti)+Ω(ti)]i=1kn(ti)=e(T)+Ω(T)Nte_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=1k​n(ti​)∑i=1k​[e(ti​)+Ω(ti​)]​=Nt​e(T)+Ω(T)​

其中, ntn_tnt​是节点ttt分类的训练记录数,e(t)e(t)e(t)是被误分类的记录数,kkk是决策树的叶节点数,e(T)e(T)e(T)是决策树的总训练误差,NtN_tNt​是训练记录数,Ω(ti)\Omega(t_i)Ω(ti​)是每个节点tit_iti​对应的惩罚项

0.5的惩罚项意味着只要至少能够改善一个训练记录的分类,节点就应当扩展,因为扩展一个节点等价于总误差增加0.5,代价比犯一个训练错误小

1的惩罚项意味着除非能减少一个以上训练记录的误分类,否则节点不应当扩展

《数据挖掘(完整版)》笔记 - 决策树《数据挖掘(完整版)》笔记 - 决策树 白羊_Aries 发布了61 篇原创文章 · 获赞 17 · 访问量 2万+ 私信 关注
上一篇:python list中append()方法和extend()方法区别


下一篇:Hibernate报错:org.hibernate.ObjectNotFoundException: No row with the given identifier exists 解决办法