决策树是一种基本的分类与回归方法,其主要的优点为模型具有可读性,分类速度快。学习时,根据损失函数最小化的原则建立决策树模型。预测时,利用决策树模型进行分类。决策树学习通常有三个步骤特征选择、决策树生成和决策树的裁剪。
定义5.1(决策树)分类决策树模型是一种描述对实例进行分类的树形结构。结点有两种类型,内部结点表示一个特征或属性,叶结点表示一个类。
用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子节点;这时,每一个子结点对应着该特征的一个取值,如此递归下去,直到到达叶子结点。最后将实例分到叶结点的类中。
将决策树换成if-then规则过程如下:由决策树的根结点大叶结点的每一条路径构建一条规则;路径内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。其有一个重要性质为:互斥且完备。也就是每一个实例都有路径覆盖且只有一条。
决策树还表示给定特征条件下类的条件概率分布。这一条件概率分布定义特征空间的一个划分。将特征空间划分为互不相交的单元区域,并在每个单元定义一个类的概率分布就构成了一个条件概率分布。决策树的一条路径对应于划分中的一个单元。假设X为特征的随机变量,Y为类的随机变量。那这个条件概率分布为 P(Y|X) P ( Y | X ) ,各个叶结点上的条件概率往往偏向某一个类,即属于某一类的概率较大。决策树分类时将该结点的实例分到条件概率大的那一类去。
决策树学习的本质是从训练数据归纳出一组分类规则,选择一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。使用损失函数来选择,损失函数通常是正则化的极大似然函数。学习的策略是以损失函数为目标函数的最小化。最优问题是NP问题,所以求解次最优解。
决策树学习的算法通常是递归选择最优特征,并根据该特征对训练数据进行分割。这一过程产生的决策树可能产生过拟合,需要自下而上进行剪枝。具体就是去掉过于细分的叶结点,使其退回父结点,然后将父结点或更高结点改为新的叶结点。
决策树的生成过程对应于模型的局部选择,只考虑局部最优。剪枝对应于模型的全局选择,考虑全局最优。常用的学习算法为ID3、C4.5与CART。
特征选择在于选取对数据有分类能力的特征。通常特征选择的准则是信息增益或信息增益比。
直观上说,如果一个特征具有更好的分类能力,或者说按照这个特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就应该选择这个特征。信息增益能很好的表示这个准则。
熵(entropy)是表示随机变量不确定性的度量。设X是一个取有限个值得离散随机变量,其概率分布为:
当熵和条件熵中的概率由数据估计(如极大似然估计)得到时,对应的熵与条件熵分别称为经验熵和经验条件熵。
信息增益(information gain)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
定义5.2(信息增益)特征A对训练数据集D的信息增益 g(D,A) g ( D , A ) ,定义为集合D的经验熵 H(D) H ( D ) 与特征A给定条件下D的经验条件熵 H(D|A) H ( D | A ) 之差,即
根据信息增益准则的特征选择方法是:对训练数据集D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
设训练数据集为D, |D| | D | 表示其样本容量,即样本个数,设有K个类 Ck,k=1,2,...,K C k , k = 1 , 2 , . . . , K , |Ck| | C k | 为属于类 Ck C k 的样本个数。设特征A有n个不同的取值,根据特征A的取值将D划分为n个子集 D1,D2...,Dn D 1 , D 2 . . . , D n , |Di| | D i | 为 Di D i 的样本个数,记子集 Di D i 中属于类 Ck C k 的样本的集合为 Dik D i k ,即 Dik=Di∩Ck D i k = D i ∩ C k ,则信息增益的算法如下:
算法5.1(信息增益算法)
输入:训练数据集D和特征A
输出:特征A对训练数据集D的信息增益 g(D,A) g ( D , A )
1. 计算数据集D的经验熵 H(D) H ( D )
以信息增益作划分存在偏向于选择取值较多的特征的问题,使用信息增益比可以对这个问题进行校正。
特征A对训练数据集D的信息增益比 gR(D,A) g R ( D , A ) 定义为其信息增益 g(D,A) g ( D , A ) 与训练数据集D关于特征A的值得熵 HA(D) H A ( D ) 之比,即:
这个算法核心是在决策树各个结点上应用信息增益准则选择特征,递归建立决策树。具体方法为:从根结点开始对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归调用以上方法,构建决策树;直到所有特征的信息增益很小或没有特征可以选择为止。ID3相当于用极大似然估计进行概率模型选择。
算法5.2(ID3算法)
输入:训练数据集D,特征集A,阈值 ε ε
输出:决策树T
1. 若D中所有的实例属于同一类 Ck C k ,则T为单结点树,并将类 Ck C k 作为该结点的类标记,返回T;
2. 若 A=∅ A = ∅ ,则T为单结点树,并将D中实例数最大的类 Ck C k 作为该结点的类标记,返回T;
3. 否则,按照算法5.1中计算A的各个特征对D的信息增益,选择信息增益最大的特征 Ag A g ;
4. 如果 Ag A g 的信息增益小于阈值 ε ε ,则置T为单结点树,并将D中实例数最大的类 Ck C k 作为该结点的类标记,返回T;
5. 否则,对 Ag A g 的每一可能值 ai a i ,依 Ag=ai A g = a i 将D分割为若干非空子集 Di D i ,将 Di D i 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成数T,返回T;
6. 对第i个子结点,以 Di D i 为训练集,以 A−Ag A − A g 为特征集,递归的调用步骤1~5,得到子树 Ti T i ,返回 Ti T i 。
与ID3类似,但是做了改进,使用信息增益比来选择特征。
在决策树学习过程中将已经生成的树进行简化的过程称为剪枝。决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。设树T的叶结点的个数为 |T| | T | ,t是树T的叶结点,该叶结点有 Nt N t 个样本点,其中k类的样本点有 Ntk N t k 个,k=1,2,..,K, Ht(T) H t ( T ) 为叶结点t上的经验熵, α≥0 α ≥ 0 为参数,则决策树学习的损失函数定义为:
在损失函数中,带入后将式子(5.11)右端的第1项记作 C(T) C ( T ) ,则:
算法5.4(树的剪枝算法)
输入:生成算法产生的整个树T,参数 α α
输出:修剪后的子树 Tα T α
1. 计算每个结点的经验熵。
2. 递归的从树的叶结点向上回缩。设一组叶结点回缩到其父结点之前与之后的整体树分别为 TB T B 与 TA T A ,其对应的损失函数值分别为 Cα(TB) C α ( T B ) 和 Cα(TA) C α ( T A ) ,如果
注:上式只考虑两个树的损失函数的差,计算可以在局部进行,剪枝算法可以由一种动态规划算法实现。
分类与回归树(classification and regression tree,CART)模型时应用最广泛的决策树学习方法。既可以用于分类也可以用于回归。
CART 是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。CART假设决策树是二叉树,内部结点的特征取值为是和否。CART算法由以下两步组成:
1. 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量打;
2. 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,使用损失函数最小作为剪枝标准。
决策树的生成就是递归的构建二叉决策树的过程。对回归树用平方误差最小准则,对分类树用基尼指数(Gini index)最小准则,进行特征选择,生成二叉树。
算法5.5(最小二乘回归树生成算法)
输入:训练数据集D
输出:回归树 f(x) f ( x )
在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
1. 选择最优切分变量j和切分点s,求解
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
定义5.4(基尼指数)
分类问题中,假设有K个类,样本点属于第k类的概率为 pk p k ,则概率分布的基尼指数定义为:
对于给定的样本集合D,其基尼指数为:
如果样本集合D根据特征A是否取某一个值a被分割成 D1 D 1 和 D2 D 2 两部分,即:
注:比如特征A有三个值a,b,c,则取a得话分割为a和b,c,这样能够分别取a,b,c得到三个情况。如果A有两个值a,b的话那么就一种情况分割。
基尼指数 Gini(D) G i n i ( D ) 表示集合D的不确定性,基尼指数 Gini(D,A) G i n i ( D , A ) 表示经A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性也就越大,这个与熵相似。
算法5.6(CART生成算法)
输入:训练数据集D,停止计算的条件
输出:CART决策树
根据训练集,从根结点开始,递归的对每个结点进行以下操作,构建决策树:
1. 设结点的训练数据集为D,计算现有特征对该数据集的基尼指数,此时对每一个特征,对其可能取得每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成 D1 D 1 和 D2 D 2 两部分,利用式子(5.25)计算A=a时的基尼指数。
2. 在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征以及其对应的切分点作为最优特征与最优切分点。依据最优特征和最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
3. 对两个子结点递归调用1和2,直到满足停止条件
4. 生成CART决策树
算法停止的条件是结点中的样本个数小于预定的阈值,或样本集的基尼指数小于预定阈值,或没有更多特征。
CART剪枝算法由两步组成:首先从生成算法产生的决策树 T0 T 0 底端开始不断剪枝,直到 T0 T 0 根结点,形成一个子树序列 T0,T1,..,Tn T 0 , T 1 , . . , T n ;然后通过交叉验证法在独立的验证集上对子序列进行测试,从中选择最优子树。
算法5.7(CART剪枝算法)
输入:CART算法生成的决策树 T0 T 0 :
输出:最优决策树 Tα T α
1. 设 k=0,T=T0 k = 0 , T = T 0
2. 设 α=+∞ α = + ∞
3. 自下而上的对各内部结点t计算 C(Tt) C ( T t ) , |Tt| | T t | 以及