正在加载中...

展开本页目录
算法教程随机森林算法RandomForest

随机森林算法RandomForest

No.027 · 在线教程

随机森林(Random Forest, RF)是一类基于 Bagging 的集成学习方法,由多棵决策树构成,可用于分类与回归。其核心思想是:对样本进行自助采样(Bootstrap),并在每个分裂节点随机选择特征子集,从而降低单棵树的方差并提升泛化能力。

随机森林算法(Random Forest)

1. 方法概述

随机森林(Random Forest, RF)是一类基于 Bagging 的集成学习方法,由多棵决策树构成,可用于分类回归。其核心思想是:对样本进行自助采样(Bootstrap),并在每个分裂节点随机选择特征子集,从而降低单棵树的方差并提升泛化能力。

设共有 \(n\) 个样本、\(d\) 个特征,数据集为

$$ \mathcal{D}=\{(x_i,y_i)\}_{i=1}^{n},\quad x_i\in\mathbb{R}^d \tag{1} $$

其中 \(y_i\) 为类别标签(分类)或连续值(回归)。

2. 公共部分(预处理与随机森林机制)

系统在模型训练前支持缺失处理、编码、缩放、特征构造、特征选择与降维等步骤(均在训练集上拟合,再作用于测试集或交叉验证折内,避免数据泄漏)。

2.1 标准化与归一化

Z-score 标准化: $$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{2} $$

Min-Max 归一化: $$ z_{ij}=\frac{x_{ij}-\min x_j}{\max x_j-\min x_j+\varepsilon} \tag{3} $$

2.2 One-Hot 编码(类别型变量)

$$ x^{(k)}_{ij}= \begin{cases} 1,& x_{ij}=\text{cat}_k\\ 0,& \text{otherwise} \end{cases} \tag{4} $$

2.3 多项式特征(可选)

$$ \phi(x)=\{x_1^{a_1}x_2^{a_2}\cdots x_d^{a_d}\mid a_1+\cdots+a_d\le d_p\} \tag{5} $$

2.4 特征选择(方差阈值 / 互信息)

方差阈值: $$ \operatorname{Var}(x_j)=\frac{1}{n-1}\sum_{i=1}^{n}(x_{ij}-\mu_j)^2 \tag{6} $$

互信息: $$ I(X;Y)=\sum_{x\in X}\sum_{y\in Y}p(x,y)\log\frac{p(x,y)}{p(x)p(y)} \tag{7} $$

2.5 降维(PCA / KPCA)

协方差矩阵: $$ \Sigma=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})(x_i-\bar{x})^\top \tag{8} $$

主成分解释率: $$ \eta_k=\frac{\lambda_k}{\sum_{j=1}^{d}\lambda_j} \tag{9} $$

Kernel PCA 的核矩阵: $$ K_{ij}=k(x_i,x_j) \tag{10} $$

2.6 IQR 异常值截断(可选)

$$ \text{IQR}=Q_3-Q_1,\quad x\leftarrow \min(\max(x,Q_1-k\cdot\text{IQR}),\,Q_3+k\cdot\text{IQR}) \tag{11} $$

2.7 Bootstrap 采样(Bagging)

对每棵树 \(b=1,\ldots,B\),从原始样本中有放回抽样得到训练子集:

$$ \mathcal{D}^{(b)}=\{(x_{i_b},y_{i_b})\}_{i=1}^{n} \tag{12} $$

2.8 随机特征子集

在每个节点分裂时,从全部特征中随机抽取 \(m\) 个特征进行候选:

$$ S_t\subseteq\{1,2,\ldots,d\},\quad |S_t|=m \tag{13} $$

常见取法:分类 \(m\approx\sqrt{d}\),回归 \(m\approx d\) 或 \(d/3\)(可由参数 max_features 控制)。

2.9 分裂准则与不纯度下降

对节点 \(t\) 的样本集合 \(S_t\),选择特征与阈值使不纯度下降最大:

$$ \Delta I=I(t)-\frac{n_L}{n_t}I(t_L)-\frac{n_R}{n_t}I(t_R) \tag{14} $$

Gini 不纯度(分类): $$ I_G(t)=1-\sum_{c=1}^{C}p_{c}^{2} \tag{15} $$

信息熵(分类,可选): $$ I_H(t)=-\sum_{c=1}^{C}p_{c}\log(p_c+\varepsilon) \tag{16} $$

回归平方误差(回归): $$ \operatorname{SSE}(t)=\sum_{x_i\in S_t}(y_i-\bar{y}_t)^2 \tag{17} $$

2.10 符号说明

