返回
查看原链接原链接
Bilibili12分57秒 · —

随机森林(Random Forest)详解

随机森林(Random Forest)详解

随机森林通过“样本随机”与“特征随机”的双重随机机制构建多棵决策树并集成其投票或均值结果,有效解决了单棵决策树过拟合与不稳定的缺陷,是工业界广泛应用、兼具精度与稳健性的基线模型。

背景:从决策树的局限到随机森林的诞生

决策树的优点

在上一个视频中介绍的决策树模型,模拟人类的思维路径,通过一连串“如果—那么”的提问进行逻辑判断,对特征不断进行分裂,直到得到最终答案。这种决策路径非常清晰,因此具有以下核心优势:

  • 可解释性强:决策路径透明直观,每个判断都可以追溯。
  • 对数值不敏感:不需要做归一化、标准化等特征缩放处理。
  • 通用性强:既可以处理回归问题,也可以处理分类问题。

决策树在工业界应用受限的三大缺陷

尽管决策树表面上看能力很强,但在实际工业界中直接使用决策树的情况非常少,原因在于:

  1. 过拟合倾向:决策树特别倾向于“死记硬背”,容易把数据中的细节与噪声学进去,经常产生过拟合。
  2. 对数据分布和顺序敏感:虽然对数值大小不敏感,但对数据的分布与顺序非常敏感。极其微小的数据变动就可能引起树结构的剧烈震荡。
  3. 训练不稳定:由于上述敏感性,训练过程非常不稳定,这直接限制了决策树在工业界的应用。

随机森林的引入

决策树本身的思想是很好的,问题在于单一模型的不稳定与过拟合。为了让决策树真正可用,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 机制),另一部分仍作为最终测试集(不可省略,否则无法验证模型最终性能)。这样训练数据规模会更大。

构建随机森林的步骤

构建随机森林大致分为三个阶段:

  1. 构建专家团(设定树的规模) :设置森林中决策树的数量,一般为 100、300、500 等数值。可根据数据规模与要解决的问题进行个性化调整。
  2. 逐棵生成决策树
  • 用随机有放回抽样抽取 \(N\) 个样本作为该树的训练数据。
  • 在节点分裂时,随机采样一部分(通常 \(\sqrt{D}\) 个)特征作为候选特征进行切分。
  • 让树充分生长,最初不做剪枝
  1. 集成输出:让多棵决策树组成森林进行集体决策。分类任务采用投票机制(少数服从多数) ;回归任务则对所有树的输出求均值。这样可以有效中和单棵树的偏见与错误,使模型既准又稳。

代码实现思路(以 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 方法给出的结论方向上基本正确,但花瓣长宽的重要性差距不够突出,同时花萼长宽被赋予了不应有的重要性;而基于排列的方法结果更符合真实情况:花瓣长度最重要,花瓣宽度次要,剩下两个特征几乎不重要。这也说明基于排列的重要性更稳定。在实际处理远比鸢尾花复杂的数据集时,就能据此判断应朝哪个方向进行数据预处理。

随机森林的优缺点总结

主要优势

  1. 适合作为基线模型使用:随机森林不见得是精度最高的模型,但由于其综合性能良好、使用门槛低,是一个非常合适的 Baseline(基线)模型
  2. 抗过拟合能力强:由多棵树投票/平均后,单棵树的过拟合被有效抵消。
  3. 数据预处理极简
  • 无需归一化和标准化。
  • 能够处理缺失值。
  • 对异常值不敏感。
  1. 对高维数据友好:特征数量多也没关系,不需要专门的降维处理,树模型能够通过不断分裂自行筛选有效特征。
  2. 附带特征重要性分析能力:可用于业务归因分析。
  3. 天然支持并行运算:多棵树组成的森林中,每棵树都可以独立训练与预测,能充分利用多核 CPU 资源。

局限性

  1. 可解释性下降(黑盒性增强) :单棵决策树是白盒模型,决策路径明确直观;但多棵树组成森林后,整体判断逻辑不再直观,带有一定的黑盒性质。
  2. 计算与内存开销偏大:需要保存大量决策树的结构,占用的内存空间较大;预测阶段每条数据需要遍历所有树,预测速度相对较慢。
  3. 对极端噪声敏感:在噪声特别大的分类任务中,仍然存在一定的过拟合概率,不过整体来说随机森林依然是比较稳健好用的。

总结与延伸

随机森林的核心方法论可以概括为:用“样本随机 + 特征随机”制造个体多样性,通过“集体投票 / 求均值”消除个体偏差。它在精度、稳定性、易用性之间取得了较好的平衡,是工业界数据建模的常用起点模型。

作为集成学习的典范之一,随机森林体现了“三个臭皮匠顶个诸葛亮”的思想。而集成学习的另一大方向——梯度提升树(Gradient Boosting Decision Tree,GBDT)家族 则采取了完全不同的思路:“站在巨人的肩膀上”,前赴后继地训练——一个模型训练完后,下一个模型针对它与最终结果之间的残差进行拟合强化。该方向最常应用的三个框架为:XGBoost、LightGBM 和 CatBoost,三者均在实际应用中非常广泛。这部分将在后续内容中具体展开。