随机森林的本质是决策树的集成,核心逻辑可概括为 “三个随机” 和 “一个投票”:
- 随机样本选择:从原始数据集中通过 “有放回抽样”(Bootstrap)生成多个子数据集,每个子数据集对应一棵决策树的训练数据。
- 随机特征选择:每棵决策树在分裂节点时,不使用全部特征,而是随机选择部分特征(通常为总特征数的平方根),从中筛选最优分裂特征。
- 单树随机生长:每棵决策树基于子数据集和随机特征独立生长,不进行剪枝(通过多树集成抵消单树过拟合)。
- 结果集成投票:
- 分类任务:多棵树输出类别,取 “投票数最多” 的类别作为最终结果。
- 回归任务:多棵树输出数值,取 “所有结果的平均值” 作为最终预测值。

随机森林的单棵树为CART 树(分类与回归树),是一种二叉树结构,每个节点通过 “特征阈值分裂” 将数据划分为两类(分类)或两类区间(回归),分裂准则如下:
- 分类树:使用Gini 系数(衡量节点纯度,值越小纯度越高)或信息增益(衡量分裂后信息不确定性的减少)。
- 回归树:使用均方误差(MSE) 或平均绝对误差(MAE)(衡量分裂后子节点的误差大小)。
- 样本抽样:对原始数据集(含 N 个样本)进行 K 次 Bootstrap 抽样,生成 K 个独立子数据集(每个子数据集大小仍为 N,存在重复样本)。
- 特征随机化:对每棵决策树,在每个节点分裂时,随机选择 M 个特征(M < 总特征数),计算这些特征的分裂准则,选择最优特征进行分裂。
- 单树生成:每棵树基于子数据集和随机特征生长至最大深度,不剪枝(过拟合风险由多树集成缓解)。
- 结果集成:输入新样本,K 棵树分别输出预测类别,统计各类别的投票数,得票最高的类别即为最终预测结果。

超参数直接影响随机森林的性能,核心超参数及调优方向如下:
调优方法:常用
网格搜索(Grid Search) 或
随机搜索(Random Search),结合
5 折 / 10 折交叉验证,筛选验证集得分最高的超参数组合。

- 抗过拟合能力强:多树集成抵消了单棵决策树的过拟合风险,且 “随机抽样 + 随机特征” 进一步降低了树间相关性。
- 适用性广:可处理分类、回归任务,对数据类型不敏感(无需对数值特征归一化,可直接处理类别特征)。
- 鲁棒性高:对噪声、异常值不敏感(Bootstrap 抽样减少了异常值的影响),且不易受个别特征干扰。
- 可解释性较强:能输出特征重要性(通过计算特征对树分裂的贡献度,判断哪些特征对预测最关键)。
- 计算成本高:需训练多棵决策树,且每棵树独立生长,训练时间和内存消耗随树数量、数据规模增加而上升(对大规模数据效率低于线性模型)。
- 对极端不平衡数据敏感:若类别样本比例悬殊(如正例占 1%,负例占 99%),模型可能倾向于预测多数类,需通过样本加权或过采样 / 欠采样优化。
- 对小数据集可能欠拟合:当数据量极小时,多树集成的优势难以发挥,性能可能不如单棵复杂决策树或其他简单模型(如逻辑回归)。
- 分类任务:客户流失预测、疾病风险诊断、垃圾邮件识别、图像分类(如人脸识别中的特征筛选)。
- 回归任务:房价预测、销售额预测、股票收益率预测、环境指标(如温度、PM2.5)预测。
- 其他延伸:特征重要性分析(如筛选影响用户留存的关键因素)、异常值检测(通过判断样本在多棵树中的预测一致性,识别异常样本)。
- Python:
scikit-learn(sklearn.ensemble.RandomForestClassifier用于分类,RandomForestRegressor用于回归)、XGBoost/LightGBM(基于随机森林改进的梯度提升树,效率更高)。 - R:
randomForest包(经典实现,支持分类、回归及特征重要性可视化)。 - Spark:
ml.ensemble.RandomForestClassifier(适用于大规模分布式数据训练)。
为更清晰理解随机森林的定位,以下对比其与决策树、支持向量机(SVM)的核心差异: