当前位置: 首页 > news >正文

随机森林(Random Forest)学习笔记

随机森林是一种强大且常用的机器学习算法,它结合了多棵决策树的智慧,从而得到更稳定、更准确的预测结果。

1. 随机森林是什么?

简单来说,随机森林就是:用很多“有点不同”的决策树一起投票(用于分类问题)或取平均值(用于回归问题),让最终的预测结果更稳定、更准确。

2. 一个好懂的比喻

想象一下,你要判断一棵树上的果子是不是苹果。

  • 你只问了一个专家(单棵决策树):他可能会因为某些特殊情况(比如光线、角度等)而判断失误,这就像机器学习中的“过拟合”,模型在训练数据上表现很好,但在新数据上却不准确。

  • 你问了100个来自不同背景的专家(多棵树):他们每个人都根据自己的经验和观察给出判断。如果大多数专家都说是苹果,那么这个果子是苹果的可能性就非常大。随机森林正是借鉴了这种**“集思广益,少数服从多数”**的思想。

更重要的是,这些“专家”之间是有差异的,他们不会都被同样的错误信息所迷惑。这种多样性是随机森林成功的关键。

3. 随机森林背后的两个“随机”

随机森林之所以强大,在于它引入了“随机性”,这使得每棵决策树都“有点不同”,从而避免了它们犯同样的错误。随机森林 = Bagging(套袋法) + 决策树 + 特征随机化。

3.1 样本随机(Bootstrap Sampling)

  • 怎么做? 每棵树在训练时,不是使用全部的原始数据集,而是从原始数据中有放回地随机抽取一部分样本来训练。这意味着有些样本可能会被多次抽到,有些样本可能一次也抽不到。
  • 好处? 这种做法让每棵树看到的数据视角不同,减少了树之间的相关性。就像不同的专家阅读了不同的案例集,他们的经验会更加多样化。

3.2 特征随机(Feature Subset Selection)

  • 怎么做? 在构建每棵决策树的每个分裂节点时,算法不会考虑所有的特征,而是随机挑选一部分特征(例如,如果总共有100个特征,每次可能只随机选择10个)来寻找最佳的分裂点。
  • 好处? 这种随机性让每棵树的结构更加不同,进一步减少了树之间的相关性,也有效防止了过拟合,特别是当某些特征非常突出时,避免了所有树都依赖于同一个特征。

4. 算法流程(分类版)

理解了随机森林的构成,我们来看看它是如何工作的:

  1. 设定森林规模:首先,你需要决定森林里有多少棵决策树(n_estimators参数)。通常,树的数量越多,结果越稳定,但计算时间也会增加。

  2. 构建每棵树:对于森林中的每一棵树,执行以下步骤:

    • 样本抽样:从原始数据集中使用“Bootstrap”方法进行有放回的随机抽样,得到一个与原始数据集大小相同的新样本集。这个新样本集就是当前这棵树的训练数据。
    • 特征选择:在每个节点进行分裂时,不是考虑所有可用特征,而是随机挑选max_features个特征作为候选,然后从这些候选特征中选择最佳的分裂特征和分裂点。
    • 树的训练:根据决策树算法(如CART算法,通常使用基尼系数Gini或信息熵Entropy作为分裂标准),将这棵树训练到预设的最大深度(max_depth)或其他停止条件(如min_samples_splitmin_samples_leaf)。
  3. 新样本预测:当有一个新的、未见过的数据样本需要预测时:

    • 分类问题:将这个新样本输入到森林中的每一棵决策树中,每棵树都会给出一个分类结果。最终的预测结果是所有树的“多数投票”结果(即哪个类别被预测的次数最多)。
    • 回归问题:同样将新样本输入到每一棵决策树中,每棵树都会给出一个预测值。最终的预测结果是所有树预测值的“平均值”。

5. 数学/统计学本质

随机森林的核心思想是一种叫做 Bagging (Bootstrap Aggregating) 的集成学习方法。

  • 单棵决策树的特点:通常,单棵决策树模型具有高方差、低偏差的特点。这意味着它很容易在训练数据上表现得非常好(低偏差),但对训练数据的微小变动非常敏感,导致在新的、未见过的数据上表现不稳定(高方差),也就是容易“过拟合”。

  • 随机森林的优化:通过结合多棵(高方差、低偏差的)决策树,并引入随机性(样本随机和特征随机),随机森林能够显著降低模型的方差。虽然这可能会略微增加一点偏差,但从整体来看,模型的总误差会大幅下降,从而提升了模型的泛化能力(在未见过的数据上表现良好的能力)。

误差来源拆分

总误差 = 偏差² + 方差 + 噪声

随机森林的核心策略就是通过牺牲一点点偏差来大幅降低方差,最终实现总误差的最小化。

6. 重要的调参项

