← 返回算法与AI总览 算法与AI · 知识点深化 · 随机森林:Bagging 与特征随机
知识点深化 · 随机森林

随机森林:Bagging 与特征随机

单棵决策树容易过拟合,那训练 100 棵树投票呢?随机森林靠两处「随机」——样本有放回抽样(Bagging)、每节点只看 √m 个特征——让每棵树长得不一样,最后投票融合。这一页讲清楚 Bagging、特征随机和 OOB 袋外评估。

① 小白第一课怎么学(4 步走,约 60 分钟)

随机森林 = 很多棵决策树投票。按这四步走:

1看图建立直觉(10 分钟)
读第②③部分:看 Bagging 怎么抽样、每棵树怎么独立训练、最后怎么投票。
2记核心机制(15 分钟)
读第④部分:样本随机、特征随机、OOB 评估、投票/平均。
3手算例题(20 分钟)
精读第⑤部分,跟着算一遍投票和 OOB。
4刷题+纠错(15 分钟)
做第⑦⑩部分,错题回到第⑥部分高频错误里找原因。
本课小目标学完你要能:① 说出随机森林为什么比单棵决策树准;② 解释"样本随机"和"特征随机"两处随机分别在哪;③ 说清楚 OOB 是什么、怎么用。

② 一图看懂:随机森林全地图

随机森林 Bagging 样本随机 有放回抽样 n 个 特征随机 每节点只选 √m 个特征 多树投票 分类投票/回归平均 OOB 包外评估 没抽到的样本当验证集 应用:表格数据之王 风控/营销/金融评分 易错:树太多内存爆 n_estimators 不是越大越好
读法:中心是"随机森林",四大块——样本随机(Bagging)、特征随机、多树投票、OOB 评估;下方是应用和易错。

③ 本质直觉:三个臭皮匠顶个诸葛亮

单棵决策树容易过拟合、对异常点敏感。那我训练 100 棵树,让它们各自看不同的数据、用不同的特征,最后投票表决,是不是就稳了?

第一步:样本随机(Bagging)。从 N 个样本里有放回地抽 N 个(叫 bootstrap),组成每棵树的训练集。注意是"有放回"——同一个样本可能被抽多次,也可能一次都没抽到。

第二步:特征随机。每次分裂节点时,不从全部 m 个特征里选,而是先随机抽 √m(分类)或 m/3(回归)个特征,再在这小堆里挑最优。这让每棵树长得不一样。

第三步:投票。来了新样本,100 棵树各自给答案,分类时少数服从多数,回归时取平均。

为什么有效?单棵树误差大但有规律;很多棵"不一样"的树平均后,方差大大降低。关键是树之间要不同——如果 100 棵树一模一样,投票等于没投。样本随机和特征随机就是为了让树不一样。

树1 树2 …树100 投票/平均 最终预测
OOB(袋外数据)是什么每棵树 bootstrap 抽样时,约有 37% 的样本没被抽到(叫 out-of-bag)。这些样本正好可以当免费的验证集——用没参与训练的数据评估这棵树。OOB score 就是这么来的,省了单独划验证集。

④ 完整体系与公式表

Bagging 抽样

Bootstrap 有放回抽样 从 N 个样本中有放回抽 N 个 → 每棵树训练集
单个样本没被抽中的概率 = (1 − 1/N)N ≈ e−1 ≈ 36.8%

特征随机子空间

任务每次分裂随机选多少特征说明
分类max_features = √mm 为总特征数
回归max_features = m/3常用默认

预测融合

分类:多数投票;回归:平均 分类:Ĵ = vote( h₁(x), h₂(x), …, hT(x) )
回归:ŷ = (1/T) · Σt=1..T ht(x)

关键超参数

参数含义常用值
n_estimators树的数量100~500
max_depth每棵树深度None(长到纯)或 10
max_features每次分裂选多少特征'sqrt'(分类默认)
oob_score是否用 OOB 评估True
n_jobs并行核数-1 用全部核

Python 代码片段

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, max_features='sqrt', oob_score=True, n_jobs=-1)
model.fit(X_train, y_train)
print(model.oob_score_) → OOB 准确率

⑤ 用法场景与典型例题

例1(基础·投票)5 棵树对某样本的预测分别是:正、正、负、正、正,最终分类?
少数服从多数。
① 正类票 = 4,负类票 = 1。
② 多数是正类。
答案:最终预测正类。
例2(OOB 概率)N=1000,单个样本没被某棵树抽中的概率大约多少?
用 (1−1/N)ᴺ 近似 e⁻¹。
① (1−1/1000)¹⁰⁰⁰ ≈ e⁻¹ ≈ 0.368。
② 即每棵树约 370 个样本是 OOB。
答案:约 36.8%,这就是 OOB 数据来源。
例3(回归平均)5 棵树对房价预测分别是 80、85、78、90、82 万,最终预测?
回归取平均。
① 平均 = (80+85+78+90+82)/5 = 415/5 = 83 万。
答案:随机森林回归预测 83 万。平均后比单棵树稳定,方差小。
随机森林为什么不用剪枝Bagging 已经通过多树平均把方差压下来了,单棵树即使长到过拟合,平均后过拟合也会被抵消。所以随机森林里每棵树通常不长深度限制(max_depth=None),让它尽情长。但 n_estimators 不是越大越好——几百棵后收益递减,内存却一直涨。

⑥ 高频错误诊断(4 条)

