CART算法

本文来自我的个人博客 https://www.zhangshenghai.com/posts/31705/

分类与回归树(classification and regression tree, CART)模型是应用广泛的决策树学习方法,同样由特征选择、树的生成和剪枝组成,既可以用于分类也可以用于回归。

CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。

CART算法主要由以下两步组成:

  1. 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大。
  2. 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

CART生成

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

回归树的生成

假设XY分别为输入和输出变量,并且Y是连续变量,给定训练数据集

\begin{align} \\ & D = \left\{ \left(x_{1},y_{1}\right), \left(x_{2},y_{2}\right),\cdots,\left(x_{N},y_{N}\right) \right\}\end{align}

可选择第j个变量x_{j}及其取值s作为切分变量和切分点,并定义两个区域
\begin{align} \\ & R_{1} \left( j,s \right) = \left\{ x | x_{j} \leq s \right\}, \quad R_{2} \left( j,s \right) = \left\{ x | x_{j} > s \right\} \end{align}
然后寻找最优切分变量x_{j}及最优切分点s,具体地,求解
\begin{align*} \\ & j,s = \arg \min_{j,s} \left[ \min_{c_{1}} \sum_{x_{i} \in R_{1} \left(j,s\right)} \left( y_{i} - c_{1} \right)^{2} + \min_{c_{2}} \sum_{x_{i} \in R_{2} \left(j,s\right)} \left( y_{i} - c_{2} \right)^{2}\right] \end{align*}
其中,c_{m}是区域R_{m}上的回归决策树输出,是区域R_{m}上所有输入实例x_{i}对应的输出y_{i}的均值
\begin{align*} \\ & c_{m} = ave \left( y_{i} | x_{i} \in R_{m} \right), \quad m=1,2 \end{align*}
对每个区域R_{1}R_{2}重复上述过程,将输入空间划分为M个区域R_{1},R_{2},\cdots,R_{M},在每个区域上的输出为c_{m},m=1,2,\cdots,M,最小二乘回归树可表示为
\begin{align*} \\ & f \left( x \right) = \sum_{m=1}^{M} c_{m} I \left( x \in R_{m} \right) \end{align*}

最小二乘回归树生成算法

输入:训练数据集D
输出:回归树f \left( x \right)

  1. 选择最优切分变量x_{j}与切分点s
    \begin{align*} \\ & j,s = \arg \min_{j,s} \left[ \min_{c_{1}} \sum_{x_{i} \in R_{1} \left(j,s\right)} \left( y_{i} - c_{1} \right)^{2} + \min_{c_{2}} \sum_{x_{i} \in R_{2} \left(j,s\right)} \left( y_{i} - c_{2} \right)^{2}\right] \end{align*}

  2. 用最优切分变量x_{j}与切分点s划分区域并决定相应的输出值
    \begin{align*} \\ & R_{1} \left( j,s \right) = \left\{ x | x_{j} \leq s \right\}, \quad R_{2} \left( j,s \right) = \left\{ x | x_{j} > s \right\} \\ & c_{m} = \dfrac{1}{N} \sum_{x_{i} \in R_{m} \left( j,s \right)} y_{i}, \quad m=1,2\end{align*}

  3. 继续对两个子区域调用步骤1.和2.,直到满足停止条件

  4. 将输入空间划分为M个区域R_{1},R_{2},\cdots,R_{M}​,生成决策树
    \begin{align*} \\ & f \left( x \right) = \sum_{m=1}^{M} \hat c_{m} I \left( x \in R_{m} \right) \end{align*}

分类树的生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

分类问题中,假设有K个类,样本点属于第k类的概率为p_{k},则概率分布的基尼指数定义为:
\begin{align*} \\ & Gini \left( p \right) = \sum_{k=1}^{2} p_{k} \left( 1 - p_{k} \right) = 2p\left(1-p\right) \end{align*}
对于二类分类问题,若样本点属于第1类的概率为p,则概率分布的基尼指数为:
\begin{align*} \\ & Gini \left( p \right) = \sum_{k=1}^{2} p_{k} \left( 1 - p_{k} \right) = 2p\left(1-p\right) \end{align*}
对于给定样本集和D,其基尼指数为:
Gini \left( D \right) = 1 - \sum_{k=1}^{K} \left( \dfrac{\left| C_{k} \right|}{\left| D \right|} \right)^{2}
其中,C_{k}D中属于第k类的样本自己,K是类别个数。

