详解决策树-CART算法【十分钟机器学习系列笔记】

31 阅读14分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情

视频作者:简博士 - 知乎 (zhihu.com)简博士的个人空间_哔哩哔哩_bilibili

链接:【合集】十分钟 机器学习 系列视频 《统计学习方法》_哔哩哔哩_bilibili

原书:《统计学习方法》李航

 

基尼指数

ID3算法通过信息增益求特征、C4.5通过信息增益比求特征,而在CART算法中,是通过基尼指数来选择最优特征的。

 

假设有KK个类,样本点属于第kk类的概率为pkp_{k},概率分布的基尼指数定义为

Gini(p)=k=1Kpk(1pk)=1k=1Kpk2 Gini(p)=\sum\limits_{k=1}^{K}p_{k}(1-p_{k})=1-\sum\limits_{k=1}^{K}p_{k}^{2}

显然,这就是样本点被错分的概率期望并进行加权,权重为pkp_{k}

 

对于二分类问题来说,如果样本点属于第一类的概率是pp,那么第二类的概率就行1p1-p,代入到基尼指数为

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

如果对给定的样本集合DD,可以分为两个子集C1C_{1}C2C_{2}

Gini(D)=1k=12(CkD)2 Gini(D)=1- \sum\limits_{k=1}^{2}\left(\frac{|C_{k}|}{|D|}\right)^{2}

其中,CkC_{k}表示kk类样本的个数,C1D\begin{aligned} \frac{|C_{1}|}{|D|}\end{aligned}就是pp的经验值

CART算法生成二叉决策树是通过基尼指数挑选特征,但其实基尼指数可以用到多分类问题中

如果给定的样本集合DD,可以分为KK个子集:C1,C2,,CKC_{1},C_{2},\cdots ,C_{K},其基尼指数

Gini(D)=1k=1K(CkD) Gini(D)=1- \sum\limits_{k=1}^{K}\left(\frac{|C_{k}|}{|D|}\right)

其中,CkD\begin{aligned} \frac{|C_{k}|}{|D|}\end{aligned}就是pkp_{k}的经验值

 

对于特征AA条件下,样本集DD的基尼指数为

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

这里就是选定了特征AA,并且将数据集中按照特征分成了两个数据集,再分别求它们对应的基尼指数

 

例:用基尼指数的最小化来选出最优特征

设有10个水蜜桃,其中5个好吃,5个不好吃,那么我们可以计算整个数据集的基尼指数

Gini(D)=2p(1p)=2×12×12=0.5 Gini(D)=2p(1-p)=2 \times \frac{1}{2} \times \frac{1}{2}=0.5

假设,甜度大于0.2的有6个桃子,其中5个好吃,1个不好吃,甜度小于等于0.2的有4个桃子,都不好吃

![[附件/Pasted image 20221005212139.png|200]]

分别计算D1,D2D_{1},D_{2}的基尼指数

Gini(D1)=2×56×16=1036Gini(D2)=2×04×44=0 \begin{aligned} Gini(D_{1})&=2 \times \frac{5}{6}\times \frac{1}{6}=\frac{10}{36}\\ Gini(D_{2})&=2 \times \frac{0}{4}\times \frac{4}{4}=0 \end{aligned}

计算甜度特征下的基尼指数

Gini(D,A)=ω1×1036+ω2×0=610×1036+410×0=0.17 Gini(D,A)=\omega_{1} \times \frac{10}{36}+ \omega_{2}\times 0=\frac{6}{10}\times \frac{10}{36}+ \frac{4}{10}\times 0=0.17

假设,有5个硬桃子,其中2个好吃,3个不好吃,5个软桃子中,有3个好吃,2个不好吃。

![[附件/Pasted image 20221006101345.png|500]]

 

分别计算D1,D2D_{1},D_{2}的基尼指数

Gini(D1)=2×25×35=1225Gini(D2)=2×35×25=1225 \begin{aligned} Gini(D_{1})&=2 \times \frac{2}{5}\times \frac{3}{5}=\frac{12}{25}\\ Gini(D_{2})&=2 \times \frac{3}{5}\times \frac{2}{5}=\frac{12}{25} \end{aligned}

计算甜度特征下的基尼指数

Gini(D,B)=12×1225+12×1225=0.48 Gini(D,B)=\frac{1}{2}\times \frac{12}{25}+ \frac{1}{2}\times \frac{12}{25}=0.48

