李航老师《统计学习方法》第五章阅读笔记

决策树(decision tree)是一种基本的分类与回归方法。本章主要讨论用于分类的决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。

以下是关于分类决策树的一些基本概念和特点:

  1. 树形结构:决策树模型呈现为一种树状结构,其中包括根节点、内部节点和叶子节点。每个节点表示一个特征或属性,每个边表示一个特征值或属性值的判断条件。从根节点开始,通过遵循不同的条件路径,最终到达叶子节点,叶子节点代表了一个类别标签或回归值。
  2. if-then规则:决策树可以看作是一组if-then规则的集合,每个规则表示一个从根节点到叶子节点的路径,其中包括特征条件和对应的类别标签。当新样本进入决策树时,它会根据特征的条件依次遵循路径,最终确定样本所属的类别。
  3. 条件概率分布:决策树也可以看作是定义在特征空间与类别空间上的条件概率分布。每个内部节点表示一个特征条件,每个叶子节点表示一个类别,并且沿着路径的条件概率决定了样本被分类到不同的类别。
  4. 学习过程:决策树的学习过程通常包括以下步骤:
    • 特征选择:选择最佳的特征作为根节点,以最大化分类效果。
    • 分裂节点:将数据集根据选定的特征进行分割,生成子节点。
    • 递归学习:对每个子节点递归应用上述步骤,直到达到停止条件(例如,达到最大深度、样本数量小于阈值等)。
    • 剪枝(可选):在生成决策树后,可以应用剪枝算法来减小过拟合风险。
  5. 优点:决策树具有易于理解和解释的特点,可以生成清晰的分类规则。它们适用于离散和连续特征,对缺失值具有一定的容忍性,且在某些情况下表现良好。
  6. 缺点:决策树容易过拟合训练数据,因此需要进行剪枝等正则化方法。它们可能在处理复杂问题时产生过多的规则,导致模型过于复杂。此外,决策树对数据中的噪声和不稳定性敏感。

决策树是一种强大的机器学习工具,适用于各种分类和回归任务。通过合适的参数调整和正则化方法,可以改善其性能并减小过拟合的风险。在实际应用中,决策树通常与集成学习方法(如随机森林和梯度提升树)相结合,以进一步提高模型的性能。

它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。

特征空间(Feature Space)和类空间(Class Space)是机器学习中常用的两个概念,它们用于描述模型和数据的属性。

  1. 特征空间(Feature Space)
    • 特征空间是指用来描述样本(数据点)的属性或特征的空间。每个样本可以在特征空间中表示为一个向量,其中每个维度对应一个特征。
    • 在特征空间中,每个维度表示一个特征,而每个样本由这些特征的值组成。例如,在文本分类任务中,特征空间可能包括词汇表中的单词,每个维度表示一个单词在文本中的出现次数或TF-IDF值。
    • 特征空间的维度取决于数据集中的特征数量,可以是高维的(包含许多特征)或低维的(包含较少的特征)。
  2. 类空间(Class Space)
    • 类空间是指用来描述样本所属类别或标签的空间。每个样本都被分配到类空间中的一个类别。
    • 在分类问题中,类空间包括所有可能的类别或标签。每个样本在类空间中被分配到一个类别,以表示其所属类别。
    • 类空间通常是离散的,每个类别由一个唯一的标识符表示。例如,二元分类问题中的类空间可能包括 “正类” 和 “负类” 两个类别。

在机器学习任务中,特征空间和类空间之间的映射关系是模型的关键。机器学习模型的目标是学习如何从特征空间中的数据映射到类空间中的类别。决策树、支持向量机、神经网络等各种模型都是用来建立特征空间到类空间的映射关系,并用于分类或回归任务。
总之,特征空间描述了数据的特征属性,而类空间描述了数据的类别或标签,它们在机器学习中是重要的概念,用于建模和解决各种问题。

其主要优点:1.模型具有可读性;2.分类速度快

阶段操作
学习时利用训练数据,根据损失函数最小化的原则建立决策树模型
预测时对新的数据,利用决策树模型进行分类

决策树学习通常包括3个步骤:特征选择->决策树的生成->决策树的修剪

5.1决策树模型与学习

5.1.1决策树模型

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

5.1.2决策树与if-then规则

5.1.3决策树与条件概率分布

5.1.4决策树学习

决策树学习用损失函数表示这一目标。如下所述,决策树学习的损失函数通常是正则化的极大似然函数。决策树学习的策略是以损失函数为目标函数的最小化。
当损失函数确定后,学习问题就变为在损失函数意义下选择最优决策树的问题。因为从所有可能的决策树中选取最优决策树是NP完全问题,所以现实中决策树学习算法通常采用启发式方法,近似求解这一最优化问题,这样得到的决策树是次最优(sub-optimal)的。

  1. 从所有可能的决策树中选择最优决策树是一个非常复杂的问题,它属于NP完全问题,这意味着在现实世界中,找到确切的最优解可能需要大量时间,甚至是不可行的。
  2. 为了解决这个问题,决策树学习算法通常采用一种称为启发式方法的策略。这就像在迷宫中找到出口,你可能不会尝试每个可能的路径,而是根据一些规则或经验选择下一步,希望最终找到出口。在决策树学习中,这些规则和经验可以是分裂节点的标准、剪枝策略、节点的排序等。
  3. 使用这些启发式方法,我们可以获得一个次最优(sub-optimal)的决策树,这意味着它可能不是全局最优解,但在实践中性能仍然很好。次最优的决策树通常能够很好地拟合训练数据,并且具有较好的泛化性能,可以用于对未见数据的分类或回归。

