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

机器学习:随机森林——基于决策树的模型

序言

        随机森林是通过构建多棵相对独立的决策树来进行预测的集成方法,用于分类或回归任务。其核心思想是“bagging”(Bootstrap Aggregating),即在训练时从数据集中有放回地随机采样,生成多份样本集,每份样本集用于训练一棵决策树。最后,将所有决策树的预测结果通过投票(分类)或平均(回归)得到最终结果。

注:阅读本篇文章前,最好先了解决策树的基本知识,包括决策树的类型、原理和构建方法等。

(决策树相关内容可以参考我另一篇文章。如果大佬的话,就当我没说吧哈哈哈哈哈)

核心步骤

 (一)数据采样

        从原始训练数据集 D(包含 n 个样本)中,有放回地抽取多个子集 Di,假设抽取T个子集。每个子集大小与原始数据集相同(包含 n 个样本)。有放回采样会导致每个子集内的样本有重复。

(二)构建决策树

        对于每个子集 Di​,构建一棵决策树。在每个节点进行划分时,随机选择一个特征子集 m(通常 m≈M^{1/2}​,其中 M 是总特征数),然后在该子集上选择最优划分特征。这样,避免所有树在相同的特征上划分,提高了模型的多样性。

(三)集成预测

         对于分类任务,随机森林通过所有决策树(共T棵)的“投票”来决定最终的预测类别;对于回归任务,则通过所有决策树预测结果的平均值作为最终预测。

  • 对于分类任务:每棵决策树输出一个类别预测结果,选择票数最多的类别作为最终预测结果。

  • 对于回归任务:每棵决策树输出一个数值预测结果,取所有预测结果的平均值作为最终预测结果。

优点

  • 高准确率:随机森林结合了多棵决策树的预测结果,能显著提高模型的精度,尤其适用于特征空间复杂的数据集。

  • 抗过拟合:随机森林通过“bagging”方法、随机采样和特征选择等机制,有效减少了过拟合的风险。与单棵决策树相比,随机森林对训练数据中的噪声不敏感。

  • 特征重要性评估:随机森林可以通过统计决策树的特征分裂次数,量化特征的重要性。,使得模型在特征选择上具有直观性,便于解释和优化数据。

  • 鲁棒性强:随机森林对缺失值和异常值的鲁棒性较好。即使存在少量缺失值和噪声,它依然能保持较好的预测性能。

  • 适用性广泛:随机森林可以用于分类、回归任务,还可以拓展到异常检测、特征选择等问题。

  • 不要求必须标准化或归一化随机森林基于决策树,不依赖特征的缩放。

  • 可以并行计算:随机森林中的每棵树可以独立训练和预测,因此可以并行计算,能够充分利用多核处理器,提升训练效率。

缺点

  • 计算成本高、占用内存大:随机森林需要训练多棵决策树,尤其在树的数量较多时,计算开销较大。尽管可以并行化,但在大数据集上依然可能较慢。随机森林模型中存储了大量树结构,占用的内存可能较大,尤其在树的数量较多、深度较大的情况下。

  • 模型复杂,具体决策过程不易解释:随机森林是由多棵树组成的集成模型,虽然能输出特征重要性,但具体决策过程不易解释。相比单棵决策树或线性模型,其决策过程不够透明。

  • 对高维稀疏数据效果不佳:随机森林在高维、稀疏数据(如文本分类)上效果一般,不如线性模型或神经网络等适用。

  • 无法处理时间序列数据:随机森林不擅长处理时间序列数据,尤其是有序依赖关系的数据。对这类数据,通常需要引入特征工程或采用其他专门算法(如LSTM或ARIMA)。

  • 对极端类别不平衡敏感:随机森林对类别不平衡的数据可能表现不佳,往往会偏向于多数类。需要额外的采样方法或调整策略来平衡模型的效果。

优化方法

