24秋机器学习笔记-08-树模型

Last updated on April 10, 2026 6:12 PM

一键回城。

决策树

回忆:我们之前的很多模型都可以写成 y=wTx+by = w^Tx+b,决策逻辑(二分类):f(x)≥0f(x)\ge0 时预测为 11,否则预测为 00。

事实上这个逻辑可以写成一个树。

IMG_1727

我们之前学习的模型多为线性模型,为了应对非线性性,我们可以考虑引入决策树。

决策树定义:一棵包含根节点、内部节点、叶子节点和有向边的树,每个非叶节点会将数据根据某种特性进行划分,一个数据点的预测值即为其对应的叶子节点对应的标签。

An example:

y∈{−1,+1}y \in \{-1,+1\},+1+1 表示其为一个好的研究者,−1-1 表示其为一个不好的研究者。

收集的数据如下:

ID A B C y
1 √ √ √ +1+1
2 √ √ × +1+1
3 √ × √ −1-1
4 × × × −1-1
5 × √ × −1-1
6 × × √ −1-1
7 × √ × −1-1
8 √ × √ −1-1
9 × √ × −1-1

A 表示是否勤奋,B 表示是否有好的视野,C 表示是否喜欢吃香蕉(?)

一个可能的决策树如下:

tree_model_decision_tree

如果给定了一个十号数据点,{√,√,×}\{√,√,×\},用该决策树对其进行预测,则可得到结果为 +1+1。

但是如果用 C 特征呢?会发现划分出来的东西不是很纯

熵

如何进行数据的划分?一个好的划分准则应当尽可能纯地进行划分数据。但是现实中如上面一般简洁的例子是不太可能存在的,所以我们需要定量地进行研究。

“纯度“的反义词就是“混乱程度”,自然想到用熵去进行度量。

对于离散随机变量 XX,其熵被定义为

H(X)=∑xp(x)log⁡1p(x)=−∑xp(x)log⁡p(x)H(X)= \sum_x p(x) \log \frac{1}{p(x)} = -\sum_x p(x)\log p(x)

此处 log⁡\log 以 22 为底数,熵的单位为 bits。考虑扔 33 次硬币,硬币均匀,XX 表示结果。H(X)=3H(X)=3,对应我们需要用 33 个 bits 来描述结果。但如果第三个硬币永远是正面,此时 H(X)=2H(X)=2,也就不需要第三个 bit 来编码第三个硬币了。

对于一个事件 X=xX = x,p(x)p(x) 越低,其“包含的信息量”越高,我们就用的是 log⁡1p(x)\displaystyle \log \frac{1}{p(x)} 表示所谓的“信息量”。例如,x=x=“太阳在东方升起”,p(x)=1p(x)=1,“包含的信息量极低”。又例如,x=x=“掷一个均匀骰子 33 次,得到三个 66”,p(x)=(16)3\displaystyle p(x) = \left( \frac{1}{6} \right)^3,log⁡1p(x)≈7.75≫0\displaystyle \log \frac{1}{p(x)} \approx 7.75 \gg 0,说明其“信息量”高,这是合理的。

而这个 H(X)H(X) 衡量的就是所有事件的平均“信息量”,所以对 log⁡1p(x)\displaystyle \log \frac{1}{p(x)} 求期望也是不难理解的了。即衡量系统的不确定性,或者说混乱程度。

性质:

  • 下界:H(X)≥0H(X)\ge 0 恒成立。显然。当 ∃x\exists x 使得 p(x)=1p(x)=1 时,等号成立。
  • 上界:H(X)≤log⁡(∑xp(x)1p(x))=log⁡n\displaystyle H(X)\le \log\left( \sum_x p(x) \frac{1}{p(x)} \right) = \log n,该上界由琴生不等式得到,考虑 log⁡\log 的凹性(concavity)。等号当且仅当 ∀x,p(x)=1n\forall x,p(x) \displaystyle =\frac{1}{n},这也是很符合直觉的。

条件熵与互信息

对于两个随机变量 X,YX,Y,可以定义其互信息(mutual information)

I(X;Y)=H(Y)−H(Y∣X)I(X;Y) = H(Y) - H(Y\mid X)

H(Y∣X)H(Y\mid X) 为条件熵(conditional entropy),意为观测到 XX 后 YY 的不确定度。这里假设 xx 有 mm 种可能取值。

H(Y∣X)=∑i∈[m]P(X=xi)H(Y∣X=xi)H(Y\mid X) = \sum_{i \in [m]}P(X=x_i) H(Y\mid X=x_i)

而 I(X;Y)I(X;Y) 衡量的就是某种观察到 XX 后,YY 的不确定度的减少程度,也可以理解为 XX 中与 YY 有关的信息量。

XX 与 YY 越相关,I(X;Y)I(X;Y) 越大。其关系可以大致用如下的图表示:

conditional_entropy_and_mutual_info