简而言之,决策树学习算法面临一个非常复杂的优化问题,通常无法找到全局最优解。因此,它使用一些经验法则和启发式方法来近似求解这个问题,最终得到一个次最优的决策树,以在实际应用中表现良好。这类似于在实际问题中使用经验和直觉来做出决策,而不是尝试每种可能的选择。

决策树学习算法包含特征选择、决策树的生成与决策树的剪枝过程。由于决策树表示一个条件概率分布,所以深浅不同的决策树对应着不同复杂度的概率模型。决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择。决策树的生成只考虑局部最优,相对地,决策树的剪枝则考虑全局最优

决策学习常用的算法有ID3、C4.5与CART,下面结合这些算法分别叙述决策树学习的特征选择、决策树的生成和剪枝过程。

5.2特征选择

5.2.1特征选择问题

通常特征选择的准则是信息增益信息增益比

5.2.2信息增益

为了便于说明,先给出熵与条件熵的定义
在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为
P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X=x_i)=p_i,i=1,2,...,n P(X=xi)=pi,i=1,2,...,n
则随机变量X的熵定义为(若 p i = 0 p_i=0 pi=0,则定义 0 l o g 0 = 0 0log0=0 0log0=0
H ( X ) = − ∑ i = 1 n p i l o g p i H(X)=-\sum\limits_{i=1}^n p_i log p_i H(X)=i=1npilogpi
由于熵只依赖于X的分布,而与X的取值无关,所以也可将X的熵记作H§,即
H ( p ) = − ∑ i = 1 n p i l o g p i H(p)=-\sum\limits_{i=1}^n p_i log p_i H(p)=i=1npilogpi
熵越大,随机变量的不确定性就越大。从定义可验证
0 ≤ H ( p ) ≤ l o g n 0≤H(p)≤log n 0H(p)logn

它是信息熵的基本性质之一。这是信息熵 H ( p ) H(p) H(p) 的性质,不需要再次证明。

设有随机变量 ( X , Y ) (X,Y) (X,Y),其联合概率分布为
P ( X = x i , Y = y j ) = p i j , i = 1 , 2 , . . . , n ; j = 1 , 2 , . . . , m P(X=x_i,Y=y_j)=p_{ij},i=1,2,...,n;j=1,2,...,m P(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,m
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵(conditional entropy)H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)=\sum\limits_{i=1}^n p_iH(Y|X=x_i) H(YX)=i=1npiH(YX=xi)
这里, p i = P ( X = x i ) , i = 1 , 2 , . . . , n p_i=P(X=x_i),i=1,2,...,n pi=P(X=xi),i=1,2,...,n

让我们通过一个简单的例子来计算条件熵。
假设我们有两个随机变量X和Y,它们的联合分布如下:

X/YY=1Y=2
X=10.20.1
X=20.30.4
X=30.10.2

首先,我们需要计算条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX),然后根据这个分布计算条件熵 H ( Y ∣ X ) H(Y|X) H(YX)。让我们按照步骤进行计算:
步骤 1:计算边际概率分布 P ( X ) P(X) P(X)
首先,我们计算随机变量X的边际概率分布 P ( X ) P(X) P(X),即X取每个可能值的概率。
P ( X = 1 ) = 0.2 + 0.1 + 0.1 = 0.4 P(X=1) = 0.2 + 0.1 + 0.1 = 0.4 P(X=1)=0.2+0.1+0.1=0.4
P ( X = 2 ) = 0.3 + 0.4 + 0.2 = 0.9 P(X=2) = 0.3 + 0.4 + 0.2 = 0.9 P(X=2)=0.3+0.4+0.2=0.9
P ( X = 3 ) = 0.1 + 0.2 = 0.3 P(X=3) = 0.1 + 0.2 = 0.3 P(X=3)=0.1+0.2=0.3
步骤 2:计算条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX)
接下来,我们计算条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX),即在给定X的条件下Y的概率分布。我们可以使用条件概率的定义来计算它:
P ( Y = 1 ∣ X = 1 ) = P ( X = 1 , Y = 1 ) P ( X = 1 ) = 0.2 0.4 = 0.5 P(Y=1|X=1) = \frac{P(X=1, Y=1)}{P(X=1)} = \frac{0.2}{0.4} = 0.5 P(Y=1∣X=1)=P(X=1)P(X=1,Y=1)=0.40.2=0.5
P ( Y = 2 ∣ X = 1 ) = P ( X = 1 , Y = 2 ) P ( X = 1 ) = 0.1 0.4 = 0.25 P(Y=2|X=1) = \frac{P(X=1, Y=2)}{P(X=1)} = \frac{0.1}{0.4} = 0.25 P(Y=2∣X=1)=P(X=1)P(X=1,Y=2)=0.40.1=0.25
P ( Y = 1 ∣ X = 2 ) = P ( X = 2 , Y = 1 ) P ( X = 2 ) = 0.3 0.9 = 1 3 P(Y=1|X=2) = \frac{P(X=2, Y=1)}{P(X=2)} = \frac{0.3}{0.9} = \frac{1}{3} P(Y=1∣X=2)=P(X=2)P(X=2,Y=1)=0.90.3=31
P ( Y = 2 ∣ X = 2 ) = P ( X = 2 , Y = 2 ) P ( X = 2 ) = 0.4 0.9 ≈ 0.4444 P(Y=2|X=2) = \frac{P(X=2, Y=2)}{P(X=2)} = \frac{0.4}{0.9} \approx 0.4444 P(Y=2∣X=2)=P(X=2)P(X=2,Y=2)=0.90.40.4444
P ( Y = 1 ∣ X = 3 ) = P ( X = 3 , Y = 1 ) P ( X = 3 ) = 0.1 0.3 ≈ 0.3333 P(Y=1|X=3) = \frac{P(X=3, Y=1)}{P(X=3)} = \frac{0.1}{0.3} \approx 0.3333 P(Y=1∣X=3)=P(X=3)P(X=3,Y=1)=0.30.10.3333
P ( Y = 2 ∣ X = 3 ) = P ( X = 3 , Y = 2 ) P ( X = 3 ) = 0.2 0.3 ≈ 0.6667 P(Y=2|X=3) = \frac{P(X=3, Y=2)}{P(X=3)} = \frac{0.2}{0.3} \approx 0.6667 P(Y=2∣X=3)=P(X=3)P(X=3,Y=2)=0.30.20.6667
步骤 3:计算条件熵 H ( Y ∣ X ) H(Y|X) H(YX)
现在我们可以使用条件熵的定义来计算 H ( Y ∣ X ) H(Y|X) H(YX),根据公式:
H ( Y ∣ X ) = ∑ i = 1 n P ( X = x i ) H ( Y ∣ X = x i ) H(Y|X) = \sum_{i=1}^n P(X=x_i) H(Y|X=x_i) H(YX)=i=1nP(X=xi)H(YX=xi)
代入我们计算得到的条件概率值:
H ( Y ∣ X ) = P ( X = 1 ) ⋅ [ − ( 0.5 log ⁡ 2 ( 0.5 ) + 0.25 log ⁡ 2 ( 0.25 ) ) ] + P ( X = 2 ) ⋅ [ − ( 1 3 log ⁡ 2 ( 1 3 ) + 0.4444 log ⁡ 2 ( 0.4444 ) ) ] + P ( X = 3 ) ⋅ [ − ( 0.3333 log ⁡ 2 ( 0.3333 ) + 0.6667 log ⁡ 2 ( 0.6667 ) ) ] H(Y|X) = P(X=1) \cdot [-(0.5 \log_2(0.5) + 0.25 \log_2(0.25))] + P(X=2) \cdot [-(\frac{1}{3} \log_2(\frac{1}{3}) + 0.4444 \log_2(0.4444))] + P(X=3) \cdot [-(0.3333 \log_2(0.3333) + 0.6667 \log_2(0.6667))] H(YX)=P(X=1)[(0.5log2(0.5)+0.25log2(0.25))]+P(X=2)[(31log2(31)+0.4444log2(0.4444))]+P(X=3)[(0.3333log2(0.3333)+0.6667log2(0.6667))]
计算每个部分的值并求和:
H ( Y ∣ X ) ≈ 0.8464 + 0.6492 + 0.6365 ≈ 2.1321 H(Y|X) \approx 0.8464 + 0.6492 + 0.6365 \approx 2.1321 H(YX)0.8464+0.6492+0.63652.1321
所以,在给定随机变量X的条件下,随机变量Y的条件熵 H ( Y ∣ X ) H(Y|X) H(YX) 约为2.1321。