通过比较可以看出

Gini(D,A)<Gini(D,B) Gini(D,A)<Gini(D,B)

因此按照甜度分类时,我们选择硬度作为根节点

 

CART分类算法

如果输出变量是离散的,对应的就是分类问题;如果输出变量是连续的,对应的就是回归问题

 

分类树算法

输入:数据集DD,特征集AA,停止条件阈值ϵ\epsilon

输出:分类决策树

  1. 从根节点出发,构建二叉树。

  2. 计算现有特征下对数据集DD基尼指数,选择最优特征

    - 在特征AgA_{g}下,对其可能取的每个值aga_{g},根据样本点对Ag=agA_{g}=a_{g}的测试为“是”或“否”,将DD分割成D1D_{1}D2D_{2}两部分,计算Ag=agA_{g}=a_{g}时的基尼指数

    - 选择基尼指数最小的那个值作为该特征下的最优切分点

    - 计算每个特征下的最优切分点,并比较在最优切分下每个特征的基尼指数,选择基尼指数最小的那个特征,即最优特征

  1. 根据最优特征与最优切分点,从现结点生成两个子结点,将训练集依照特征分配到两个子结点中去

  2. 分别对两个子结点递归地调用上述步骤,直至满足停止条件(比如结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者密友更多特征),即生成CART决策树

 

例:利用CART构建分类树

![[附件/Pasted image 20221006101949.png|500]]

 

 

训练集DD,特征集分别是A1A_{1}年龄,A2A_{2}是否有工作,A3A_{3}是否有自己的房子,A4A_{4}信贷情况。类别为y1=y_{1}=是,y2=y_{2}=

先用基尼指数的最小化选出最优特征

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

 

选择年龄A1A_{1}这个特征,由于有三个分类,根据CART算法规定,我们需要将其改为二分类

设青年A11A_{11},中年A12A_{12},老年A13A_{13}

![[附件/Pasted image 20221006102554.png|500]]

 

划为青年和非青年,计算基尼指数

Gini(D1)=2×25×35=1225Gini(D2)=2×710×310=42100Gini(D,A11)=515×1225+1015×42100=0.44 \begin{aligned} Gini(D_{1})&=2 \times \frac{2}{5}\times \frac{3}{5}=\frac{12}{25}\\ Gini(D_{2})&=2 \times \frac{7}{10}\times \frac{3}{10}=\frac{42}{100}\\ Gini(D,A_{11})&=\frac{5}{15}\times \frac{12}{25}+ \frac{10}{15}\times \frac{42}{100}=0.44 \end{aligned}

同理以中年和非中年分类,以老年和非老年分列

Gini(D,A12)=515×2×35×25+1015×2×610×410=0.48Gini(D,A13)=515×2×45×15+1015×2×510×510=0.44 \begin{aligned} Gini(D,A_{12})&=\frac{5}{15} \times 2\times \frac{3}{5}\times \frac{2}{5}+ \frac{10}{15}\times 2\times \frac{6}{10}\times \frac{4}{10}=0.48\\ Gini(D,A_{13})&=\frac{5}{15}\times 2 \times \frac{4}{5}\times \frac{1}{5}+ \frac{10}{15}\times 2\times \frac{5}{10}\times \frac{5}{10}=0.44 \end{aligned}

青年和老年基尼指数最小,都可以作为最优划分点,我们选择青年

 

选择工作A2A_{2}这个特征

设有工作A21A_{21},无工作A22A_{22}

![[附件/Pasted image 20221006102759.png|500]]

 

计算基尼指数

Gini(D,A2)=515×2×05×55+1015×2×410×610=0.32 Gini(D,A_{2})=\frac{5}{15}\times 2 \times \frac{0}{5}\times \frac{5}{5}+ \frac{10}{15}\times 2\times \frac{4}{10}\times \frac{6}{10}=0.32

 

选择房子A3A_{3}这个特征

设有房子A31A_{31},无房子A32A_{32}

![[附件/Pasted image 20221006103046.png|500]]

 

计算基尼指数

Gini(D,A3)=0+915×2×39×69=0.27 Gini(D,A_{3})=0+ \frac{9}{15}\times 2\times \frac{3}{9}\times \frac{6}{9}=0.27

 

选择信贷情况A4A_{4}这个特征

设非常好A41A_{41},好A42A_{42},一般A43A_{43}三个特征值

