CART算法采用的是一种二分递归分割的技术,将当前样本分成两个子样本集,使得生成的非叶子节点都有两个分支。因此CART实际上是一颗二叉树。当CART是分类树的时候,采用GINI值作为分裂节点的依据,当CART作为回归树的时候,使用样本的最小方差作为分裂节点的依据。
1 回归树
1.1 算法原理
输入:训练数据集D
输出:回归树f(x)f(x)f(x)
在训练数据集所在的输入空间中,递归得将每一个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
(1)选择最优切分变量j和切分点s,求解
minj,s[minc1∑xiϵR1(j,s)(yi−c1)2+minc2∑xiϵR2(j,s)(yi−c2)2]min_{j,s}[min_{c_{1}} \sum_{x_{i}\epsilon R_{1(j,s)} }^{} (y_{i}-c_{1})^{2} + min_{c_{2}} \sum_{x_{i}\epsilon R_{2(j,s)} }^{} (y_{i}-c_{2})^{2}]minj,s[minc1xiϵR1(j,s)∑(yi−c1)2+minc2xiϵR2(j,s)∑(yi−c2)2]
遍历变量j,对固定的切分变量j扫描切分点s,选择使上式达到误差最小的变量(j,s),其中R1R_{1}R1和R2R_{2}R2表示的是划分之后的空间。
(2)用选定的(j,s)划分区域并决定响应的输出值
R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}R_{1}(j,s) = \left \{x|x^{(j)}\leq s\right \} , R_{2}(j,s) = \left \{x|x^{(j)} > s\right \} R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}
cm^=1Nm∑xiϵRm(j,s)yi,xϵRm,m=1,2\hat{c_{m}} = \frac{1}{N_{m}}\sum_{x_{i} \epsilon R_{m(j,s)}}y_{i}, \quad x \epsilon R_{m}, \quad m=1,2cm^=Nm1xiϵRm(j,s)∑yi,xϵRm,m=1,2
(3)继续对两个子区域调用步骤(1),(2),直到满足停止条件
(4)将输入空间划分为M个区域R1R_{1}R1,R2R_{2}R2,R3R_{3}R3…RmR_{m}Rm,生成决策树:
f(x)=∑m=1Mcm^I(xϵRm)f(x) = \sum_{m=1}^{M}\hat{c_{m}}I(x \epsilon R_{m})f(x)=m=1∑Mcm^I(xϵRm)
1.2 示例
下面我们将利用以下数据对年龄进行预测
首先将j的属性选为职业,则有三种划分情况{“老师”,“学生”}、{“上班族”}以及{“老师”,“上班族”}、{“学生”},最后一种为{“学生”,“上班族”}、{“老师”}
(1)第一种情况R1R_{1}R1={“学生”},R2R_{2}R2={“老师”,”上班族”}
此时有
c1=(12+18+21)/3=17c_{1}=(12+18+21)/3=17c1=(12+18+21)/3=17
c2=(26+47+36+29)/4=34.5c_{2}=(26+47+36+29)/4=34.5c2=(26+47+36+29)/4=34.5
m=[min∑xiϵR1(yi−c1)2+min∑xiϵR2(yi−c2)2]m =[min \sum_{x_{i}\epsilon R_{1} }^{} (y_{i}-c_{1})^{2} + min \sum_{x_{i}\epsilon R_{2} }^{} (y_{i}-c_{2})^{2}]m=[minxiϵR1∑(yi−c1)2+minxiϵR2∑(yi−c2)2]
yi∈(年龄)=({12,18,21},{26,47,36,29})y_{i} ∈ (年龄)=( \left \{12,18,21\right \},\left \{26,47,36,29\right \})yi∈(年龄)=({12,18,21},{26,47,36,29})
最小平方误差计算得:
m=42+261=303m=42+261=303m=42+261=303
2 分类树
2.1 算法原理
输入:训练数据集D,停止计算的条件
输出:CART决策树
具体步骤:
(1)计算现有特征对该数据集的基尼指数,对于每一个特征A,可以对样本点A是否为a可以将数据集D分成数据集D1D_{1}D1,D2D_{2}D2
(2)对于所有的特征A和所有可能的切分点a,选择基尼指数最小的特征以及相对应的切分点作为最优特征和最佳切分点。
(3)对最优子树递归调用(1)(2),直到满足停止条件。
(4)生成CART分类树。
2.2 示例
在下图中,属性有3个,分别是有房情况,婚姻状况和年收入,其中有房情况和婚姻状况是离散的取值,而年收入是连续的取值。拖欠贷款者属于分类的结果。
假设现在来看有房情况这个属性,那么按照它划分后的Gini指数计算如下
而对于婚姻状况属性来说,它的取值有3种,按照每种属性值分裂后Gini指标计算如下
最后还有一个取值连续的属性,年收入,它的取值是连续的,那么连续的取值采用分裂点进行分裂。如下