事实上可以发现,I(X;Y)I(X;Y) 具有对称性,即 I(X;Y)=H(Y)−H(Y∣X)=H(X)−H(X∣Y)I(X;Y) = H(Y) - H(Y\mid X) = H(X) - H(X\mid Y)。且 I(X;Y)=H(X)+H(Y)−H(X,Y)I(X;Y) = H(X)+H(Y) - H(X,Y)。

以及,当 X,YX,Y 独立时,I(X;Y)=0I(X;Y) = 0,这是很符合直觉的。

信息增益(Information Gain)

信息增益(information gain)被定义为

g(D,A)=H(D)−H(D∣A)g(D,A) = H(D) - H(D\mid A)

记号约定:DD 为训练集,AA 为某种属性(假设其为离散的,A∈{a1,⋯ ,am}A \in \{a_1, \cdots ,a_m\},有 mm 种离散取值),且假设问题为多分类问题,即 y∈[K]y \in [K]。

H(D)H(D) 表示还未划分前,训练集中标签的纯度,定义为

H(D)=−∑k∈[K]∣Ck∣∣D∣log⁡∣Ck∣∣D∣H(D) = -\sum_{k \in [K]} \frac{|C_k|}{|D|} \log \frac{|C_k|}{|D|}

其中 CkC_k 表示 DD 中标签为 kk 的数据构成的子集,∣Ck∣∣D∣\displaystyle \frac{|C_k|}{|D|} 事实上就是在衡量 P(y=k)P(y = k)。

H(D∣A)H(D\mid A) 定义为

H(D∣A)=∑i∈[m]∣Di∣∣D∣⋅H(D∣A=ai)=−∑i∈[m]∣Di∣∣D∣∑k∈[K]∣Di∩Ck∣∣Di∣log⁡∣Di∩Ck∣∣Di∣\begin{aligned} H(D\mid A) &= \sum_{i \in [m]} \frac{|D_i|}{|D|}\cdot H(D\mid A = a_i) \\ &= -\sum_{i \in [m]} \frac{|D_i|}{|D|} \sum_{k \in [K]} \frac{|D_i \cap C_k|}{|D_i|} \log \frac{|D_i \cap C_k|}{|D_i|} \end{aligned}

DiD_i 表示 DD 中满足 A=aiA=a_i 的数据构成的子集,∣Di∩Ck∣∣Di∣\displaystyle \frac{|D_i \cap C_k|}{|D_i|} 就是在度量 P(y=k∣A=ai)P(y = k\mid A =a_i)。

g(D,A)g(D,A) 就表示的是,用 AA 划分 DD 后,能使得混乱程度减少多少,即 A∗=arg max⁡Ag(D,A)\displaystyle A^* = \argmax_A g(D,A)。

结合前面的条件熵相关知识,我们发现 g(D,A)g(D,A) 的本质就是 H(y)−H(y∣A)=I(y;A)H(y) - H(y\mid A) = I(y;A),要选择一个与 yy 的互信息最大的 AA,这也是很符合直觉的。

例:假设有特征 A,BA,B,AA 有两个离散等概率取值 a1,a2a_1,a_2,BB 有十个离散等概率取值 b1,⋯ ,b10b_1,\cdots,b_{10},分类标签 y∈[10]y \in [10] 且在数据集 DD 内均匀分布。假设 yy 在每个 bib_i 下是“纯的”,且 A=a1  ⟹  y≤5,A=a2  ⟹  y≥6A=a_1 \implies y \le 5,A=a_2\implies y \ge 6(也各自是等概率的,即 P(y=i∣A=a1)=15,∀i∈[5]\displaystyle P(y=i\mid A=a_1) = \frac{1}{5}, \forall i \in [5],a2a_2 的情况同理),计算 g(D,A)g(D,A) 与 g(D,B)g(D,B)。

首先,P(A=ai)=12,P(B=bi)=110\displaystyle P(A=a_i) = \frac{1}{2},P(B = b_i) = \frac{1}{10}。

H(D∣A=a1)=−∑i∈[5]15log⁡15=log⁡5H(D∣A=a2)=log⁡5H(D\mid A=a_1) = -\sum_{i \in [5]} \frac{1}{5} \log \frac{1}{5} = \log 5\\ H(D\mid A=a_2) = \log_5

所以,H(D∣A)=12log⁡5+12log⁡5=log⁡5H(D\mid A) = \displaystyle \frac{1}{2}\log 5 + \frac{1}{2} \log 5 = \log 5

接下来,由于 yy 在每个 bib_i 中是纯的,所以 H(D∣B=bi)=0H(D\mid B = b_i) = 0,自然 H(D∣B)=0H(D\mid B) = 0。

而 H(D)=log⁡10H(D) = \log 10(由等概率性)。所以 g(D,A)=H(D)−H(D∣A)=log⁡2=1g(D,A) = H(D) - H(D\mid A) = \log 2 = 1,g(D,B)=H(D)−H(D∣B)=log⁡10g(D,B) = H(D) - H(D\mid B) = \log 10。

