决策树归纳是从有类标号的训练样本中学习决策树,决策树是一种类似于流程图的树结构,其中,每个内部结点(非树叶结点)表示在一个属性上的测试,每个分枝代表该测试的一个输出,而每个树叶结点(或终端结点)存放一个类标号。
ID3、C4.5、CART都采用贪心(即非回溯的)方法,只考虑当前纯度差最大的情况作为分割点,其中决策树以自顶向下递归的分治方式构造。
决策树构建的基本步骤如下:
1. 开始,所有记录看作一个节点
2. 遍历每个变量的每一种分割方式,找到最好的分割点
3. 分割成两个节点N1和N2
4. 对N1和N2分别继续执行2-3步,直到每个节点足够“纯”为止
决策树的变量可以有两种:
1) 数字型(Numeric):变量类型是整数或浮点数,如前面例子中的“年收入”。用“>=”,“>”,“<”或“<=”作为分割条件(排序后,利用已有的分割情况,可以优化分割算法的时间复杂度)。
2) 名称型(Nominal):类似编程语言中的枚举类型,变量只能重有限的选项中选取,比如前面例子中的“婚姻情况”,只能是“单身”,“已婚”或“离婚”。使用“=”来分割。
如何评价分割点的好坏?如果一个分割点可以将当前的所有结点分为两类,使得每一类都很“纯”,也就是同一类的记录较多,那么就是一个好分割点。比如上面的图片例子,“拥有房产”可以将记录分为两类,“是”的节点全部都可以偿还债务,非常“纯”;“否”的节点,可以偿还贷款和无法偿还贷款的人都有,不是很“纯”,但是两个节点加起来的纯度之和与原始结点的纯度之差最大,所以按照这种方法分割,只考虑当前纯度最大的情况进行分割,也体现了贪心算法。
量化纯度
根据纯度来选择决策的节点,那么如和量化纯度呢?一般有三种方法:
1.信息增益:
ID3算法根据信息增益选择特征。使用信息增益有一个缺点,那就是它偏向于具有大量值的属性,也就是说在训练中,某个属性所取的不同值的个数越多,那么就月可能拿它来作为分裂属性,而且ID3不能处理连续分布的数据特征,于是有了C4.5算法。CART也支持连续分布的数据特征。
2.增益率:
C4.5算法并不是直接选择增益率最大的候选属性划分,而是使用了一个启发式:先从候选划分属性中找到信息增益高于平均水平的属性,再从中选择增益率最高的。
3.基尼系数:
CART决策树使用的“基尼系数”来选择划分属性。
停止条件
决策树的构建规程是一个递归的过程,所以需要确定停止条件,否则过程将不会结束。
一种最直观的方式是当每个子节点只有一种类型的记录时停止,但是这样往往会使得树的节点过多,导致过拟合问题。
另一种可行的方法是当前节点的记录数低于一个最小的阀值,那么就停止分割。
剪枝处理
剪枝的基本策略有“预剪枝”和“后剪枝”。
预剪枝是值在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶节点。预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销,但另一方面,有些分支的当前划分虽不能提升
后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升,则将该子树替换为叶节点。