CART算法由一下两步组成:
(1)决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树的剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
CART生成
决策树的生成就是递归地构建二叉决策树的过程,对回归树用平方误差最小准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。
下面我只描述分类树的生成:
分类树的生成
分类树用基尼指数选择最优特征,同时决定特征的二值切分点。
对于二分类问题,若样本点属于第一类的概率是p,则概率分布的基尼指数为:
如果样本集合D根据特征A是否取某一可能值a被分割成D1和D2两部分,即:
CART的生成算法:
输入:训练数据集D,停止计算条件
输出:CART决策树
根据训练数据集,从根节点开始,递归地对每个节点进行以下操作,构建二叉决策树:
(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时,对每一个特征A,对其可能取的每一个值a,根据样本点对A=a的测试为“是”或“否”将D分割为D1和D2两部分,利用式(5)计算A=a时的基尼指数。
(2)在所有可能的特征A以及它们可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点,依最优特征与最优切分点,从现结点生成两个子结点,将训练数据依特征分配到两个子节点中去。
(3)对两个子节点递归地调用(1)(2),直至满足停止条件。
(4)生成CART决策树。
算法的停止条件:结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。
下面举个例子:
用以下所给的数据集,应用CART算法生成决策树
解:首先计算各特征的基尼指数,选择最优特征以及其最优切分点,分别以A1,A2,A3,A4表示年龄,有工作,有自己的房子和信贷情况4个特征,并以1,2,3表示年龄的值为青年,中年和老年,以1,2,表示有工作和有自己的房子的值为是否,以1,2,3表示信贷情况的值为非常好,好和一般。
求特征A1的基尼指数:
解:首先计算各特征的基尼指数,选择最优特征以及其最优切分点,分别以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都可以选作A1的最优切分点。
求特征A2和A3的基尼指数:
Gini(D,A4=3)最小,所以A4=3为A4的最优切分点。
在A1,A2,A3,A4几个特征中,Gini(D,A3=1)=0.27最小,所以选择特征A3为最优特征,A3=1为其最优切分点。由于根结点生成两个子节点,一个是叶节点,对另一个结点继续使用以上方法在A1,A2,A4中选择最优特征及其最优切分点,结果是A2=1,依次计算得知,所得结点都是叶结点。
后面我会将此算法用matlab实现,敬请期待!
参考资料:统计学习方法 李航