自然,根据信息增益越大越好的准则,log⁡10>1\log 10>1,我们应该选择 BB 来进行划分。

不过,这样的 BB 未必就是最好的。考虑以数据的 ID 为特征,一样能够做到在每个 bib_i 中都是纯的! 或者说,每个样本都有一个自己的 feature,但这样的 BB 不具有泛化性,不能帮助我们做预测。这便是信息增益的一个巨大局限:更倾向于选择有很多 values 的 feature,但这样的 feature 未必是好的。

增益率(Information Gain Ratio)

定义:

gR(D,A)=g(D,A)HA(D)g_R(D,A) = \frac{g(D,A)}{H_A(D)}

其中

HA(D)=−∑i∈[m]∣Di∣∣D∣log⁡∣Di∣∣D∣H_A(D) = -\sum_{i \in [m]} \frac{|D_i|}{|D|}\log \frac{|D_i|}{|D|}

本质上就是 H(A)H(A),衡量的是 AA 本身的混乱程度,gR(D,A)g_R(D,A) 相当于用 H(A)H(A) 来“normalize” g(D,A)g(D,A),可以“抵消” IG 对取值很多的 feature 的偏好性。

在刚才的例子中,继续计算 gR(D,A)g_R(D,A) 和 gR(D,B)g_R(D,B)。由于 AA 和 BB 都是均匀的,所以 HA(D)=log⁡2H_A(D) = \log 2,HB(D)=log⁡10H_B(D) = \log 10。于是

gR(D,A)=g(D,A)HA(D)=1log⁡2=1gR(D,B)=g(D,B)HB(D)=log⁡10log⁡10=1\begin{aligned} g_R(D,A) &= \frac{g(D,A)}{H_A(D)} = \frac{1}{\log 2} = 1 \\ g_R(D,B) &= \frac{g(D,B)}{H_B(D)} = \frac{\log 10}{\log 10} = 1 \end{aligned}

在这个指标下,就不会更偏好于 BB 了。

基尼系数(Gini Index)

定义:

Gini⁡(D)=∑k∈[K]∣Ck∣∣D∣(1−∣Ck∣∣D∣)\operatorname{Gini}(D) = \sum_{k \in [K]} \frac{|C_k|}{|D|}\left( 1 - \frac{|C_k|}{|D|} \right)

可以理解为是在计算 ∑k∈[K]P(y=k)(1−P(y=k))\displaystyle \sum_{k \in [K]} P(y = k)(1 - P(y=k)),对比熵的定义 ∑k∈[K]P(y=k)log⁡1P(y=k)\displaystyle \sum_{k \in [K]} P(y=k) \log \frac{1}{P(y=k)}。趋势是一样的,所以基尼系数也可以理解为是在描述体系的混乱程度,基尼系数越大,不确定性越大。

接下来定义

Gini⁡(D,A)=∑i∈[m]∣Di∣∣D∣Gini⁡(Di)\operatorname{Gini}(D,A) = \sum_{i \in [m]} \frac{|D_i|}{|D|}\operatorname{Gini}(D_i)

即,对于每个特征 aia_i,分别计算每个划分下的基尼系数然后求平均。描述的是经过 AA 划分后的混乱程度。

其自然是越小越好的(注意和前面的 IG 和 IGR 不一样),即 A∗=arg min⁡AGini⁡(D,A)A^* = \displaystyle \argmin_A\operatorname{Gini}(D,A)。

树回归

刚才我们一直在做分类问题。考虑当特征标签是连续的情况,即此时若我们是在做回归问题,如何衡量混乱程度?直接使用 L2 损失函数。

tree_regression

考虑上图的情况,特征 AA 有 mm 种取值,将 DD 划分为 D1,⋯ ,DmD_1,\cdots, D_m。每一类内包含若干 yy 值。可以定义每一类内 yy 的平均值:

yDi‾:=1∣Di∣∑j∈Diyi\overline{y_{D_i}} := \frac{1}{|D_i|} \sum_{j \in D_i} y_i

则可定义出损失函数

L(D,A)=∑i∈[m]∑j∈Di(yi−yDi‾)2L(D,A) = \sum_{i \in [m]} \sum_{j \in D_i} (y_i - \overline{y_{D_i}})^2

选择特征时,即选择 A∗=arg min⁡AL(D,A)A^* = \displaystyle \argmin_A L(D,A)。

决策树的构建

如果硬要考虑每种可能的顺序的话,构建决策树是一个 NPC 问题。所以一般而言使用贪心算法去进行决策树的构建。

即递归地,从根节点开始,选择一个最好的特征 BB,进行划分,然后在每个子节点内重复如上过程(不能再用 BB 了)。


24秋机器学习笔记-08-树模型
https://blog.imyangty.com/note-ml2024fall/tree-models/
Author
YangTY
Posted on
November 13, 2024
Licensed under