Raki的统计学习方法笔记0x5章:决策树

本文深入探讨了决策树的学习过程,包括ID3、C4.5和CART算法,强调了信息增益与信息增益比在特征选择中的作用。此外,还详细阐述了决策树的剪枝策略,以防止过拟合,提升模型的泛化能力。最后,介绍了CART算法在回归树和分类树生成及剪枝中的应用。
摘要由CSDN通过智能技术生成

决策树(decision tree)是一种基本的分类回归方法。本章主要讨论用于分类的决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型。预测时,对新的数据,利用决策树模型进行分类。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。这些决策树学习的思想主要来源于由Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及由Breiman等人在1984年提出的CART算法。

本章首先介绍决策树的基本概念,然后通过ID3C4.5介绍特征的选择、决策树的生成以及决策树的修剪,最后介绍CART算法。

本章内容比较多,不过理解了的话很容易融会贯通

模型

决策树定义: 分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。

学习策略

决策树学习本质上是从训练数据集中归纳出一组分类规则,与训练数据集不相矛盾的决策树可能有多个也可能一个都没有,我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。

决策树学习的损失函数通常是正则化的极大似然估计函数

决策树对训练数据有很好的分类能力,但对未知的测试数据却未必有很好的分类能力,容易发生过拟合,所以需要对决策树进行剪枝

决策树学习算法包括:

  1. 特征选择
  2. 决策树生成
  3. 决策树剪枝

决策树的生成对应模型的局部选择,剪枝对应全局选择,所以分别考虑局部最优和全局最优

特征选择

特征选择在于选取对训练数据具有分类能力的特征,通常选用的准则是信息增益信息增益比

如果一个特征具有更好的分类能力,或者说按照这一特征讲训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就更应该选择这个特征。

信息增益

先给出熵与条件熵的定义,在信息论与概率统计中,熵是表示随机变量不确定的变量,设X是一个取有限个值的离散随机变量,其概率分布为:

P ( X = x i ) = p i , i = 1 , 2 , . . . , n \begin{aligned} P(X=x_i) = p_i, i=1,2,...,n \end{aligned} P(X=xi)=pi,i=1,2,...,n
则随机变量X的熵被定义为:
H ( X ) = − ∑ i = 1 n p i l o g p i \begin{aligned} H(X) = -\sum_{i=1}^np_ilogp_i \end{aligned} H(X)=i=1npilogpi
p i = 0 p_i=0 pi=0 ,则定义 0 l o g 0 = 0 0log0=0 0log0=0,由定义可知,熵与X的取值无关,所以也可以记作 H ( p ) H(p) H(p)
H ( p ) = − ∑ i = 1 n p i l o g p i \begin{aligned} H(p) = -\sum_{i=1}^np_ilogp_i \end{aligned} H(p)=i=1npilogpi

条件熵 H ( Y ∣ X ) H(Y|X) H(YX) 表示在已知随机变量X的条件下,随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵 H ( Y ∣ X ) H(Y|X) H(YX) ,定义为:X给定条件下,Y的条件概率分布 的 熵,对X的数学期望:
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) \begin{aligned} H(Y|X) = \sum_{i=1}^np_iH(Y|X = x_i) \end{aligned} H(YX)=i=1npiH(YX=xi)
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵

信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度

信息增益定义:特征 A A A 对训练数据集D的信息增益 g ( D , A ) g(D,A) g(D,A) 定义为集合 D D D 的经验熵 H ( D ) H(D) H(D)与特征 A A A在给定条件下 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA) 之差:
g ( D , A ) = H ( D ) − H ( D ∣ A ) \begin{aligned} g(D,A) = H(D) - H(D|A) \end{aligned} g(D,A)=H(D)H(DA)

一般地,熵 H ( Y ) H(Y) H(Y)与条件熵 H ( Y ∣ X ) H(Y|X) H(YX) 之差称为互信息。局册数学习中的信息增益等价于训练数据集中类与特征的互信息。

以信息增益作为划分训练数据集的特征,存在偏向选择取值较多的特征的问题,使用信息增益比可以对这一问题进行校正。

