决策树是机器学习中一种基本的分类和回归算法,是依托于策略抉择而建立起来的树。其主要优点是模型具有可读性,分类速度快,易于理解。决策树的思想主要来源于Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及有Breiman等人在1984年提出的CART算法。由于本章内容较多,将分两篇介绍决策树的原理和算法实现。
决策树简单来说就是带有判决规则(if-then)的一种树,可以依据树中的判决规则来预测未知样本的类别和值。用一个网上通俗易懂的例子(相亲)来说明:
女儿:那好,我去见见
这个女孩的在决定是否去相亲的过程就是一个典型的分类决策过程。相当于通过年纪、长相、收入和是否公务员等标准来决定是否去相亲, 其决策过程可以用下面的决策树来表示:
简单来说,就是女孩会依据一定的规则来选择是否相亲。而且如果她事先将这个规则告诉自己的母亲,母亲就可以直接依据这个分类规则知道女儿是否想去参加这个相亲,即分类结果的是与否。
在了解决策树的一个直观定义后,我们来看在数学上如何表达这种分类方法。
定义: 决策树是一个属性结构的预测模型,代表对象属性和对象值之间的一种映射关系。它又节点(node)和有向边(directed edge)组成,其节点有两种类型:内节点(internal node)和叶节点(leaf node),内部节点表示一个特征或属性,叶节点表示一个类。
如上图所示的相亲例子,蓝色的椭圆内节点表示的是对象的属性,橘黄色的矩形叶节点表示分类结果(是否相亲),有向边上的值则表示对象每个属性或特征中可能取的值。
决策树的学习本质上是从训练集中归纳出一组分类规则,得到与数据集矛盾较小的决策树,同时具有很好的泛化能力。决策树学习的损失函数通常是正则化的极大似然函数,通常采用启发式方法,近似求解这一最优化问题。
决策树学习算法包含特征选择、决策树生成与决策树的剪枝。决策树表示的是一个条件概率分布,所以深浅不同的决策树对应着不同复杂程度的概率模型。决策树的生成对应着模型的局部选择(局部最优),决策树的剪枝对应着全局选择(全局最优)。决策树常用的算法有ID3,C4.5,CART,下面通过一个简单的例子来分别介绍这几种算法。
上图是一个比较典型的决策树分类用的贷款申请样本数据集:样本特征 x(i) 的类型有年龄、是否有工作、是否有房子和信贷情况,样本类别 y(i) 取值是两类是、否,最终的分类结果就是根据样本的特征来预测是否给予申请人贷款。在介绍算法之前,我们先介绍几个相关的概念:
在前面我已经介绍了信息增益计算的方法,在ID3算法中,我们通过信息增益来选取相应的特征,首先计算每个特征对样本类别的信息增益:
(1)年龄:
算法具体实现将在下一章进行详细的说明。ID3算法只有树的生成,没有树的剪枝,所以容易产生过拟合现象。
C4.5算法与ID3算法在整体流程上很相似,不同之处在于特征选择用的是信息增益,然后最后有剪枝的过程。依据信息增益率,我们来计算上述例子:
(1)年龄:
CART算法主要有两部分组成:
(1) 决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量打。这与ID3算法类似,不同之处也是特征选取的方式;
(2) 决策树的剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,此时用损失函数最小作为剪枝的标准。
CART算法可以用于回归,即建立回归树。在终于分类时,其算法流程与ID3较为类似,不同的是特征选取,选择的是最小基尼指数。
决策树生成算法是递归地生成决策树,知道不能终止。这样产生的决策树往往分类精细,对训练数据集分类准确,但是对未知数据集却没有那么准确,有比较严重的过拟合问题。因此,为了简化模型的复杂度,使模型的泛化能力更强,需要对已生成的决策树进行剪枝。
剪枝的过程是通过极小化决策树整体损失函数来实现的。假设树的叶节点数为 |T| , t 是树 T 的叶节点,该叶节点上有 Nt 个样本点,其中属于 k 类的样本点有 Ntk 个, Ht(T) 为叶节点的经验熵, α≥0 为参数。则决策树学习的整体损失函数可以定义为: