机器学习10-随机森林
随机森林学习笔记
一、随机森林简介
随机森林(Random Forest)是一种集成学习算法,基于决策树构建模型。它通过组合多个决策树的结果来提高模型的准确性和稳定性。随机森林的核心思想是利用“集成”的方式,将多个弱学习器组合成一个强学习器。通过随机抽样和特征选择,随机森林可以有效降低过拟合并提高模型对新数据的泛化能力。
二、随机森林的构建过程
(一)数据准备
随机森林的输入是带有标签的训练样本。假设我们有一个数据集,包含多个样本和多个特征,每个样本都有一个对应的标签(对于分类问题)或目标值(对于回归问题)。
(二)构建多棵决策树
- 数据采样(Bootstrap Sampling)
对于原始数据集,随机森林通过有放回抽样的方式生成多个子样本集。每次从原始数据集中随机抽取与原始数据集相同数量的样本作为一棵决策树的训练集。由于是有放回抽样,可能会导致某些样本在某个子样本集中多次出现,而有些样本则可能未被抽到。这样可以增加模型的多样性。 - 特征选择(特征子集)
在构建每棵决策树时,每次分裂节点时,随机森林会从所有特征中选择一部分特征作为候选特征。通常会选择的特征数量是总特征数的平方根(对于分类问题)或总特征数的三分之一(对于回归问题)。通过限制每次分裂时的特征选择范围,进一步增加了不同决策树之间的差异性。
(三)训练决策树
每棵决策树在自己的训练样本集和特征子集上独立训练。训练过程中,每个节点通过选择最佳特征和划分点来最大化信息增益(对于分类问题)或最小化误差(对于回归问题)。决策树会一直分裂,直到满足停止条件,例如达到某个最大深度、节点的样本数量小于某个阈值等。
(四)集成结果
- 分类问题
对于分类任务,随机森林通过多数投票(Majority Voting)的方式得到最终预测结果。每棵决策树对输入的样本进行分类预测,随机森林根据多数决策树的预测结果确定最终的分类结果。 - 回归问题
对于回归任务,随机森林对所有决策树的预测结果取平均值作为最终的回归结果。这样可以有效减少预测的误差。
三、随机森林的优势
(一)模型泛化能力强
由于随机森林在数据采样和特征选择过程中引入了随机性,每棵决策树之间存在差异。这种多样性使得随机森林对新数据的泛化能力更强,不容易过拟合。
(二)能够处理高维数据
随机森林可以处理包含大量特征的数据集,且不需要进行特征标准化等预处理步骤。在特征选择时,随机选择特征子集的方式可以有效应对高维特性带来的问题。
(三)易于并行化
由于每棵决策树的训练是相互独立的,随机森林的训练过程可以并行化处理。这使得随机森林在大规模数据集上的训练速度可以显著提升。
(四)对缺失值和噪声不敏感
随机森林的决策树结构对缺失值和噪声数据具有一定的鲁棒性。即使部分样本存在缺失值,仍可以通过其他特征的组合来完成预测。
四、随机森林的参数调整
(一)树的数量(n_estimators)
增加决策树的数量可以提高随机森林的稳定性和泛化能力,但同时也会增加模型的训练时间和内存占用。一般来说,树的数量越多,模型的性能越好,但到一定程度后,性能提升会趋于平稳。在实际应用中,需要根据数据集的大小和计算资源进行综合考虑。
(二)最大深度(max_depth)
决策树的最大深度限制了树的生长。较小的最大深度可以防止过拟合,但可能会导致欠拟合。较大的最大深度可以让决策树更充分地学习数据,但也可能使模型对训练数据过拟合。通常需要通过交叉验证等方式来调整最大深度,以找到最优的平衡点。
(三)最小样本分割数(min_samples_split)
该参数指定了分裂节点时所需的最小样本数量。较小的值会导致决策树生长更深,模型更复杂;较大的值会使模型更简洁,但可能无法充分捕捉数据中的细节。合理设置该参数可以帮助控制模型的复杂度和泛化能力。
(四)特征选择数(max_features)
在每次分裂节点时选择的特征数也会影响随机森林的性能。特征数的选择会影响模型的多样性。如果特征数过多,决策树之间的差异会减小;如果特征数过少,可能会导致模型性能下降。通常可以设置为总特征数的平方根或三分之一,也可以通过交叉验证来优化该参数。
五、随机森林的应用场景
随机森林是一种非常通用的机器学习算法,广泛应用于分类和回归任务。以下是一些常见应用场景:
- 分类任务
- 医学诊断:根据患者的症状、检查结果等特征,预测患者是否患有某种疾病。例如,利用随机森林模型对乳腺癌患者和非乳腺癌患者进行分类。
- 客户信用评估:根据客户的收入、负债、消费记录等特征,判断客户是否具有良好的信用风险。随机森林可以学习到不同客户特征之间的复杂关系,帮助银行等金融机构做出更准确的信用评估。
- 图像分类:在图像识别领域,随机森林可以用于对图像中的物体进行分类。通过提取图像的特征(如颜色、纹理等),随机森林模型可以判断图像中的物体类别,例如识别手写数字、动物图像等。
- 回归任务
- 房价预测:根据房屋的面积、户型、位置、周边设施等特征,预测房屋的价格。随机森林可以很好地处理特征之间的非线性关系,为房价预测提供准确的结果。
- 股票价格预测:虽然股票价格受到多种复杂因素的影响,随机森林可以通过分析历史数据和其他相关特征(如市场趋势、公司业绩等)对股票价格进行预测。尽管很难完全准确预测股票价格,但随机森林可以提供一定的参考价值。
- 能源需求预测:根据气象条件(如温度、湿度等)、时间(如季节、节假日等)等因素,预测能源(如电力、天然气等)的需求。随机森林可以捕捉到不同因素之间的相互影响,为能源企业的生产计划和资源调配提供依据。
六、随机森林的局限性
随机森林虽然有很多优点,但也存在一些局限性:
- 模型解释性差
- 随机森林由多棵决策树组成,每棵决策树的结构和预测逻辑都较为复杂。与单棵决策树相比,随机森林的模型很难直观地解释。在一些对模型解释性要求较高的场景(如金融风险评估、医疗诊断等),随机森林可能无法满足需求。
- 计算资源需求大
- 虽然随机森林的训练过程可以并行化,但当数据集规模较大且树的数量较多时,模型的训练和预测仍然需要消耗较多的计算资源。对于一些资源受限的设备(如嵌入式系统或移动设备),随机森林的使用可能会受到限制。
- 对不平衡数据的敏感性
- 当数据集中某些类别样本数量远多于其他类别时(如二分类问题中正类和负类样本数量相差悬殊),随机森林可能会偏向预测多数类。在这种情况下,需要对不平衡数据进行处理(如过采样、欠采样等),以提高模型对少数类的预测性能。
七、案例实践
以下是一个简单的随机森林分类案例实践过程:
(一)问题描述
假设我们有一个二分类任务,数据集包含1000个样本,每个样本有10个特征,目标是将样本分为两类(0和1)。
(二)数据预处理
- 数据加载
使用Python的pandas
库加载数据集,数据集存储在CSV文件中,包含特征列和目标列。import pandas as pd# 加载数据集 data = pd.read_csv("data.csv") features = data.drop("target", axis=1) # 特征数据 target = data["target"] # 目标列
- 数据分割
使用train_test_split
将数据集分为训练集和测试集,比例为80%训练集,20%测试集。from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)
(三)模型训练
- 随机森林模型创建
使用sklearn.ensemble.RandomForestClassifier
创建随机森林分类器。from sklearn.ensemble import RandomForestClassifier# 创建随机森林模型 rf_model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
- 模型训练
在训练集上训练模型
以下是接上文继续编写的内容:
# 训练模型rf_model.fit(X_train, y_train)
(四)模型评估
- 预测
在测试集上进行预测。# 预测 y_pred = rf_model.predict(X_test)
- 评估指标
计算准确率、精确率、召回率和 F1 值等评估指标。from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score# 准确率 accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}")# 精确率 precision = precision_score(y_test, y_pred) print(f"Precision: {precision:.2f}")# 召回率 recall = recall_score(y_test, y_pred) print(f"Recall: {recall:.2f}")# F1 值 f1 = f1_score(y_test, y_pred) print(f"F1 Score: {f1:.2f}")
(五)结果分析
通过模型评估结果,可以了解模型在测试集上的表现。如果准确率、精确率、召回率和 F1 值等指标都较高,说明模型具有良好的分类能力。如果某些指标较低,可能需要进一步调整模型参数或进行数据预处理等优化操作。
八、总结与展望
随机森林作为一种强大的集成学习算法,在机器学习领域有着广泛的应用。它通过构建多棵决策树并综合其预测结果,有效地提高了模型的准确性和稳定性。在实际应用中,我们可以根据具体问题的特点和需求,合理调整随机森林的参数,以获得更好的模型性能。未来,随着数据量的不断增大和计算能力的提升,随机森林有望在更多领域发挥更大的作用。
相关文章:
机器学习10-随机森林
随机森林学习笔记 一、随机森林简介 随机森林(Random Forest)是一种集成学习算法,基于决策树构建模型。它通过组合多个决策树的结果来提高模型的准确性和稳定性。随机森林的核心思想是利用“集成”的方式,将多个弱学习器组合成一…...