当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。此时,若有0概率,令0log0=0

经验熵和经验条件熵是信息论中的概念,它们涉及到基于实际观测数据来估计随机变量的熵和条件熵。

  1. 经验熵(Empirical Entropy)
    经验熵是指根据实际观测数据来估计一个随机变量的熵。通常情况下,我们没有完全的先验知识,无法直接知道随机变量的概率分布。因此,我们可以使用观测到的数据来估计这个分布,最常见的估计方法之一是极大似然估计。通过统计数据中每个事件(或取值)的频率,我们可以估计随机变量的概率分布,然后计算熵。这个估计得到的熵被称为经验熵。
  2. 经验条件熵(Empirical Conditional Entropy)
    经验条件熵是在已知另一个随机变量的条件下,根据实际观测数据估计另一个随机变量的条件熵。与经验熵类似,我们可以使用观测到的数据来估计条件概率分布,然后计算条件熵。这个估计得到的条件熵被称为经验条件熵。

这两个概念的核心思想是,当我们不知道真实的概率分布,但有一些观测数据时,我们可以基于数据来估计信息熵和条件熵,以便在实际问题中应用信息论的概念。这对于机器学习、数据分析和模型建立等领域非常有用,因为通常我们只能获得有限的数据,而无法获得完整的概率分布信息。所以,经验熵和经验条件熵允许我们在缺乏完整信息的情况下进行信息论分析。

信息增益(information gain)表示得知特征X的信息而使得类Y的信息不确定性减少的程度
定义5.2(信息增益)特征A对训练数据集D的信息增益 g ( D , A ) g(D,A) g(D,A),定义为集合D的经验熵 H ( D ) H(D) H(D)与特征A给定条件下D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA)之差,即
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
一般地,熵H(Y)与条件熵H(Y|X)之差称为互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。

