【机器学习】决策树详解之分类与回归树(CART)

版权声明:本文为博主原创文章,未经博主允许不得转载https://blog.csdn.net/pxhdky/article/details/84203421

在上一篇博客【机器学习】决策树详解(ID3、C4.5)中,我们详细描述了决策树的原理、划分准则、生成、剪枝、连续值处理、缺失值处理,这篇博客我们主要讲述决策树算法中的CART算法。

1. CART算法

分类与回归树(Classification and regression tree,CART)模型既可用于分类,也可用于回归。

CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支,这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。

2. CART生成

CART生成就是递归地构建二叉决策树的过程,对回归树用平方误差最小化准则,对决策树用基尼系数最小化准则,进行特征选择,生成二叉树。

与ID3和C4.5不同的是,CART构建的是二叉树,所以在划分选择时,ID3和C4.5只需要选择最优划分特征,而CART不仅需要选择最优划分特征,还需要选择特征的最优划分点。

一棵回归树对应着输入空间的一个划分以及在划分单元上的输出值。假设已经把输入空间划分为中号个单元{R_1},{R_2},\ cdots,{R_M},并且在每个单元{R M}上有一个固定的输出值厘米。于是回归树模型可以表示为:

                                                                 f \ left(x \ right)= \ sum \ limits_ {m = 1} ^ M {{c_m} I}          (1)

其中,I = \left\{ {\begin{array}{*{20}{c}} 1&{x \in {R_m}}\\ 0&{x \notin {R_m}} \end{array}} \right.

当输入空间的划分确定时,可以用平方误差\ sum \ limits _ {{x_i} \ in {R_m}} {{{\ left({{y_i}  -  f \ left({{x_i}} \ right)} \ right)} ^ 2}}来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。

对于一个固定的切分变量Ĵ,切分点小号按照特征Ĵ的值将输入空间划分为两个区域R_1R_2。如果Ĵ是连续特征,则将输入空间划分为{R_1} \ left({j,s} \ right)= \ left \ {{x \ left |  {{x ^ j} \ le s} \ right。} \ right \}{R_2} \ left({j,s} \ right)= \ left \ {{x \ left |  {{x ^ j}> s} \ right。} \ right \}。如果Ĵ是离散特征,则将输入空间划分为  {R_1}\left( {j,s} \right) = \left\{ {x\left| {{x^j} = s} \right.} \right\} 和{R_2} \ left({j,s} \ right)= \ left \ {{x \ left |  {{x ^ j} \ ne s} \ right。} \ right \}

2.1回归树生成

为了寻找最优切分变量Ĵ和最优切分点小号,需要遍历所有变量Ĵ,并对每一个切分变量Ĵ扫描其所有切分点,找到该变量的最优切分点小号,以构成\ left({j,s} \ right)对。然后在所有的\ left({j,s} \ right)对中找到最优的\ left({j,s} \ right)对,也就是求解以下公式:

                               \ mathop {\ min} \ limits_ {j,s} \ left [{\ mathop {\ min} \ limits _ {{c_1}} \ sum \ limits _ {{x_1} \ in {R_1} \ left({j,s } \})} {{{\ left({{y_i}  -  {c_1}} \ right)} ^ 2} + \ mathop {\ min} \ limits _ {{c_2}} \ sum \ limits _ {{x_2} \在{R_2} \ left({j,s} \ right)} {{{\ left({{y_i}  -  {c_2}} \ right)} ^ 2}}}} \ right]          (2)

找到最优切分变量Ĵ和最优切分点小号之后,区域R_1R_2的最优输出值{\ widehat c_m}就是R M上所有输入样本X_I对应的输出义的均值,即:

                                                    {\ widehat c_m} = \ frac {1} {{{N_m}}} \ sum \ limits _ {{x_i} \ in {R_m} \ left({j,s} \ right)} {{y_i}},m = 1,2          (3)

接下来,对每个区域都重复上述划分过程,直到满足停止条件为止,这样就生成了一棵回归树。这样的回归树通常称为最小二乘回归树(最小二乘回归树)。

2.2分类树生成

分类树和回归树唯一的区别在于,分类树采用基尼系数作为划分准则,\ left({j,s} \ right)对的求解公式也就变成了:

                                                    \ mathop {\ min} \ limits_ {j,s} \ left [{Gini \ left({D,{R_1}} \ right)+ Gini \ left({D,{R_2}} \ right)} \ right]          (4)

3. CART算法流程

输入:训练集D,特征集A,阈值\epsilon

过程:函数TreeGenerate( D , a )

       1.生成结点node

       2.如果D中样本全部具有相同输出值C,则置node的输出值为C;并返回node

       3.如果A = \emptyset或者D中所有样本在A上取值都相同,则将node置为叶结点,其输出为D中样本数最多的类或者D中所有样本的平均值,返回node

       4. (与上篇中提到的ID3和C4.5相比,只有这一步有区别)否则,遍历A中所有变量,并对每一个切分变量扫描所有其切分点,将输入空间划分为两个区域R_1R_2找到该变量的最优切分点小号,构成一个\ left({j,s} \ right)对。然后在所有的\ left({j,s} \ right)对中找到最优的\ left({j,s} \ right)对。

       (1)对于回归树而言,求解:

                                       \ mathop {\ min} \ limits_ {j,s} \ left [{\ mathop {\ min} \ limits _ {{c_1}} \ sum \ limits _ {{x_1} \ in {R_1} \ left({j,s } \})} {{{\ left({{y_i}  -  {c_1}} \ right)} ^ 2} + \ mathop {\ min} \ limits _ {{c_2}} \ sum \ limits _ {{x_2} \在{R_2} \ left({j,s} \ right)} {{{\ left({{y_i}  -  {c_2}} \ right)} ^ 2}}}} \ right] 

              根据选定的最优\ left({j,s} \ right)划分两个子区域,并决定相应的输出值:

                                                    {\ widehat c_m} = \ frac {1} {{{N_m}}} \ sum \ limits _ {{x_i} \ in {R_m} \ left({j,s} \ right)} {{y_i}},m = 1,2

       (2)对于分类树而言,求解:

                                                    \ mathop {\ min} \ limits_ {j,s} \ left [{Gini \ left({D,{R_1}} \ right)+ Gini \ left({D,{R_2}} \ right)} \ right]

              根据选定的最优\ left({j,s} \ right)划分两个子区域,并将类别标记为其样本数最多的类。

       5.如果特征Ĵ的不确定性提升(如信息增益,信息增益比)小于阈值\epsilon,则将node置为叶结点,返回node

       6.否则,每个子区域R_m(I = 1,2)对应构建一个子结点,其输出为样本数最多的类或者所有样本的平均值,返回结点node及其子结点构成的树;

       7.最后,对两个分支结点,以R M为训练集,A  -  \ left \ {{j} \ right \}为特征集,递归调用TreeGenerate \ left({{R_m},A  -  \ left \ {{j} \ right \}} \ right),得到子树Tm值,其并将结合到T上。

输出:一棵以node为根结点的回归树T:f \ left(x \ right)= \ sum \ limits_ {m = 1} ^ M {{c_m} I} \ left({x \ in {R_m}} \ right)或者分类树。

参考文献:

1.《统计学习方法》第五章决策树——李航

你可能感兴趣的:(机器学习,机器学习进阶之路)