CART分类与回归树
2017-02-20 19:34
204 查看
【十大经典数据挖掘算法】系列
C4.5
K-Means
SVM
Apriori
EM
PageRank
AdaBoost
kNN
Naïve Bayes
CART
不同于C4.5,CART本质是对特征空间进行二元划分(即CART生成的决策树是一棵二叉树),并能够对标量属性(nominal attribute)与连续属性(continuous attribute)进行分裂。
An instance goes left if CONDITION, and goes right otherwise
即样本记录满足CONDITION则分裂给左子树,否则则分裂给右子树。
标量属性
进行分裂的CONDITION可置为
连续属性
CONDITION可置为不大于ε” role=”presentation” style=”position: relative;”>εε取属性相邻值的平均值,其二元分裂结果如下:
接下来,需要解决的问题:应该选择哪种特征属性及定义CONDITION,才能分类效果比较好。CART采用Gini指数来度量分裂时的不纯度,之所以采用Gini指数,是因为较于熵而言其计算速度更快一些。对决策树的节点t” role=”presentation” style=”position: relative;”>tt,Gini指数计算公式如下:
(1)Gini(t)=1−∑k[p(ck|t)]2” role=”presentation” style=”width: 100%; position: relative;”>Gini(t)=1−∑k[p(ck|t)]2(1)(1)Gini(t)=1−∑k[p(ck|t)]2\begin{equation}
Gini(t)=1-\sum\limits_{k}[p(c_k|t)]^2
Gini指数即为1” role=”presentation” style=”position: relative;”>11;分裂后的Gini指数定义如下:
(2)G(D,A)=|DL||D|Gini(DL)+|DR||D|Gini(DR)” role=”presentation” style=”width: 100%; position: relative;”>G(D,A)=|DL||D|
4000
Gini(DL)+|DR||D|Gini(DR)(2)(2)G(D,A)=|DL||D|Gini(DL)+|DR||D|Gini(DR)\begin{equation}
G(D,A)={\left|{D_L} \right| \over \left|{D} \right|}Gini(D_L)+{\left|{D_R} \right| \over \left|{D} \right|}Gini(D_R)
其中,|⋅|” role=”presentation” style=”position: relative;”>|⋅||⋅|表示样本集合的记录数量。
若满足停止分裂条件(样本个数小于预定阈值,或Gini指数小于预定阈值(样本基本属于同一类,或没有特征可供分裂),则停止分裂;
否则,选择最小Gini指数进行分裂;
递归执行1-2步骤,直至停止分裂。
(3)Lα(T)=C(T)+α|T|” role=”presentation” style=”width: 100%; position: relative;”>Lα(T)=C(T)+α|T|(3)(3)Lα(T)=C(T)+α|T|\begin{equation}
L_\alpha (T)=C(T)+\alpha \left| T \right|
其中,C(T)” role=”presentation” style=”position: relative;”>C(T)C(T)为模型的复杂度。
CART算法采用递归的方法进行剪枝,具体办法:
将α” role=”presentation” style=”position: relative;”>αα;
从最优子树序列{T1,T2,⋯,Tn}” role=”presentation” style=”position: relative;”>{T1,T2,⋯,Tn}{T1,T2,⋯,Tn}选出最优的(即损失函数最小的)。
如何计算最优子树为Ti” role=”presentation” style=”position: relative;”>TiTi为单节点的损失函数为
Lα(t)=C(t)+α” role=”presentation” style=”position: relative;”>Lα(t)=C(t)+αLα(t)=C(t)+α
L_\alpha (t)=C(t)+\alpha
以t” role=”presentation” style=”position: relative;”>tt的损失函数为
Lα(Tt)=C(Tt)+α|Tt|” role=”presentation” style=”position: relative;”>Lα(Tt)=C(Tt)+α|Tt|Lα(Tt)=C(Tt)+α|Tt|
L_\alpha (T_t)=C(T_t)+\alpha \left| T_t \right|
令Lα(t)=Lα(Tt)” role=”presentation” style=”position: relative;”>Lα(t)=Lα(Tt)Lα(t)=Lα(Tt),则得到
α=C(t)−C(Tt)|Tt|−1” role=”presentation” style=”position: relative;”>α=C(t)−C(Tt)|Tt|−1α=C(t)−C(Tt)|Tt|−1
\alpha = {C(t)-C(T_t) \over \left| T_t \right|-1}
此时,单节点t” role=”presentation” style=”position: relative;”>tt的剪枝后整体损失函数减少程度为
g(t)=C(t)−C(Tt)|Tt|−1” role=”presentation” style=”position: relative;”>g(t)=C(t)−C(Tt)|Tt|−1g(t)=C(t)−C(Tt)|Tt|−1
g(t) = {C(t)-C(T_t) \over \left| T_t \right|-1}
剪枝流程如下:
对输入决策树T0” role=”presentation” style=”position: relative;”>T0T0对应的最优子树。
对树T1” role=”presentation” style=”position: relative;”>T1T1……
如此递归地得到最优子树序列,采用交叉验证选取最优子树。
关于CART剪枝算法的具体描述请参看[1],其中关于剪枝算法的描述有误:
(6)如果T不是由根节点单独构成的树,则回到步骤(4)
应改为
———————————————–Update ——————————————————
李航老师已经在勘误表给出修改了。
[2] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining.
[3] Dan Steinberg, The Top Ten Algorithms in Data Mining.
本文为转载,原作者:Treant
出处:http://www.cnblogs.com/en-heng/
C4.5
K-Means
SVM
Apriori
EM
PageRank
AdaBoost
kNN
Naïve Bayes
CART
1. 前言
分类与回归树(Classification and Regression Trees, CART)是由四人帮Leo Breiman, Jerome Friedman, Richard Olshen与Charles Stone于1984年提出,既可用于分类也可用于回归。本文将主要介绍用于分类的CART。CART被称为数据挖掘领域内里程碑式的算法。不同于C4.5,CART本质是对特征空间进行二元划分(即CART生成的决策树是一棵二叉树),并能够对标量属性(nominal attribute)与连续属性(continuous attribute)进行分裂。
2. CART生成
前一篇提到过决策树生成涉及到两个问题:如何选择最优特征属性进行分裂,以及停止分裂的条件是什么。特征选择
CART对特征属性进行二元分裂。特别地,当特征属性为标量或连续时,可选择如下方式分裂:An instance goes left if CONDITION, and goes right otherwise
即样本记录满足CONDITION则分裂给左子树,否则则分裂给右子树。
标量属性
进行分裂的CONDITION可置为
不等于属性的某值;比如,标量属性
Car Type取值空间为
{Sports, Family, Luxury},二元分裂与多路分裂如下:
连续属性
CONDITION可置为不大于ε” role=”presentation” style=”position: relative;”>εε取属性相邻值的平均值,其二元分裂结果如下:
接下来,需要解决的问题:应该选择哪种特征属性及定义CONDITION,才能分类效果比较好。CART采用Gini指数来度量分裂时的不纯度,之所以采用Gini指数,是因为较于熵而言其计算速度更快一些。对决策树的节点t” role=”presentation” style=”position: relative;”>tt,Gini指数计算公式如下:
(1)Gini(t)=1−∑k[p(ck|t)]2” role=”presentation” style=”width: 100%; position: relative;”>Gini(t)=1−∑k[p(ck|t)]2(1)(1)Gini(t)=1−∑k[p(ck|t)]2\begin{equation}
Gini(t)=1-\sum\limits_{k}[p(c_k|t)]^2
Gini指数即为1” role=”presentation” style=”position: relative;”>11;分裂后的Gini指数定义如下:
(2)G(D,A)=|DL||D|Gini(DL)+|DR||D|Gini(DR)” role=”presentation” style=”width: 100%; position: relative;”>G(D,A)=|DL||D|
4000
Gini(DL)+|DR||D|Gini(DR)(2)(2)G(D,A)=|DL||D|Gini(DL)+|DR||D|Gini(DR)\begin{equation}
G(D,A)={\left|{D_L} \right| \over \left|{D} \right|}Gini(D_L)+{\left|{D_R} \right| \over \left|{D} \right|}Gini(D_R)
其中,|⋅|” role=”presentation” style=”position: relative;”>|⋅||⋅|表示样本集合的记录数量。
CART算法
CART算法流程与C4.5算法相类似:若满足停止分裂条件(样本个数小于预定阈值,或Gini指数小于预定阈值(样本基本属于同一类,或没有特征可供分裂),则停止分裂;
否则,选择最小Gini指数进行分裂;
递归执行1-2步骤,直至停止分裂。
3. CART剪枝
CART剪枝与C4.5的剪枝策略相似,均以极小化整体损失函数实现。同理,定义决策树T” role=”presentation” style=”position: relative;”>TT的损失函数为:(3)Lα(T)=C(T)+α|T|” role=”presentation” style=”width: 100%; position: relative;”>Lα(T)=C(T)+α|T|(3)(3)Lα(T)=C(T)+α|T|\begin{equation}
L_\alpha (T)=C(T)+\alpha \left| T \right|
其中,C(T)” role=”presentation” style=”position: relative;”>C(T)C(T)为模型的复杂度。
CART算法采用递归的方法进行剪枝,具体办法:
将α” role=”presentation” style=”position: relative;”>αα;
从最优子树序列{T1,T2,⋯,Tn}” role=”presentation” style=”position: relative;”>{T1,T2,⋯,Tn}{T1,T2,⋯,Tn}选出最优的(即损失函数最小的)。
如何计算最优子树为Ti” role=”presentation” style=”position: relative;”>TiTi为单节点的损失函数为
Lα(t)=C(t)+α” role=”presentation” style=”position: relative;”>Lα(t)=C(t)+αLα(t)=C(t)+α
L_\alpha (t)=C(t)+\alpha
以t” role=”presentation” style=”position: relative;”>tt的损失函数为
Lα(Tt)=C(Tt)+α|Tt|” role=”presentation” style=”position: relative;”>Lα(Tt)=C(Tt)+α|Tt|Lα(Tt)=C(Tt)+α|Tt|
L_\alpha (T_t)=C(T_t)+\alpha \left| T_t \right|
令Lα(t)=Lα(Tt)” role=”presentation” style=”position: relative;”>Lα(t)=Lα(Tt)Lα(t)=Lα(Tt),则得到
α=C(t)−C(Tt)|Tt|−1” role=”presentation” style=”position: relative;”>α=C(t)−C(Tt)|Tt|−1α=C(t)−C(Tt)|Tt|−1
\alpha = {C(t)-C(T_t) \over \left| T_t \right|-1}
此时,单节点t” role=”presentation” style=”position: relative;”>tt的剪枝后整体损失函数减少程度为
g(t)=C(t)−C(Tt)|Tt|−1” role=”presentation” style=”position: relative;”>g(t)=C(t)−C(Tt)|Tt|−1g(t)=C(t)−C(Tt)|Tt|−1
g(t) = {C(t)-C(T_t) \over \left| T_t \right|-1}
剪枝流程如下:
对输入决策树T0” role=”presentation” style=”position: relative;”>T0T0对应的最优子树。
对树T1” role=”presentation” style=”position: relative;”>T1T1……
如此递归地得到最优子树序列,采用交叉验证选取最优子树。
关于CART剪枝算法的具体描述请参看[1],其中关于剪枝算法的描述有误:
(6)如果T不是由根节点单独构成的树,则回到步骤(4)
应改为
回到步骤(3),要不然所有α” role=”presentation” style=”position: relative;”>αα均一样了。
———————————————–Update ——————————————————
李航老师已经在勘误表给出修改了。
4. 参考资料
[1] 李航,《统计学习方法》.[2] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining.
[3] Dan Steinberg, The Top Ten Algorithms in Data Mining.
本文为转载,原作者:Treant
出处:http://www.cnblogs.com/en-heng/
相关文章推荐
- 分类和回归树,随机森林,霍夫森林(CART,random forests,hough forests)
- 机器学习技法-决策树和CART分类回归树构建算法
- 机器学习算法之CART(分类回归树)概要
- 机器学习之分类回归树CART
- 数据挖掘十大经典算法(10) CART: 分类与回归树
- CART分类和回归树
- 分类回归树(CART)
- python决策树之CART分类回归树详解
- CART分类与回归树的原理与实现
- CART决策树分类和回归
- CART分类与回归树与GBDT(Gradient Boost Decision Tree)
- CART-分类回归树
- 决策树之CART(分类回归树)详解
- 决策树的剪枝,分类回归树CART
- CART分类与回归树的原理与实现
- 数据挖掘十大经典算法(10) CART: 分类与回归树
- 分类回归树-classification and regression tree-CART
- 数据挖掘经典算法--CART算法分类和回归树
- 机器学习算法-分类回归树CART
- 【机器学习笔记之三】CART 分类与回归树