符号 含义
\(n\) 样本数量
\(d\) 特征维度
\(B\) 树的数量
\(m\) 每次分裂候选特征数量
\(x_i\) 第 \(i\) 个样本特征向量
\(y_i\) 第 \(i\) 个样本标签/真实值
\(\hat{y}_i\) 第 \(i\) 个样本预测值
\(\bar{y}_t\) 节点 \(t\) 内目标均值
\(C\) 类别数量
\(TP,FP,TN,FN\) 分类混淆矩阵四要素
\(\varepsilon\) 极小正数(防止除零)

3. 分类版(RandomForestClassifier)

3.1 集成投票 / 概率平均

多数投票: $$ \hat{y}(x)=\arg\max_{c}\sum_{b=1}^{B}\mathbb{I}\big(h_b(x)=c\big) \tag{18} $$

概率平均(可选): $$ P(y=c\mid x)=\frac{1}{B}\sum_{b=1}^{B}P_b(y=c\mid x) \tag{19} $$

3.2 分类评价指标

准确率 $$ \text{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN} \tag{20} $$

精确率 / 召回率 $$ \text{Precision}=\frac{TP}{TP+FP} \tag{21} $$

$$ \text{Recall}=\frac{TP}{TP+FN} \tag{22} $$

F1 值 $$ F1=\frac{2\cdot \text{Precision}\cdot \text{Recall}}{\text{Precision}+\text{Recall}} \tag{23} $$

宏 / 加权平均 $$ \text{Macro}=\frac{1}{C}\sum_{c=1}^{C}M_c,\quad \text{Weighted}=\sum_{c=1}^{C}\omega_c M_c \tag{24} $$

ROC 曲线与 AUC $$ \text{TPR}=\frac{TP}{TP+FN},\quad \text{FPR}=\frac{FP}{FP+TN} \tag{25} $$

$$ \text{AUC}=\int_0^1 \text{TPR}(\text{FPR})\,d(\text{FPR}) \tag{26} $$

3.3 分类文字说明(可直接用于论文)

  • 采用随机森林分类器,通过 Bootstrap 与随机特征子集降低过拟合风险。
  • 输出 Accuracy、Precision、Recall、F1 等指标(式(20)–(24)),并给出混淆矩阵解释分类结构。
  • 若可获得类别概率,绘制 ROC/PR 曲线、阈值-F1 与阈值-TPR/FPR,用于阈值敏感性分析。

4. 回归版(RandomForestRegressor)

4.1 集成平均预测

$$ \hat{y}(x)=\frac{1}{B}\sum_{b=1}^{B}h_b(x) \tag{27} $$

4.2 回归评价指标

MAE $$ \text{MAE}=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i| \tag{28} $$

MSE / RMSE $$ \text{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \tag{29} $$

$$ \text{RMSE}=\sqrt{\text{MSE}} \tag{30} $$

决定系数 $$ R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i=1}^{n}(y_i-\bar{y})^2} \tag{31} $$

4.3 回归文字说明(可直接用于论文)

  • 采用随机森林回归模型,预测值为多棵树输出的平均(式(27))。
  • 使用 MAE、MSE、RMSE 与 \(R^2\) 评估误差与拟合优度(式(28)–(31))。
  • 输出预测-真实对比图、残差直方图、残差-拟合图与 Q-Q 图,用于检验残差分布与模型稳定性。

5. 训练与验证(公共)

5.1 训练/测试划分

若设置测试集比例为 \(t\in(0,1)\),则 $$ n_{\text{test}}=\lceil n\cdot t\rceil,\quad n_{\text{train}}=n-n_{\text{test}} \tag{32} $$

5.2 \(K\)-折交叉验证

对 \(K\) 折的评价指标取均值: $$ \bar{M}=\frac{1}{K}\sum_{k=1}^{K}M_k \tag{33} $$

6. 特征重要性(MDI)

随机森林可基于不纯度下降估计特征重要性: $$ \operatorname{Imp}(j)=\frac{1}{B}\sum_{b=1}^{B}\sum_{t\in T_{b,j}}\frac{n_t}{n}\Delta I(t) \tag{34} $$

其中 \(T_{b,j}\) 表示树 \(b\) 中按特征 \(j\) 分裂的节点集合。

7. 结果输出说明

Excel 输出(常见 Sheet): 原始数据、处理后数据、训练集、测试集、指标、预测、特征重要性、学习曲线、图表清单、参数、参数与配置(分组)、报告摘要;
分类任务额外包含混淆矩阵与分类报告。

图表输出(按任务)

  • 分类:类别分布、混淆矩阵、ROC、PR、阈值-F1、阈值-TPR/FPR、校准曲线、学习曲线、特征重要性图。
  • 回归:预测-真实散点、预测-真实折线、残差直方图、残差-拟合图、残差 Q-Q 图、学习曲线、特征重要性图。

