万字总结随机森林原理、核心参数以及调优思路

万字总结随机森林原理、核心参数以及调优思路

在机器学习的世界里,随机森林(Random Forest, RF)以其强大的预测能力和对数据集的鲁棒性而备受青睐。作为一种集成学习方法,随机森林通过构建多个决策树并将它们的预测结果进行汇总,以提高模型的准确性和泛化能力。然而,要充分发挥随机森林的潜力,合理地调整其核心参数至关重要。本文将深入探讨随机森林的关键参数,包括树的数量、分裂标准、最大深度等,并提供实用的调优思路。

文章目录

  • 万字总结随机森林原理、核心参数以及调优思路
  • 一、随机森林实现原理
  • 二、RandomForestRegressor的实现以及注意事项
  • 三、随机森林核心参数
    • 3.1 弱评估器结构
    • 3.2 弱评估器数量(n_estimators)
    • 3.3 弱评估器训练的数据
  • 四、随机森林参数空间的确定
  • 五、随机森林调优思路
  • 六、随机森林面试热点问题


一、随机森林实现原理

随机森林(Bagging最为代表性的算法)是机器学习领域最常用的算法之一,其算法构筑过程非常简单:从提供的数据中随机抽样出不同的子集,用于建立多棵不同的决策树,并按照Bagging的规则对单棵决策树的结果进行集成(回归则平均,分类则少数服从多数)。

虽然原理上很简单,但随机森林的学习能力异常强大、算法复杂度高、又具备一定的抗过拟合能力,是从根本上来说比单棵决策树更优越的算法。即便在深入了解机器学习的各种技巧之后,它依然是现阶段能够使用的最强大的算法之一。原理如此简单、还如此强大的算法在机器学习的世界中是不常见的。在机器学习竞赛当中,随机森林往往是在中小型数据上会尝试的第一个算法,同时也是提交的备选之一。

在sklearn中,随机森林可以实现回归也可以实现分类。随机森林回归器由类sklearn.ensemble.RandomForestRegressor实现,随机森林分类器则有类sklearn.ensemble.RandomForestClassifier实现。可以像调用逻辑回归、决策树等其他sklearn中的算法一样,使用“实例化、fit、predict/score”三部曲来使用随机森林,同时也可以使用sklearn中的交叉验证方法来实现随机森林。其中回归森林的默认评估指标为R2,分类森林的默认评估指标为准确率。

二、RandomForestRegressor的实现以及注意事项

注意事项:

  • 对于回归模型,要先看一下标签的范围、分布以及均值等情况,以此预估MSE的大致取值范围,一般认为MSE远小于均值(3倍及以上),模型训练效果较为不错。

  • 另一种较为常用的评估方法是将RMSE相对于标签列均值的比率进行评估,这种比率有时候被称为标准化RMSE(NRMSE)
    在这里插入图片描述
    这个比率可以帮助我们理解模型的误差相对于数据的平均水平的大小。对于一个好的回归模型,通常我们希望这个比率尽可能低。在不同的领域和应用中,"好"的NRMSE标准可能不同,但这里有一些一般性的指导原则:

    • NRMSE < 10%:通常被认为是很好的模型,意味着误差较小。

    • NRMSE 在 10% 到 20% 之间:可以视为一个合理的模型,尤其是在数据变异性较大的情况下。

    • NRMSE > 20%:可能表示模型有改进的空间,误差相对较大。

  • 最后一种比较常用的评估方案是设置Baseline(基线模型),计算基线模型的RMSE值,如果模型的损失值小于基线模型的损失值,则认为效果比较不错,否认,认为效果一般。

三、随机森林核心参数

3.1 弱评估器结构

在集成算法当中,控制单个弱评估器的结构是一个重要的课题,因为单个弱评估器的复杂度/结果都会影响全局,其中单棵决策树的结构越复杂,集成算法的整体复杂度会更高,计算会更加缓慢、模型也会更加容易过拟合,因此集成算法中的弱评估器也需要被剪枝。随机森林回归器的弱评估器是回归树,因此集成评估器中有大量的参数都与弱评估器回归树中的参数重合。
在这里插入图片描述
分枝标准与特征重要性(criterion与feature_importances_)

与分类树中的信息熵/基尼系数不同,回归树中的criterion可以选择"squared_error"(平方误差),“absolute_error”(绝对误差)以及"poisson"(泊松偏差)。
在这里插入图片描述
其中平方误差与绝对误差是大家非常熟悉的概念,作为分枝标准,平方误差比绝对误差更敏感(类似于信息熵比基尼系数更敏感),并且在计算上平方误差比绝对误差快很多。泊松偏差则是适用于一个特殊场景的(泊松分布是正整数的分布):当需要预测的标签全部为正整数时,标签的分布可以被认为是类似于泊松分布的。 正整数预测在实际应用中非常常见,比如预测点击量、预测客户/离职人数、预测销售量等。