信息增益比定义:特征A对训练数据集D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A) 与训练集D关于特征A的熵 H A ( D ) H_A(D) HA(D) 之比,即:
g R ( D , A ) = g ( D , A ) H A ( D ) \begin{aligned} g_R(D,A) = \frac{g(D,A)}{H_A(D)} \end{aligned} gR(D,A)=HA(D)g(D,A)
其中 H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ \large H_A(D) = -\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi n n n 是特征 A A A 取值的个数

算法

ID3算法

输入:训练数据集 D D D,特征集 A A A 阈值 ε \varepsilon ε
输出:决策树 T T T
(1)若 D D D 中所有实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为改结点的类标记,返回 T T T
(2)若 A A A为空集,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T
(3)否则,选择信息增益最大的特征 A g A_g Ag
(4)如果 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε ,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T
(5)否则,对 A g A_g Ag的每一可能取值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子节点,由子节点构成树 T T T,返回 T T T
(6)对第 i i i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\{A_g\} A{Ag}为特征集,递归地调用(1)~(4),得到子树 T i T_i Ti,返回 T i T_i Ti

C4.5算法

输入:训练数据集 D D D,特征集 A A A 阈值 ε \varepsilon ε
输出:决策树 T T T
(1)若 D D D 中所有实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为改结点的类标记,返回 T T T
(2)若 A A A为空集,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T
(3)否则,选择信息增益比最大的特征 A g A_g Ag
(4)如果 A g A_g Ag的信息增益比小于阈值 ε \varepsilon ε ,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T
(5)否则,对 A g A_g Ag的每一可能取值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子节点,由子节点构成树 T T T,返回 T T T
(6)对第 i i i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\{A_g\} A{Ag}为特征集,递归地调用(1)~(4),得到子树 T i T_i Ti,返回 T i T_i Ti

ID3和C4.5的唯一区别就是一个使用信息增益另一个使用信息增益比

决策树的剪枝算法

决策时容易过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树,就有了剪枝,简化分类树模型

决策树剪枝往往通过极小化决策树整体的损失函数来实现,设树 T T T 的节点个数为 ∣ T ∣ |T| T t t t 是树 T T T 的叶结点,该叶结点上有 N t N_t Nt 个样本点,其中 k k k 类的样本有 N t k N_{tk} Ntk 个, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K H t ( T ) H_t(T) Ht(T) 为叶结点 t t t上的经验熵, α ≥ 0 \alpha\ge0 α0,则决策树学习的损失函数可以定义为:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ \begin{aligned} C_\alpha(T) = \sum_{t=1}^{|T|}N_tH_t(T) + \alpha|T| \end{aligned} Cα(T)=t=1TNtHt(T)+αT
其中经验熵为:
H t ( T ) = − ∑ k N t k N t l o g N t k N t \begin{aligned} H_t(T) = -\sum_k\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t} \end{aligned} Ht(T)=kNtNtklogNtNtk
在损失函数中,记作:
C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k l o g N t k N t \begin{aligned} C(T) = \sum_{t=1}^{|T|}N_tH_t(T) = -\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}log\frac{N_{tk}}{N_t} \end{aligned} C(T)=t=1TNtHt(T)=t=1Tk=1KNtklogNtNtk
这时有:
C α ( T ) = C ( T ) + α ∣ T ∣ \begin{aligned} C_\alpha(T) = C(T) + \alpha|T| \end{aligned} Cα(T)=C(T)+αT
C ( T ) C(T) C(T) 表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, ∣ T ∣ |T| T表示模型复杂度,参数 α ≥ 0 \alpha \ge 0 α0,控制两者之间的影响。 α \alpha α 越大表示选择越简单的模型, α = 0 \alpha=0 α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。

树的剪枝算法
输入:生成算法产生的整个树 T T T ,参数 α \alpha α
输出:修剪后的子树 T α T_\alpha Tα
(1)计算每个结点的经验熵
(2)递归地从树的叶结点向上回缩
(3)设一组叶结点回缩到其父结点之前与之后的整体树分别为 T B T_B TB T A T_A TA,其对应的损失函数值分别是 C a ( T B ) Ca(T_B) Ca(TB) C a ( T A ) Ca(T_A) Ca(TA),如果:
C a ( T A ) ≤ C a ( T B ) \begin{aligned} Ca(T_A) \le Ca(T_B) \end{aligned} Ca(TA)Ca(TB)
则进行剪枝,即将父结点变为新的叶结点。
(3)返回(2),直到不能继续为止,得到损失函数最小的子树 T α T_\alpha Tα