5.2.3信息增益比

以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题

当一个特征具有较多取值时,例如一个特征有很多可能的取值,那么在计算信息熵时,由于要考虑所有取值的信息熵,可能会造成信息熵较大。因此,这样的特征可能会更有可能被选为划分特征,因为它们有更高的信息增益。

信息熵在以下情况下会较大:

  1. 数据集的混乱程度高:当数据集中包含多个不同的类别或标签,而这些类别在数据集中分布较均匀、混合程度较高时,信息熵会变大。信息熵用于度量数据集的不确定性,如果数据集中的各个类别出现的概率接近相等,那么不确定性就很高,信息熵也会相应增大。
  2. 特征具有多个取值:如果某个特征具有多个不同的取值,而这些取值在数据集中分布较均匀,那么在计算条件熵时,需要考虑多个子集的信息熵,从而导致信息熵较大。这也是前面提到的信息增益可能偏向于选择取值较多的特征的情况。
  3. 数据集包含噪音:当数据集中包含大量噪音或错误标记的数据点时,数据集的混乱程度会增加,信息熵也会变大。噪音数据点会导致类别的不确定性增加,从而影响信息熵的大小。
  4. 样本数量较多:通常情况下,如果数据集中的样本数量较多,那么信息熵可能会变大,因为更多的样本会增加数据集的多样性,导致更高的不确定性。

总的来说,信息熵在面对混乱、多样性高、不确定性大的数据集或特征时会变大。信息熵的增大通常反映了数据集或特征的复杂性和不确定性的程度。在决策树等机器学习算法中,信息熵常用于度量数据集的纯度,高信息熵表示数据集更难以划分成纯净的子集,因此在划分时需要更多的决策。

使用信息增益比(information gain ratio)可以对这一问题进行校正。这是特征选择的另一准则。

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

5.3决策树的生成

5.3.1 ID3算法

ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。

5.3.2 C4.5的生成算法

C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征

5.4决策树的剪枝

决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往会出现过拟合现象,过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决办法是对已生成的决策树进行简化。

决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。
设树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上的经验熵, a ≥ 0 a≥0 a0为参数,则决策树学习的损失函数可以定义为
C a ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + a ∣ T ∣ C_a(T)=\sum\limits_{t=1}^{|T|}N_tH_t(T)+a|T| Ca(T)=t=1TNtHt(T)+aT

这个损失函数用于决策树学习的目标是在最小化树的复杂度和最小化每个叶结点上的经验熵之间寻找一个平衡。这个损失函数的形式可以解释如下:

  1. ∑ t = 1 ∣ T ∣ N t H t ( T ) \sum_{t=1}^{|T|} N_t H_t(T) t=1TNtHt(T):这一部分表示了模型对于训练数据的拟合程度。它将每个叶结点的经验熵加权求和,其中每个叶结点的经验熵 H t ( T ) H_t(T) Ht(T) 衡量了在该叶结点上的类别分布的不确定性。如果某个叶结点上的类别分布非常纯净(例如,一个叶结点上只有一种类别的样本),那么它的经验熵将接近零,表示模型在这个叶结点上的预测非常准确。而如果一个叶结点上的类别分布非常混乱,经验熵将较大,表示模型在这个叶结点上的预测不确定。总的来说, ∑ t = 1 ∣ T ∣ N t H t ( T ) \sum_{t=1}^{|T|} N_t H_t(T) t=1TNtHt(T) 表示了模型在训练数据上的拟合程度。
  2. a ∣ T ∣ a|T| aT:这一部分表示了模型的复杂度,其中 a a a 是一个用户定义的参数,用于平衡模型的复杂度和拟合程度。 ∣ T ∣ |T| T 是树的叶结点个数,表示模型的复杂度。增加 a a a 的值会惩罚模型更复杂的树结构,因为它会导致更多的叶结点,从而增加了模型的复杂性。这部分的目的是防止过拟合,即过多考虑训练数据的噪音。

因此,损失函数 C a ( T ) C_a(T) Ca(T) 综合考虑了两个方面的因素:模型在训练数据上的拟合程度(通过 ∑ t = 1 ∣ T ∣ N t H t ( T ) \sum_{t=1}^{|T|} N_t H_t(T) t=1TNtHt(T) 表示)和模型的复杂度(通过 a ∣ T ∣ a|T| aT 表示)。在决策树学习中,通常的目标是找到一个树结构,使得 C a ( T ) C_a(T) Ca(T) 达到最小值,即在拟合程度和模型复杂度之间找到一个平衡点,以获得具有较好泛化能力的模型。

其中经验熵为
H t ( T ) = − ∑ k N t k N t l o g N t k N t H_t(T)=-\sum\limits_k \frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t} Ht(T)=kNtNtklogNtNtk
在损失函数中,令
C a ( T ) = C ( T ) + a ∣ T ∣ C_a(T)=C(T)+a|T| Ca(T)=C(T)+aT

C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t N t k N t l o g N t k N t = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k l o g N t k N t C(T)=\sum\limits_{t=1}^{|T|}N_tH_t(T)=-\sum\limits_{t=1}^{|T|}\sum\limits_{k=1}^K N_t \frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t}=-\sum\limits_{t=1}^{|T|}\sum\limits_{k=1}^K N_{tk}log\frac{N_{tk}}{N_t} C(T)=t=1TNtHt(T)=t=1Tk=1KNtNtNtklogNtNtk=t=1Tk=1KNtklogNtNtk