另外,当选择不同的criterion之后,决策树的feature_importances_(特征重要性)也会随之变化,因为在sklearn当中,feature_importances_是特征对criterion下降量的总贡献量,因此不同的criterion可能得到不同的特征重要性(选择泊松偏差特征重要性相比平方误差和绝对误差可能会有比较大的偏差)。

对绝大多数情况来说,选择criterion的唯一指标就是最终的交叉验证结果(交叉验证的优先级要优于验证集的结果)——无论理论是如何说明的,只取令随机森林的预测结果最好的criterion。
在这里插入图片描述

3.2 弱评估器数量(n_estimators)

n_estimators是森林中树木的数量,即弱评估器的数量,在sklearn中默认100,它是唯一一个对随机森林而言必填的参数。n_estimators对随机森林模型的精确程度、复杂度、学习能力、过拟合情况、需要的计算量和计算时间都有很大的影响,因此n_estimators往往是我们在调整随机森林时第一个需要确认的参数(网格搜索时也是第一个需要确认参数空间的参数)。对单一决策树而言,模型复杂度由树结构(树深、树宽、树上的叶子数量等)与数据量(样本量、特征量)决定,而对随机森林而言,模型复杂度由森林中树的数量、树结构与数据量决定,其中树的数量越多,模型越复杂。

n_estimators越大,模型的学习能力越强,但却并不是n_estimators越大越好,当n_estimators越大时(模型效果先提高而后急剧下降,趋于平缓/上升,存在非常明显的转折点):模型的复杂程度上升,泛化能先增强再减弱(或不变),模型的学习能力越来越强,在训练集上的分数可能越来越高,过拟合风险越来越高,模型需要的算力和内存越来越多,模型训练的时间会越来越长。

3.3 弱评估器训练的数据

随机森林会从提供的数据中随机抽样出不同的子集,用于建立多棵不同的决策树,最终再按照Bagging的规则对众多决策树的结果进行集成。因此在随机森林回归器的参数当中,有数个关于数据随机抽样的参数。
样本的随机抽样(bootstrap,oob_score,max_samples)
在这里插入图片描述

四、随机森林参数空间的确定

完整内容见随机森林参数空间的确定

五、随机森林调优思路

完整内容见随机森林调优思路

六、随机森林面试热点问题

完整内容见随机森林面试热点问题

欢迎关注我的公众号~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/772296.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高精度定位技术:赋能电网智能化转型的新引擎

在当今社会&#xff0c;电力作为经济发展的血脉&#xff0c;其稳定高效运行对于国家能源安全与社会发展至关重要。随着科技的飞速进步&#xff0c;高精度定位技术正逐步渗透至电网管理的各个环节&#xff0c;成为推动电网智能化转型的关键力量。本文将深入探讨高精度定位技术在…

下载安装MySQL

1.软件的下载 打开官网下载mysql-installer-community-8.0.37.0.msi 2.软件的安装 mysql下载完成后&#xff0c;找到下载文件&#xff0c;双击安装 3.配置环境变量 4.自带客户端登录与退出

B站大课堂-自动化精品视频(个人存档)

基础知识 工业通信协议 Modbus 施耐德研发&#xff0c;有基于以太网的 ModbusTCP 协议和使用 485/232 串口通信的 ModbusRTU/ASCII。 Modbus 协议面世较早、协议简洁高效、商用免费、功能灵活、实现简单&#xff0c;是目前应用最广泛的现场总线协议。 我的笔记里边有一些推荐…

利用自定义注解,反射,cglib代理实现spring框架的IOC

对比jdk代理&#xff0c;cglib不用实现任何接口&#xff0c;使用的范围更宽广。cglib实质上是创建了目标对象类的子类对象。 使用自定义注解MyService和MyTransactional代替spring框架提供的注解Service Transactional 创建自定义注解类MyService 创建自定义注解类MyTransacti…

收银系统源码-收银台营销功能-购物卡

1. 功能描述 购物卡&#xff1a;基于会员的电子购物卡&#xff0c;支持设置时效、适用门店、以及可用商品&#xff1b;支持售卖和充值赠送&#xff0c;在收银台可以使用&#xff1b; 2.适用场景 会员充值赠送活动&#xff0c;例如会员充值1000元&#xff0c;赠送面值100元购…

Android广播机制

简介 某个网络的IP范围是192.168.0.XXX&#xff0c;子网 掩码是255.255.255.0&#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一 网络上的所有端口&#xff0c;这样在该网络中的每台主机都将会收到这条广播。为了便于进行系统级别的消息通知&…

