随机森林(Random Forest)详解
随机森林通过“样本随机”与“特征随机”的双重随机机制构建多棵决策树并集成其投票或均值结果,有效解决了单棵决策树过拟合与不稳定的缺陷,是工业界广泛应用、兼具精度与稳健性的基线模型。
背景:从决策树的局限到随机森林的诞生
决策树的优点
在上一个视频中介绍的决策树模型,模拟人类的思维路径,通过一连串“如果—那么”的提问进行逻辑判断,对特征不断进行分裂,直到得到最终答案。这种决策路径非常清晰,因此具有以下核心优势:
- 可解释性强:决策路径透明直观,每个判断都可以追溯。
- 对数值不敏感:不需要做归一化、标准化等特征缩放处理。
- 通用性强:既可以处理回归问题,也可以处理分类问题。
决策树在工业界应用受限的三大缺陷
尽管决策树表面上看能力很强,但在实际工业界中直接使用决策树的情况非常少,原因在于:
- 过拟合倾向:决策树特别倾向于“死记硬背”,容易把数据中的细节与噪声学进去,经常产生过拟合。
- 对数据分布和顺序敏感:虽然对数值大小不敏感,但对数据的分布与顺序非常敏感。极其微小的数据变动就可能引起树结构的剧烈震荡。
- 训练不稳定:由于上述敏感性,训练过程非常不稳定,这直接限制了决策树在工业界的应用。
随机森林的引入
决策树本身的思想是很好的,问题在于单一模型的不稳定与过拟合。为了让决策树真正可用,2001年正式引入随机森林概念。核心思路是应用集成学习(Ensemble Learning)的理念,将多个弱学习器组合成一个强学习器,从而获得比单一模型更好的泛化性能。
隐喻理解:单棵决策树是一个“弱”模型,既可能过拟合也可能不稳定。随机森林不再依赖单一决策树——在医院对疑难杂症进行专家会诊时,单个学科的医生可能对复杂症状判断失误,但组成专家团后,每位医生给出建议并综合分析,最终诊断的准确率会大幅提升。集成学习就是类似理念。
核心机制:名称拆解——“森林”与“随机”
随机森林这个名字包含两个核心词汇:
森林(Forest)——多棵树的集合
森林指模型由大量决策树组成,不再是一棵树,而是多棵树汇聚成林。其中每棵决策树都是一个基础模型,通过一系列规则对数据层层切分、对特征进行分裂。单棵树内部的逻辑仍然是标准的决策树结构。
随机(Random)——算法的灵魂
如果只有多棵树,但所有树都用相同的数据和相同的特征训练,那么训练出的树结构会高度雷同,投票和集成的意义就大打折扣。为了保证每棵树具有多样性,随机森林引入双重随机性:
第一层随机:样本随机(Bootstrap Sampling)
- 操作方式:设训练集中有 \(N\) 个样本。在训练其中某一棵树时,从数据集中随机且有放回地抽取 \(N\) 个样本。
- 更具体的说明:假设有 10 个样本,需随机抽取 10 次;但每抽中一个样本后,先记录再把它放回原数据集,再抽下一个。由于抽样有放回,部分样本会被重复抽到;同时,有一部分样本尽管抽了 \(N\) 次,却从未被抽到。
- 利用方式:将被抽到的样本(去重后)重组为训练集,从未被抽到的样本作为验证集,由此保证每棵树之间使用的样本彼此不同。
第二层随机:特征随机
- 操作方式:在决策树每个节点进行分裂时,不使用全部特征,而是从所有特征中随机抽取一个子集。若有 \(D\) 个特征,一般取 \(\sqrt{D}\) 个特征,仅在这有限的候选特征中选择最优分裂特征。
- 为什么关键:如果没有特征随机性,所有树都会优先选择“最强”的特征作为根节点(例如“收入”),导致树的结构高度相似。引入特征随机后,有些树被迫采用其他特征进行分裂,就为整体模型提供了不同视角。每个个体不必完美,多样性才是随机森林发挥最大潜力的关键。
两条随机机制总结
| 随机层级 | 具体操作 | 目的与效果 |
|---|---|---|
| 样本随机 | 有放回地随机抽取 \(N\) 个样本训练每棵树 | 每棵树用的训练样本不同,产生样本多样性 |
| 特征随机 | 每个节点分裂时随机选约 \(\sqrt{D}\) 个特征 | 避免所有树都优先用强特征,产生特征视角多样性 |
额外红利:免费获得验证集(OOB)
随机森林在训练之外还带来一个重要额外好处——它能够免费获得验证集,无需再单独划分。
- 原理:在标准机器学习流程中,通常要将数据划分为训练集、验证集与测试集三部分。而随机森林的 Bootstrap 采样过程天然留下了未参与训练的数据。某个样本在 \(N\) 次抽取中始终未被选中的概率,通过数学推导可知大约为36.8%,即约三分之一的数据完全不会参与某棵树的训练。
- 具体利用:把这约三分之一从未参与训练的样本作为验证集,称为OOB(Out-of-Bag,带外样本)。
- 多重价值:
- 省略了单独划分验证集的操作,也无需再做交叉验证。
- 所有数据都能投入训练(因为每棵树只用部分数据,但整体上所有数据都被用到了),在小数据集场景下尤为珍贵。
- 仍然可以支持参数调优——在 OOB 上评估模型表现以调整超参数。
- 数据集划分简化为两部分:一部分作为训练/验证(利用 OOB 机制),另一部分仍作为最终测试集(不可省略,否则无法验证模型最终性能)。这样训练数据规模会更大。
构建随机森林的步骤
构建随机森林大致分为三个阶段:
- 构建专家团(设定树的规模) :设置森林中决策树的数量,一般为 100、300、500 等数值。可根据数据规模与要解决的问题进行个性化调整。
- 逐棵生成决策树:
- 用随机有放回抽样抽取 \(N\) 个样本作为该树的训练数据。
- 在节点分裂时,随机采样一部分(通常 \(\sqrt{D}\) 个)特征作为候选特征进行切分。
- 让树充分生长,最初不做剪枝。
- 集成输出:让多棵决策树组成森林进行集体决策。分类任务采用投票机制(少数服从多数) ;回归任务则对所有树的输出求均值。这样可以有效中和单棵树的偏见与错误,使模型既准又稳。
代码实现思路(以 Python 为例)
实现随机森林在代码层面非常简单:
- 从集成学习库(如
sklearn.ensemble)中导入RandomForestClassifier(或对应回归器)。 - 数据划分时只需划分训练集和测试集两部分(验证功能由 OOB 完成)。
- 设置参数:
- 用 100 棵决策树组成随机森林。
- 每次节点分裂时选择的特征数设为特征总数的平方根(\(\sqrt{D}\))。
- 开启 OOB 验证(如
oob_score=True),训练完毕后可以直接在 OOB 数据上评估得分。 - 可开启并行训练选项,将所有 CPU 核心利用起来加速训练。
示例结果
- 在 OOB 验证集上:准确率已达到 94%。
- 在最终测试集上:鸢尾花数据集由于数据量较小且特征区分度非常明显,测试准确率达到 100%。
对于该结果要理性看待:100% 存在一定的偶然性,不必过度置信;可以大概率确定该模型的真实性能在 94% 以上。随机森林就是如此简单且高效。
重要应用:特征重要性分析
随机森林在工业界有一个特别重要的应用——帮助理解哪些特征在起作用、哪些特征基本无用,即特征重要性(Feature Importance) 分析。这既可以用于向业务方解释模型的决策逻辑,也可以指导自身对特征做进一步的加工处理。
特征重要性通常有两种主流做法:
方法一:基于不纯度(MDI,Mean Decrease in Impurity)
- 计算方式:基于决策树分裂时使用的基尼系数(Gini Impurity)等不纯度指标的下降量来衡量特征重要性。
- 优点:计算速度非常快。
- 缺点:对高基数特征(high-cardinality) 不友好。高基数特征指每个样本取值几乎都不同的特征(例如 ID 列——每条数据都有唯一的 ID),模型容易把每个 ID 都当成一个独立分类,使得该特征的重要性被人为抬高,从而结果有所偏差。
方法二:基于排列的重要性(Permutation Importance)
- 计算方式:将某个特征的值进行随机打乱(排列) ,然后观测模型性能(如准确率)的下降程度。特征被打乱后性能下降越多,说明该特征对模型越重要。
- 优点:尽管计算速度比 MDI 慢一些,但结果更可靠,不受高基数特征的影响。
- 工业界倾向:在工业界实际应用中,基于排列的重要性方法使用更广泛。
案例:鸢尾花数据集的两种特征重要性对比
上节课已知,对于鸢尾花数据集而言:花瓣长度是最重要的特征,花瓣宽度次之;花萼长度和花萼宽度重要性很低。
| 特征 | 基于不纯度(MDI)结论 | 基于排列(Permutation)结论 |
|---|---|---|
| 花瓣长度 | 最重要(但与其他特征差距没那么悬殊) | 最重要 |
| 花瓣宽度 | 次重要 | 次重要 |
| 花萼长度 | 显示有一定作用(与事实不符) | 几乎不重要 |
| 花萼宽度 | 显示有一定作用(与事实不符) | 几乎不重要 |
MDI 方法给出的结论方向上基本正确,但花瓣长宽的重要性差距不够突出,同时花萼长宽被赋予了不应有的重要性;而基于排列的方法结果更符合真实情况:花瓣长度最重要,花瓣宽度次要,剩下两个特征几乎不重要。这也说明基于排列的重要性更稳定。在实际处理远比鸢尾花复杂的数据集时,就能据此判断应朝哪个方向进行数据预处理。
随机森林的优缺点总结
主要优势
- 适合作为基线模型使用:随机森林不见得是精度最高的模型,但由于其综合性能良好、使用门槛低,是一个非常合适的 Baseline(基线)模型。
- 抗过拟合能力强:由多棵树投票/平均后,单棵树的过拟合被有效抵消。
- 数据预处理极简:
- 无需归一化和标准化。
- 能够处理缺失值。
- 对异常值不敏感。
- 对高维数据友好:特征数量多也没关系,不需要专门的降维处理,树模型能够通过不断分裂自行筛选有效特征。
- 附带特征重要性分析能力:可用于业务归因分析。
- 天然支持并行运算:多棵树组成的森林中,每棵树都可以独立训练与预测,能充分利用多核 CPU 资源。
局限性
- 可解释性下降(黑盒性增强) :单棵决策树是白盒模型,决策路径明确直观;但多棵树组成森林后,整体判断逻辑不再直观,带有一定的黑盒性质。
- 计算与内存开销偏大:需要保存大量决策树的结构,占用的内存空间较大;预测阶段每条数据需要遍历所有树,预测速度相对较慢。
- 对极端噪声敏感:在噪声特别大的分类任务中,仍然存在一定的过拟合概率,不过整体来说随机森林依然是比较稳健好用的。
总结与延伸
随机森林的核心方法论可以概括为:用“样本随机 + 特征随机”制造个体多样性,通过“集体投票 / 求均值”消除个体偏差。它在精度、稳定性、易用性之间取得了较好的平衡,是工业界数据建模的常用起点模型。
作为集成学习的典范之一,随机森林体现了“三个臭皮匠顶个诸葛亮”的思想。而集成学习的另一大方向——梯度提升树(Gradient Boosting Decision Tree,GBDT)家族 则采取了完全不同的思路:“站在巨人的肩膀上”,前赴后继地训练——一个模型训练完后,下一个模型针对它与最终结果之间的残差进行拟合强化。该方向最常应用的三个框架为:XGBoost、LightGBM 和 CatBoost,三者均在实际应用中非常广泛。这部分将在后续内容中具体展开。