决策树算法(3)

CART树:

该树的生成就是递归的构建二叉决策树的过程,对回归树用平方误差最小化准则,对分类树用gini指数最小化准则,进行特征选择,生成二叉树。

(1)回归树

假设X和Y分别为输入和输出变量,Y为连续变量,给定数据集D={(x1,y1),(x2,y2),...(xn,yn)}

假设输入空间划分为M个单元R1,R2,...,RM,并且在每个单元Rm上有一个固定的输出cm,于是回归树模型可以表示为:

当输入空间划分确定时,可用平方误差

来表示回归树对于数据集的预测误差,用平方误差最小的准则求解每个单元的最优输出。单元Rm上的cm的最优值是Rm的所有输入实例xi对应的输出yi的均值,下式子用于计算最小二乘法:

从每个子cart树中寻找划分点的过程分为选取第j个变量x(j)和其取值s,作为切分变量和切分点,按照如下要求对样本集进行划分:

然后寻找最优切分变量j和最优切分点s,具体表现为求解

对固定输入变量j可以找到最优切分点s

遍历所有输入变量,找到最优切分变量j,构成对(j,s),以此划分2个区域,对每个区域重复上述划分过程,直到满足停止条件为止,从而生成决策树,这种方法也成为最小二乘回归树。(总结为变量的遍历,然后寻找最佳切分点,然后做递归生成树)

最小二乘回归树算法如下:

输入:训练数据集D

输出:回归树f(x)

在训练数据集空间,递归将每个区域划分为2个子区域并决定每个子区域的输出值,构建决策树

(1)选择最优切分变量j和切分点s,求解

遍历变量j,对固定切分变量j扫描切分点s,使上市达到最小值的(j,s)

(2)用选定的(j,s)划分区域并决定相应输出值,左右空间分别表示为:

 

 (3)重复对子区域调用步骤(1)、(2)

 (4)将输入空间划分M个区域R1,R2,...Rm,并生成决策树 

(2)分类树

分类数采用gini指数作为特征筛选条件,假设有K的类,样本点属于第k类的概率为pk,则概率分布的gini指数定义为:

(因为

如果目标是二分类的话,概率分布的基尼值也可以表示为:

Gini(p)=2p(1-p)

因此,样本集D的基尼指数同样可以表示为:

上式的Ck是D中属于第k类的样本集,K是类的个数

CART树算法

输入:训练数据集D

输出:CART决策树

 (1) 设结点训练数据集为D,计算现有特征基尼系数,对每个特征A,对其可能取值的a,根据样本点对A=a的测试为"是"或“否”将D分割成D1和D2两部分,计算属于特征A的基尼系数

 (2) 在所有可能的特征A及可能的切分点a中,选择基尼系数最小的特征及对应切分点作为最优特征和最优切分点。并依次将训练集分配到2个子结点

 (3) 递归调用(1)和(2),直到分配完毕

 (4) 生成CART决策树

CART剪枝:

CART树剪枝通过从决策树T0底端开始剪枝,往上遍历直到根结点,形成子树序列{T0,T1,...,Tn},然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。这里书上讲的并不细致,可以按照以下方式来理解。首先介绍剪枝后属于子结点转为叶结点t的损失函数:

Ca(t)=C(t)+a

以及剪枝之前子树的损失函数:

Ca(Tt)=C(Tt)+a|Tt|

上式中|Tt|表示叶结点的数量,假若进行剪枝,则叶结点的数量则为1.

将剪枝前后的损失函数进行相减,可得到:

a存在临界值g(t)使得当a>g(t)的时候有:Ca(Tt)>Ca(t)

当a<g(t)时候有:Ca(Tt)<Ca(t)

由于在生成CART树之后,各子结点及对应的树结点的a值都已确定,因此按照a值从大到小进行排序。给定剪枝的a给定阈值a',若计算的a<a',则可进行剪枝,然后逐渐按照小到大逐渐剪枝到阈值为止,然后记录当前树。将阈值从小到大不断调整 ,得到不同的剪枝后决策树。通过另外的测试集来判断该不同的决策树的准确率,选取准确率最高的作为最终结果。

输入:CART算法生成的决策树T0

输出:最优决策树Ta

 (1) 设k=0   T=T0

 (2)设a=+∞

 (3)自上而下对内部结点t计算C(Tt),|Tt|以及

 

其中,Tt表示t为根结点的子树,C(Tt)表示对训练数据的预测误差(如基尼指数),|Tt|是Tt的叶结点个数

 (4) 对g(t)=a的内部结点t进行剪枝,并对叶结点t以多数表决法决定所属类别,并得到树T

 (5)设k=k+1 , ak=a  ,Tk=T

 (6) 如果Tk不是由根结点及两个叶结点构成的树,则返回步骤3, 否则令Tk=Tn

 (7) 用交叉验证法在子树序列T0,T1,....,Tn中选取最优子树Ta

原文地址:https://www.cnblogs.com/xiaochouk/p/7978411.html