目录
剪枝(pruning)是决策树学习算法对付"过拟合"的主要手段。
- 在决策树学习过程中,有时会造成决策树分枝过多,就可能造成过拟合,可通过主动去掉一些分支来降低过离合的风险。
- 决策树剪枝的基本策略有"预剪枝"(prepruning)和"后剪枝"(postpruning)。
预剪枝
- 预剪枝是指在决策树的生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策数泛化性能提升,则停止划分,并将当前节点标记为叶节点。
- 后剪枝是先从训练集生成一颗完整的决策树,然后自底向上的对非叶节点进行考察,若将该节点对应的子树替换为叶节点,能带来决策树泛化性能提升,则将该子树替换为叶节点。
- 那么如何判断决策树的泛化性能提升呢?可以使用验证集进行验证。
- 一颗仅有一层划分的决策树,称为"决策树桩"(decision stumb)。
- 预剪枝使得决策树的很多分支都不进行展开,这既降低了过拟合的风险,又显著减少了决策树的训练时间开销和测试时间开销。
- 另一方面,有些分支的当前划分虽不能提升泛化性能,甚至可能导致泛化性能暂时下降,但是在其基础进行的后续划分却有可能导致性能显著提高。这给预剪枝决策树带来了欠拟合的风险。
- 预剪枝的本质是一种"贪心"算法。
后剪枝
- 后剪枝决策树通常比预减值决策树保留了更多的分支,一般情况下后剪纸决策树的欠拟合风险很小,泛化性能往往优于预剪纸的决策树。
- 后剪枝的训练时间开销比未剪枝决策树和预剪枝决策树都要大很多。
处理连续值
- 在处理分类时都是基于离散属性来生成决策树,使用离散值进行分类也比较符合人们的思维习惯。
- 如果输入样本的属性是连续值,就需要用到连续属性离散化的技术。
- 二分法(bi-partition)对连续属性进行处理的最简单的策略。这也是 C4.5决策树 算法中采用的机制。
- 与离散属性不同,若当前节点划分属性为连续属性,该属性还可作为其后代节点的划分属性(离散属性在决策树上只出现一次)。
处理缺失值
-
现实任务中常会遇到不完整样本,即样本的某些属性值缺失。
-
如果在属性值缺失的时候丢弃该样本,则会造成样本变得很小,因此有必要考虑利用缺失属性值的训练样例来进行学习。
-
缺失值的处理需要解决两个问题:
- 问题1:如何在属性值缺失的情况下进行划分属性选择。
- 问题2:给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分。
-
对于问题1:按照属性来,
- 令D~表示D中在属性a上没有缺失值的样本,
- 定义ρ为无缺失值的样本比例,
- 定义pk~为无缺失值样本中第k类所占的比例,
- 定义rv~为无缺失值样本中在属性a上取值为a^v的样本所占的比例;
- 则信息增益为:
- 其中
-
对于问题2:按照概率来,
-
若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子节点,且样本全值在子节点中保持为。
-
若样本x在划分属性a上的取值未知,则将x同时划入所有的子节点,且样本权值与属性值对应的子节点中调整为。也就是说,让同一个样本以不同的概率划入到不同的子节点中去。
-
-
C4.5算法中使用了上述解决方案。