C a ( T ) = C ( T ) + a ∣ T ∣ C_a(T)=C(T)+a|T| Ca(T)=C(T)+aT定义的损失函数的极小化等价于正则化的极大似然估计,所以,利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择

这是关于决策树剪枝与正则化的关系的一个重要观点。让我们一步步解释这个观点的含义。
首先,考虑到定义的损失函数 C a ( T ) = C ( T ) + a ∣ T ∣ C_a(T) = C(T) + a|T| Ca(T)=C(T)+aT,其中 C ( T ) C(T) C(T) 表示模型对训练数据的拟合程度, a a a 是一个正则化参数, ∣ T ∣ |T| T 表示叶结点的数量,即树的复杂度。这个损失函数的目标是在拟合程度和模型复杂度之间找到一个平衡。
接下来,正则化是一种常用于机器学习中的技术,旨在避免过拟合(即模型过于复杂,过度拟合训练数据)。正则化通常引入一个正则化项,它是模型复杂度的函数。在决策树中,正则化项就是 a ∣ T ∣ a|T| aT,其中 a a a 是正则化参数, ∣ T ∣ |T| T 是树的复杂度。
现在,关键的观点是:极小化定义的损失函数 C a ( T ) C_a(T) Ca(T) 实际上等价于进行正则化的极大似然估计。
正则化的极大似然估计的目标是在最大化似然函数的同时,考虑到模型复杂度,以防止过拟合。在决策树的情况下,似然函数可以看作是在给定模型(树)的情况下,观察到训练数据的概率。通过最大化这个似然函数,我们寻找一个树结构,以最好地拟合训练数据。
现在,如果我们考虑将正则化引入到极大似然估计中,那么我们的目标就是在最大化似然函数的同时,考虑到树的复杂度。这正是定义的损失函数 C a ( T ) C_a(T) Ca(T) 的目标,其中 C ( T ) C(T) C(T) 表示拟合程度(似然函数), a ∣ T ∣ a|T| aT 表示正则化项(模型复杂度)。
因此,极小化损失函数 C a ( T ) C_a(T) Ca(T) 实际上等价于进行正则化的极大似然估计,因为它在拟合程度和模型复杂度之间找到了一个平衡,类似于正则化技术的作用。在决策树的情况下,通过剪枝操作,我们可以调整树的复杂度,以便在测试数据上获得更好的泛化性能,从而实现模型选择的目标。这就解释了为什么可以说决策树的剪枝实际上是一种正则化的极大似然估计。

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

书中,老师特意提到上式只需考虑两个树得损失函数的差,其计算可以在局部进行。所以,决策树的剪枝算法可以由一种动态规划的算法实现。类似的动态规划算法可以参见书中文献[10]

动态规划(Dynamic Programming,简称DP)是一种解决复杂问题的算法思想,通常用于求解那些可以被分解成多个子问题并且子问题之间有重叠的问题。动态规划通过将问题划分为较小的子问题,然后将子问题的解保存起来,以避免重复计算,从而提高效率。
让我用一个通俗易懂的例子来说明动态规划。
例子:斐波那契数列
斐波那契数列是一个经典的数学问题,其规律如下:数列的第一个和第二个数字都是1,从第三个数字开始,每个数字都是前两个数字之和。数列的前几项如下:1, 1, 2, 3, 5, 8, 13, 21, …

现在,假设我们想要计算斐波那契数列的第 n 个数字,其中 n 可能非常大。如果我们采用朴素的递归方法来计算第 n 个数字,会存在大量的重复计算,效率非常低下。
如果使用朴素的递归方法来计算斐波那契数列的第 n 个数字,会导致大量的重复计算,效率非常低下。递归的方式直接按照数列定义来计算,没有保存已经计算过的结果,因此在计算过程中会反复计算相同的子问题,导致指数级的时间复杂度。
下面是采用朴素的递归方法计算第 n 个斐波那契数的示例代码(Python):

def fibonacci_recursive(n):
   if n <= 2:
       return 1
   else:
       return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)

print(fibonacci_recursive(10))  # 输出第10个斐波那契数:55

在这个递归函数中,如果 n 小于等于 2,就返回1,因为斐波那契数列的前两个数字都是1。对于大于2的 n,递归函数调用自身来计算第 n-1 和第 n-2 个斐波那契数,然后将它们相加。这种递归方式会不断分解问题,但会产生许多重复的计算,尤其是在计算较大的 n 时,会导致非常慢的计算速度。因此,朴素递归不适合用于计算斐波那契数列的大数字。

这时就可以使用动态规划来解决这个问题。动态规划的思路是:我们从小到大依次计算斐波那契数列的每一项,并将计算结果保存起来,以便后续使用。具体步骤如下:

  1. 初始化斐波那契数列的前两项为1和1。
  2. 从第三项开始,通过将前两项相加得到当前项的值,然后将当前项保存起来。
  3. 重复步骤2,直到计算到第 n 项。

这样,我们避免了重复计算,大大提高了计算效率。这就是动态规划的核心思想:将问题分解成子问题,并使用存储来避免重复计算。
示例代码(Python):