论文写作建议

  1. 描述随机森林的集成机制与分裂准则(式(12)–(17));
  2. 给出关键超参数(\(B\)、max_depthmax_featuresmin_samples_splitmin_samples_leafbootstrap);
  3. 列出核心指标表(分类:Accuracy/F1;回归:RMSE/MAE/\(R^2\));
  4. 图表用于解释模型性能与残差结构,交叉验证用于稳定性论证。

8. 与代码实现的对应关系

随机森林程序的关键实现位于 具体的算法/随机森林算法RandomForest/core/critic_calculator.pyutils/excel_report.py。与普通教材式描述相比,程序侧多了“模型导出、逐折验证明细、图表索引与报告摘要”这些面向论文和复核的产物。

需要明确的实现细节包括:

  1. 结果不止一份 Excel
    程序会在时间戳结果目录内同时生成 Excel、PNG 图、模型文件与预测模板脚本。常见附属文件包括 random_forest_model.pkl、模型元数据以及 predict_template.py

  2. Excel 工作表比常规结果更完整
    原始数据处理后数据训练集测试集指标预测特征重要性学习曲线图表清单参数 外,还可能生成 CV汇总CV折i_预测验证集参数与配置(分组)报告摘要 等。

  3. 交叉验证支持“汇总 + 明细”双层导出
    不仅能得到各折指标均值,还能在启用明细导出时获得每折逐样本预测,因此论文中既可写总体稳定性,也可保留复核证据。

  4. 特征重要性有表也有图
    代码会提取 feature_importances_,写入 Excel,并额外导出 Top-N 重要性图。因此文中若讨论“关键变量”,应以该结果为依据。

  5. 预测模板脚本会考虑列对齐问题
    导出的 predict_template.py 支持对输入列进行补齐与对齐,这意味着随机森林结果不仅可用于论文展示,也可直接进入后续推理复用。

9. 论文写作模板

方法描述模板:
“本文采用随机森林模型开展监督学习分析。通过 Bootstrap 重采样构建多棵决策树,并在每个分裂节点随机抽取特征子集,以降低单棵树的方差并提升泛化能力。建模过程中结合缺失处理、编码与特征工程,并通过训练集/测试集划分及交叉验证综合评估模型性能。”

结果描述模板:
“程序结果目录除最终 Excel 外,还包含特征重要性图、学习曲线及预测模板脚本。Excel 中进一步给出了处理后数据、逐样本预测、CV 汇总、参数与配置和报告摘要。因此论文中既可以报告 Accuracy、F1 或 RMSE、\(R^2\),也可以补充说明变量重要性排序与多折稳定性表现。”

10. 单篇终审补充

10.1 图题与表题对齐建议

  • 原始数据 表可写为:表X 随机森林原始数据表。
  • 处理后数据 表可写为:表X 随机森林处理后数据表。
  • 训练集 表可写为:表X 随机森林训练集数据表。
  • 测试集 表可写为:表X 随机森林测试集数据表。
  • 指标 表可写为:表X 随机森林性能指标表。
  • 预测 表可写为:表X 随机森林逐样本预测结果表。
  • 混淆矩阵 表可写为:表X 随机森林混淆矩阵表。
  • 分类报告 表可写为:表X 随机森林分类报告表。
  • 特征重要性 表可写为:表X 随机森林特征重要性表。
  • CV汇总 表可写为:表X 随机森林交叉验证汇总表。
  • 图表清单 表可写为:表X 随机森林图表索引表。
  • 参数 表可写为:表X 随机森林参数设置表。
  • 参数与配置(分组) 表可写为:表X 随机森林分组参数配置表。
  • 报告摘要 表可写为:表X 随机森林结果摘要表。
  • feature_importance_topN.png 建议写为:图X 随机森林 Top-N 特征重要性图。
  • confusion_matrix.png 建议写为:图X 随机森林混淆矩阵图。
  • roc.png 建议写为:图X 随机森林 ROC 曲线图。
  • pr.png 建议写为:图X 随机森林 PR 曲线图。
  • threshold_f1.png 建议写为:图X 随机森林阈值-F1 曲线图。
  • threshold_tpr_fpr.png 建议写为:图X 随机森林阈值-TPR/FPR 曲线图。
  • calibration.png 建议写为:图X 随机森林校准曲线图。
  • class_distribution_triptych.png 建议写为:图X 随机森林类别分布图。

