【机器学习】随机森林的分类效果及进阶应用

news2024/9/23 5:30:15

文章目录

    • 一、随机森林概述
      • 1.1 Bagging思想
      • 1.2 随机森林的定义
      • 1.3 随机森林的生成过程
        • 投票机制
    • 二、随机森林的性能与优缺点
      • 2.1 分类效果的影响因素
      • 2.2 优点
      • 2.3 缺点
    • 三、随机森林的进阶
      • 3.1 缺失值处理
      • 3.2 袋外数据(OOB)
        • OOB计算方法
        • 优缺点
      • 3.3 过拟合问题与解决策略
        • 过拟合的原因
        • 解决策略

一、随机森林概述

1.1 Bagging思想

Bagging(Bootstrap Aggregating)是一种集成学习方法,通过生成多个模型来提高预测性能。其基本步骤包括:

  1. 随机采样:从原始数据集中随机有放回地抽取多个子样本,每个子样本与原始数据集大小相同。
  2. 模型训练:对每个子样本训练一个独立的模型。
  3. 结果集成:通过投票或平均值等方法,将所有模型的预测结果综合,得出最终预测。

举个例子:

如果我们有500个样本,Bagging方法会从中随机抽取多个子样本(例如每次400个样本)进行训练。由于每次抽取的样本可能不同,模型能更好地应对噪声数据,最终通过综合多个模型的结果来提高准确性。

1.2 随机森林的定义

随机森林(Random Forest)是对Bagging方法的优化,主要通过集成多棵决策树来增强模型的准确性和稳定性。随机森林通过以下方式改进了传统的决策树模型:

  1. 重采样:从原始样本集中有放回地抽取子样本进行训练。
  2. 随机特征选择:每次分裂节点时,随机选择部分特征来决定最优分裂,从而增加树的多样性并减少过拟合风险。
  3. 树的集成:通过集成多棵决策树的结果来提高整体模型的性能。

1.3 随机森林的生成过程

生成随机森林的过程包括以下几个步骤:

  1. 随机抽取训练样本:从训练集中随机有放回地抽取N个样本,用于每棵树的训练集。每棵树的训练集可能包含重复样本,且部分样本可能未被抽取。
  2. 随机选取特征:对于每棵树的每个节点,在所有特征中随机选择m个特征(m远小于特征总数M),然后从这些特征中选择最佳特征进行分裂。
  3. 树的生长:每棵树都尽可能深地生长,直到所有叶节点纯净或者不能再分裂。这一过程没有剪枝步骤,以最大化树的复杂度。
投票机制

在随机森林中,最终分类结果由所有决策树的投票结果决定。常见的投票机制包括:

  • 多数投票:选择所有树中票数最多的类别作为最终结果。
  • 加权投票:根据每棵树的权重进行投票,选择加权和最大的类别。
  • 一票否决:某些实现中,单棵树的投票可以直接决定最终结果,但这种机制不常见。

二、随机森林的性能与优缺点

2.1 分类效果的影响因素

随机森林的分类效果受到多个因素的影响,主要包括森林中树的相关性、每棵树的分类能力以及特征选择个数(m)。这些因素对模型的准确性和泛化能力具有重要影响。

  1. 森林中任意两棵树的相关性:森林中树的相关性越大,整体分类模型的错误率通常也越高。如果树之间的预测结果过于相似,则随机森林的优势就会减弱,因为这种相似性限制了模型的多样性和误差校正能力。过高的相关性可能导致模型过拟合训练数据,从而降低在新数据上的性能。

  2. 森林中每棵树的分类能力:每棵树的分类能力直接影响整个随机森林的错误率。分类能力强的树能更准确地进行预测,从而提高森林的整体性能。树的分类能力通常取决于训练过程中使用的特征选择和树的深度。

  3. 特征选择个数(m)的影响

    • 减少特征选择个数(m)

      • 树的相关性:减少m会使每次节点分裂时考虑的特征子集减少,树之间的相似性增加,从而提高树的相关性。
      • 分类能力:特征选择个数减少可能导致每棵树的分类能力降低,因为所使用的特征子集可能不足以捕捉数据的所有重要信息。
    • 增加特征选择个数(m)

      • 树的相关性:增加m使得每次分裂时考虑更多的特征,从而减少树之间的相似性,提高模型的多样性。
      • 分类能力:特征选择个数增加通常可以提高每棵树的分类能力,因为更多的特征提供了更全面的信息,有助于提高预测准确性。