CART算法

CART算法由以下两步组成:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准

对回归树用平方误差最小化准则
对分类树用基尼指数最小化准则

回归树的生成

给定数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } D = \{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\} D={(x1,y1),(x2,y2),...,(xn,yn)}
一颗回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值,假设已将输入空间划分为 M M M 个单元 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM 并且在每个单元 R m R_m Rm 上有一个固定的输出值 c m c_m cm,于是回归树模型可以表示为
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) \begin{aligned} f(x)=\sum_{m=1}^Mc_mI(x\in R_m) \end{aligned} f(x)=m=1McmI(xRm)
当输入空间的划分确定时,可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \large \sum_{x_i \in R_m}(y_i - f(x_i))^2 xiRm(yif(xi))2来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值,单元 R m R_m Rm上的 c m c_m cm 最优值 c ^ m \hat{c}_m c^m R m R_m Rm上的所有输入实例 x i x_i xi 对应的输出 y i y_i yi 的均值,即:
c ^ m = a v e ( y i ∣ x i ∈ R m ) \begin{aligned} \hat{c}_m = ave(y_i|x_i \in R_m) \end{aligned} c^m=ave(yixiRm)
问题是怎样对输入空间进行划分,这里采用启发式的方法,选择第 j j j 个变量 x ( j ) x^{(j)} x(j) 和它取的值 s s s ,作为切分变量和切分点,并定义两个区域:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } 和 R 2 ( j , s ) = { x ∣ x ( j ) ≥ s } \begin{aligned} R_1(j,s)=\{x|x^{(j)} \le s\} 和 R_2(j,s)=\{x|x^{(j)} \ge s\} \end{aligned} R1(j,s)={xx(j)s}R2(j,s)={xx(j)s}
然后寻找最优切分变量 j j j 和最优切分点 s s s ,具体地,求解:
min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \begin{aligned} \mathop{\min}\limits_{j,s}\left[ \mathop{\min}\limits_{c_1} \sum_{x_i \in R_1(j,s)}(y_i - c_1)^2 + \mathop{\min}\limits_{c_2}\sum_{x_i \in R_2(j,s)}(y_i - c_2)^2 \right] \end{aligned} j,sminc1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2

对固定输入变量 j j j 可以找到最优切分点 s s s
c ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) 和 c ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( 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} c^1=ave(yixiR1(j,s))c^2=ave(yixiR2(j,s))
遍历所有输入变量,找到最优的切分变量 j j j ,构成一个对 ( j , s ) (j,s) (j,s) 。依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,知道满足条件为止。这也昂就生成一棵回归树。这样的回归树通常称为最小二乘回归树

最小二乘回归树生成算法:
输入:训练数据集D
输出:回归树fx
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
(1)选择最优切分变量j与切分点s,求解:
min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \begin{aligned} \mathop{\min}\limits_{j,s}\left[ \mathop{\min}\limits_{c_1} \sum_{x_i \in R_1(j,s)}(y_i - c_1)^2 + \mathop{\min}\limits_{c_2}\sum_{x_i \in R_2(j,s)}(y_i - c_2)^2 \right] \end{aligned} j,sminc1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2
遍历变量j,对固定的切分变量j扫描切分点s,选择使得上式达到最小值的js
(2)用选定的对js划分区域并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } 和 R 2 ( j , s ) = { x ∣ x ( j ) ≥ s } c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i x ∈ R m , m = 1 , 2 \begin{aligned} & R_1(j,s)=\{x|x^{(j)} \le s\} 和 R_2(j,s)=\{x|x^{(j)} \ge s\} \\ & \hat{c}_m = \frac{1}{N_m} \sum_{x_i \in R_m(j,s)}y_i \\ & x \in R_m, m=1,2 & \end{aligned} R1(j,s)={xx(j)s}R2(j,s)={xx(j)s}c^m=Nm1xiRm(j,s)yixRm,m=1,2
(3)继续对两个子区域调用步骤(1)(2),直到满足停止条件
(4)将输入空间划分为 M M M 个区域 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM 生成决策树:
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) \begin{aligned} f(x)=\sum_{m=1}^Mc_mI(x\in R_m) \end{aligned} f(x)=m=1McmI(xRm)