![[附件/Pasted image 20221006102759.png|500]]

 

计算基尼指数

Gini(D,A41)=0+1115×2×511×611=0.36Gini(D,A42)=615×2×46×26+915×2×59×49=0.47Gini(D,A43)=515×2×15×45+1015×2×810×210=0.32 \begin{aligned} Gini(D,A_{41})&=0+ \frac{11}{15}\times 2\times \frac{5}{11}\times \frac{6}{11}=0.36\\ Gini(D,A_{42})&=\frac{6}{15}\times 2\times \frac{4}{6}\times \frac{2}{6}+ \frac{9}{15}\times 2\times \frac{5}{9}\times \frac{4}{9}=0.47\\ Gini(D,A_{43})&=\frac{5}{15}\times 2\times \frac{1}{5}\times \frac{4}{5}+ \frac{10}{15}\times 2\times \frac{8}{10}\times \frac{2}{10}=0.32 \end{aligned}

一般的基尼指数最小,作为最优划分点

 

对比四个特征得到的基尼指数

 

  特征值 基尼指数
   年龄     0.44  
   工作     0.32  
   房子     0.27  
信贷情况   0.32  

 

因此我们选择房子,绘制二叉树

 

在这里插入图片描述

 

 

可以发现有房子的都同意贷款,因此这是一个叶结点。继续对无房子的数据集进行统计,按照年龄。工作、信贷情况来分类

 

在无房子数据集内,以年龄特征分类

 

年龄个数不同意贷款同意贷款
青年4   3         1       
中年2   2         0       
老年3   1         2        

 

在无房子数据集内,以工作特征分类

 

工作  个数不同意贷款同意贷款
有工作3   0         3       
无工作6   6         0        

 

在无房子数据集内,以信贷情况特征分类

 

信贷情况个数不同意贷款同意贷款
非常好  1   0         1       
好      4   2         2       
一般    4   4         0        

 

显然房子作为特征的基尼指数为00,因此我们可以由房子继续构建二叉树

![[附件/Pasted image 20221006103953.png|400]]

 

 

回归树算法

由于是有监督的回归模型,因此我们应当对输入数据集进行划分,而不是划分输出

 

假设将输入空间划分成MM个单元,R1,R2,,RMR_{1},R_{2},\cdots ,R_{M},并在每个单元RmR_{m}上有一个固定的输出值cmc_{m},回归树模型可以表示为

f(x)=m=1McmI(xRm) f(x)=\sum\limits_{m=1}^{M}c_{m}I(x \in R_{m})

这里的f(x)f(x)就是CART回归树模型,cmc_{m}代表输出的类,I(xRm)I(x \in R_{m})就是指示性函数

我们通过平方误差最小化来找到最优切分点。选择第x(j)x^{(j)}个变量和取值ss,分别作为切分变量和切分点,并定义两个区域

R1(j,s)=xx(j)sR2(j,s)=xx(j)>s \begin{aligned} R_{1}(j,s)&=x|x^{(j)}\leq s\\ R_{2}(j,s)&=x|x^{(j)}>s \end{aligned}

最小化平方误差就可以表示为

min j,s[min c1xiR1(j,s)(yic1)2+min c2xiR2(j,s)(yic2)2] \begin{aligned} \mathop{\text{min }}\limits_{j,s}\left[\mathop{\text{min }}\limits_{c_{1}}\sum\limits_{x_{i}\in R_{1}(j,s)}^{}(y_{i}-c_{1})^{2}+\mathop{\text{min }}\limits_{c_{2}}\sum\limits_{x_{i}\in R_{2}(j,s)}^{}(y_{i}-c_{2})^{2}\right] \end{aligned}

这个公式意味着,将输出变量按照输入变量分为了两类,然后要求出来每次分类后的各个分类的平方误差最小值之和,也就意味着整体的最小平方误差,平方误差最小,意味着分类和实际最吻合。其中

c1^=ave(yixiR1(j,s))c2^=ave(yixiR2(j,s)) \begin{aligned} \hat{c_{1}}&=ave(y_{i}|x_{i}\in R_{1}(j,s))\\ \hat{c_{2}}&=ave(y_{i}|x_{i}\in R_{2}(j,s)) \end{aligned}

ci^\hat{c_{i}}就是每个区域输出变量的平均值

 

该算法停止可以认为划分到合适就停止,也可以整个都划分完,没有多余的点

 

