本文来自我的个人博客 https://www.zhangshenghai.com/posts/31705/
分类与回归树(classification and regression tree, CART)模型是应用广泛的决策树学习方法,同样由特征选择、树的生成和剪枝组成,既可以用于分类也可以用于回归。
CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。
CART算法主要由以下两步组成:
- 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大。
- 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
CART生成
决策树的生成就是递归地构建二叉决策树的过程,对回归树用平方误差最小化准则,对分类树用基尼系数最小化准则,进行特征选择,生成二叉树。
回归树的生成
假设与分别为输入和输出变量,并且是连续变量,给定训练数据集
可选择第个变量及其取值作为切分变量和切分点,并定义两个区域
然后寻找最优切分变量及最优切分点,具体地,求解
其中,是区域上的回归决策树输出,是区域上所有输入实例对应的输出的均值
对每个区域和重复上述过程,将输入空间划分为个区域,在每个区域上的输出为,最小二乘回归树可表示为
最小二乘回归树生成算法
输入:训练数据集
输出:回归树
选择最优切分变量与切分点
用最优切分变量与切分点划分区域并决定相应的输出值
继续对两个子区域调用步骤1.和2.,直到满足停止条件
将输入空间划分为个区域,生成决策树
分类树的生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
分类问题中,假设有个类,样本点属于第类的概率为,则概率分布的基尼指数定义为:
对于二类分类问题,若样本点属于第1类的概率为,则概率分布的基尼指数为:
对于给定样本集和,其基尼指数为:
其中,是中属于第类的样本自己,是类别个数。
如果样本集合根据特征是否取某一可能值被分割成和两个部分,即
则在特征的条件下,集合的基尼指数为:
基尼指数表示集合的不确定性,基尼指数表示经分割后集合的不确定性。基尼指数值越大,样本集合的不确定性也越大,这一点与熵类似。
CART生成算法
输入:训练数据集,特征,阈值
输出:CART决策树
- 设结点的训练数据集为,对每一个特征,对其可能取的每个值,根据样本点对的测试为“是”或“否”将分割成和两部分,并计算。
- 在所有可能的特征以及其所有可能的切分点中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依此从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
- 对两个子结点递归地调用1.和2.,直至满足停止条件。
- 生成CART决策树。
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。
CART剪枝
CART剪枝算法从“完全生长”的决策树低端剪去一些子树,使决策树边小,从而能够对未知数据有更准确的预测。
剪枝,形成一个子树序列
对整体树任意内部结点,以为单结点树的损失函数是:
以为根结点的子树的损失函数是:
当及充分小时,有不等式:
当增大时,在某一有:
即与有相同的损失函数值,而的结点少,因此对进行剪枝。
在剪枝得到的子树序列 中通过交叉验证选取最优子树
具体地,利用独立的验证数据集,测试子树序列 中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子树序列中,每棵子树 都对应一个参数。所以,当最优子树确定时,对应的也确定了,即得到最优决策树。
CART剪枝算法
输入:CART决策树
输出:最优决策树
设
设
自下而上地对各内部结点计算,以及
其中,表示以为根结点的子树,是对训练数据的预测误差,是的叶结点个数。自下而上地访问内部结点,如果有,则进行剪枝,并对叶结点以多数表决法决定其类别,得到树
设
如果不是由根结点单独构成的树,则回到步骤4.
采用交叉验证法在子树序列中选取最优子树