145-四路16位125Msps AD FMC子卡模块

一、概述 该板卡可实现4路16bit 125Msps AD 功能&#xff0c;是xilinx开发板设计的标准板卡。FMC连接器是一种高速多pin的互连器件&#xff0c;广泛应用于板卡对接的设备中&#xff0c;特别是在xilinx公司的所有开发板中都使用。该AD&#xff0c;DA子卡模块就专门针对xilinx开发…

64.函数参数和指针变量

目录 一.函数参数 二.函数参数和指针变量 三.视频教程 一.函数参数 函数定义格式&#xff1a; 类型名 函数名(函数参数1,函数参数2...) {代码段 } 如&#xff1a; int sum(int x&#xff0c;int y) {return xy; } 函数参数的类型可以是普通类型&#xff0c;也可以是指针类…

windows环境下创建python虚拟环境

windows环境下创建python虚拟环境 使用virtualenv库创建虚拟环境&#xff0c;可使不同的项目处于不同的环境中 安装方法&#xff1a; pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple pip install virtualenvwrapper-win -i https://pypi.tuna.tsinghua…

【UE5.3】笔记7 控制Pawn移动

使用A、D键控制角色左右移动 打开我们的BP_Player蓝图类&#xff0c;选择事件图表&#xff0c;添加我们的控制事件 右键&#xff0c;搜索A keyboard&#xff0c;选择A,如下图&#xff0c;D也是 添加扭矩力 首先我们要把我们的player上的模拟物理选项打开&#xff0c;这样我们…

SAPUI5基础知识10 - i18与国际化

1. 背景 i18n 是 “internationalization” 的缩写&#xff0c;其中的 18 是 “internationalization” 这个单词中间的字符数。i18n 是一种让应用程序支持多种语言的方法&#xff0c;也就是我们通常所说的国际化。 在SAPUI5中&#xff0c;i18n主要通过使用资源模型&#xff…

Matplotlib 文本

可以使用 xlabel、ylabel、text向图中添加文本 mu, sigma 100, 15 x mu sigma * np.random.randn(10000)# the histogram of the data n, bins, patches plt.hist(x, 50, densityTrue, facecolorg, alpha0.75)plt.xlabel(Smarts) plt.ylabel(Probability) plt.title(Histo…

【️讲解下Laravel为什么会成为最优雅的PHP框架?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

540. 有序数组中的单一元素(中等)

540. 有序数组中的单一元素 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;540. 有序数组中的单一元素 2.详细题解 方法一&#xff1a;若不限定时间复杂度&#xff0c;则扫描遍历一遍即可找到仅出现一次的数&#xff0c;具体实现见Pyth…

Maven Archetype 自定义项目模板:高效开发的最佳实践

文章目录 前言一、Maven Archetype二、创建自定义 Maven Archetype三、定制 Archetype 模板四、手动创建 Archetype 模板项目五、FAQ5.1 如何删除自定义的模板5.2 是否可以在模板中使用空文件夹 六、小结推荐阅读 前言 在软件开发中&#xff0c;标准化和快速初始化项目结构能够…

什么是JSON ,ajax和json关系

一. JSON 1 JSON概述 JavaScript对象文本表示形式&#xff08;JavaScript Object Notation : js对象简写) json是js对象 json是目前 前后端数据交互的主要格式之一 * java对象表示形式User user new User();user.setUsername("后羿");user.setAge(23);user.setSex…

开发国际短剧系统的策略解析

一、明确项目目标和需求 1、功能需求&#xff1a;确定系统应具备的基本功能&#xff0c;如用户注册、登录、浏览短剧、评论、分享、个性化推荐等。 2、性能需求&#xff1a;确保系统能够承受高并发访问&#xff0c;保证视频流畅播放&#xff0c;减少卡顿和延迟。 3、跨文化传播…

中序遍历的两种实现——二叉树专题复习

递归实现&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

【算法】(C语言):堆排序

堆&#xff08;二叉树的应用&#xff09;&#xff1a; 完全二叉树。最大堆&#xff1a;每个节点比子树所有节点的数值都大&#xff0c;根节点是最大值。父子索引号关系&#xff08;根节点为0&#xff09;&#xff1a;&#xff08;向上&#xff09;子节点x&#xff0c;父节点(x…

命令行升级ubuntu版本过程中出现的grub问题 解决

1、问题描述 使用命令行升级ubuntu18到20版本后&#xff0c;系统提示重启&#xff0c;使用reboot命令重启后&#xff0c;不显示服务器ip&#xff0c;或是显示但无法ssh远程连接服务器了&#xff0c;使用屏幕连接服务器后发现出现grub问题。 2、问题经过 命令行输入如下升级u…