4.1 基本流程
- 决策过程中提出的每个判定问题都是对某个属性的“测试”
- 决策过程的最终结论对应了我们所希望的判定结果
- 每个测试的结果或是导出最终结论,或者导出进一步的判定问题,其考虑范围是在上次决策结果的限定范围之内
4.2 划分选择
决策树学习的关键在于如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即节点的“纯度”(purity)越来越高。
经典的属性划分方法有:
- 信息增益
- 增益率
- 基尼系数
信息增益
“信息熵”使测量样本集合纯度最常用的一种指标,定义为:
Ent(D)的值越小,则D的纯度越高。
使用信息增益作为准则划分属性主要通过以下步骤完成:
- 计算当前根节点的信息熵Ent(D)
- 选取当前属性集合中任一属性,使用该属性对集合进行划分,计算每一个子集的信息熵
- 计算该属性集合的信息增益,信息增益=1中计算出的信息熵(2中每个子集的信息熵×每个子集样例占根节点样例的比例)
- 重复2~3计算出余下所有属性集合的信息增益
- 比较信息增益的大小,选取最大的为划分属性。若信息增益相同,则可以任意选取
信息增益对可取值数目较多的属性有所偏好
增益率
增益率即信息增益除以属性的固有值,属性的可能取值数目越多,固有值通常就越大,固有值得计算公式如下:
增益率对可取值数目较少的属性有所偏好
C4.5
为了避免信息增益与增益率产生较为极端的结果,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
4.3 剪枝处理
为什么剪枝?
- 剪枝是决策树学习算法对付过拟合的主要手段
- 可通过剪枝来一定程度避免因决策分支过多,以至于把训练集自身的一些特点当作所有数据集都具有的一般性质而导致的过拟合
判断决策树泛化性能是否提升的方法:
留出法:预留一部分数据用作“验证集”以进行性能评估
预剪枝
在决策树生成过程中对每个结点进行划分前的预先估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分,并将当前节点标记为叶节点。
预剪枝划分有以下要点:
- 使用训练集生成决策树的分支,使用验证集计算剪枝前后的精度。
- 每个叶节点会被标记为该属性下最多的那一类。
- 若叶节点处于一个子树中不存在的属性那划分为子树中最多的一类。
- 判断精度时不应该仅选取验证集中属性对应子树上属性的样例,而应该每次都把所有的样例计算进去。
优点:
- 降低过拟合风险
- 显著减少训练时间和测试时间开销
缺点:
- 欠拟合风险:有些分支当前划分虽然不能提升泛化性能,但在其基础上进行的后续划分却有可能导致性能显著提高。预剪枝基于“贪心”本质禁止这些分支展开,带来了欠拟合风险。
后剪枝
先从训练集生成以可完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应地子树替换为叶节点能带来决策树泛化性能提升,则将子树替换为叶节点。
其剪枝基本地判断方法和预剪枝相同,只是进行方向由自顶向下转变为自底向上。
值得注意的是,剪枝的过程中,每一个节点都需要替换成叶节点进行一次对比,而不仅仅是最底层的节点。
优点:
- 后剪枝比预剪枝保留了更多分支,欠拟合风险小,泛化性能往往优于预剪枝决策树
缺点:
- 训练时间开销大:后剪枝过程是在生成决策树之后进行的,需要自底向上对所有非叶节点逐一考察。