def fibonacci(n):
   if n <= 2:
       return 1
   fib = [0] * (n + 1)
   fib[1] = 1
   fib[2] = 1
   for i in range(3, n + 1):
       fib[i] = fib[i - 1] + fib[i - 2]
   return fib[n]

print(fibonacci(10))  # 输出第10个斐波那契数:55

这个例子中,我们使用了一个列表 fib 来保存已经计算过的斐波那契数,避免了重复计算,从而高效地得到了第 n 个斐波那契数。这就是动态规划的一种典型应用。

5.5 CART算法

CART同样由特征选择、树的生成及剪枝组成,既可用于分类也可用于回归。以下将用于分类与回归的树统称为决策树。
CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。

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

5.5.1 CART生成

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

1.回归树的生成

假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集,考虑如何生成回归树
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个单元 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 ) f(x)=\sum\limits_{m=1}^M c_mI(x\in R_m) f(x)=m=1McmI(xRm)
当输入空间的划分确定时,可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum\limits_{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 ) \hat c_m=ave(y_i|x_i \in R_m) c^m=ave(yixiRm)

取均值的目的是最小化平均平方误差,这在统计学中是一种常见的优化目标,通常称为最小二乘法(Least Squares)。为了理解为什么取均值可以最小化预测误差,让我们考虑一下平均平方误差的性质:
平均平方误差(Mean Squared Error,MSE)用于衡量预测值与真实值之间的差异,其计算方式如下:
M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2
其中, n n n 是样本数量, y i y_i yi 是真实的输出值, y ^ i \hat{y}_i y^i 是预测的输出值。我们的目标是找到一种方式来选择 y ^ i \hat{y}_i y^i 以最小化 MSE。
现在,考虑在给定一组真实输出值 y 1 , y 2 , … , y n y_1, y_2, \ldots, y_n y1,y2,,yn 的情况下,我们要选择一个值 y ^ \hat{y} y^ 来代表这组真实输出值。我们可以将这个问题看作是选择一个常数 y ^ \hat{y} y^,使得平均平方误差最小。

  1. 选择均值 y ^ = mean ( y 1 , y 2 , … , y n ) \hat{y} = \text{mean}(y_1, y_2, \ldots, y_n) y^=mean(y1,y2,,yn)
    当我们选择 y ^ \hat{y} y^ 为这组真实输出值的均值时,即 y ^ = 1 n ∑ i = 1 n y i \hat{y} = \frac{1}{n} \sum_{i=1}^n y_i y^=n1i=1nyi,我们可以证明这是最小化平均平方误差的最优选择。
    证明的思路是通过微积分(对 y ^ \hat{y} y^ 求偏导数并令其等于零),我们可以找到最小化 MSE 的 y ^ \hat{y} y^。结果是,取均值是最小化平方误差的最佳选择。
  2. 其他选择 y ^ \hat{y} y^
    如果我们选择一个不是均值的值 y ^ \hat{y} y^,那么平方误差就会变大,因为均值是平均平方误差最小的选择。

综上所述,选择均值作为代表一组真实输出值的值 y ^ \hat{y} y^ 是最小化平均平方误差的最佳选择。这就解释了为什么在回归树等问题中,我们通常使用均值来代表叶子节点上的输出值,因为它最小化了预测误差,使得模型在训练数据上能够更好地拟合。

问题是怎样对输入空间进行划分。这里采用启发式的方法,选择第 j j j个变量 x ( j ) x^{(j)} x(j)和它取得值 s s s,作为切分变量(splitting variable)和切分点(splitting point),并定义两个区域:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } 和 R 2 ( j , s ) = { x ∣ x ( j ) > s } R_1(j,s)=\{x|x^{(j)}≤s\}和R_2(j,s)=\{x|x^{(j)}>s\} R1(j,s)={xx(j)s}R2(j,s)={xx(j)s}
然后寻找最优切分变量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 ] \min\limits_{j,s}[\min\limits_{c_1}\sum\limits_{x_i \in R_1(j,s)}(y_i-c_1)^2+\min\limits_{c_2}\sum\limits_{x_i \in R_2(j,s)}(y_i-c_2)^2] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]

min ⁡ c 1 \min\limits_{c_1} c1min:这表示要对 c 1 c_1 c1 进行最小化的操作,即在一系列可能的 c 1 c_1 c1 值中,找到能够使后面的表达式取得最小值的 c 1 c_1 c1

对固定输入变量j可以找到最优切分点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 ) ) \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)) c^1=ave(yixiR1(j,s))c^2=ave(yixiR2(j,s))
遍历所有输入变量,找到最优的切分变量 j j j,构成一个对 ( j , s ) (j,s) (j,s)。依次将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件为止。这样就生成一棵回归树,这样的回归树通常称为最小二乘回归树(least squares regression tree)

