CART模型

来源:互联网 发布:一个程序员的自我修养 编辑:程序博客网 时间:2024/05/01 14:35

(一)简介

1.CART(classification and regression tree)是应用广泛的决策树学习方法,既可以用于分类也可以用于回归;

2.CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测值或者类别;

(二)回归树

1.一个回归树对应着特征空间的一个划分以及在划分的单元上的输出值;假设已将输入空间划分为M个单元,并且在每个单元上都有一个固定的输出值Cm,于是回归树的模型可表示为:


2.回归树模型的学习:在训练数据集所在的特征空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树;

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


遍历变量j,对固定的切分变量j 扫描切分点s,选择使上述预测误差(也就是平方误差)达到最小值的对(j,s);

(2)继续对两个子区域调用步骤(1)直至满足停止条件;

(3)将输入空间划分为M个区域,生成决策树:




(三)分类树

1.基尼指数:基尼指数越大,样本集合的不确定性也就越大(类似于熵)


若样本集合D根据特征A是否取某一可能值a被分割为D1和D2两部分,也就是:


则在特征A的条件下,集合D的基尼指数定义为:


2.分类树模型的学习:

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

(2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练集依特征分配到两个子结点中去;

(3)对两个子结点递归地调用(1),(2)直至满足停止条件;

(4)生成CART决策树;

PS:算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(也就是样本基本属于同一类),或者没有更多特征; 

(四)剪枝(并非必须步骤)

方法一:固定参数a

1.设树T的叶结点个数为|T|,t是树T的叶结点,叶结点有Nt个样本点,其中k类的样本点有Ntk,则每个叶结点的熵可以记为:


2.递归地从树的叶结点向上回缩,若回缩到父结点(也就是合并子结点)之后的整体树对应的损失函数小于回缩到父结点之前的整体树对应的损失函数,则进行剪枝,即将父结点变为新的叶结点;其中损失函数可记为:


PS:第一项表示模型的预测误差,第二项表示模型的复杂度;剪枝其实就是提高模型的泛化能力;

3.返回步骤2直至不能继续为止,得到损失函数最小的子树;

方法二:调节参数a

1.子树损失函数的计算:


(1)其中第一项表示对训练数据集的预测误差(如分类树中的基尼指数或者回归树中的平方误差);第二项表示模型的复杂程度;

(2)权衡参数a 越大,最优子树越小;权衡参数a 越小,最优子树越大;

(3)对于固定参数a,一定存在最优子树使得损失函数最小的;(改变参数a,可以产生一系列最优子树);

2.对于整体树T0任意内部结点t,以t为单结点树的损失函数是(这里的C(t)计算的是落到该结点上 的样本的基尼指数或者平方误差):


以t为根结点的子树Tt 的损失函数是:


当a偏小时,前者大于后者,当a偏大时,前者小于后者,当:


前者等于后者;也就是说两者是等价的,此时可以剪枝(也就是将子树Tt的其余结点都合并到根结点t上去),因为剪掉Tt后虽然预测误差变大了,但是模型复杂度变小了,总体不变;

3.剪枝算法:

(1)设k = 0,T = T0;

(2)设a为无穷大;

(3)从下而上地对各内部结点t,计算出:


(4)从上而下地访问内部结点,如果有g(t)=a,则进行剪枝,并对叶结点t以多数表决法决定其类,得到树T;

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

(6)如果T不是由根结点单独组成的树,回到步骤(3);

(7)采用交叉验证法在子树序列T0,T1,...,Tn中选取最优树Ta:具体地,利用独立的验证数据集,测试子树序列中各子树的平方误差或者基尼指数,平方误差或基尼指数最小的决策树被认为是最优的决策子树;

PS:剪枝算法的核心主要是不断地增大a,产生一系列嵌套的最优子树,然后再用独立测试集选出最终的最优子树;

0 0
原创粉丝点击