选择最优的特征选择个数(m)是优化随机森林性能的关键。通过交叉验证等方法可以确定最佳的m值,从而在树的相关性和分类能力之间找到平衡点。

2.2 优点

随机森林具有多个显著优点,使其在许多应用场景中表现出色:

  1. 高效的分类性能:在许多数据集上,相比于其他算法,随机森林通常能够提供更好的分类性能,特别是在处理复杂和高维度数据时。
  2. 特征选择的自动化:随机森林能够处理高维数据而无需进行特征选择。通过随机选择特征子集进行分裂,它自动处理了特征选择的问题。
  3. 特征重要性评估:训练完成后,随机森林能够提供特征的重要性评分,帮助识别和选择对预测最重要的特征。
  4. 训练速度和并行化:随机森林的训练过程可以高效地并行化,因为不同决策树之间相互独立。这使得训练速度较快,适合大规模数据集。
  5. 特征间相互影响检测:随机森林在训练过程中可以检测特征之间的互相影响,帮助理解数据中的复杂关系。
  6. 对不平衡数据集的适应性:随机森林在处理不平衡的数据集时能够平衡误差,表现出较好的鲁棒性。
  7. 对缺失数据的鲁棒性:即使有大量特征缺失,随机森林也能够维持较高的准确度,显示出较好的容错能力。

2.3 缺点

尽管随机森林有许多优点,但也存在一些缺点:

  1. 噪声数据的过拟合:在噪声较大的分类或回归问题上,随机森林可能会出现过拟合现象。这是因为随机森林在处理噪声数据时,可能会将噪声误认为是数据的真实模式。
  2. 属性权值的不可靠性:对于取值较多的属性,随机森林在评估属性权值时可能会受到影响。在数据中存在大量不同取值的属性时,计算得到的属性权值可能不准确,影响特征选择的可靠性。

三、随机森林的进阶

3.1 缺失值处理

在处理缺失值方面,随机森林具有独特的优势和方法。随机森林的缺失值处理流程可以概述为以下几个步骤:

  1. 预设估计值
    • 对于数值型特征,可以使用数据集中其他样本的中位数或均值作为缺失值的初步估计。
    • 对于类别型特征,可以用众数或最常见的类别作为估计值。
  2. 建立初步模型:使用预设的估计值训练随机森林模型。每棵树在训练过程中将数据分成不同的子集进行训练和预测。
  3. 记录路径:对于每个样本(包括有缺失值的样本),记录其在每棵决策树中分类的路径。这些路径可以用来计算样本之间的相似度。
  4. 计算相似度矩阵:构建相似度矩阵,记录样本之间的相似度。相似度可以基于样本在树中路径的相似性进行计算。
  5. 估计缺失值:对于缺失值的估计,通过加权投票(对于类别型变量)或加权平均(对于数值型变量)来更新缺失值。加权的依据是样本之间的相似度。
  6. 迭代更新:迭代上述步骤,直到估计值稳定为止。这个过程类似于推荐系统中的协同过滤方法,通过计算缺失特征与其他特征的相似度来填补缺失值。

通过这种方法,随机森林能够有效处理缺失数据,使得模型在面对缺失值时仍能保持较高的预测准确性。

3.2 袋外数据(OOB)

袋外数据(Out-of-Bag, OOB)是随机森林模型中用于估计模型性能的一种有效方法。其计算和优缺点如下:

OOB计算方法

在使用Bagging方法生成随机森林时,每棵树都是在一个由原始样本集随机抽取的子样本上训练的。由于抽样是有放回的,因此大约有1/3的样本在某棵树的训练过程中未被抽取,这些样本被称为袋外数据(OOB数据)。OOB数据可以用于估计模型的性能,方法如下:

  1. 模型训练:对整个数据集训练随机森林模型。
  2. 性能评估
    • 对于每个袋外样本,使用已训练好的随机森林模型进行预测。
    • 将这些样本的实际类别与模型预测结果进行比较,计算分类错误率。
  3. 计算袋外误差:统计在所有袋外数据中,模型预测错误的数量。将预测错误的数量除以袋外样本的总数,得到袋外误差(OOB误差)。
优缺点

优点

  • 无偏估计:OOB误差已被证明是对模型性能的无偏估计,因此在随机森林中可以作为一种有效的验证方法,不需要额外的交叉验证或测试集。
  • 高效性:利用袋外数据进行误差估计,不需要额外的数据划分,从而节省了数据集的使用和计算资源。

