决策树算法(CART分类树和回归树)

决策树--CART树模型

上一章节介绍了决策树的ID3、C4.5算法相应的原理及算法优缺点已经介绍,本章主要讲解CART树的原理及相较于ID3、C4.5算法的改进。

1、CART树:可以解决分类和回归问题

2、分裂节点的选择:

CART树选取特征是根据基尼系数,基尼系数越小,模型的不纯度越小。ID3、C4.5都是基于熵的运存,会涉及大量的对数运算,为了解决这个问题,CART树用基尼系数作为分裂特征选取标准,首先我们理解一下基尼系数:

2.1 在分类问题中: 如果一个数据集有i个类别,第i个类别的概率Pi,那么基尼系数为:

Gini(p) = \sum\limits_{i=1}^{i}p_i(1-p_i) = 1- \sum\limits_{i=1}^{i}p_i^2

 

则二分类的基尼系数:

Gini(p) = 2p(1-p)

 

在分裂节点中,如果一个样本集合选取A特征的某个值,将数据集分为D1、D2两部分,那么数据集在A特征下的基尼系数为:

Gini(D,A) = \frac{|D_1|}{|D|}Gini(D_1) + \frac{|D_2|}{|D|}Gini(D_2)

 

同时针对CART树,一方面选取了基尼系数作为特征选取的衡量标准,另一方面采用的是二叉树而不是多叉树,那么在运算效率上就会有很大的提高。

3、CART分类树对连续值的特征变量离散化

CART分类树在处理连续特征变量与C4.5的处理方式是一样的,唯一区别就是选取划分点时的度量值不同。

e.g.某样本中特征A为连续特征值,根据A的所有取值,从小到大排序,分别取出所有相邻两个值的均值,记做集合m,然后计算m中的每个值当做二元分类点时的基尼系数,选择基尼系数最小的值为连续特征A的二元分类点。可以将小于这个点的分类为A类,大于这个点的分类为B类,这样就将连续变量离散化了。

4、CART回归树对连续值的特征变量离散化

采用的是和方差的度量方法:

e.g.某样本中特征A为连续特征值,根据A的所有取值,从小到大排序,分别取出所有相邻两个值的均值,记做集合m,当二元分类点x将数据分成了s1、s2两个集合,则针对两个数据集合,分别计算均方差,最后求和,那么和方差最小的为当前特征的划分点。

5、NOTE:CART树是一个二叉树,ID3、C4.5是多叉树

e.g. 在分类问题上:某数据集上有特征A,有A1,A2,A3共三个类别,那么在ID3、C4.5算法中,会建立成三个分支。但是在CART分类树中,会将A1,A2,A3划分成{A1,A2}和{A3}、{A1}和{A2,A3}、{A2}和{A1,A3},分别计算基尼系数,最小的一组为当前节点特征A的分裂依据,同时特征A还有机会参与以后的节点建立,这是与ID3、C4.5不同的地方。

6、CART回归和分类树对结果预测的区别

CART回归树预测结果是根据叶子节点的中位数或均值作为预测结果,而CART分类树是根据叶节点的类别概率最大的作为预测结果。

7、CART树剪枝

决策树算法会出现过拟合现象,那么为了提高了模型的泛化能力,降低过拟合,CART树提供了剪枝的方法。剪枝的方法有预剪枝和后剪枝,CART树采用的是后剪枝的方法。剪枝的过程会产生很多剪之后的树,那么我们采用交叉验证的方法评测各个剪枝效果,选出效果最好的树作为最终的模型。

CART回归树和CART分类树的剪枝过程是一样的,只是在损失函数上的度量方式不一样,一个是使用基尼系数,另一个是使用均方差。

损失函数的度量:

在剪枝过程中,对任意一棵子树T_t,其损失函数为:

C_{\alpha}(T_t) = C(T_t) + \alpha |T_t|

其中,\alpha为正则化参数,C(T_t)为训练数据的误差(CART回归树用的是均方差,CART分类树是基尼系数),|T_t|为叶子节点的数量。

\alpha=0时,则原生的CART树是最优的子树;

\alpha=\infty时,则CART树的根节点组成的单节点树为最优子树

\alpha越大,剪枝的越厉害,其剪枝的后的树越小。

剪枝思路:

当位于节点t的任意一颗子树T_t,没有剪枝的情况下,其损失:

C_{\alpha}(T_t) = C(T_t) + \alpha |T_t|

当剪枝到根节点,即只保留根节点,其损失是:

C_{\alpha}(T) = C(T_t) + \alpha

\alpha=0或者很小时,则:C_{\alpha}(T_t) < C_{\alpha}(T) ,当\alpha增大到一定程度时:C_{\alpha}(T_t) = C_{\alpha}(T)

所以当T和T_t满足C_{\alpha}(T_t) = C_{\alpha}(T),即:

\alpha = \frac{C(T)-C(T_t)}{|T_t|-1}

就可以对T_t进行剪枝,将子节点全部剪掉,剩下一个叶子结点T。

最后要做的就是交叉验证,当我们计算出所有节点是否剪枝的\alpha,将\alpha对应的最优子树在训练集上进行交叉验证,找到最优子树作为最终结果。

以上是我对CART树的理解,下一章节会用Python代码实现CART分类树和CART回归树算法。


欢迎关注我的公众号!

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值