【机器学习】机器学习的基本分类-监督学习-随机森林(Random Forest)

随机森林是一种基于集成学习(Ensemble Learning)思想的算法,由多个决策树构成。它通过结合多棵决策树的预测结果来提升模型的泛化能力和准确性,同时减少过拟合的风险。


1. 随机森林的核心思想

  1. 多样性
    • 随机森林通过引入随机性,使每棵树有所不同,从而避免单一模型的过拟合问题。
  2. 集成决策
    • 对于分类问题,随机森林通过多数投票法确定最终类别。
    • 对于回归问题,随机森林通过平均法预测最终结果。

随机森林的“随机性”体现在两个方面:

  • 数据随机性(Bagging 方法):
    • 每棵树训练时使用一个由原始训练集通过**自助采样法(Bootstrap Sampling)**生成的样本子集。
    • 每个样本子集中可能包含重复的数据,也可能遗漏一些数据(袋外样本,Out-Of-Bag)。
  • 特征随机性
    • 每次节点分裂时,随机选择特征的子集作为候选,进一步增加模型的多样性。

2. 随机森林的构建过程

(1) 构建步骤
  1. 输入
    • 数据集 D。
    • 树的数量 T。
    • 每次分裂时的随机特征数量 m。
  2. 训练过程
    • 第 1 步:为每棵树随机采样一个样本子集(Bootstrap)。
    • 第 2 步:从所有特征中随机选择 m 个候选特征。
    • 第 3 步:使用候选特征按 CART 算法构造一棵决策树。
    • 第 4 步:重复以上步骤 T 次,构建 T 棵树。
  3. 预测
    • 分类问题:采用多数投票。
    • 回归问题:取均值。

(2) 特征子集数量选择
  • 对于分类问题,推荐选择 m = \sqrt{M}​,其中 M 是特征总数。
  • 对于回归问题,推荐选择 m = M/3

3. 随机森林的袋外估计(OOB)

随机森林中的每棵树仅使用部分训练数据,而剩余的数据称为袋外样本(Out-of-Bag Samples)。袋外样本可以用来:

  1. 估计模型性能:袋外样本作为验证集评估模型的预测准确性。
  2. 避免独立验证集:节约数据资源。

袋外误差(OOB Error):

OOB \ Error = \frac{1}{N} \sum_{i=1}^{N} L(y_i, \hat{y}_i)

其中:

  • N:总样本数。
  • L:损失函数(如分类错误率)。

4. 随机森林的优缺点

优点
  1. 高精度:通过集成学习减少单一决策树的误差。
  2. 抗过拟合:引入随机性和平均化策略,有效避免过拟合。
  3. 特征重要性评估:能够评估每个特征对模型的重要性。
  4. 袋外估计:无需额外划分验证集即可估计模型性能。
  5. 鲁棒性:对异常值和噪声数据不敏感。
缺点
  1. 计算复杂度高:训练过程需要构建大量决策树,计算开销大。
  2. 解释性较差:相比单一决策树,随机森林的结果较难解释。
  3. 内存占用大:需要存储所有决策树,特别是特征数量较多时。

5. 随机森林的应用场景

  1. 分类问题:如图片分类、文本分类、金融欺诈检测。
  2. 回归问题:如房价预测、销量预测。
  3. 特征选择:通过计算特征重要性,筛选关键特征。
  4. 异常检测:分析样本的异常程度。

6. 随机森林的特征重要性

随机森林可以评估每个特征对目标变量的重要性,通过两种方法:

  1. 基于分裂点的累计贡献
    • 计算每个特征作为分裂点时,对目标变量的贡献。
    • 累加所有树上的贡献值。
  2. 基于袋外误差
    • 随机打乱某一特征后,计算袋外误差的变化量。
    • 袋外误差增加越多,说明该特征越重要。

7. 随机森林的代码实现(分类问题)

