随机森林

模型概述

随机森林是一种集成学习算法,通过构建多个决策树并综合其预测结果来提升模型性能与稳定性。

是由 Leo Breiman 在 2001 年提出的一类基于树的集成学习方法(ensemble of decision trees)。核心思想是通过构建大量互相独立但结构相似的决策树,并将它们的预测进行 投票或平均,以降低方差、提高泛化能力。通常用于分类与回归问题,也有许多扩展(排序、概率估计、分位数回归、因果推断等)

基础原理

1. 数据随机:采用Bootstrap抽样法,从原始数据集中随机抽取多个子数据集,每个子数据集对应训练一棵决策树。
2. 特征随机:每棵决策树在分裂节点时,从全部特征中随机选取部分特征作为候选分裂特征,降低单棵树的过拟合风险。
3. 投票集成:分类任务中通过多数投票确定最终预测类别,回归任务中取多棵树预测结果的平均值作为输出。
- 决策树(CART)单棵树有很强的拟合能力但方差高(容易对训练集过拟合)。
- 集成(bagging + 随机特征选择)用“平均”来降低方差。关键是让每棵树间的相关性尽可能低(decorrelation),否则平均的效果受限。
- 随机森林通过两类随机化来做到这一点:
- - 1. 自助采样(bootstrap):每棵树在训练时用有放回抽样得到的样本子集(大约 63.2% 的样本会出现在该子集里, ~36.8% 是 OOB)。
- - 2. 随机特征选择(feature bagging):在每个分裂节点只从全部特征中随机抽取 $m$ 个特征(mtry)来寻找最优切分,而不是在全部特征中找最优切分。
- 结果:每棵树虽然偏向无约束的深树(通常不剪枝),但树之间差异大,平均后方差显著下降。

关键公式
$$\hat y = \frac{1}{T}\sum_{t=1}^T \hat y^{(t)}(x)$$

回归 对每棵树预测取平均
* $(\hat y)$
最终的预测值(随机森林整体的输出)。
* $(T)$
随机森林中 决策树$(tree)$的数量。
例如 100 棵树、500 棵树。
* $(t = 1,2,\dots,T)$
每一棵树的编号。
* $(\hat y^{(t)}(x))$
第 $(t)$ 棵树对输入样本 $(x)$ 给出的预测结果。
* 如果是回归模型 → 这是一个实数。
* 如果是分类模型 → 这是一个类别标签。
* $(\sum_{t=1}^T)$
对所有树的预测进行求和。
* $(\frac{1}{T})$
取平均(即“多数树投票”在回归中的连续版本)。
--------------------------------------------------------------------------------

$$\hat y = \arg\max_c \sum_{t=1}^T 1\{\hat y^{(t)}(x)=c\}$$

分类(硬投票)多数票
* $(\hat y)$
随机森林最终预测的 类别(class)。
* $(c)$
所有可能的类别中的某一个类别(如 0–9,或 A/B/C…)。
* $(\arg\max_c)$
找到让后面表达式最大的那个类别 (c)。
* $(\hat y^{(t)}(x))$
第 $(t)$ 棵树对样本 $(x)$ 的分类结果(一个类别标记)。
* $(1{\hat y^{(t)}(x)=c})$
指示函数:
* 若第 $(t)$ 棵树预测的类别 = ($c)$,则值为 1;
* 否则值为 0。
* $(\sum_{t=1}^T 1{\cdot})$
统计有多少棵树把 (x) 判为类别 (c)。
→ 最终选择 票数最多 的类别作为预测结果。
--------------------------------------------------------------------------------

$$\hat p(c|x) = \frac{1}{T}\sum_{t=1}^T p^{(t)}(c|x)$$

分类(软投票/概率):(平均各树预测的类概率)
* $(\hat p(c|x))$
随机森林对类别 $(c)$ 的 最终预测概率。
* $(T)$
随机森林中树的数量。
* $(p^{(t)}(c \mid x))$
第 $(t)$ 棵树对样本 $(x)$ 输出的类别 $(c)$ 的概率。
* 决策树叶节点通常给出该叶样本的类别比例 → 即一个概率。
* $(\sum_{t=1}^T)$
对所有树的概率进行相加。
* $(\frac{1}{T})$
对概率取平均,得到随机森林的最终概率估计。
→ 这是用于 概率输出、排序、Top-k 分类 以及你模型中的集成投票权重计算。
--------------------------------------------------------------------------------

关键超参
参数名 描述 值范围 默认值 建议值
n_estimators 树的数量 50-200 100 100
max_depth 单棵树最大深度 3-20 6 6
完整计算机制

