1. 预备知识:决策树
在理解随机森林之前,我们需要先回顾一下决策树的基本原理。决策树的核心思想是通过一系列的 if-then-else 规则将数据逐步划分到不同的子集,直到每个子集中的样本属于同一类别(或具有相似的输出值)。
-
节点划分: 决策树的关键在于如何选择最佳的划分特征和划分点。这通常涉及到最小化某种不纯度指标。
-
不纯度指标 (Impurity Metrics):
- 分类树:
- 基尼指数 (Gini Index): 对于节点
t
t
t,假设有
C
C
C 个类别,样本属于类别
c
c
c 的概率为
p
(
c
∣
t
)
p(c|t)
p(c∣t),则基尼指数为:
G i n i ( t ) = 1 − ∑ c = 1 C [ p ( c ∣ t ) ] 2 Gini(t) = 1 - \sum_{c=1}^{C} [p(c|t)]^2 Gini(t)=1−c=1∑C[p(c∣t)]2 - 熵 (Entropy):
E n t r o p y ( t ) = − ∑ c = 1 C p ( c ∣ t ) log 2 p ( c ∣ t ) Entropy(t) = - \sum_{c=1}^{C} p(c|t) \log_2 p(c|t) Entropy(t)=−c=1∑Cp(c∣t)log2p(c∣t)
- 基尼指数 (Gini Index): 对于节点
t
t
t,假设有
C
C
C 个类别,样本属于类别
c
c
c 的概率为
p
(
c
∣
t
)
p(c|t)
p(c∣t),则基尼指数为:
- 回归树:
- 均方误差 (Mean Squared Error, MSE):
M S E ( t ) = 1 N t ∑ i ∈ D t ( y i − y ˉ t ) 2 MSE(t) = \frac{1}{N_t} \sum_{i \in D_t} (y_i - \bar{y}_t)^2 MSE(t)=Nt1i∈Dt∑(yi−yˉt)2
其中, D t D_t Dt 是节点 t t t 中的样本集合, N t N_t Nt 是节点 t t t 中的样本数量, y i y_i yi 是样本 i i i 的真实值, y ˉ t \bar{y}_t yˉt 是节点 t t t 中样本的平均值。
- 均方误差 (Mean Squared Error, MSE):
- 分类树:
-
特征选择: 选择使不纯度下降最多的特征进行划分。例如,对于基尼指数,我们选择能够最大化以下增益的特征 A A A 和划分点 s s s:
Δ G i n i = G i n i ( D ) − ∑ v ∈ { l e f t , r i g h t } ∣ D v ∣ ∣ D ∣ G i n i ( D v ) \Delta Gini = Gini(D) - \sum_{v \in \{left, right\}} \frac{|D_v|}{|D|} Gini(D_v) ΔGini=Gini(D)−v∈{left,right}∑∣D∣∣Dv∣Gini(Dv)
其中, D D D 是当前节点的数据集, D l e f t D_{left} Dleft 和 D r i g h t D_{right} Dright 是根据特征 A A A 的划分点 s s s 划分后的子数据集。
2. 随机森林的核心思想:Bagging 和特征随机性
随机森林建立在两个核心思想之上:
-
Bootstrap Aggregating (Bagging,自助聚合):
- 从原始训练集中有放回地随机抽取 B B B 个与原始数据集大小相同的子数据集。这意味着某些样本可能会被多次抽到,而某些样本可能不会被抽到。
- 基于每个自助采样数据集训练一个决策树。
-
特征随机性 (Feature Randomness):
- 在训练每个决策树的节点进行划分时,不是考虑所有特征,而是随机选择一个包含 m m m 个特征的子集(通常 m < < d m << d m<<d,其中 d d d 是原始特征的数量)。
- 从这 m m m 个特征中选择最优的划分特征和划分点。
3. 数学推导:Bagging 的作用
Bagging 的主要作用是降低模型的方差 (Variance)。 让我们从数学上理解这一点。
假设我们有 B B B 个独立的、同分布的随机变量 X 1 , X 2 , . . . , X B X_1, X_2, ..., X_B X1,X2,...,XB,它们的均值为 μ \mu μ,方差为 σ 2 \sigma^2 σ2。我们对这些变量的平均值 X ˉ = 1 B ∑ i = 1 B X i \bar{X} = \frac{1}{B} \sum_{i=1}^{B} X_i Xˉ=B1∑i=1BXi 的方差进行计算:
V a r ( X ˉ ) = V a r ( 1 B ∑ i = 1 B X i ) = 1 B 2 V a r ( ∑ i = 1 B X i ) Var(\bar{X}) = Var\left(\frac{1}{B} \sum_{i=1}^{B} X_i\right) = \frac{1}{B^2} Var\left(\sum_{i=1}^{B} X_i\right) Var(Xˉ)=Var(B1i=1∑BXi)=B21Var(i=1∑BXi)
由于 X i X_i Xi 相互独立,所以:
V a r ( X ˉ ) = 1 B 2 ∑ i = 1 B V a r ( X i ) = 1 B 2 ∑ i = 1 B σ 2 = 1 B 2 ( B σ 2 ) = σ 2 B Var(\bar{X}) = \frac{1}{B^2} \sum_{i=1}^{B} Var(X_i) = \frac{1}{B^2} \sum_{i=1}^{B} \sigma^2 = \frac{1}{B^2} (B \sigma^2) = \frac{\sigma^2}{B} Var(Xˉ)=B21i=1∑BVar(Xi)=B21i=1∑Bσ2=B21(Bσ2)=Bσ2
可以看到,平均值的方差是单个变量方差的 1 / B 1/B 1/B 倍。这意味着通过对多个独立模型的预测结果进行平均,可以显著降低整体预测结果的方差。
然而,在随机森林中,各个决策树并不是完全独立的,因为它们都是在同一个原始数据集上训练的。它们之间存在一定的相关性。 假设决策树的预测结果之间的平均相关性为 ρ \rho ρ,则平均预测结果的方差为:
V a r ( X ˉ ) = σ 2 B + ρ σ 2 ( 1 − 1 B ) Var(\bar{X}) = \frac{\sigma^2}{B} + \rho \sigma^2 \left(1 - \frac{1}{B}\right) Var(Xˉ)=Bσ2+ρσ2(1−B1)
虽然方差降低的效果不如完全独立的情况,但当 B B B 增大时, 1 B \frac{1}{B} B1 趋近于 0,方差仍然会降低。
4. 数学推导:特征随机性的作用
特征随机性的主要作用是进一步降低模型之间的相关性,从而进一步降低方差。
想象一下,如果我们在所有决策树的每个节点划分时都使用相同的最优特征,那么这些决策树的结构会非常相似,预测结果也会高度相关。通过随机选择一部分特征,我们可以让不同的决策树在不同的特征子空间上进行学习,从而增加它们之间的差异性。
5. 随机森林的预测
-
分类: 对于分类问题,随机森林通过投票的方式进行预测。对于一个新的输入样本,每棵决策树都会给出一个类别预测,最终的预测结果是所有决策树预测结果中出现次数最多的类别。
y ^ = argmax c ∑ b = 1 B I ( h b ( x ) = c ) \hat{y} = \text{argmax}_c \sum_{b=1}^{B} I(h_b(x) = c) y^=argmaxcb=1∑BI(hb(x)=c)
其中, h b ( x ) h_b(x) hb(x) 是第 b b b 棵决策树对样本 x x x 的预测, I ( ⋅ ) I(\cdot) I(⋅) 是指示函数。 -
回归: 对于回归问题,随机森林通过对所有决策树的预测结果进行平均来得到最终的预测值。
y ^ = 1 B ∑ b = 1 B h b ( x ) \hat{y} = \frac{1}{B} \sum_{b=1}^{B} h_b(x) y^=B1b=1∑Bhb(x)
6. Out-of-Bag (OOB) 误差估计
在 Bagging 过程中,对于每棵决策树,大约有 1/3 的样本没有被抽到,这些样本被称为 Out-of-Bag (OOB) 样本。我们可以使用这些 OOB 样本来估计随机森林的泛化误差,而无需使用独立的验证集。
对于每个样本 x i x_i xi,我们可以将其作为 OOB 样本的那些决策树的预测结果进行平均(分类问题是投票,回归问题是取平均)。然后,我们可以计算 OOB 样本的误差,例如分类问题的分类错误率或回归问题的均方误差。
7. 特征重要性评估
随机森林还可以用来评估特征的重要性。有两种常用的方法:
-
基于基尼指数/均方误差的下降 (Mean Decrease Impurity): 对于每棵决策树,计算每个特征在所有分裂节点上引起的基尼指数或均方误差的平均下降量。然后,将该特征在所有决策树上的平均下降量进行平均,作为该特征的重要性度量。重要性越高,说明该特征在树的构建过程中对降低不纯度贡献越大。
-
基于袋外数据 (Mean Decrease Accuracy):
- 对于每棵树,使用 OOB 样本计算其预测准确率。
- 对于某个特征,随机打乱所有 OOB 样本中该特征的值,保持其他特征不变。
- 再次使用打乱特征后的 OOB 样本计算预测准确率。
- 计算两次准确率的差值。
- 将该差值在所有树上取平均,作为该特征的重要性度量。 如果打乱某个特征后,模型的预测准确率显著下降,说明该特征对预测结果非常重要。
8. 总结与数学基础回顾
随机森林的数学推导主要基于以下概念:
- 概率论: Bagging 的自助采样过程涉及到概率分布和抽样理论。
- 统计学: 方差、偏差的概念以及 Bagging 如何降低方差是统计学的重要内容。
- 信息论: 决策树的不纯度指标(如基尼指数和熵)是信息论中的概念,用于衡量数据集的混乱程度。
- 大数定律: 随着决策树数量的增加,随机森林的预测结果会趋于稳定。
关键数学公式回顾:
- 基尼指数: G i n i ( t ) = 1 − ∑ c = 1 C [ p ( c ∣ t ) ] 2 Gini(t) = 1 - \sum_{c=1}^{C} [p(c|t)]^2 Gini(t)=1−∑c=1C[p(c∣t)]2
- 熵: E n t r o p y ( t ) = − ∑ c = 1 C p ( c ∣ t ) log 2 p ( c ∣ t ) Entropy(t) = - \sum_{c=1}^{C} p(c|t) \log_2 p(c|t) Entropy(t)=−∑c=1Cp(c∣t)log2p(c∣t)
- 均方误差: M S E ( t ) = 1 N t ∑ i ∈ D t ( y i − y ˉ t ) 2 MSE(t) = \frac{1}{N_t} \sum_{i \in D_t} (y_i - \bar{y}_t)^2 MSE(t)=Nt1∑i∈Dt(yi−yˉt)2
- Bagging 方差降低 (近似): V a r ( X ˉ ) ≈ σ 2 B Var(\bar{X}) \approx \frac{\sigma^2}{B} Var(Xˉ)≈Bσ2 (假设决策树近似独立)
- Bagging 方差降低 (考虑相关性): V a r ( X ˉ ) = σ 2 B + ρ σ 2 ( 1 − 1 B ) Var(\bar{X}) = \frac{\sigma^2}{B} + \rho \sigma^2 \left(1 - \frac{1}{B}\right) Var(Xˉ)=Bσ2+ρσ2(1−B1)
**9. 更深入的思考 **
- 理论保证: 随机森林在一定条件下具有良好的理论保证,例如,随着树的数量增加,其泛化误差会收敛到某个值。相关的理论涉及到 Vapnik-Chervonenkis (VC) 维理论和 PAC 学习理论。
- 一致性: 在某些条件下,随机森林的预测结果是统计一致的,即随着样本量的增加,其预测结果会趋近于真实值。
- 超参数调优: 随机森林的性能受到一些超参数的影响,例如树的数量、特征子集的大小等。如何选择最优的超参数涉及到优化理论。