以下是一个简单的 Python 实现:

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据集
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建随机森林模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("分类准确率:", accuracy)# 特征重要性
importances = model.feature_importances_
for i, importance in enumerate(importances):print(f"特征 {data.feature_names[i]} 的重要性: {importance:.4f}")

输出结果

分类准确率: 1.0
特征 sepal length (cm) 的重要性: 0.1041
特征 sepal width (cm) 的重要性: 0.0446
特征 petal length (cm) 的重要性: 0.4173
特征 petal width (cm) 的重要性: 0.4340

8. 随机森林的扩展

(1) ExtraTrees(极端随机森林)
  • 在每个节点分裂时,随机选择特征和分裂阈值(而不是最优阈值)。
  • 增加随机性,降低过拟合。
(2) 随机森林 + 特征选择
  • 使用随机森林评估特征重要性后,筛选最重要的特征进行建模。

9. 随机森林与其他集成学习方法的对比

方法随机森林梯度提升树(GBDT)
模型类型并行训练顺序训练
特征选择随机选取特征每次迭代关注所有特征
参数调节较少(如树数、深度)较多(如学习率、树数)
性能快速,抗过拟合精度高,但较慢

随机森林是一种性能稳定、应用广泛的模型,尤其适合中小规模数据的分类和回归任务。

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

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

相关文章

MongoDB集群的介绍与搭建

一.MongoDB集群的介绍 注意:Mongodb是一个比较流行的NoSQL数据库,它的存储方式是文档式存储,并不是Key-Value形式; MongoDB集群的优势主要体现在以下几个方面: (1)高可用性 MongoDB集群支持主从复制和故障转移机制&…

防抖与节流

防抖 当某个事件触发时,等待一段时间再执行函数。如果在这段时间内事件再次被触发,那么就重新计时,换句话说,防抖可以确保函数在事件结束后才被执行,避免了多次触发。 应用场景: 搜索框输入:…

DKMS介绍

文章目录 一、安装DKMS二、DKMS使用示例1. 源码准备2. 增加dkms.conf3. 添加模块4. 编译模块5. 安装模块 三、基于DKMS的deb安装包制作 Dynamic Kernel Module Support(DKMS)是一个用于动态管理内核模块的框架,由DELL创建的项目,它可以帮我们…

【LeetCode】498.对角线遍历

无论何时何地,我都认为对于一道编程题,思考解法的时间用于是实际动手解决问题的2倍!如果敲键盘编码需要5min,那么思考解法的过程至少就需要10分钟。 1. 题目 2. 思想 其实这就是一道模拟题,难度中等。做这种题的关键就…

用 NotePad++ 运行 Java 程序

安装包 网盘链接 下载得到的安装包: 安装步骤 双击安装包开始安装. 安装完成: 配置编码 用 NotePad 写 Java 程序时, 需要设置编码. 在 设置, 首选项, 新建 中进行设置, 可以对每一个新建的文件起作用. 之前写的文件不起作用. 在文件名处右键, 可以快速打开 CMD 窗口, 且路…

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间 函数原型参数说明返回值示例代码注意事项libssh2_session_set_timeout 是 libssh2 库中的一个函数,用于设置 SSH 会话的超时时间。这对于防止网络延迟或连接中断导致的长时间挂起非常有用。 函数原型 int libssh2_se…

如何用注册机破解Reflexive游戏

相信有许多小朋友(像我以前一样)已经迫不及待地准备准备对浩瀚的、像三星堆一般的Reflexive游戏合集进行考古挖掘工作了。不巧的是,打开游戏之后发现常常提示要付费才能解锁完整版。 一、下载注册机与破解文件 首先,在我的永硕网…

红外跟随避障模块详解

在智能车、机器人和自动化等领域避障技术是确保安全和高效运行的关键。红外避障模块作为一种常见的避障解决方案,因其非接触、响应速度快和抗干扰能力强等优点而备受青睐。本文将详细介绍红外避障模块的特点、工作原理、以及应用案例,帮助您更好地了解这…