分类树的生成

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

基尼指数定义:

分类问题中,假设有 K K K 个类,样本点属于第 k k k 类的概率为 p k p_k pk ,则概率分布的基尼指数定义为:
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 \begin{aligned} Gini(p)=\sum_{k=1}^Kp_k(1-p_k) = 1 - \sum_{k=1}^Kp_k^2 \end{aligned} Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
对于二分类问题,若样本点属于第1个类的概率是p,则概率分布的基尼指数为:
G i n i ( p ) = 2 p ( 1 − p ) \begin{aligned} Gini(p)=2p(1-p) \end{aligned} Gini(p)=2p(1p)
对于给定的样本集合D,其基尼指数为:
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 \begin{aligned} Gini(D)= 1 - \sum_{k=1}^K(\frac{|C_k|}{|D|})^2 \end{aligned} Gini(D)=1k=1K(DCk)2
这里 C k C_k Ck D D D 中属于第 k k k 类的样本子集, K K K 是类的个数

基尼指数 G i n i ( D ) Gini(D) Gini(D) 表示集合 D 的不确定性,跟熵类似

CART生成算法

输入:训练数据集 D D D ,停止计算的条件;
输出: C A R T CART CART 决策树。
(1)设结点的训练数据集为 D D D ,计算现有特征对该数据集的基尼指数。此时,对每一个特征 A A A ,对其可能取的每个值 a a a ,根据样本点对 A = a A=a Aa 的测试为“是”或“否”将 D D D 分割成 D 1 D_1 D1 D 2 D_2 D2 两部分,计算 A = a A=a Aa 时的基尼指数。
(2)在所有可能的特征 A A A 以及它们所有可能的切分点 a a a 中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3)对两个子结点递归地调用(1),(2),直至满足停止条件。
(4)生成 C A R T CART CART 决策树。算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。
算法停止计算的条件是结点中的样本个数小于预定阈值,或者样本集的基尼指数小于预定阈值,或者没有更多特征

CART剪枝

CART剪枝算法由两步组成:

  1. 从生成算法产生的决策树 T 0 T_0 T0 底端开始不断剪枝,直到 T 0 T_0 T0 的根节点,形成一个子树序列 { T 0 , T 1 , . . . , T n } \{T_0,T_1,...,T_n\} {T0,T1,...,Tn}
  2. 通过交叉验证法在独立的验证数据集上对子树序列进行测试,丛中选择最优子树
剪枝,形成一个子树序列

在剪枝过程中,计算子树的损失函数:
C α ( T ) = C ( T ) + α ∣ T ∣ \begin{aligned} C_\alpha(T) = C(T) + \alpha|T| \end{aligned} Cα(T)=C(T)+αT
其中, T T T 为任意子树, C ( T ) C(T) C(T) 为对训练数据的预测误差(如基尼指数), ∣ T ∣ |T| T 为子树的叶结点个数, a ≥ 0 a≥0 a0为参数, C a ( T ) C_a(T) Ca(T)为参数是a时的子树T的整体损失。参数 a a a 权衡训练数据的拟合程度与模型的复杂度。

对固定的 a a a ,一定存在使损失函数 C a ( T ) C_a(T) Ca(T) 最小的子树,将其表示为 T a T_a Ta T a T_a Ta在损失函数 C a ( T ) C_a(T) Ca(T) 最小的意义下是最优的。容易验证这样的最优子树是唯一的。当 a a a 大的时候,最优子树 T a T_a Ta 偏小;当 a a a 小的时候,最优子树 T a T_a Ta 偏大。极端情况,当 a = 0 a=0 a0 时,整体树是最优的。当 a → ∞ a \rightarrow \infty a 时,根结点组成的单结点树是最优的。

