Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Random Forest

随机森林会对多棵决策树的结果取平均。每棵树都基于自助采样样本生长,并随机划分特征,用于分类和回归。

随机森林是一种监督学习算法:它在同一数据的随机变体上训练许多决策树,然后组合各树的预测结果;分类任务采用投票或类别概率平均,回归任务则取均值。Leo Breiman 在 2001 年的论文《随机森林》中介绍了这种方法,并以他早期的装袋技术为基础。单棵深树会记住训练数据行,因此数据稍有变化,预测结果就会大幅波动。数百棵犯错方式各异的树取平均值,可以抵消大部分方差,因此随机森林是表格数据中最可靠的默认模型之一。它不需要特征缩放,能够处理特征之间的非线性交互,而且随着树的数量增加,其测试误差会趋于稳定。

随机森林的工作原理#

随机森林在树的训练中引入两种随机性,因为只有当集成中的成员犯错各异时,集成才有帮助;随后再组合这些树:

  • 自助聚合(装袋):每棵树都在一个自助采样集上训练。该采样集从训练数据中有放回地抽取行,大小与训练数据相同。一些行会出现多次,而每个采样集大约会遗漏 37% 的行(即 1/e)。
  • 随机特征子集:每次分裂时,树只考虑随机选取的一部分特征。Scikit-learn 的分类器默认考虑特征数量的平方根,因此,包含 100 个特征的数据集每次分裂会有 10 个候选特征;回归器则默认考虑所有特征。因此,主导特征无法出现在每棵树的顶部,从而降低树之间的相关性。
  • 聚合:Breiman 的原始方法采用树的多数票。Scikit-learn 的实现则对所有树的类别概率取平均;回归森林对树的数值预测取平均。

这些树会生长得很深且不进行剪枝,因此每棵树的偏差低、方差高。对许多互不相关的树取平均值,可以在保持低偏差的同时降低方差,这是沿着偏差-方差权衡方向的有利调整。由于各棵树相互独立,它们也可以在多个 CPU 核心上并行训练。

袋外误差和特征重要性#

树从未见过的数据行可用作内置测试集。袋外 (OOB) 分数仅使用自助采样集未包含对应训练行的树来预测该行,因此无需单独留出验证集,就能估算模型在未见数据上的准确率。森林也会报告特征重要性。默认的基于不纯度的重要性衡量每个特征在所有分裂中降低不纯度的程度;它偏向取值唯一的特征,因此,排列重要性——打乱一个特征后分数的下降幅度——是特征排序时更可靠的选择。

此示例使用自带的乳腺癌数据集,通过 5 折交叉验证比较一棵完全生长的树和 scikit-learn 随机森林,随后读取森林的 OOB 分数:

from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

# 569 tumors described by 30 numeric features, labeled malignant or benign
X, y = load_breast_cancer(return_X_y=True)

# One fully grown tree vs. a forest of 300 trees on bootstrap samples
tree = DecisionTreeClassifier(random_state=0)
forest = RandomForestClassifier(n_estimators=300, oob_score=True, random_state=0)

# Compare 5-fold cross-validated accuracy
print(f"Single tree: {cross_val_score(tree, X, y, cv=5).mean():.3f}")
print(f"Forest:      {cross_val_score(forest, X, y, cv=5).mean():.3f}")

# Out-of-bag score: each row is predicted only by trees that never trained on it
forest.fit(X, y)
print(f"OOB score:   {forest.oob_score_:.3f}")

脚本输出:单棵树的分数为 0.917,森林为 0.963,OOB 分数为 0.965。森林将树的错误率从 8.3% 降至 3.7%;单次训练运行得到的 OOB 估算值与交叉验证准确率仅相差 0.002。

实际应用#

  • 信用风险和欺诈检测:银行根据收入、账户年限和消费模式等表格记录为贷款申请和交易评分,而森林输出的概率用于设定决策阈值。
  • 医疗风险预测:临床模型根据患者记录预测再入院等结果,排列重要性则显示哪些测量值影响了每项预测。
  • 卫星图像分析:随机森林长期以来一直用于土地覆盖制图,根据光谱波段值和植被指数对每个像素或地块进行分类。
  • 作物产量建模:YOLO26 检测器会统计田间图像中的水果或植株,每个对象对应一次检测;随后将每块地的计数与土壤和天气读数一同作为随机森林的列数据,用来预测产量。
  • 单棵决策树:树可以表示为一组易于阅读的 if-then 规则,但数据的微小变化就可能生成完全不同的树。森林牺牲了这种可读性,换取大幅降低的方差。
  • 梯度提升:XGBoost、LightGBM 和 CatBoost 会依次构建浅层树,每棵树都修正前面树的错误。经过调参后,提升方法在表格数据基准测试中的得分通常更高;随机森林的各棵树则可以并行独立训练,并且使用默认设置也能取得良好结果。
  • 表格基础模型:预训练 Transformer 只需一次前向传播,就能对新表格进行预测,无需针对每个数据集单独拟合模型;如今,它们在小型表格数据上的表现已能媲美经过调优的树集成模型。
  • 极端随机树:对于每个候选特征,Extra Trees 会随机抽取一个阈值,而不是搜索最佳阈值,然后从这些随机分裂中选出最佳结果。Scikit-learn 默认使用完整数据集训练这类模型,不进行自助采样;跳过阈值搜索后,其拟合速度比同等规模的随机森林更快。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来