如果样本集合D根据特征A是否取某一可能值a被分割成D_{1}D_{2}两个部分,即
\begin{align*} \\ & D_{1} = \left\{ \left(x,y\right) | A\left(x\right)=a \right\}, \quad D_{2} = D - D_{1} \end{align*}
则在特征A的条件下,集合D的基尼指数为:
\begin{align*} \\ & Gini \left( D, A \right) = \dfrac{\left| D_{1} \right|}{\left| D \right|} Gini \left( D_{1} \right) + \dfrac{\left| D_{2} \right|}{\left| D \right|} Gini \left( D_{2} \right)\end{align*}
基尼指数Gini \left( D \right)表示集合D的不确定性,基尼指数Gini \left( D,A \right)表示经A=a分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也越大,这一点与熵类似。

CART生成算法

输入:训练数据集D,特征A,阈值\varepsilon​
输出:CART决策树

  1. 设结点的训练数据集为D,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D_{1}D_{2}两部分,并计算Gini\left(D,A\right)
  2. 在所有可能的特征A以及其所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依此从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
  3. 对两个子结点递归地调用1.和2.,直至满足停止条件。
  4. 生成CART决策树T

算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART剪枝

CART剪枝算法从“完全生长”的决策树低端剪去一些子树,使决策树边小,从而能够对未知数据有更准确的预测。

剪枝,形成一个子树序列 T_0, T_1, ... , T_n

对整体树T_{0}任意内部结点t,以t为单结点树的损失函数是:
\begin{align} \\ & C_{\alpha} \left( t \right) = C \left( t \right) + \alpha \end{align}
t为根结点的子树T_{t}的损失函数是:
\begin{align} \\ & C_{\alpha} \left( T_{t} \right) = C \left( T_{t} \right) + \alpha \left| T_{t} \right| \end{align}
\alpha = 0\alpha充分小时,有不等式:
\begin{align*} \\ & C_{\alpha} \left( T_{t} \right) < C_{\alpha} \left( t \right) \end{align*}
\alpha增大时,在某一\alpha有:
\begin{align*} \\ & \quad\quad C_{\alpha} \left( T_{t} \right) = C_{\alpha} \left( t \right) \\ & C \left( T_{t} \right) + \alpha \left| T_{t} \right| = C \left( t \right) + \alpha \\ & \quad\quad \alpha = \dfrac{C\left( t \right) - C \left(T_{t}\right)} { \left| T_{t} \right| -1 }\end{align*}
T_{t}t有相同的损失函数值,而t的结点少,因此对T_{t}进行剪枝。

在剪枝得到的子树序列 T_0, T_1, ... , T_n 中通过交叉验证选取最优子树T_n​

具体地,利用独立的验证数据集,测试子树序列 T_0, T_1, ... , T_n 中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子树序列中,每棵子树 T_0, T_1, ... , T_n 都对应一个参数\alpha_1, \alpha_2, ... , \alpha_n。所以,当最优子树T_k确定时,对应的\alpha_k也确定了,即得到最优决策树T_{\alpha}

CART剪枝算法

输入:CART决策树T_{0}
输出:最优决策树T_{\alpha}​

  1. k=0, T=T_{0}

  2. \alpha=+\infty

  3. 自下而上地对各内部结点t计算C\left(T_{t}\right),\left| T_{t} \right|,以及
    \begin{align*} \\ & g\left(t\right) = \dfrac{C\left( t \right) - C \left(T_{t}\right)} { \left| T_{t} \right| -1 } \\ & \alpha = \min \left( \alpha, g\left( t \right) \right) \end{align*}
    其中,T_{t}​表示以t​为根结点的子树,C\left(T_{t}\right)​是对训练数据的预测误差,\left| T_{t} \right|​T_{t}​的叶结点个数。

  4. 自下而上地访问内部结点t​,如果有g\left(t\right)=\alpha​,则进行剪枝,并对叶结点t​以多数表决法决定其类别,得到树T​

  5. k=k+1, \alpha_{k}=\alpha, T_{k}=T

  6. 如果T​不是由根结点单独构成的树,则回到步骤4.

  7. 采用交叉验证法在子树序列T_{0},T_{1},\cdots,T_{n}​中选取最优子树T_{\alpha}​

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343