具体地,从整体树 T 0 T_0 T0 开始剪枝,对 T 0 T_0 T0 的任意内部节点 t t t,以 t t t 为单结点树的损失函数是:
C α ( t ) = C ( t ) + α \begin{aligned} C_\alpha(t) = C(t) + \alpha \end{aligned} Cα(t)=C(t)+α
以t为根结点的子树 T t T_t Tt 的损失函数是:
C α ( T T ) = C ( T t ) + α ∣ T t ∣ \begin{aligned} C_\alpha(T_T) = C(T_t) + \alpha|T_t| \end{aligned} Cα(TT)=C(Tt)+αTt
α = 0 \alpha = 0 α=0以及充分小时,有不等式:
C α ( T t ) < C α ( t ) \begin{aligned} C_\alpha(T_t) < C_\alpha(t) \end{aligned} Cα(Tt)<Cα(t)

α \alpha α增大时,在某一 α \alpha α有:
C α ( T t ) = C α ( t ) \begin{aligned} C_\alpha(T_t) = C_\alpha(t) \end{aligned} Cα(Tt)=Cα(t)

α \alpha α再增大时,不等式反向,只要 α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \large \alpha = \frac{C(t)-C(T_t)}{|T_t|-1} α=Tt1C(t)C(Tt), T t T_t Tt t t t有相同的损失函数只,而 t t t 的节点少,因此 t t t T t T_t Tt更可取,对 T t T_t Tt 进行剪枝

为此,对T0中每一内部结点t,计算
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \begin{aligned} g(t)= \frac{C(t)-C(T_t)}{|T_t|-1} \end{aligned} g(t)=Tt1C(t)C(Tt)
它表示剪枝后整体损失函数减少的程度。在 T 0 T_0 T0 中剪去 g ( t ) g(t) g(t) 最小的 T t T_t Tt ,将得到的子树作为 T 1 T_1 T1 ,同时将最小的 g ( t ) g(t) g(t) 设为 a 1 a_1 a1 T 1 T_1 T1 为区间 [ a 1 , a 2 ) [a1,a2) [a1,a2)的最优子树。如此剪枝下去,直至得到根结点。在这一过程中,不断地增加 a a a 的值,产生新的区间。

在剪枝得到的子树序列 T 0 , T 1 , … , T n T_0,T_1,…,T_n T0,T1,,Tn中通过交叉验证选取最优子树 T a T_a Ta

具体地,利用独立的验证数据集,测试子树序列 T 0 , T 1 , … , T n T_0,T_1,…,T_n T0,T1,,Tn中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子树序列中,每棵子树 T 1 , T 2 , … , T n T_1,T_2,…,T_n T1,T2,,Tn都对应于一个参数 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an 。所以,当最优子树 T k T_k Tk 确定时,对应的 a k a_k ak也确定了,即得到最优决策树 T a T_a Ta

CART剪枝算法
输入:CART算法生成的决策树 T 0 T_0 T0
输出:最优决策树 T a T_a Ta
(1)设 k = 0 , T = T 0 k=0, T = T0 k=0T=T0
(2)设 α = ∞ \alpha = \infty α=
(3)自下而上地对各内部结点t计算 C ( T t ) , ∣ T t ∣ C(T_t),|T_t| C(Tt),Tt以及:
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 α = min ⁡ ( α , g ( t ) ) \begin{aligned} &g(t)= \frac{C(t)-C(T_t)}{|T_t|-1} \\ & \alpha = \mathop{\min}(\alpha,g(t)) \end{aligned} g(t)=Tt1C(t)C(Tt)α=min(α,g(t))
这里, T t T_t Tt 表示以 t t t 为根结点的子树, C ( T t ) C(T_t) C(Tt)是对训练数据的预测误差, ∣ T t ∣ |T_t| Tt T t T_t Tt 的叶结点个数。

(4)自上而下地访问内部结点 t t t ,如果有 g ( t ) = a g(t)=a g(t)a ,进行剪枝,并对叶结点t以多数表决法决定其类,得到树 T T T
(5)设 k = k + 1 , a k = a , T k = T k=k+1,a_k=a,T_k=T kk+1akaTkT
(6)如果 T T T 不是由根结点单独构成的树,则回到步骤(4)。
(7)采用交叉验证法在子树序列 T 0 , T 1 , … , T n T_0,T_1,…,T_n T0,T1,,Tn中选取最优子树 T a T_a Ta

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值