缺点

  • 计算开销:尽管OOB误差计算不需要额外的测试集,但每个样本的预测仍然需要使用整个森林进行分类,计算量较大。
  • 适用性:OOB误差估计对小数据集或高度不平衡的数据集可能不够稳定或可靠。

3.3 过拟合问题与解决策略

尽管随机森林通过集成多棵决策树可以减少过拟合的风险,但在某些情况下,模型仍可能出现过拟合现象。尤其是在训练集非常大且模型非常复杂时,过拟合可能会导致验证集上的表现不佳。

过拟合的原因
  • 模型复杂性:随机森林中的树数过多,或者单棵树的深度过大,都可能导致过拟合。
  • 噪声数据:如果数据集中存在大量噪声,模型可能会过度学习这些噪声,导致在新数据上的泛化性能下降。
解决策略
  1. 调整树的数量:使用交叉验证来选择合适的树的数量。过多的树可能会导致模型复杂度过高,从而引发过拟合。
  2. 限制树的深度:控制每棵树的最大深度,防止树生长得过深,从而减少模型的复杂性和过拟合的风险。
  3. 增加训练数据量:增加数据集的规模可以帮助模型更好地捕捉数据的真实模式,从而减少过拟合现象。
  4. 特征选择和降维:对数据进行特征选择或降维,减少特征空间的维度,帮助提高模型的泛化能力。
  5. 使用正则化技术:应用正则化技术,如对树的分裂进行惩罚,进一步减少模型的复杂性。

通过这些策略,可以有效减少随机森林模型的过拟合问题,提高其在未知数据上的性能和泛化能力。


参考:Random Forest
推荐我的相关专栏:

  • python 错误记录
  • python 笔记
  • 数据结构

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Deepin 安装sunix串口卡驱动

折腾了3天,终于搞定,改天上传安装过程,开启用c对串口传感器的编程 这种戴尔拆机卡,芯片用的是sunix,下载sunix 的linux驱动。 串口传感器用的是中盛rs485温湿度串口传感器,加一个rs232 转485接口 串口传感…

安全防御拓扑1

目录 实验的拓扑: 要求: 我搭建的实验拓扑 步骤: 创建vlan: 接口配置: 防火墙: 防火墙配置: 建立安全策略: 防火墙的用户: 办公区的市场部和研发部用户 市场部…

手机删除的文件能恢复吗?删除不等于永别,3个技巧助你找回

安卓手机中的文件,就像是数字世界里的繁星,记录着我们的点点滴滴。然而,有时我们可能会不小心删除了某些重要的文件,让我们感到惋惜和困惑。删除的文件能恢复吗?别担心,删除并不等于永别,我们也…

关于文档理解相关工作的一些总结

过去四年时间,都在处理结构化数据的存储优化相关的工作。最近一段时间在做RAG相关的工作。非结构数据的存储与检索,接触的也越来越多。这篇文章聊聊最近一段时间关于文档理解方面的一些心得。 文档理解 文档理解旨在从非结构化文档中提取信息并将其转化…

DockerSecret+DockerConfig介绍及使用

DockerSecret 查看官网介绍,Secret是daemon API 1.25之后引入的,它运行在swarm上的命令。 生产环境下,为了安全,我们不能把各项目的配置密码写入到配置文件。 我们可以引入docker的secret方式保护密码。 场景: 用…

java数组之——了解十大排序算法(动画版)

详细的冒泡排序和快速排序请查看文章:java数组之冒泡排序、快速排序-CSDN博客https://blog.csdn.net/weixin_44554794/article/details/140361078 一、插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 七、归并排序 八、计数排序 九、桶…

家庭海外仓怎么拓客:策略落地方法汇总

家庭海外仓因为其高度灵活性和独有的价格优势,还是受到很多跨境卖家欢迎的。不过作为家庭海外仓的经营者,想在这么激烈的竞争下稳定、持续的拿到客户,还是有一定难度的。今天我们就专门来聊一下家庭海外仓的拓客问题。 家庭海外仓在拓客上面临…

【开源】开源数据库工具推荐

Mysql开源工具推荐 dbeaver下载网速太慢了,这么好用的开源工具,可以从镜像站中下载: 下载地址: https://mirrors.nju.edu.cn/github-release/dbeaver/dbeaver/24.1.1/ Redis开源工具推荐 好看好用,UI真是做的很不…

MyBatis where标签内嵌foreach标签查询报错‘缺失右括号‘或‘命令未正确结束‘