随机森林是一种 集成学习(Ensemble Learning) 方法,本质是:
> 大量决策树 + 随机采样 + 多数投票(分类)或平均(回归)。
它的目标是减少单棵树容易产生的过拟合,让整体模型更稳定。
---
📌 机制 1:数据随机采样(Bootstrap Sampling)
假设你有 1000 条训练数据
随机森林会对每棵树 重复随机抽取(有放回) 一批数据,例如:
第 1 棵树抽样:800 条
第 2 棵树抽样:780 条
第 3 棵树抽样:820 条
……
每棵树看到的数据都不一样 → 树之间天然有差异。
---
📌 机制 2:特征随机选择(Feature Subset Randomness)
构建每个节点时,不会看全部特征,而是随机挑:
例如有 10 个特征,每次只看其中 3 个。
效果:
每棵树关注的特征不同
不容易全部“学一样的东西”
进一步降低“过拟合”
---
📌 机制 3:多棵树独立学习
森林 = 多棵树,每棵树自己训练,自己做判断。
树越多 → 越稳定。
常见数量:100、200、500。
---
📌 机制 4:投票或平均(最终输出)
分类
多数派投票,例如:
树 预测
-------- ----
第 1 棵树 3
第 2 棵树 3
第 3 棵树 5
最终预测为 3。
回归
直接取平均

优势与局限

鲁棒性强,对异常值和噪声不敏感,不易过拟合。
能处理高维数据,无需复杂的特征预处理,且可评估特征重要性。
训练过程并行化程度高,效率优于许多复杂模型。
# 优势(Strengths)
- 对输入特征尺度不敏感(无需归一化)。
- 能自动建模非线性关系与高阶交互(无需事先指定交互项)。
- 对缺失值/异常值相对稳健(某些实现支持 surrogate split)。
- 内置 OOB 估计,无需单独验证集(节约数据)。
- 容易并行化、快速上手(少量超参即能得到不错表现)。
- 适用于分类/回归、多输出任务以及概率估计(软投票)。

# 局限与注意事项(Weaknesses)
- 可解释性差:虽然可给出特征重要性/部分依赖图,但整体模型不如单棵树或线性模型直观。
- 对类别高基数变量与多取值变量的偏好**:MDI 类型重要性会偏好取值多的变量。
- 概率校准问题:RF 输出概率并不总是校准的(可用 Platt scaling 或 isotonic calibration 修正)。
- 预测/模型体积大:大量树会导致模型文件很大、预测慢(尤其在实时场景)。
- 对外推(extrapolation)能力弱:回归时对训练数据范围之外的点不能可靠外推。
- 当特征非常多且 mostly irrelevant 时:随机森林的效果会下降(噪声特征会增加树间相关,导致需要更多树或更强的特征选择)。

预测的例子

数字:

236、366、599、688、122

希望预测一个 “下一次值 = ?(比如第 5 位数)”

完整流程逻辑(不涉及彩票,只是模型流程演示)

---

🔥 第 1 步:构造特征(X)和标签(Y)

假设我们做 下一位数字预测(时间序列窗口 1 → 1)

输入 X(本期) 输出 Y(下期)

------------ ------------

236 366

366 599

599 688

688 122

最后一个 122 没有下一个 → 不能算标签。

---

🔥 第 2 步:将数字拆分为特征(重要!随机森林不能直接处理整体数字)

常见方法:拆为 3 个特征:

数字 H T U

--- - - -

236 2 3 6

366 3 6 6

599 5 9 9

688 6 8 8

标签也拆:

下期数字 H' T' U'

---- -- -- --

366 3 6 6

599 5 9 9

688 6 8 8

122 1 2 2

通常会训练 3 个模型:

预测百位(H')

预测十位(T')

预测个位(U')

每个模型都是一个随机森林。

---

🔥 第 3 步:训练 3 个随机森林模型

例:

RF_H ← 预测下期百位

RF_T ← 预测下期十位

RF_U ← 预测下期个位

每个模型内部是:

100 多棵树

每棵树随机看不同的数据 & 特征

最后多数投票

---

🔥 第 4 步:输入 “122” 预测下一次

将 122 拆成:

H=1, T=2, U=2

分别放入 3 个模型:

RF_H(1,2,2) → 多棵树预测

假设 100 棵树投票结果:

百位预测 投票数

---- ---

1 12

3 9

5 28

6 51

多数票:6

---

RF_T(1,2,2) → 投票

十位预测 投票数

---- ---

2 15

6 10

8 75

多数票:8

---

RF_U(1,2,2) → 投票

个预测 数量

--- --

2 20

6 18

8 62

多数票:8

---

⭐ 最终预测组合 = 688

(这只是 “逻辑示例”,并不是预测真实结果)

---

🎯 为什么常常会预测成类似 688、599 这种“见过的数字”?

随机森林是基于历史数据的模式学习:

输入特征(1,2,2)和训练集最接近的样本是 688

所以树的 voting 更容易 leaning 到它

---

📌 总结(非常关键)

随机森林预测流程就是:

1. 抽取数据 → 每棵树不同

2. 随机特征选择 → 每棵树关注点不同

3. 多棵树独立学习

4. 百十个位分别训练

5. 输入数据 → 所有树投票

6. 组合输出

动画演示

发现更多可能性

默认固定广告

免费下载 数据序列智能分析

立即体验强大的数字序列预测与分析工具(280MB,推荐天翼网盘下载 访问码:bq4f)

天翼网盘下载 访问码:bq4f 其他下载

推荐内容

默认悬浮广告