第四章 决策树
4.1 基本流程
决策树(decision tree)是一类常见的机器学习方法。决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。
决策树是不断根据某属性进行划分的过程(每次决策时都是在上次决策结果的基础之上进行),即“if……elif…… else……”的决策过程,最终得出一套有效的判断逻辑(将样本越分越“纯”),便是学到的模型。
决策树学习的目的是为 了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简 单且直观的“分而治之"(divide-and-conquer)策略。
显然,决策树的生成是一个递归过程.在决策树基本算法中,有三种情形会导致递归返回:( 1 )当前结点包含的样本全属于同一类别,无需划分;( 2 )当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;( 3 )当前结点包含的样本集合为空,不能划分。
4.2 划分选择
三种划分选择方法,即信息增益、增益率、基尼指数分别对应著名的 ID3、C4.5 和 CART 三种决策树算法。
4.2.1 信息增益
4.2.2 增益率
4.2.3 基尼指数
4.3 剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段.在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好”了,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合.因此,可通过主动去掉一些分支来降低过拟合的风险. 决策树剪枝的基本策略有“预剪枝”(prepruning)和 “后剪枝" (post-pruning) [Quinlan, 1993].预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树, 然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点.
4.3.1 预剪枝
预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销.但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高;预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
4.3.2 后剪枝
后剪枝决策树通常比预剪枝决策树保留了更多的分支.一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树.但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
4.4 连续与缺失值
4.4.1 连续值处理
4.4.2 缺失值处理
4.5 多变量决策树
若我们把每个属性视为坐标空间中的一个坐标轴,则 d 个属性描述的样本 就对应了 d 维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻 找不同类样本之间的分类边界.决策树所形成的分类边界有一个明显的特点: 轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成.