商品条形码查询接口如何用C#进行调用?
一、什么是商品条码查询接口? 1974年6月26日,美国俄亥俄州的一家超市首次使用商品条码完成结算,标志着商品条码正式进入商业应用领域。这项技术通过自动识别和数据采集,极大提升了零售行业的作业效率,减少了人工录入错…...
编译pg_duckdb步骤
1. 要求cmake的版本要高于3.17,可以通过下载最新的cmake的程序,然后设置.bash_profile的PATH环境变量,将最新的cmake的bin目录放到PATH环境变量的最前面 2. g的版本要支持c17标准,否则会报 error ‘invoke_result in namespace ‘…...

多模态大语言模型arxiv论文略读(九十一)
FineCLIPER: Multi-modal Fine-grained CLIP for Dynamic Facial Expression Recognition with AdaptERs ➡️ 论文标题:FineCLIPER: Multi-modal Fine-grained CLIP for Dynamic Facial Expression Recognition with AdaptERs ➡️ 论文作者:Haodong C…...

攻防世界 - MISCall
下载得到一个没有后缀的文件,把文件放到kali里面用file命令查看 发现是bzip2文件 解压 变成了.out文件 查看发现了一个压缩包 将其解压 发现存在.git目录和一个flag.txt,flag.txt是假的 恢复git隐藏文件 查看发现是将flag.txt中内容读取出来然后进行s…...
数据结构测试模拟题(2)
1、选择排序(输出过程) #include <iostream> using namespace std;int main() {int a[11]; // 用a[1]到a[10]来存储输入// 读取10个整数for(int i 1; i < 10; i) {cin >> a[i];}// 选择排序过程(只需9轮)for(int…...