10.2 终审说明

  • 当前最适合作为终审证据的代表性目录可采用 具体的算法/随机森林算法RandomForest/results/随机森林算法RandomForest分析结果_20260329_163716。该目录同时具备简版结果簿、全量结果簿、实体图、输入快照和 repro 脚本。
  • 简版结果簿 随机森林算法RandomForest分析结果_20260329_163716.xlsx 的真实工作表为 原始数据/处理后数据/训练集/测试集/指标/预测/混淆矩阵/分类报告/特征重要性/CV汇总/图表清单/参数/参数与配置(分组)/报告摘要;全量结果簿 随机森林算法RandomForest分析结果_20260329_163716_full.xlsx 的真实工作表为 总览-说明/参数配置/原始数据/数据清洗与描述/步骤-confusion_matrix/步骤-classes/步骤-classification_repor/步骤-feature_importance/步骤-cv/最终结果/混淆矩阵/重要性与可解释性/图表索引/图像预览/复现环境与版本
  • 这意味着随机森林这一篇在论文终审中应区分“正文引用的简版结果簿”和“附录引用的全量结果簿”。前者更利于正文阅读,后者更适合方法附录与复核留档。
  • 当前真实图文件稳定为 feature_importance_topN.pngconfusion_matrix.pngroc.pngpr.pngthreshold_f1.pngthreshold_tpr_fpr.pngcalibration.pngclass_distribution_triptych.png,并附带 class_distribution_full.png。若正文只保留有限图数,建议优先保留混淆矩阵、ROC/PR 与特征重要性图。
  • 当前复现脚本为 repro_template_20260329_163716.py,采用脚本同目录输入快照 SRC_FILE = 'rf_window1_input.csv',不是 repro_inputs/...。因此这篇文档也应明确写成“脚本同目录 CSV 快照复现”。

10.3 全量强化补充

本篇终审补充绑定的真实算法目录为 具体的算法/随机森林算法RandomForest,本次采用的代表性结果目录为 具体的算法/随机森林算法RandomForest/results/随机森林算法RandomForest分析结果_20260329_163716

该目录当前同时保留两份工作簿:

  • 随机森林算法RandomForest分析结果_20260329_163716.xlsx
  • 随机森林算法RandomForest分析结果_20260329_163716_full.xlsx

其中简版工作簿实测工作表为:

  • 原始数据
  • 处理后数据
  • 训练集
  • 测试集
  • 指标
  • 预测
  • 混淆矩阵
  • 分类报告
  • 特征重要性
  • CV汇总
  • 图表清单
  • 参数
  • 参数与配置(分组)
  • 报告摘要

全量工作簿实测工作表为:

  • 总览-说明
  • 参数配置
  • 原始数据
  • 数据清洗与描述
  • 步骤-confusion_matrix
  • 步骤-classes
  • 步骤-classification_repor
  • 步骤-feature_importance
  • 步骤-cv
  • 最终结果
  • 混淆矩阵
  • 重要性与可解释性
  • 图表索引
  • 图像预览
  • 复现环境与版本

因此这篇在论文中应明确区分:正文更适合引用简版结果簿,附录和复核更适合引用全量结果簿。

当前目录中的真实图文件为:

  • feature_importance_topN.png
  • confusion_matrix.png
  • roc.png
  • pr.png
  • threshold_f1.png
  • threshold_tpr_fpr.png
  • calibration.png
  • class_distribution_triptych.png
  • class_distribution_full.png

这说明当前代表性目录是分类场景,图证据覆盖特征重要性、分类性能、阈值敏感性、校准与类别分布。

复现实物方面,该目录实际包含:

  • 具体的算法/随机森林算法RandomForest/results/随机森林算法RandomForest分析结果_20260329_163716/repro_template_20260329_163716.py
  • 具体的算法/随机森林算法RandomForest/results/随机森林算法RandomForest分析结果_20260329_163716/rf_window1_input.csv

脚本中明确写成 SRC_FILE = 'rf_window1_input.csv'。因此这篇当前同样是“结果目录同级 CSV 快照 + repro 脚本”的复现口径,而不是 repro_inputs/...

10.4 软件实现核查补充(2026-07)

  • 当前源码核查到的是统一森林封装,分类与回归都可走同一套结果管线;正文中关于随机森林的理论可以保留,但结果解释要区分任务类型。
  • 本轮代表性结果目录是分类场景,导出图集覆盖特征重要性、混淆矩阵、ROC/PR、阈值曲线、校准曲线与类别分布图,说明它的核心证据是“预测 + 重要性 + 分类评估”。
  • 复现说明仍应写成结果目录同级 CSV 快照与 repro_template_*.py 的组合,不要把其他模块的输入路径或样例名混入。
  • 如果正文谈到 bootstrap、袋外估计或特征子采样,可以继续保留为理论补充,但不能写成每次导出都必然出现单独的 OOB 报表。