例:利用CART构建回归树。甜度(0,1),好吃程度(0,10)甜度 \in (0,1),好吃程度\in (0,10)

 

甜度    0.050.150.250.350.45
好吃程度5.5 7.6 9.5 9.7 8.2    

 

我们指定甜度为输入,好吃程度为输出

以甜度s=0.1s=0.1进行划分

可以将表格里的连续数据划分为R1R_{1}R2R_{2}两类

R1R_{1}类是

 

甜度    0.05
好吃程度5.5    

 

R2R_{2}类是

 

甜度    0.050.150.250.350.45
好吃程度5.5 7.6 9.5 9.7 8.2    

 

可得

c1^=5.5c2^=7.6+9.5+9.7+8.24=8.75xiR1(j,s)(yic1)2+xiR2(j,s)(yic2)2=3.09 \begin{aligned} \hat{c_{1}}&=5.5\\ \hat{c_{2}}&=\frac{7.6+9.5+9.7+8.2}{4}=8.75\\ \sum\limits_{x_{i}\in R_{1}(j,s)}^{}(y_{i}-c_{1})^{2}+\sum\limits_{x_{i}\in R_{2}(j,s)}^{}(y_{i}-c_{2})^{2}&=3.09 \end{aligned}

 

以甜度s=0.2s=0.2进行划分,平方误差和为3.533.53

以甜度s=0.3s=0.3进行划分,平方误差和为9.139.13

以甜度s=0.4s=0.4进行划分,平方误差和为11.5211.52

 

因此我们选定s=0.1s=0.1作为最优划分点,同时输出模型为