这段描述是关于构建最小二乘回归树(least squares regression tree)的过程。让我来解释一下:

  1. 输入空间的划分:在构建回归树时,首先要决定如何划分输入空间,以找到最佳的切分变量(splitting variable)和切分点(splitting point)。切分变量是输入特征的某个维度,切分点是该特征的一个值。这个划分会将输入空间分为两个区域,即 R 1 ( j , s ) R_1(j, s) R1(j,s) R 2 ( j , s ) R_2(j, s) R2(j,s)。其中, R 1 ( j , s ) R_1(j, s) R1(j,s) 包含所有特征 x x x 中第 j j j 维度的值小于或等于 s s s 的样本,而 R 2 ( j , s ) R_2(j, s) R2(j,s) 包含所有特征 x x x 中第 j j j 维度的值大于 s s s 的样本。
  2. 目标函数:为了确定最佳的切分变量 j j j 和切分点 s s s,我们需要定义一个目标函数,这个目标函数的目标是最小化平方误差。目标函数由以下两部分组成:
    • 第一部分: min ⁡ c 1 \min\limits_{c_1} c1min 表示在区域 R 1 ( j , s ) R_1(j, s) R1(j,s) 上寻找最佳的输出值 c 1 c_1 c1,以最小化该区域内样本的平方误差。这意味着我们要在 R 1 ( j , s ) R_1(j, s) R1(j,s) 内找到一个最优的输出值 c 1 c_1 c1,使得该区域内的样本的预测误差最小。
    • 第二部分: min ⁡ c 2 \min\limits_{c_2} c2min 表示在区域 R 2 ( j , s ) R_2(j, s) R2(j,s) 上寻找最佳的输出值 c 2 c_2 c2,以最小化该区域内样本的平方误差。同样,我们要在 R 2 ( j , s ) R_2(j, s) R2(j,s) 内找到一个最优的输出值 c 2 c_2 c2,使得该区域内的样本的预测误差最小。
  3. 寻找最优切分变量和切分点:为了找到最佳的切分变量 j j j 和切分点 s s s,需要遍历所有可能的特征维度和特征值,对每一组 ( j , s ) (j, s) (j,s) 都计算上述目标函数的值,然后选择使目标函数最小的 ( j , s ) (j, s) (j,s) 组合。这一步是关键,因为它决定了如何划分输入空间,以最小化预测误差。
  4. 递归划分:一旦找到最佳的切分变量和切分点 ( j , s ) (j, s) (j,s),将输入空间划分为两个区域 R 1 ( j , s ) R_1(j, s) R1(j,s) R 2 ( j , s ) R_2(j, s) R2(j,s)。然后,对每个子区域分别重复上述步骤,直到达到停止条件为止。这样递归地构建回归树,每个叶子节点上的输出值由对应区域内样本的平均值计算得到。

最终,生成的回归树会以一种递归分割的方式来拟合训练数据,以最小化平方误差。这种回归树通常称为最小二乘回归树,它是一种用于回归问题的机器学习模型,能够根据输入特征来预测连续型输出。

2.分类树的生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
定义5.4(基尼指数)分类问题中,假设有 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 Gini(p)=\sum\limits_{k=1}^K p_k(1-p_k)=1-\sum\limits_{k=1}^K p_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
对于二类分类问题,若样本点属于第1个类的概率是p,则概率分布的基尼指数为
G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1-p) Gini(p)=2p(1p)
对于给定的样本集合D,其基尼指数为
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum\limits_{k=1}^K(\frac{|C_k|}{|D|})^2 Gini(D)=1k=1K(DCk)2
这里, C k C_k Ck D D D中属于第 k k k类的样本子集, K K K是类的个数。

如果样本集合 D D D根据特征 A A A是否取某一可能值 a a a被分割成 D 1 D_1 D1 D 2 D_2 D2两部分,即
D 1 = { ( x , y ) ∈ D ∣ A ( x ) = a } , D 2 = D − D 1 D_1=\{(x,y)\in D|A(x)=a\},D_2=D-D_1 D1={(x,y)DA(x)=a},D2=DD1
则在特征 A A A的条件下,集合 D D D的基尼指数定义为
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)
基尼指数 G i n i ( D ) Gini(D) Gini(D)表示集合 D D D的不确定性,基尼指数 G i n i ( D , A ) Gini(D,A) Gini(D,A)表示经 A = a A=a A=a分割后集合D的不确定性。
基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。
在这里插入图片描述

5.5.2 CART剪枝

CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测。CART剪枝算法由两步组成:首先从生成算法产生的决策树T_0底端不断开始剪枝,直到T_0的根结点,形成一个子树序列{T_0,T_1,…,T_n};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

交叉验证法(Cross-Validation)是一种常用于评估机器学习模型性能的统计方法。它通过将数据集分成训练集和验证集的多个子集,反复训练和测试模型,以综合评估模型的性能。交叉验证的主要目的是检测模型是否过拟合或者欠拟合,以及选择最优的模型参数。
以下是交叉验证的基本步骤:

  1. 数据集分割:将原始数据集分成两个部分,一个是训练集(Training Set),用于训练模型;另一个是验证集(Validation Set),用于评估模型性能。通常,将数据集划分为K个互不重叠的子集,其中一个子集作为验证集,其余K-1个子集作为训练集。
  2. 模型训练与测试:对于每一轮的交叉验证,使用K-1个子集进行模型训练,然后用剩下的一个子集进行模型测试。这样,每个子集都会轮流充当验证集,而其他子集则用于训练。
  3. 性能评估:针对每一轮的验证集,计算模型的性能指标,如准确率、均方误差、F1分数等。这些性能指标可以用于评估模型在不同验证集上的表现。
  4. 平均性能:对K轮交叉验证的性能指标进行平均,得到模型的综合性能评估。这个综合性能评估可以更准确地反映模型的性能,而不会受到单次随机分割数据的影响。
  5. 模型选择:可以根据不同模型或模型参数的性能表现选择最佳的模型或参数。通常,选择性能最好的模型或参数,以提高模型的泛化能力。