错误 1:以为树越多越好,调到 5000 棵n_estimators 从 100 加到 300 收益明显,再加到 2000 几乎没提升,但训练时间和内存翻倍。对策:100~500 足够,看验证曲线。
错误 2:把 max_features 设成全部特征这样每棵树每次分裂都用同样的最优特征,树之间高度相关,Bagging 失效。分类务必用 'sqrt',这是随机森林"随机"的核心。
错误 3:把随机森林当特征选择黑箱不解释随机森林能输出 feature_importances_,告诉你哪个特征最重要。但它不显示因果,相关性≠因果,别乱解读。
错误 4:类别不平衡不处理和决策树一样,多数类会主导投票。要用 class_weight='balanced' 或调整投票权重。

⑦ 考点真题演练(4 题)

考点分布

考法出题形式应对
Bagging 原理问样本怎么抽有放回 bootstrap
特征随机问每次分裂选多少特征分类 √m,回归 m/3
OOB问 OOB 是什么没被抽中的 37% 样本当验证集
优势为什么比单棵树好多树降方差、抗过拟合

真题基础1. 随机森林中 Bagging 的抽样方式是?

真题中档2. 分类任务中,随机森林每次分裂节点默认随机选多少个特征?

真题中档3. OOB(袋外数据)指的是?

真题拔高4. 随机森林相比单棵决策树,主要降低了什么?

⑧ 必背公式卡

抽样:有放回 bootstrap,每棵树 N 个样本 Bagging
OOB 率:(1−1/N)ᴺ ≈ e⁻¹ ≈ 36.8% 没抽到的当验证集
特征随机:分类 √m,回归 m/3 让树长得不一样
融合:分类投票,回归平均 少数服从多数
n_estimators:100~500 够了 不是越大越好
效果:降方差、抗过拟合、抗异常点 比单棵树稳
铁律:max_features 必须随机,否则退化成 Bagging 单特征树 两处随机缺一不可

⑨ 应用输出:用随机森林做用户流失预测

建模场景:电商平台预测用户是否会流失
平台有 10 万用户数据:浏览时长、下单频次、客单价、客服投诉次数、会员等级等 20 个特征,标签 y=1 表示下月流失。
① 选模型:表格数据、特征类型杂(数值+类别),随机森林是首选,不用精细调参就很强。
② 训练:RandomForestClassifier(n_estimators=200, oob_score=True, n_jobs=-1).fit(X, y)。
③ 看 OOB:oob_score_=0.87,说明模型泛化不错,不用再单独划验证集。
④ 特征重要性:发现"客服投诉次数"和"最近 30 天登录天数"最重要——产品就知道该重点盯这两个指标。
⑤ 预警:对预测流失概率 >0.6 的用户发优惠券召回。
⑥ 评估:AUC=0.89,比单棵决策树的 0.78 提升明显,且更稳定。
口述训练思路合上课本说一遍:"抽样有放回、分裂特征随机选 √m、训 100~500 棵树、投票融合;OOB 免费验证;好处是稳、抗过拟合、不用怎么调参;缺点是训练慢、模型大、不如树可解释。"

⑩ 分层练习 18 题(基础 6 + 中档 6 + 拔高 6)

▍基础 6 题

基础1随机森林由很多什么模型组成?
决策树。
基础2Bagging 是有放回还是无放回抽样?
有放回(bootstrap)。
基础3分类时多棵树怎么融合?
多数投票。
基础4回归时多棵树怎么融合?
取平均。
基础5OOB 数据是什么?
bootstrap 中没被抽中的样本,约 37%,可当免费验证集。
基础6随机森林的"随机"体现在哪两处?
样本随机(bootstrap)和特征随机(每节点选 √m)。

▍中档 6 题

中档7N=100,某样本没被某棵树抽中的概率大约?
(1−1/100)¹⁰⁰≈e⁻¹≈36.8%。
中档8100 棵树,60 棵说正、40 棵说负,预测?
多数正类,预测正。
中档9特征数 m=25,分类任务每次分裂选几个特征?
√25=5 个。
中档10随机森林需要像单棵决策树那样剪枝吗?
一般不用。多树平均已经压掉方差,单棵树可以尽情长。
中档11n_jobs=-1 是什么意思?
用 CPU 全部核心并行训练树。
中档12feature_importances_ 是什么?
特征重要性排序,按特征带来的纯度提升汇总。

▍拔高 6 题

拔高13为什么树之间要"不一样"?
如果树完全一样,投票等于单棵树,无法降方差。样本和特征随机就是为了制造差异。
拔高14把 max_features 设成全部 m,会怎样?
每棵树每次都选同样的最优特征,树高度相关,随机森林退化成普通 Bagging,效果下降。
拔高15OOB score 怎么算出来的?
对每个样本,用没抽到它的那些树来预测,汇总这些预测算准确率,即 OOB score。
拔高16随机森林主要降低偏差还是方差?
方差。单棵树高方差低偏差,多树平均后方差大降,偏差基本不变。
拔高17随机森林处理类别不平衡怎么办?
加 class_weight='balanced',或对少数类过采样。否则多数类主导投票。
拔高18随机森林和 GBDT(梯度提升树)的区别?
RF 是 Bagging:树并行独立、投票平均,降方差;GBDT 是 Boosting:树串行、每棵纠正前一棵的残差,降偏差。

⑪ 记忆口诀 + 7 天复习计划

三句口诀 ① 随机森林很多树,样本特征双随机。
② 有放回抽 N 个,三成七没抽当验证(OOB)。
③ 分类投票回归平均,多树平均降方差。
天任务自检
第 1 天读②③④,画一遍 Bagging 流程说出两处随机在哪
第 2 天背公式卡 + 做基础 1-6基础全对
第 3 天做中档 7-12,手算 OOB 概率37% 记住
第 4 天做拔高 13-18,对比 RF vs GBDT说出 Bagging vs Boosting
第 5 天做⑦真题 4 题限时每题 2 分钟
第 6-7 天合上书口述三句口诀,写 OOB 概率公式不看资料全默对

← 返回算法与AI总览