在PyTorch中,对于一个张量,如何快速为多个元素赋值相同的值
我们以“a torch.arange(12).reshape((3, -1))”为例,a里面现在是: 如果我们想让a的右下角的2行3列的元素都为10的话,可以如何快速实现呢? 我们可以用到索引和切片技术,执行如下的指令即可达到目标: a[1…...

苍穹外卖--Redis
1.Redis入门 1.1Redis简介 Redis是一个基于内存的key-value结果数据库 基于内存存储,读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 Redis的Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:…...
C++ 条件变量虚假唤醒问题的解决
在 C 中,std::condition_variable 的 wait 和 wait_for 方法除了可以传入一个锁(std::unique_lock),还可以传入一个谓词函数(函数或可调用对象)。这个谓词的作用是让条件变量在特定的条件满足时才退出等待。…...

深度学习————注意力机制模块
关于注意力机制我自己的一点理解:建立各个维度数据之间的关系,就是对已经处理为特征图的数据,将其他影响因素去除(比如通道注意力,就将空间部分的影响因素消除或者减到极小)再对特征图进行以此特征提取 以此…...
openssl 使用生成key pem
好的,以下是完整的步骤,帮助你在 Windows 系统中使用 OpenSSL 生成私钥(key)和 PEM 文件。假设你的 openssl.cnf 配置文件位于桌面。 步骤 1:打开命令提示符 按 Win R 键,打开“运行”对话框。输入 cmd&…...

python:基础爬虫、搭建简易网站
一、基础爬虫代码: # 导包 import requests # 从指定网址爬取数据 response requests.get("http://192.168.34.57:8080") print(response) # 获取数据 print(response.text)二、使用FastAPI快速搭建网站: # TODO FastAPI 是一个现代化、快速…...

好坏质检分类实战(异常数据检测、降维、KNN模型分类、混淆矩阵进行模型评估)
任务 好坏质检分类实战 task: 1、基于 data_class_raw.csv 数据,根据高斯分布概率密度函数,寻找异常点并剔除 2、基于 data_class_processed.csv 数据,进行 PCA 处理,确定重要数据维度及成分 3、完成数据分离,数据分离…...
链表:数据结构的灵动舞者
在数据结构的舞台之上,链表以它灵动的身姿演绎着数据的精彩故事。与顺序表的规整有序不同,链表展现出了别样的灵活性与独特魅力。今天,就让我们一同走进链表的世界,去领略它的定义、结构、操作,对比它与顺序表的优缺点…...

YOLOv4:目标检测的新标杆
引言 YOLO(You Only Look Once)系列作为目标检测领域的经典算法,以其高效的检测速度和良好的准确率闻名。2020年推出的YOLOv4在保持YOLO系列高速检测特点的同时,通过引入多项创新技术,将检测性能提升到了新高度。本文将详细介绍YOLOv4的核心…...
PyTorch 2.1新特性:TorchDynamo如何实现30%训练加速(原理+自定义编译器开发)
一、PyTorch 2.1动态编译架构演进 PyTorch 2.1的发布标志着深度学习框架进入动态编译新纪元。其核心创新点TorchDynamo通过字节码即时重写技术,将Python动态性与静态图优化完美结合。相较于传统JIT方案,TorchDynamo实现了零侵入式加速——开发者只需添加…...

LabVIEW通用测控平台设计
基于 LabVIEW 图形化编程环境,设计了一套适用于工业自动化、科研测试领域的通用测控平台。通过整合研华、NI等品牌硬件,实现多类型数据采集、实时控制及可视化管理。平台采用模块化架构,支持硬件灵活扩展,解决了传统测控系统开发周…...

【机器学习基础】机器学习入门核心算法:K-近邻算法(K-Nearest Neighbors, KNN)
机器学习入门核心算法:K-近邻算法(K-Nearest Neighbors, KNN) 一、算法逻辑1.1 基本概念1.2 关键要素距离度量K值选择 二、算法原理与数学推导2.1 分类任务2.2 回归任务2.3 时间复杂度分析 三、模型评估3.1 评估指标3.2 交叉验证调参 四、应用…...

FastMoss 国际电商Tiktok数据分析 JS 逆向 | MD5加密
1.目标 目标网址:https://www.fastmoss.com/zh/e-commerce/saleslist 切换周榜出现目标请求 只有请求头fm-sign签名加密 2.逆向分析 直接搜fm-sign 可以看到 i["fm-sign"] A 进入encryptParams方法 里面有个S()方法加密,是MD5加密 3.代…...
Redis分布式缓存核心架构全解析:持久化、高可用与分片实战
一、持久化机制:数据安全双引擎 1.1 RDB与AOF的架构设计 Redis通过RDB(快照持久化)和AOF(日志持久化)两大机制实现数据持久化。 • RDB架构:采用COW(写时复制)技术,主进程…...

【Linux】基础开发工具(下)
文章目录 一、自动化构建工具1. 什么是 make 和 Makefile?2. 如何自动化构建可执行程序?3. Makefile 的核心思想4. 如何清理可执行文件?5. make 的工作原理5.1 make 的执行顺序5.2 为什么 make 要检查文件是否更新?5.2.1 避免重复…...
Python爬虫实战:研究Portia框架相关技术
1. 引言 1.1 研究背景与意义 在大数据时代,网络数据已成为企业决策、学术研究和社会分析的重要资源。据 Statista 统计,2025 年全球数据总量将达到 175ZB,其中 80% 以上来自非结构化网络内容。如何高效获取并结构化这些数据,成为数据科学领域的关键挑战。 传统爬虫开发需…...

chrome打不开axure设计的软件产品原型问题解决办法
1、打开原型文件夹,进入到其中的如下目录中:resources->chrome->axure-chrome-extension.crx,找到 Axure RP Extension for Chrome插件。 2、axure-chrome-extension.crx文件修改扩展名.rar,并解压到文件夹 axure-chrome-ex…...
达梦数据库-学习-23-获取执行计划的N种方法
目录 一、环境信息 二、说点什么 三、测试数据生成 四、测试语句 五、获取执行计划方法 1、EXPLAIN (1)样例 (2)优势 (3)劣势 2、ET (1)开启参数 (2ÿ…...

【数据结构】树形结构--二叉树
【数据结构】树形结构--二叉树 一.知识补充1.什么是树2.树的常见概念 二.二叉树(Binary Tree)1.二叉树的定义2.二叉树的分类3.二叉树的性质 三.二叉树的实现1.二叉树的存储2.二叉树的遍历①.先序遍历②.中序遍历③.后序遍历④.层序遍历 一.知识补充 1.什…...

Baklib构建企业CMS高效协作与安全管控体系
企业CMS高效协作体系构建 基于智能工作流引擎的设计逻辑,现代企业内容管理系统通过预设多节点审核路径与自动化任务分配机制,有效串联市场、技术、法务等跨部门协作链路。系统支持多人同时编辑与版本追溯功能,结合细粒度权限管控模块&#x…...

深入理解 JDK、JRE 和 JVM 的区别
在 Java 中,JDK、JRE 和 JVM 是非常重要的概念,它们各自扮演着不同的角色,却又紧密相连。今天,就让我们来详细探讨一下它们之间的区别。 一、JVM JVM 即 Java 虚拟机,它是整个 Java 技术体系的核心。JVM 提供了 Java…...

LSTM 与 TimesNet的时序分析对比解析
前言 Hi,我是GISerLiu🙂, 这篇文章是参加2025年5月Datawhale学习赛的打卡文章!💡 本文将深入探讨在自定义时序数据集上进行下游分类任务的两种主流分析方法。一种是传统的“先插补后分析”策略,另一种是采用先进的端到…...

图论学习笔记 4 - 仙人掌图
先扔张图: 为了提前了解我们采用的方法,请先阅读《图论学习笔记 3》。 仙人掌图的定义:一个连通图,且每条边只出现在至多一个环中。 这个图就是仙人掌图。 这个图也是仙人掌图。 而这个图就不是仙人掌图了。 很容易发现…...
语音识别算法的性能要求一般是多少
语音识别算法的性能要求因应用场景和实际需求而异,但以下几个核心指标是通用的参考标准。以下是具体说明: 1. 准确率(Accuracy) 语音识别的核心性能指标通常是词错误率(WER, Word Error Rate)和字符错误率…...