MyBatis <where>标签内嵌<foreach>标签查询报错’缺失右括号’或’命令未正确结束’ <where>标签内嵌<foreach>标签 截取一段脱敏xml&#xff0c;写明大概意思 <select id"queryLogByIds" resultMap"BaseResultMap">SELE…

ts使用typeorm实现db创建

1.新建基础架构 ①创建项目文件名, mkdir ‘名称’ ->cd ‘文件名’ -> mkdir ‘src’->npm init mkdir fileName cd fileName mkdir src npm init在当前项目名目录下执行npm init,按照默认执行就会创建package.json. 之后执行 npm i jest/globals casl/ability bcr…

如何快速区分电子原件极性

表贴式电阻电容无极性 1表贴式.二极管 如图所示:有横杠的表示负极&#xff08;竖杠标示&#xff09;&#xff0c;注意一定要查阅数据手册在引脚信息栏一般会有 铝电解电容 手册一般会对正负极有说明 钽电容有极性 发光二极管 芯片 一般规律&#xff1a;1.看丝印朝向正对丝印的…

【C++】静态成员变量和静态成员函数(static)

为了实现多个类公用一个成员变量或函数诞生了static&#xff0c;静态成员变量和静态成员函数。 static成员变量 格式 class A { public:static 静态成员变量类型 静态成员名; } }静态成员变量必须在类外进行初始化&#xff0c;类内初始化会报错 class A { private:st…

氢气传感器TGS2616在氢燃料电池行业的应用

氢燃料电池是一种将氢气和氧气的化学能直接转换成电能的发电装置。其基本原理是电解水的逆反应&#xff0c;把氢和氧分别供给阳极和阴极&#xff0c;氢通过阳极向外扩散和电解质发生反应后&#xff0c;放出电子通过外部的负载到达阴极。 氢燃料电池具有无污染、噪声低、高效率…

excel根据数据批量创建并重命名工作表

需求 根据一列数据&#xff0c;批量创建并重命名工作表 做法 1. 右键该sheet&#xff0c;选择查看代码 2. 输入VBA代码 正向创建 Sub create_sheets_by_col()Dim num% 定义为integer*num Application.WorksheetFunction.CountA(Sheet1.Range("A:A")) num是非空…

unity宏编译版本

在写c程序的时候我们通常可以用不同的宏定义来控制不同版本的编译内容&#xff0c;最近有个需求就是根据需要编译一个完全体验版本&#xff0c;就想到了用vs的那套方法。经过研究发现unity也有类似的控制方法。 注意这里设置完后要点击右下的应用&#xff0c;我起先就没有设置…

Docker 安装ros 使用rviz 等等图形化程序

Docker 安装ros 使用rviz 等等图形化程序 ubuntu 版本与ros 发行版本对应 如何安装其它版本ros 此时考虑使用docker 易于维护 地址&#xff1a; https://hub.docker.com/r/osrf/ros 我主机是 ubuntu22.04 使用这个标签 melodic-desktop-full 1 clone 镜像到本机 docker pu…

云原生简单综合实验

需求&#xff1a;左边服务器搭建一个web服务&#xff0c;名字为www.rhce.com&#xff0c;目录/nfs/rhce为右边服务器共享的/rhce目录 搭建一个dns解析rhce.com域 右边开启autofs服务为左边服务器提供目录 第一步下载相关软件 左边服务器 [rootnode ~]# yum install nginx…

Vue 新指令 v-memo 案例精析与性能优化

v-memo 用于缓存组件的渲染结果。它通过指定依赖项来决定何时重新渲染组件&#xff0c;只有当依赖项的值发生变化时&#xff0c;组件才会重新渲染&#xff0c;从而提高性能。 使用场景&#xff1a;v-memo 适用于组件的渲染结果在依赖项不变的情况下不应该频繁更新的场景&#x…

Windows 虚拟机服务器项目部署

目录 一、部署JDK下载JDK安装JDK1.双击 jdk.exe 安装程序2.点击【下一步】3.默认安装位置&#xff0c;点击【下一步】4.等待提取安装程序5.默认安装位置&#xff0c;点击【下一步】6.等待安装7.安装成功&#xff0c;点击【关闭】 二、部署TomcatTomcat主要特点包括&#xff1a;…

抖音视频图文根据ID获得评论信息网站源码

抖音视频图文根据ID获得评论信息单页源码&#xff0c;id是视频的id&#xff0c;可以自定义第几条评论开始&#xff0c;不填默认为0&#xff0c;评论数量最大数量50&#xff0c;默认是20。 接口返回参数&#xff1a; "comments": 评论信息集合 { "uid": 评…