【0x3D】HCI_Remote_Host_Supported_Features_Notification事件详解

目录 一、事件概述 二、事件格式及参数说明 2.1. HCI_Remote_Host_Supported_Features_Notification事件格式 2.2. BD_ADDR 2.3. Remote_Host_Supported_Features 三、事件作用 3.1. 设备特性沟通与理解 3.2. 功能协商与性能优化 3.3. 设备管理与配置更新 四、应用场…

开发中使用UML的流程_08 PIM-4:定义操作及方法

目录 1、序列图概述 2、序列图调用方式 3、创建消息与销毁消息 4、几项建议 1、序列图概述 在PIM-4中,系统分析员可以用序列图来表达,系统内部一群对象合力完成某一个系统用例时,执行期间的交互情形。之后,序列图可能通过设计…

Unity 设计模式-策略模式(Strategy Pattern)详解

策略模式(Strategy Pattern)是一种行为型设计模式,定义了一系列算法,并将每种算法封装到独立的类中,使得它们可以互相替换。策略模式让算法可以在不影响客户端的情况下独立变化,客户端通过与这些策略对象进…

空间异质性数据分析不再复杂:地理加权回归分析、主成分分析、判别分析、分位数回归分析、线性回归等

目录 专题一 地理加权回归下的描述性统计学 专题二 地理加权主成分分析 专题三 地理加权回归 专题四 高级回归与回归之外 更多了解 在自然和社会科学领域有大量与地理或空间有关的数据,这一类数据一般具有严重的空间异质性,而通常的统计学方法并不能…

【spring mvc】全局处理请求体和响应体

目录 说明实现效果逻辑图 实现步骤创建公共处理的请求和响应的类api接口测试前端请求响应结果 扩展Response响应格式实体ResponseCode 响应状态码RSA工具类 RequestBodyAdvice 介绍使用场景 ResponseBodyAdvice 介绍使用场景 说明 由于项目中需要进行加密传输数据提高项目安全…

【计算机网络】实验8:聚合了不存在的网络导致的路由环路问题

实验 8:聚合了不存在的网络导致的路由环路问题 一、 实验目的 聚合了不存在的网络导致的路由环路问题。 网络故障导致的路由环路问题。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、聚合了不存在的网络导致的路由环路问题 (1) 第一步&am…

【Leetcode】189.轮转数组

题目链接: 189.轮转数组 题目描述: 解题思路: 要想实现数组元素向右轮转k个位置,可是将数组三次反转来实现 以 nums [1,2,3,4,5,6,7], k 3 为例,最终要得到[5,6,7,1,2,3,4]: 第一次反转:将整个数组反转…

设计模式c++(二)

文章目录 十三、门面模式_Facade十四、代理模式_Proxy十五、适配器_Adapter十六、中介者_Mediator十七、状态模式_State十八、备忘录_Memento十九、组合模式_Composite二十、迭代器_Iterator二十一、职责链_Chain Of Resposibility二十二、命令模式_Command二十三、访问器_Vist…

shell 3 脚本参数传递与数字运算(泷羽sec)

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面,了解网络安全领域的见闻,了…

jvm优化策略都有哪些

1. 堆内存(Heap Memory)优化: • 调整堆大小:通过-Xms和-Xmx参数设置JVM初始堆大小和最大堆大小,以确保JVM在启动时拥有足够的内存,并在需要时能够扩展到最大容量。 • 堆分区调整:调整年轻代&a…

使用ensp搭建内外互通,使用路由跨不同vlan通信。

1.网络拓扑图 2.规则 (1)允许 (自己)ping通内外网,内外网随便一个pc就可以. (2) 允许(电信)ping通内外网,内外网随便一个pc就可以 (时间问题不做…

Flink 中维表 Join 的实现方式与优化策略

目录 一、维表介绍 二、预加载维表 (一)实现方式 (二)优缺点 (三)改进尝试与局限 三、使用本地缓存(HashMap)加载维表 (一)实现方式 第一版 第二版 …