为了让随机森林模型达到最佳性能,我们需要对一些关键参数进行调整(调参)。以下是一些最重要的参数:

  • n_estimators (树的数量):森林中决策树的数量。通常情况下,树的数量越多,模型的稳定性越好,结果也越准确。但同时,计算时间也会相应增加。需要根据实际情况权衡。

  • max_features (每次分裂考虑的特征数):在每个节点分裂时,随机选择的特征子集的数量。

    • 分类问题:通常建议设置为特征总数的平方根(sqrt(特征总数))。
    • 回归问题:通常建议设置为特征总数的三分之一(特征总数/3)。
      这个参数控制了每棵树的“多样性”,较小的值会增加树的随机性,有助于减少过拟合。
  • max_depth (树的最大深度):每棵决策树允许生长的最大深度。限制树的深度可以有效防止过拟合。如果设置得太深,树可能会记住训练数据中的噪声;如果设置得太浅,树可能无法捕捉到数据中的复杂模式。

  • min_samples_split / min_samples_leaf (限制分裂所需的最小样本数)

    • min_samples_split:一个节点在分裂之前必须包含的最小样本数。如果一个节点的样本数少于这个值,它将不会分裂。
    • min_samples_leaf:一个叶子节点(即最终的决策结果节点)必须包含的最小样本数。这两个参数也能有效控制树的复杂度,防止过拟合。
  • bootstrap (是否启用样本有放回抽样):一个布尔值,决定在构建每棵树时是否使用有放回抽样。默认通常为 True,这是随机森林的核心特性之一。如果设置为 False,则每棵树都使用全部数据集进行训练,这会降低树的多样性,可能导致过拟合。

6. 重要的调参项

为了让随机森林模型达到最佳性能,我们需要对一些关键参数进行调整(调参)。以下是一些重要的参数:

  • n_estimators (树的数量):森林中决策树的数量。通常情况下,树的数量越多,模型的稳定性越好,但计算时间也会相应增加。需要根据实际情况权衡。

  • max_features (每次分裂考虑的特征数):在每个节点分裂时,随机选择的特征子集的数量。

    • 分类问题:通常建议设置为特征总数的平方根(sqrt(特征总数))。
    • 回归问题:通常建议设置为特征总数的三分之一(特征总数/3)。
  • max_depth (树的最大深度):每棵决策树允许生长的最大深度。限制深度可以有效防止过拟合,但过小的深度可能导致欠拟合。

  • min_samples_split / min_samples_leaf (限制分裂所需的最小样本数)

    • min_samples_split:一个节点在分裂之前必须包含的最小样本数。如果样本数小于这个值,节点将不再分裂。
    • min_samples_leaf:一个叶子节点(最终节点)必须包含的最小样本数。这可以防止生成过小的叶子节点,从而减少过拟合。
  • bootstrap (是否启用样本有放回抽样):一个布尔值,决定在构建树时是否使用有放回抽样。默认通常为 True,这是随机森林的核心特性之一。

7. 优点

随机森林之所以广受欢迎,得益于其诸多优点:

  • 抗过拟合能力强:相比于单棵决策树,随机森林通过集成多棵树并引入随机性,大大降低了过拟合的风险,模型泛化能力更强。
  • 能处理高维、非线性、多类别数据:它对输入数据的类型不敏感,无论是连续型还是离散型特征,都能很好地处理。
  • 不需要特征缩放:由于决策树是基于特征的顺序和阈值进行分裂的,而不是基于距离,因此不需要对特征进行标准化或归一化处理。
  • 可以给出特征重要性排序:随机森林在训练过程中可以评估每个特征对模型预测的贡献程度,从而给出特征的重要性排名,这对于特征选择和理解数据非常有帮助。
  • 对缺失值和异常值相对鲁棒:由于每棵树只使用部分样本和特征,即使数据中存在缺失值或异常值,也不会对整个模型造成太大影响。

8. 缺点

尽管随机森林有很多优点,但它也并非完美无缺:

  • 模型比较大,推理比单棵树慢:由于需要构建和存储多棵决策树,模型的体积会比较大。在进行预测时,需要遍历所有树并汇总结果,因此推理速度会比单棵决策树慢。
  • 可解释性差:相比于单棵决策树清晰的决策路径,随机森林的“黑箱”特性使其内部决策过程难以直观理解。你很难像解释一棵树那样,解释随机森林是如何做出某个具体判断的。
  • 树数很多时内存占用大:当n_estimators设置得非常大时,模型会占用更多的内存资源。
  • 样本极不平衡时,少数类可能被忽略:如果数据集中某个类别的样本数量非常少,随机森林在训练时可能会倾向于预测多数类,从而忽略少数类。这时可能需要通过调整class_weight参数或采用其他采样方法来解决。

9. 常见应用场景