f(x)={5.5(s0.1)8.75(s>0.1) f(x)=\left\{\begin{aligned}&5.5&(s \leq 0.1)\\&8.75&(s>0.1)\end{aligned}\right.

当然我们还可以对s>0.1s>0.1区域进行回归划分,这就要取决于你的停止条件,如果说是继续分成三类,那么就可以按照相同的思路进行计算。

通过对连续变量进行划分,就可以转换为离散的变量来进行计算,那么就和之前的分类树模型也是相通的方法

 

剪枝算法

根据剪枝前后的损失函数来决定是否剪枝,剪枝后,如果损失函数减小,则意味着可以剪枝。

Cα=C(T)+αT C_{\alpha}=C(T)+\alpha|T|

C(T)C(T)反映的是代价,是对训练数据的预测误差(比如基尼指数、平方误差),也就是模型的拟合能力;T|T|反映的是模型的复杂度,体现的是泛化能力,T|T|表示子树上叶结点的概述,叶结点越多,模型越复杂

α\alpha是一个决定拟合和泛化综合效果的参数

  • α=0\alpha=0时,损失函数仅由拟合决定,不考虑对未知数据的预测能力,所以这样得到的是一棵最完整的决策树,泛化能力弱

  • α=+\alpha=+\infty时,得到的是单结点树,对于任何数据的泛化能力都很强,但拟合效果差

 

显然α\alpha的选取决定了整个决策树的样子

 

α\alpha可以从00取到++\infty,我们将这个区间分成多个小区间,即

0α0<α1<α2<<αn<αn+1<+ 0 \leq \alpha_{0}<\alpha_{1}<\alpha_{2}<\cdots <\alpha_{n}<\alpha_{n+1}<+\infty

这时,令每一个α\alpha仅对应着一棵决策树。接着,我们把这些α\alpha按照左闭右开的形式划成小区间,即

α0=0,[α1,α2),[α2,α3),,[αn,αn+1) \alpha_{0}=0,[\alpha_{1},\alpha_{2}),[\alpha_{2},\alpha_{3}),\cdots ,[\alpha_{n},\alpha_{n+1})

总共有nn个区间,每个小区间都对应着一个决策树,我们记作

T0,T1,T2,,Tn T_{0},T_{1},T_{2},\cdots ,T_{n}

这里T0T_{0}就代表着α=0\alpha=0时完整的决策树,意味着没有剪枝。然而我们要找的是最优的决策树,其对应的αi\alpha_{i}使得损失函数Cα(Ti)C_{\alpha}(T_{i})最小

 

假设我们有一棵子树,叫做TtT_{t},那么剪枝前的损失函数可以写成

Cα(Tt)=C(Tt)+αTt C_{\alpha}(T_{t})=C(T_{t})+\alpha|T_{t}|

剪枝后变成一个叶结点,也就意味着此时T=1|T|=1,那么损失函数可以写成

Cα(t)=C(t)+α C_{\alpha}(t)=C(t)+\alpha

α\alpha充分小,甚至α=0\alpha=0时,显然有

Cα(Tt)<Cα(t) C_{\alpha}(T_{t})<C_{\alpha}(t)

α\alpha充分大,甚至α+\alpha \to +\infty时,显然有

Cα(Tt)>Cα(t) C_{\alpha}(T_{t})>C_{\alpha}(t)

因此在[0,+)[0,+\infty)之间一定存在一个α\alpha,使得

Cα(Tt)=Cα(t) C_{\alpha}(T_{t})=C_{\alpha}(t)

在该α\alpha情况下,可得

α=Cα(t)C(t)=C(Tt)+αTtC(t)(Tt1)α=C(t)C(Tt)α=C(t)C(Tt)Tt1 \begin{aligned} \alpha&=C_{\alpha}(t)-C(t)\\ &=C(T_{t})+\alpha|T_{t}|-C(t)\\ (|T_{t}|-1)\alpha&=C(t)-C(T_{t})\\ \alpha&=\frac{C(t)-C(T_{t})}{|T_{t}|-1} \end{aligned}

 

这里我们要先明确一点

Breiman等人证明:可以用递归的方法对树进行剪枝,将α从小到大排列,0=α0<α1<<αn<+0=α0<α1<⋯<αn<+∞,产生一系列的区间,剪枝得到的子树序列对应着区间α[αi,αi+1)i=0,1,...,nα∈[αi,αi+1),i=0,1,...,n的最优子树序列{T0,T1,T2,...,Tn}\{T_0,T_1,T_2,...,T_n\},序列中的子树是嵌套的(即T1T_1T0T_0的子树、T2T_2T1T_1的子树)。

作者:猎人yy

链接:机器学习篇:(一)决策树_猎人yy的博客-CSDN博客

有说李航书中有写,但我好像看漏了……

这也告诉我们,每次一定可以只减一个结点,因为上面的α\alpha大于等于下面的α\alpha

这里有个疑问,根据这个原理,是否我们只需要计算每一个枝条最下面的叶结点的α\alpha,然后对比,谁小剪谁

实际上这个g(t)g(t)表示剪枝的阈值,即对于某一结点α\alpha,当总体损失函数中的参数α=g(t)\alpha= g(t)时,剪和不剪总体损失函数是一样的(这可以在书中(5.27)和(5.28)联立得到)。这时如果α\alpha稍稍增大,那么不剪的整体损失函数就大于剪去的。即α\alpha大于g(t)g(t)该剪,剪了会使整体损失函数减小;α\alpha小于g(t)g(t)不该剪,剪了会使整体损失函数增大。

(请注意上文中的总体损失函数,对象可以是以α\alpha为根的子树,也可以是整个CART树,对α\alpha剪枝前后二者的总体损失函数增减是相同的。)

对于同一棵树的结点,α\alpha都是一样的,当α\alpha从0开始缓慢增大,总会有某棵子树该剪,其他子树不该剪的情况,即α\alpha超过了某个结点的g(t)g(t),但还没有超过其他结点的g(t)g(t)。这样随着α\alpha不断增大,不断地剪枝,就得到了n+1n+1棵子树,接下来只要用独立数据集测试这n+1n+1棵子树,试试哪棵子树的误差最小就知道那棵是最好的方案了。

作者:Zergzzlun - 知乎 (zhihu.com)

链接:cart树怎么进行剪枝? - 知乎 (zhihu.com)

因此对于CART算法生成的一个很大的决策树,其剪枝只是剪出了n+1n+1个子树,告诉我们应该如果要剪枝,那么剪枝的顺序应该是什么,即从1到n+1

 

步骤

输入:CART算法生成的完整决策树

输出:最优决策树TαT_{\alpha}

  1. k=0,T=T0k=0,T=T_{0}也就是从完整的决策树出发

    kk表示迭代次数,这里从00开始,也就意味着还没开始迭代,那么树也是完整的,从这里开始出发。

  1. α=+\alpha=+\infty,因为后面我们要比较大小,当损失函数小的时候可以剪枝。

  2. 自下而上的对各个内部结点tt计算C(Tt),TtC(T_{t}),|T_{t}|,以及

    g(t)=C(t)C(Tt)Tt1,α=min(α,g(t))g(t)=\frac{C(t)-C(T_{t})}{|T_{t}|-1},\alpha=\min (\alpha,g(t))

    这里g(t)g(t)代表了在这个结点对应的α\alpha值;C(t)C(t)代表了单结点时的误差;C(Tt)C(T_{t})代表了子树时的误差

   

    注意:此处的预测误差与我们之前所介绍的预测错误率不同,它还可以包括平方损失、基尼指数等。为了简便,后面例题中,我们还是以预测错误率来计算。

  1. 自下而上的方位内部结点tt,如果有g(t)=αg(t)=\alpha,则进行剪枝,并对叶结点tt以多数表决法决定类,得到数TT

  2. 接着增加迭代次数,继续调用,最终采用交叉验证法在子树T0,T1,T2,,TnT_{0},T_1,T_{2},\cdots ,T_{n}中选取最优子树TαT_{\alpha}

 

例题

[[附件/Pasted image 20221006194325.png|300]]

 

 

k=0,T=T0k=0,T=T_{0},从完整的决策树开始,设置α=+\alpha=+\infty,又有

g(t)=C(t)C(Tt)Tt1,α=min(α,g(t)) g(t)=\frac{C(t)-C(T_{t})}{|T_{t}|-1},\alpha=\min (\alpha,g(t))

因为内部节点有三个,我们可以把T0,T1,T2T_{0},T_{1},T_{2}分别对应t=0,t=1,t=2t=0,t=1,t=2,对于C(t)C(t)代表了单结点时的预测误差,这里因为我们选用的是预测错误率来计算

 

第一次迭代

对于T0T_{0}子树而言,一共有17个样本点,其中8个正类,9个负类,如果按照多数表决来设置单结点的话,那么应该设为负类,这样误判的个数就为8,同时还要乘以这棵子树中样本点占总体的权重。 因此

C(0)=1717×817=817 C(0)=\frac{17}{17}\times \frac{8}{17}=\frac{8}{17}

接着求C(T0)C(T_{0}),可以看出在T0T_{0}子树中,对应的6个叶子结点里,只有从左数第2个结点有1个误判。 因此

C(T0)=117 C(T_{0})= \frac{1}{17}

代入计算

g(0)=C(0)C(T0)T01=81711741=751 g(0)=\frac{C(0)-C(T_{0})}{|T_{0}|-1}=\frac{ \frac{8}{17}- \frac{1}{17}}{4-1}=\frac{7}{51}

α=min(α,g(0))=min(+,751)=751 \alpha=\min (\alpha,g(0))=\min \left(+\infty, \frac{7}{51}\right)=\frac{7}{51}

对于T1T_{1}子树而言,一共有9个样本点,其中7个正类,2个负类,如果按照多数表决来设置单结点的话,那么应该设为正类,这样误判的个数就为2,同时还要乘以这棵子树中样本点占总体的权重。 因此

C(1)=917×29=217 C(1)=\frac{9}{17}\times \frac{2}{9}=\frac{2}{17}

接着求C(T1)C(T_{1}),可以看出在T1T_{1}子树中,没有误判。因此

C(T1)=0 C(T_{1})=0

代入计算

g(1)=C(1)C(T1)T11=217031=117 g(1)=\frac{C(1)-C(T_{1})}{|T_{1}|-1}=\frac{ \frac{2}{17}-0}{3-1}=\frac{1}{17}

α=min(α,g(1))=min(751,117)=117 \alpha=\min (\alpha,g(1))=\min \left( \frac{7}{51}, \frac{1}{17}\right)=\frac{1}{17}

对于T2T_{2}子树而言,一共有8个样本点,其中7个正类,1个负类,如果按照多数表决来设置单结点的话,那么应该设为负类,这样误判的个数就为1,同时还要乘以这棵子树中样本点占总体的权重。 因此

C(2)=817×18=117 C(2)=\frac{8}{17}\times \frac{1}{8}=\frac{1}{17}

接着求C(T2)C(T_{2}),可以看出在T2T_{2}子树中,对应的2个叶结点中,没有误判,因此

C(T2)=0 C(T_{2})=0

代入计算

g(2)=C(2)C(T2)T21=117021=117 g(2)=\frac{C(2)-C(T_{2})}{|T_{2}|-1}=\frac{ \frac{1}{17}-0}{2-1}=\frac{1}{17}

α=min(α,g(2))=min(117,117)=117 \alpha=\min (\alpha,g(2))=\min \left( \frac{1}{17}, \frac{1}{17}\right)=\frac{1}{17}

可以看出,g(2)=g(1)=α=117g(2)=g(1)=\alpha=\frac{1}{17},因此不妨对内部节点T2T_{2}子树剪枝

![[附件/Pasted image 20221006204150.png|300]]

 

 

第二次迭代

对于T0T_{0}子树而言,一共有17个样本点,其中8个正类,9个负类,如果按照多数表决来设置单结点的话,那么应该设为负类,这样误判的个数就为8,同时还要乘以这棵子树中样本点占总体的权重。 因此

C(0)=1717×817=817 C(0)=\frac{17}{17}\times \frac{8}{17}=\frac{8}{17}

接着求C(T1)C(T_{1}),这里就发生了一些不一样,可以看出在T0T_{0}子树中,对应的三个叶结点里,对于T1T_{1}结点而言,由于这里拿正类结点替代,那么误判个数就变成了2个,因此:

C(T0)=217 C(T_{0})= \frac{2}{17}

代入计算

g(0)=C(0)C(T0)T01=81721731=317 g(0)=\frac{C(0)-C(T_{0})}{|T_{0}|-1}=\frac{ \frac{8}{17}- \frac{2}{17}}{3-1}=\frac{3}{17}

α=min(α,g(0))=min(117,317)=117 \alpha=\min (\alpha,g(0))=\min \left( \frac{1}{17}, \frac{3}{17}\right)=\frac{1}{17}

注意:在第二次迭代中,此时的α\alpha是第一轮中的结果,也就是117\frac{1}{17}

对于T0T_{0}子树而言,一共有9个样本点,其中7个正类,2个负类,如果按照多数表决来设置单结点的话,那么应该设为正类,这样误判的个数就为2,同时还要乘以这棵子树中样本点占总体的权重。 因此

C(1)=917× 29=217 C(1)= \frac{9}{17}\times  \frac{2}{9}=\frac{2}{17}

接着求C(T1)C(T_{1}),可以看出在T1T_{1}子树中,由于第一个叶结点属于正类,误判了1个。 因此:

C(T1)=117 C(T_{1})= \frac{1}{17}

 

个人理解,这里也是加权过的,即

C(T1)=917×19=117C(T_{1})=\frac{9}{17}\times \frac{1}{9}=\frac{1}{17}

 

代入计算

g(1)=C(1)C(T1)T11=21711721=117 g(1)=\frac{C(1)-C(T_{1})}{|T_{1}|-1}=\frac{ \frac{2}{17}- \frac{1}{17}}{2-1}=\frac{1}{17}

α=min(α,g(1))=min(117,117)=117 \alpha=\min (\alpha,g(1))=\min \left( \frac{1}{17}, \frac{1}{17}\right)=\frac{1}{17}

可以看出,这里的T1T_{1}子树对应的α\alpha是最小值,意味着对T1T_{1}剪枝

![[附件/Pasted image 20221006210016.png|300]]

 

 

第三次迭代

对于T0T_{0}子树而言,一共有17个样本点,其中8个正类,9个负类,如果按照多数表决来设置单结点的话,那么应该设为负类,这样误判的个数就为8,同时还要乘以这棵子树中样本点占总体的权重。 因此

C(0)=1717×817=817 C(0)=\frac{17}{17}\times \frac{8}{17}=\frac{8}{17}

接着求C(T1)C(T_{1}),这里就发生了一些不一样,可以看出在T0T_{0}子树中,对应的两个叶结点里,对于T1T_{1}结点而言,由于这里拿正类结点替代,那么误判个数就变成了3个,因此:

C(T0)=317 C(T_{0})= \frac{3}{17}

代入计算

g(0)=C(0)C(T0)T01=81731731=517 g(0)=\frac{C(0)-C(T_{0})}{|T_{0}|-1}=\frac{ \frac{8}{17}- \frac{3}{17}}{3-1}=\frac{5}{17}

α=min(α,g(0))=min(117,517)=117 \alpha=\min (\alpha,g(0))=\min \left( \frac{1}{17}, \frac{5}{17}\right)=\frac{1}{17}

T0T_{0}子树对应的不是最小α\alpha,因此不剪枝,同时根节点满足两个叶结点的停止条件,剪枝结束