交叉验证有不同的变种,最常见的是K折交叉验证(K-Fold Cross-Validation),其中数据被分成K个子集。还有留一交叉验证(Leave-One-Out Cross-Validation,LOOCV),每次只留下一个样本作为验证集,其余作为训练集。选择适当的交叉验证方法取决于问题的性质和数据集的大小。

1.剪枝,形成一个子树序列

在剪枝过程中,计算子树的损失函数:
C a ( T ) = C ( T ) + a ∣ T ∣ C_a(T)=C(T)+a|T| Ca(T)=C(T)+aT
其中, 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 a a时的子树 T T 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 = 0 a=0 a=0整体树是最优的
a → ∞ a\to∞ a根结点组成的单结点树是最优的

Breiman等人证明:可以用递归的方法对树进行剪枝。将a从小增大, 0 = a 0 < a 1 < . . . < a n < + ∞ 0=a_0<a_1<...<a_n<+∞ 0=a0<a1<...<an<+,产生一系列的区间 [ a i , a i + 1 ) , i = 0 , 1 , . . . , n [a_i,a_{i+1}),i=0,1,...,n [ai,ai+1),i=0,1,...,n;剪枝得到的子树系列对应着区间 a ∈ [ a i , a i + 1 ) , i = 0 , 1 , . . . , n a \in[a_i,a_{i+1}),i=0,1,...,n a[ai,ai+1),i=0,1,...,n的最优子树序列 { T 0 , T 1 , . . . , T n } \{T_0,T_1,...,T_n\} {T0,T1,...,Tn},序列中的子树是嵌套的。

这句话的意思是,当我们构建决策树时,有一种方法可以让树变得更简单。这种方法涉及一个参数,我们可以逐渐调整这个参数的值。这个参数的范围是从零一直增加到非常大的值。
当这个参数的值很小的时候,我们的决策树可以变得非常复杂,它可以很好地适应训练数据,但有可能会在一些噪声或细节上过于敏感,导致在新数据上表现不佳。
但是,随着参数值的增加,我们开始对决策树进行修剪。这意味着我们会剪掉一些树的分支,使得树变得更简单。这个过程会持续,直到我们将树剪得足够简单,以便在新数据上有更好的表现。
这里的关键点是,我们可以根据参数的不同取值,得到一系列不同复杂度的决策树。这些树之间是有关联的,也就是说,每个树都包含在下一个树中,但它们的复杂度逐渐减小。

“每个树都包含在下一个树中” 意味着每个剪枝后的树都是基于前一个树修改得到的,而且它们之间存在嵌套关系,即新的树是前一个树的简化版本。这个过程会不断迭代,直到我们获得一个适度复杂的树,以满足我们的模型要求。

具体地,从整体树 T 0 T_0 T0开始剪枝。对 T 0 T_0 T0的任意内部结点 t t t,以 t t t为单结点树的损失函数是
C a ( t ) = C ( t ) + a C_a(t)=C(t)+a Ca(t)=C(t)+a
t t t为根结点的子树 T t T_t Tt的损失函数是
C a ( T t ) = C ( T t ) + a ∣ T t ∣ C_a(T_t)=C(T_t)+a|T_t| Ca(Tt)=C(Tt)+aTt
a = 0 a=0 a=0 a a a充分小时,有不等式
C a ( T t ) < C a ( t ) C_a(T_t)<C_a(t) Ca(Tt)<Ca(t)

在文中提到的上下文中,以 t t t 为单节点树(单结点树)和以 t t t 为根节点的子树 T t T_t Tt 不是同一个东西,它们有区别。

  1. t t t 为单节点树(单结点树):这是一棵非常简单的树,只包含一个节点 t t t,没有任何分支或子节点。这个节点 t t t 就是整棵树的唯一节点,没有其他分支或子树。它可以被看作是一种最简单的树,通常用于表示非常简单的决策或规则。
  2. t t t 为根节点的子树 T t T_t Tt:这是一棵以节点 t t t 为根的子树,它包含了节点 t t t 及其所有子节点和叶子节点。子树 T t T_t Tt 可能会比以 t t t 为单节点树复杂得多,因为它包含了树的一部分或全部,而不仅仅是单一的节点。

在剪枝过程中,我们通常考虑将以 t t t 为根节点的子树 T t T_t Tt 进行剪枝,而不是将节点 t t t 本身剪枝成单节点树。剪枝子树 T t T_t Tt 意味着我们保留了一部分树的结构,只是移除了一些不必要的分支或叶子节点,以降低树的复杂度。这种做法通常更有利于控制模型的复杂度和提高泛化能力。
所以,以 t t t 为单节点树和以 t t t 为根节点的子树 T t T_t Tt 是不同的东西,前者只包含一个节点,后者包含了更多的节点和结构。

a a a增大时,在某一 a a a
C a ( T t ) = C a ( t ) C_a(T_t)=C_a(t) Ca(Tt)=Ca(t)

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

为此,对 T 0 T_0 T0中每一内部结点 t t t,计算
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t)=\frac{C(t)-C(T_t)}{|T_t|-1} 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 ) [a_1,a_2) [a1,a2)的最优子树。

如此剪枝下去,直至得到根结点。在这一过程中,不断地增加a的值,产生新的区间。

————————————————————看不下去了,等缓缓再看^_^

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值