随机森林因其出色的性能和鲁棒性,在许多领域都有广泛应用:

  • 特征选择:根据模型输出的特征重要性,可以帮助我们识别数据集中最重要的特征,用于后续的模型优化或数据理解。
  • 工业/金融风控:在风险评估、欺诈检测等场景中,随机森林的稳健性和抗噪能力使其成为理想选择。
  • 医学诊断:能够处理混合型特征(如患者的年龄、性别、化验结果等),在疾病诊断和预后预测中发挥作用。
  • 推荐系统中的候选集过滤:在海量的商品或内容中,快速筛选出用户可能感兴趣的候选集。
  • 高维小样本的基线模型:在数据维度很高但样本量相对较少的情况下,随机森林通常能提供一个不错的基线性能,且通常不需要进行过多的参数调整。

10. 小结

  • 决策树:就像一个人凭经验做判断,容易因为个人偏好或片面信息而“偏激”或“过拟合”。
  • 随机森林:则像一群背景不同、各有专长的人一起商量、投票或平均意见,最终得出的“共识”会更稳健、更可靠。
  • 随机性:是随机森林的灵魂,它让每个“专家”的视角不同,避免了大家同时犯同样的错误。
  • 投票/平均:这种机制能够有效地把个别“怪异”或错误的观点平均掉,从而得到一个更稳定、更准确的结论。

随机森林是一种非常实用的集成学习算法,它通过“集体智慧”的力量,将多个弱学习器(决策树)组合成一个强大的模型,在实际应用中表现出色。


文章转载自:

http://NoPM9LlA.rbmnq.cn
http://jSnOB790.rbmnq.cn
http://KttIdpNT.rbmnq.cn
http://ZrAJcEKQ.rbmnq.cn
http://CayYk614.rbmnq.cn
http://0bEiE33F.rbmnq.cn
http://aksDEnSd.rbmnq.cn
http://CGRYDMkJ.rbmnq.cn
http://0RZIeTgN.rbmnq.cn
http://5CC2yEWN.rbmnq.cn
http://KFRF4Z5s.rbmnq.cn
http://AkLZvEKw.rbmnq.cn
http://koxtdmTf.rbmnq.cn
http://PwVM9kSG.rbmnq.cn
http://oQ10ykQX.rbmnq.cn
http://dvpAzM99.rbmnq.cn
http://X4GiC1ip.rbmnq.cn
http://hJPfV4ib.rbmnq.cn
http://cMD0TY8l.rbmnq.cn
http://VTbSVsud.rbmnq.cn
http://BP0FxeLI.rbmnq.cn
http://K9vc0nUu.rbmnq.cn
http://GS0Bzms1.rbmnq.cn
http://eqAXpaXY.rbmnq.cn
http://ZgOHzJuh.rbmnq.cn
http://gxKay0Hq.rbmnq.cn
http://SvS2K61V.rbmnq.cn
http://vlpNWkhi.rbmnq.cn
http://EvOtTc1k.rbmnq.cn
http://kx8W0nNr.rbmnq.cn
http://www.dtcms.com/a/386289.html

相关文章:

  • css之Flex响应式多列布局,根据容器宽度自动调整显示2列或3列布局,支持多行排列
  • HTML应用指南:利用POST请求获取全国中石化易捷门店位置信息
  • PDF24 Creator:免费全能的PDF处理工具
  • 小程序交互与一些技术总结
  • Spring Cloud - 面试知识点(负载均衡)
  • 易特ERP软件局域网版安装教程
  • qt QBoxSet详解
  • 电脑散热风扇有噪音怎么解决
  • 行业分享丨汽车电磁兼容仿真技术与应用
  • 缓存与数据库一致性的4大坑及终极解决方案
  • 机器学习面试题:请讲一讲分类评估方式?
  • 【pure-admin】前端使用pure-admin后台管理系统框架,后端使用FastAPI的前端向后端加密发送用户登录密码的完整示例
  • 从 Node.js 安装到 Vue 3 开发环境搭建
  • Python单元测试框架之pytest -- 生成测试报告
  • 使用HBuilderX新建uniapp项目
  • 医疗行业安全合规数据管理平台:构建高效协作与集中化知识沉淀的一体化解决方案
  • 从一次鼠标点击窥探操作系统内核:中断、驱动、IPC与内存安全的奇幻之旅
  • 【超详细】C#的单例模式
  • 加快 NoETL 数据工程实践, Aloudata 荣登《2025 中国数智化转型升级创新服务企业》榜单
  • 香港服务器CN2带宽价格多少钱?很贵吗?
  • 180 课时吃透 Go 语言游戏后端系列1:第一个Go程序
  • MSI 与 IOAPIC LAPIC 如何协作,操作系统如何初始化和使用他们
  • 数据库优化(六)安全字段脱敏设计—东方仙盟金丹期
  • java21学习笔记
  • 大厂综合题库解析
  • 算法奇妙屋(2)-模拟
  • 贪心算法应用:区间调度问题详解
  • js中异步编程的实现方式【详细】
  • 详解 ArduPilot:开源无人机自动驾驶系统的全方位解析
  • 分页查询:时间筛选+日期筛选+增加queryWrapper 筛选条件