@[2016/08/29]
决策树(decision tree)是一种基本的分类与回归方法。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。
分类决策树主要由结点(node)和有向边(directed edge)组成。结点分为:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。
决策树可看成是一个if-then规则的集合,它具有一个重要的性质:互斥且完备。另外,决策树还表示给定特征条件下的类的条件概率分布。
决策树的本质是从训练数据集中归纳出一组分类规则。与训练数据集不相矛盾的决策树可能有多个,也可能一个也没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。从另一个角度看,决策树学习是有训练数据集估计条件概率模型。基于特征空间划分的类的条件概率模型有无穷多个。我们选择的条件概率模型应该不仅对训练数据集有很好的拟合,而且对未知数据有很好的预测。
决策树的学习算法通常是以一个递归地选择最有特征,并更具该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。
特征选择在于选择对于训练数据集具有分类能力的特征,通常有:信息增益(information gain)和信息增益比(information gain ratio)。
熵(entropy)表示随机变量不确定性的度量。设 X 是一个取有限个值的离散随机变量,其概率分布为
信息增益:特征 A 对训练数据集 D 的信息增益为 g(D,A) ,定义为集合 D 的经验熵 H(D) 与特征 A 给定条件下 D 的经验条件熵与特征 A 给定条件下 D 的经验条件熵 H(D | A) 之差,即
信息增益计算形式:设训练数据集为 D , |D| 表示其样本容量,即样本个数。设有 K 个类 Ck, k=1,2,...,K , |Ck| 为属于类 Ck 的样本个数, ∑Kk=1|Ck|=|D| 。设特征 A 有 n 个不同的取值 {a1,a2,...,an} ,根据特征 A 的取值将 D 划分为 n 个子集 D1,D2,...,Dn , |Di|
为 Di 的样本个数, ∑ni=1|Di|=|D| 。记子集 Di 中属于类 Ck 的样本的集合为 Dik ,即 Dik=Di⋂Ck , |Dik| 为 Dik 的样本个数。于是,可按如下步骤计算特征 A 对训练数据集 D 的信息增益 g(D,A)
(1) 计算数据集 D 的经验熵 H(D)
对于取值多的属性,尤其是一些连续型数值,比如两条地理数据的距离属性,这个单独的属性就可以划分所有的样本,使得所有分支下的样本集合都是“纯”的(最极端的情况就是每个叶结点只有一个样本),对于 H(D | A) 在极限情况下 A 将每一个样本都分到一个结点中去的时候, H(D | A)≡0 ,此时特征选择结果必然是 A 。显然,以信息增益作为划分训练数据集的特征,存在偏向于选择值较多的特征的问题,使用信息增益比可以对这一问题进行校正。这是特征选择的另一个准则。
信息增益比:特征 A 对训练数据集 D 的信息增益比 gR(D,A) 定义为其信息增益 g(D,A) 与训练数据集 D 关于特征 A 的值的熵 HA(D) 之比,即
本节介绍两种典型的决策树生成算法ID3和C4.5。
ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。
算法1 (ID3算法)
输入:训练数据集 D ,特征 A ,阈值 ξ
输出:决策树 T 。
(1)若 D 中所有实例属于同一类 Ck ,则 T 为单结点树,并将类 Ck 作为该节点的类标记,返回 T ;
(2)若 A=⊘ ,则 T 为单结点树,并将D中实例数目最大的类 Ck 作为该结点的类标记,返回 T ;
(3)否则,按计算 A 中各特征对 D 的信息增益,选择信息增益最大的特征 Ag ;
(4)如果 Ag 的信息增益小于阈值 ξ ,则置 T 为单结点树,并将 D 中实例数最大的类作为该节点的类标记,返回 T ;
(5)否则,对 Ag 的每一个可能值 ai ,依 Ag=ai 将 D 分割为若干非空子集 Di ,将 Di 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成数 T ,返回 T ;
(6)对第 i 个子结点,以 Di 为训练集,以 A−{Ag} 为特征集,递归地调用步骤1~步骤5,得到子数 Ti ,返回 Ti 。
与ID3算法的唯一区别就在于特征选择方式不同,C4.5使用信息增益比作为特征选择方式。
算法2 (C4.5算法)
输入:训练数据集 D ,特征 A ,阈值 ξ
输出:决策树 T 。
(1)若 D 中所有实例属于同一类 Ck ,则 T 为单结点树,并将类 Ck 作为该节点的类标记,返回 T ;
(2)若 A=⊘ ,则 T 为单结点树,并将D中实例数目最大的类 Ck 作为该结点的类标记,返回 T ;
(3)否则,按计算 A 中各特征对 D 的信息增益比,选择信息增益 比最大的特征 Ag ;
(4)如果 Ag 的信息增益比小于阈值 ξ ,则置 T 为单结点树,并将 D 中实例数最大的类作为该节点的类标记,返回 T ;
(5)否则,对 Ag 的每一个可能值 ai ,依 Ag=ai 将 D 分割为若干非空子集 Di ,将 Di 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成数 T ,返回 T ;
(6)对第 i 个子结点,以 Di 为训练集,以 A−{Ag} 为特征集,递归地调用步骤1~步骤5,得到子数 Ti ,返回 Ti 。
CART是在给定输入随机变量 X 条件下输出随机变量 Y 的条件概率分布的学习方法。CART假设决策树是二叉树,这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是输入给定的条件下输出的条件概率分布。
基尼指数:分类问题中,假设有 K 个类,样本点属于 k 类的概率为 pk ,则概率分布的基尼指数定义为
算法3 (CART生成算法)
输入:训练数据集 D ,停止计算的条件;
输出:CART决策树
根据训练数据集,从根节点开始,递归地对每个结点进行以下操作,构建二叉决策树:
(1)设结点的训练数据集为 D ,计算现有特征对该数据集的基尼指数。对每一个特征 A ,对其可能取的每个值 a ,根据样本点对 A=a 的测试为“是”或“否”将 D 分割成 D1 和 D2 两部分,并计算 A=a 时的基尼指数。
(2)在所有可能的特征 A 以及它们所有可能的切分点 a 中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3)对两个子结点递归地调用(1),(2),直至满足停止条件。
(4)生成CART决策树。
算法停止条件:停止条件的选取有多种方式
(1)结点中的样本个数小于预定的阈值
(2)样本集的基尼指数小于预定阈值(样本基本属于同一类)
(3)没有更多特征
(4)更一般的情况我们计算χ2(卡方)值来判断分类条件和类别的相关程度,当χ2很小时说明分类条件和类别是独立的,即按照该分类条件进行分类是没有道理的,此时节点停止分裂。