决策树之CART

决策树之CART

本系列分享由三篇博客组成,建议从前往后阅读学习。

决策树之ID3

决策树之C4.5

决策树之CART

0.引言

前面我们讲到了决策树算法ID3,和C4.5。C4.5是在ID3的基础上发展而来的,C4.5还存在的缺陷有:

1)C4.5不能解决回归的问题。

2)C4.5需要进行多个对数计算,效率比较低。

3)对于离散型变量中变量值较多的情况只能生成多叉树。

在CART算法中将一一解决和优化这些问题。

1.CART相对于C4.5的改进

1.1二叉树

C4.5每次分枝的分枝数量取决于特征值的数量。而CART算法每次分枝都会生成二叉树。

对于离散型问题,CART会考虑特征中特征值分成两个部分,它会考虑的所有组合方式,选出最好的组合方式进行分枝。如果子结点是多个特征值的组合,那么该子树在之后的分枝操作中依然可以根据该特征的该特征值组合进行分类。

对于连续型问题,分枝方式和C4.5是相同的。但需要注意的是,只要分枝包括该特征的多个特征值,那么该子树依然可以根据该特征进行分类,这一点与上面的离散型问题是相同的。

1.2基尼系数

在ID3中我们依据信息增益进行特征选择,C4.5使用信息增益比。计算熵需要进行对数运算,效率不高。在CART中将使用基尼系数进行特征选择。

在分类问题中,假设是输出有K个类别,在一个结点中第k个类别的概率为p_{k},那么该结点的基尼系数为:

                                           Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{K}p_{k}^{2}

对于给定的样本集D,第k个类别的数量为|Y_{k}|,样本总数为|D|,则:

                                           Gini(D)=1-\sum_{k=1}^{K}(\frac{|Y_{k}|}{|D|})^{2}

分类之后的基尼系数的计算方式与分类之后的熵的计算方式相同,根据特征A分类之后(分N个分枝)的基尼系数为:

                                           Gini(D,A)=\sum_{n=1}^{N}\frac{|D_{i}|}{|D|}Gini(D_{i})

在CART中是分两分枝,此时:

                                           Gini(D,A)=\frac{|D_{1}|}{|D|}Gini(D_{1})+\frac{|D_{2}|}{|D|}Gini(D_{2})

基尼系数没有像熵一样需要进行对数运算,只需要简单的加减乘除,效率非常高。既然基尼系数的效率这么高,那么使用基尼系数的准确率如何呢?这里盗用别人的一张图来比较基尼系数、熵,可以看出熵和基尼系数的计算结果非常相近。

决策树之CART_第1张图片

 

1.3回归

CART算法不仅支持分类树,而且还支持回归树。回归树相比于分类树有两个方面的不同。

(1)分类的依据不同

(2)做预测的方式不同。

我们先来讲第二个,做预测的方式不同。分类树对于每个最终的叶结点,将数量最多的类型作为该结点的分类结果。而在回归树中,对于每个最终的叶结点,将原结点中样本的均值作为预测的结果。

分类树分类的依据是基尼系数,回归树分类的依据是误差平方和。以分枝的均值作为预测结果,公式如下:

                                                       \sum_{d_{i}\in D_{1}}(y_{i}-c_{1})^{2}+\sum_{d_{i}\in D_{2}}(y_{i}-c_{2})^{2}

其中d_{i}表示第i个样本,c_{1}c_{2}分别表示两个分枝的平均数。

以上公式仅仅是该特征下一种组合的误差平方和,我们需要计算所有种组合的误差平方和选最小的作为该特征的误差平方和,最后算出所有特征的误差平方和再取最小,对应的特征即为该分枝的特征,用一下公式来表示:

                                                       \underset{A}{\underbrace{min}}\{\underset{A_{j}.G}{\underbrace{min}}\{\sum_{d_{i}\in D_{1}}(y_{i}-c_{1})^{2}+\sum_{d_{i}\in D_{2}}(y_{i}-c_{2})^{2}\} \}

其中A表示所有的特征,A_{j}.G表示第j个特征的所有特征值的组合方式。

2.决策树小结

这几天分享了ID3、C4.5、CART,下面一个表格可以总结这三种算法。

算法 树结构 特征选择 缺失值处理 剪枝 连续值处理 支持模型
ID3 多叉树 信息增益 不支持 不支持 不支持 分类
C4.5 多叉树 信息增益比 支持 支持 支持 分类
CART 二叉树 基尼系数/误差平方和 支持 支持 支持 分类/回归

虽然CART看上去已经被优化了很多方面,但是还是存在一些缺陷。

(1)每一步分枝都是贪婪的思想,只是得到的是当前步骤的最优结果,最后的生成的树不一定是最优的树。

(2)分类只能解决单分类问题,还不能解决多分类问题(可以拆成多个单分类问题来解决)。

 

 

 

 

 

 

 

你可能感兴趣的:(机器学习)