1. 调整超参数

       可以通过网格搜索或随机搜索结合交叉验证来优化下面这些超参数。

  • 树的数量(n_estimators
    树的数量越多,模型的预测结果越稳定,但训练时间也会增加。可以通过交叉验证找到最佳的树数量,一般树的数量适当增多可以提升模型性能,但在一定数量之后效果会逐渐减小。

  • 最大特征数(max_features
    每次节点分裂时可以使用的最大特征数,控制树的多样性。推荐设置为 sqrt(n_features)(分类问题)或 log2(n_features),但具体选择可以通过验证调整。减小该值可以减少模型的方差,但会增加偏差。

  • 树的最大深度(max_depth
    决定每棵树的深度限制,可以避免每棵树过于复杂导致过拟合。较浅的树可以减少过拟合,但也可能带来欠拟合。

  • 叶节点最小样本数(min_samples_leaf
    控制每个叶节点最小的样本数量。如果设置为较大的值,则每棵树更稳定,但可能欠拟合。

  • 最大节点数(max_leaf_nodes
    限制每棵树的叶节点数量,可以避免树过于复杂导致过拟合。

 2. 数据预处理

        如果数据类别不平衡(尤其是分类任务),可以通过下采样、过采样或生成合成样本(如SMOTE平滑)来平衡类别,从而提升模型在小类上的预测效果。

3. 特征工程

  • 选择重要特征:通过随机森林的feature_importances_属性,可以得到各特征的重要性评分,剔除重要性较低的特征以减少模型的复杂度和训练时间。

  • 特征组合:对于某些复杂问题,可以尝试组合已有特征,构造交叉特征,提高模型的表达能力。

  • 标准化和归一化:虽然随机森林对特征缩放不敏感,但归一化和标准化可能对部分特征关系敏感的任务有所帮助。

4. 使用增量学习或部分训练数据

        对于非常大的数据集,可以使用增量学习或对数据进行分批采样,每次只用部分数据训练一小部分树,避免过大的内存开销。

5. 减少过拟合和加快训练

  • 减少样本数或特征数:在训练数据量较大的情况下,可以使用PCA等方法降维或选择重要特征,减少训练时间。

  • 使用并行化:随机森林模型可以并行化训练和预测,通过设置n_jobs参数(例如n_jobs=-1)利用多核CPU资源,加速训练过程。

6. 使用早停法

        当树的数量增多时,模型的提升会逐渐减小,甚至出现过拟合。可以在训练中监控模型性能,一旦模型在验证集上的性能停止提升,则停止增加树的数量。

#  文章内容来源于各渠道整理。若对大噶有帮助的话,希望点个赞支持一下叭!

#  文章如有错误,欢迎大噶指正!


http://www.kler.cn/a/392027.html

相关文章:

  • 2024/11/13 英语每日一段
  • [代码随想录Day10打卡] 理论基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
  • 【VBA实战】用Excel制作排序算法动画续
  • 系统架构设计师论文:大数据Lambda架构
  • ReactPress技术揭秘
  • SpringBoot后端解决跨域问题
  • (蓝桥杯C/C++)——搜索
  • 036 RabbitMQ消息确认 死信队列 延时队列
  • 脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾
  • 接口测试框架+数据驱动
  • Fish Agent V0.13B:Fish Audio的语音处理新突破,AI语音助手的未来已来!
  • 集合类源码浅析のJDK1.8ConcurrentHashMap(上篇)
  • Go语言的并发安全与互斥锁
  • 使用cloudflare搭建私人docker镜像站
  • 【深圳大学/大学物理实验2】弗兰克-赫兹实验预习题参考
  • PL/SQL执行.sql文件
  • Go语言实现用户登录Web应用
  • 解析“ChatGPT网络错误”:从网络专线到IP地址的根源与解决方案
  • 券商隔夜单自动下单交易接口
  • 基于表格滚动截屏(表格全部展开,没有滚动条)
  • 【LeetCode】【算法】240. 搜索二维矩阵II
  • 鸿蒙next版开发:ArkTS组件通用属性(布局约束)
  • QT常用控件
  • 127.WEB渗透测试-信息收集-ARL(18)
  • 自动化爬虫Selenium
  • 【启程Golang之旅】从零开始构建可扩展的微服务架构