一、剪枝
1. 为什么要剪枝
在决策树生成的时候,更多考虑的是训练数据,而不是未知数据,这会导致过拟合,使树过于复杂,对于未知的样本不准确。
2. 剪枝的依据——通过极小化决策树的损失函数
损失函数的定义为:
经验熵为:
代入简化:
令:
则:
α的作用:
- 控制着预测误差和树复杂度之间的平衡
- α大,促使选择更为简单的树
- α小,选择更为复杂的树
- α = 0, 只考虑模型与训练数据的拟合程度,不考虑复杂度
3. 剪枝算法
输入:未剪枝的决策树T,超参数
输出: 修剪好的树
(1)计算每个叶节点的经验熵。
(2)递归的从树的叶节点向上回溯。 设一组叶节点回溯到其父节点之前和之后的整体树分别为和
,若他们的损失函数:
即若修剪后的子树的损失函数比原来更小,则进行剪枝,将父节点作为新的叶节点。
(3)返回(2),知道不能继续进行,得到损失函数最小的子树。
二、基尼指数
分类过程中,假设有K个类,样本点属于第k个类的概率为Pk,则概率分布的基尼指数定义为:
对于二分类的问题,若k=1时,概率是p,k=2时,概率是(1-p),则:
对于给定的样本集合D,其基尼指数为:
三、CART树
CART树全称是 classification and regression tree,既可以分类(离散数据),也可以用于回归(连续数据)。
3.1 回归树
如果目标是连续变量,则是Regression Tree回归树。CART树是二叉树,不像多叉树那样形成过多的数据碎片。
对于连续变量X(x1…xn)如何处理?
首先将值排序,分别取其两相邻值的平均值点作为分隔点,将树一分成左枝和右枝,不断扫描,进而判断最佳分割点。特征值小于分裂值就走左子树,或者就走右子树。
下面从数学层面做推导:
假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集:
考虑如何生成回归树。
一个回归树对用着一个特征空间的一个划分及在划分单元上的是输出值。假设已输入特征空间划分为M个单元R1,R2…Rm,并且在每个单元上有一个固定的输出类别Cm,于是我们把回归树表示为:
损失函数:
表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。我们考虑特征空间的第m个单元上的的最优值,它是上的所有输入实例对应输出的的均值:(连续值通常的最优值都是取均值)
问题是怎么样对输入空间进行划分,我们采用启发式的方法;选择第j个变量和它取的值s,作为切分变量(splitting variable)和切分点(splitting point),并定义两个区域:
然后我们需要寻求切分变量j和最有优切分点s,求解如下方程:
对固定输入变量j可以寻找最优切分点s:
遍历所有的输入变量,找到最优的切分变量j,构成一个对(j,s),依次将输入空间划分为两个区域。
接着对每个区域重复上述过程,直到满足停止条件为主。这样就生成了一颗回归树,也称为最小二乘回归树(least square regression tree)。
为什么是平均值?
均方误差的目标函数最优值(取定值)是均值
3.2.1 分类树
如果数据集D根据特征A在某一取值a上进行分割,得到D1,D2两部分后,那么在特征A下集合D的基尼系数如下所示。
其中基尼系数Gini(D)表示集合D的不确定性,基尼系数Gini(D,A)表示A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性越大。这一点与熵相似。
对于属性A,分别计算任意属性值将数据集划分为两部分之后的Gini,选取其中的最小值,作为属性A得到的最优二分方案。然后对于训练集S,计算所有属性的最优二分方案,选取其中的最小值,作为样本及S的最优二分方案。
3.2.2 分类树原理
如果目标变量是离散变量,则是classfication Tree分类树。
分类树是使用树结构算法将数据分成离散类的方法。
(1) 分类树两个关键点:
将训练样本进行递归地划分自变量空间进行建树
用验证数据进行剪枝。
(2)对于离散变量X(x1…xn)处理:
分别取X变量各值的不同组合,将其分到树的左枝或右枝,并对不同组合而产生的树,进行评判,找出最佳组合。如果只有两个取值,直接根据这两个值就可以划分树。取值多于两个的情况就复杂一些了,如变量年纪,其值有“少年”、“中年”、“老年”,则分别生产{少年,中年}和{老年},{上年、老年}和{中年},{中年,老年}和{少年},这三种组合,最后评判对目标区分最佳的组合。因为CART二分的特性,当训练数据具有两个以上的类别,CART需考虑将目标类别合并成两个超类别,这个过程称为双化。这里可以说一个公式,n个属性,可以分出(2^n-2)/2种情况。
3.2.3 分类树算法步骤
CART分类树生成算法:
输入:训练数据集D,停止计算的条件;
输出:CART决策树
根据训练数据集,从根节点开始,递归地对每个节点进行以下操作,构建二叉决策树:
(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数,此时对每一个特征A,对其可能取得每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D1和D2两部分,利用集合的基尼指数公式计算A=a的基尼指数。
(2)在所有可能的特征A(切分变量)以及他们的所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依照最优特征和最优切分点,从现结点生成两个子节点,将训练数据集依特征分配到两个子节点中去。
(3)对两个子节点递归地调用(1),(2),直到满足停止条件。
(4)生成CART决策树。
3.2.4 案例
应用上述数据集,应用CART算法生成决策树。
分析:首先计算各特征的基尼指数,选择最优特征以及其最优切分点。我们以A1,A2,A3,A4表示年龄、有工作、有自己的房子和信贷4个特征,并以1,2,3表示年龄的值为青年、中年、老年,以1、2表示有工作和有自己的房子的值为是和否,以1、2、3表示信贷情况的值为非常好、好和一般。
求特征A1的基尼指数:
优于Gini(D,A1=1)和Gini(D,A1=3)相等,且最小,所以A1=1和A1=3都可以选作最优切分点。
求特征A2和A3的基尼指数:
由于A2和A3只有一个切分点,所以他们就是最优切分点。
求解特征4的基尼指数:
Gini(D,A4=3)最小,所以A4=3为A4的最优切分点。
在A1,A2,A3,A4几个特征中,Gini(D,A3=1)=0.27最小,所以选择A3为最优特征,A3=1为其最优切分点。于是根节点生成两个子节点,一个是叶节点,对另一个结点继续使用以上方法在A1,A2,A3中选择最优特征及其最优切分点,结果是A2=1,依次计算得知,所有结点都是叶节点。
该例子按照CART算法和ID3算法生成的决策树完全一致的。下图我们只拿A3和A2作为最优划分来切分数据集。
4、Cart树总结
创建分类树递归过程中,CART每次都选择当前数据集中具有最小Gini信息增益的特征作为结点划分决策树。ID3算法和C4.5算法虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但其生成的决策树分支多、规模较大,CART算法的二分法可以简化决策树的规模(叶子结点个数),提高生成决策树的效率。对于连续特征,CART也是采取和C4.5同样的方法处理。为了避免过拟合(Overfitting),CART决策树需要剪枝(后剪枝)。预测过程当然也就十分简单,根据产生的决策树模型,延伸匹配特征值到最后的叶子节点即得到预测的类别。