随机森林(Random Forest, RF)筛选回归数据(处理异常值)

下面是一个完整的 MATLAB 代码示例,用于实现随机森林(Random Forest, RF)回归,执行 5 折交叉验证,并根据预测误差删除误差较大的行,将处理后的数据保存为新的 Excel 文件。

% 导入数据
data = readmatrix('data.xlsx');% 提取特征矩阵和输出向量
features = data(:, 1:end-1);
output = data(:, end);% 设置 5 折交叉验证
cv = cvpartition(size(data, 1), 'KFold', 5);% 存储预测误差
errors = zeros(size(data, 1), 1);% 进行 5 折交叉验证
for fold = 1:cv.NumTestSets% 获取训练和测试索引trainIdx = cv.training(fold);testIdx = cv.test(fold);% 训练随机森林回归模型Mdl = TreeBagger(100, features(trainIdx, :), output(trainIdx), ...'Method', 'regression');% 对测试集进行预测predictions = predict(Mdl, features(testIdx, :));% 计算误差(绝对误差)errors(testIdx) = abs(predictions - output(testIdx));
end% 设置误差阈值(例如,使用误差的 95% 分位数作为阈值)
threshold = prctile(errors, 95);% 标记误差较大的行
outlierIdx = errors > threshold;% 打印检测到的误差较大行的数量
fprintf('检测到的误差较大行数量: %d\n', sum(outlierIdx));% 删除误差较大的行
cleanedData = data(~outlierIdx, :);% 保存清理后的数据到新的 Excel 文件
writematrix(cleanedData, 'cleaned_data.xlsx');disp('清理后的数据已保存为 "cleaned_data.xlsx".');

代码解释

  1. readmatrix('data.xlsx'):导入 Excel 数据文件,假设数据是数值型。
  2. 特征和输出提取
    • features = data(:, 1:end-1) 提取前面的特征。
    • output = data(:, end) 提取最后一列作为输出。
  3. 5 折交叉验证
    • cvpartition 设置 5 折交叉验证分区。
    • 在每一折中,训练随机森林模型并计算测试集上的预测误差。
  4. 误差计算
    • 计算预测值与实际值的绝对误差并存储。
  5. 设置阈值
    • 使用误差的 95% 分位数作为阈值来标记误差较大的行。
  6. 删除误差较大的行
    • 将误差大于阈值的行标记为异常并删除。
  7. 输出到 Excel 文件
    • writematrix(cleanedData, 'cleaned_data.xlsx') 将清理后的数据保存为 cleaned_data.xlsx

调整和扩展

  • 误差类型:可以根据需要更改误差计算方法,例如平方误差或相对误差。
  • 阈值选择prctile(errors, 95) 表示使用误差的 95% 分位数作为阈值,可以根据具体需求调整。
  • 随机森林参数TreeBagger(100, ...) 中的 100 表示树的数量,可以根据数据集规模调整。

改变 95% 分位数会影响异常检测的严格程度,即哪些数据点会被标记为误差较大并被删除。以下是使用不同分位数的影响:

1. 分位数的定义

  • 分位数是将数据按照一定比例进行划分。例如,95% 分位数表示数据中有 95% 的值低于该数值,5% 的值高于该数值。

2. 设置高分位数(如 95%)

  • 影响:使用 95% 分位数作为阈值意味着将数据中误差最大的 5% 标记为异常值并删除。这样可以有效地识别并删除极端误差点。
  • 优点:能排除误差较大的数据点,从而提高整体数据集的质量。
  • 缺点:如果 95% 分位数过于严格,可能会误删一些有意义的数据点,尤其是在数据集中存在较大的正常误差范围时。

3. 降低分位数(如 90% 或 80%)

  • 影响:降低分位数(例如使用 90%)会标记更多的数据点为异常值。更多数据会被标记为误差较大并被删除。
  • 优点:更严格的筛选标准,适合在高精度要求的应用中使用。
  • 缺点:过低的分位数会删除过多的数据,可能导致样本量不足或重要数据被删除。

4. 提高分位数(如 98% 或 99%)

  • 影响:提高分位数(如使用 98% 或 99%)会减少被标记为异常值的数据点,仅删除极少数误差特别大的数据点。
  • 优点:适合在数据中噪声较多但误差范围较广的情况下使用,避免删除潜在的正常数据。
  • 缺点:可能无法完全清除误差较大的异常值,降低清理数据的效果。

5. 选择分位数的考虑因素

  • 数据的分布:如果数据误差的分布比较集中,较高的分位数(如 95% 或 98%)适合用来排除极端点。如果误差分布较分散或有多个异常点,较低的分位数(如 90%)可能更合适。
  • 应用场景:在精度要求高的场景中,适当降低分位数会更严格地筛选数据。在对误差容忍度较高的场景中,可以提高分位数以保留更多数据。

示例解释

  • 95% 分位数:如果设置为 prctile(errors, 95),只会删除误差最大的 5% 数据点,保留 95% 的数据。
  • 90% 分位数:如果设置为 prctile(errors, 90),删除误差最大的 10% 数据点。
  • 99% 分位数:删除误差最大的 1% 数据点。

总结

调整分位数会影响异常检测的严格性。高分位数意味着更保守的清理,删除更少的数据,适合希望尽可能保留数据的应用;低分位数则意味着更严格的筛选,适合希望消除尽可能多异常数据的应用。选择合适的分位数应根据数据特征和具体应用需求进行。

 

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

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

相关文章

Qwen2.5-3B-Instruct-GGUF部署

注册账号: 魔搭社区 等一会: 部署好了: 立即使用: 您部署的服务提供OpenAI API接口,可通过OpenAI SDK进行调用。请确保您的服务处于正常运行状态,并预先安装OpenAI SDK: pip install openai 在本地新建…

恶意PDF文档分析记录

0x1 PDF是什么 PDF(便携式文件格式,Portable Document Format)是由Adobe Systems在1993年用於文件交换所发展出的文件格式。 因为PDF的文件格式性质广泛用于商业办公,引起众多攻击者对其开展技术研究,在一些APT&#…

Spring-事务学习

spring事务 1. 什么是事务? 事务其实是一个并发控制单位,是用户定义的一个操作序列,这些操作要么全部完成,要不全部不完成,是一个不可分割的工作单位。事务有 ACID 四个特性,即: 原子性(Atom…

CVE-2024-2961漏洞的简单学习

简单介绍 PHP利用glibc iconv()中的一个缓冲区溢出漏洞,实现将文件读取提升为任意命令执行漏洞 在php读取文件的时候可以使用 php://filter伪协议利用 iconv 函数, 从而可以利用该漏洞进行 RCE 漏洞的利用场景 PHP的所有标准文件读取操作都受到了影响&#xff1…

段探测的研究

在介绍今天的内容之前,我们先要知道一些前置的知识 跳过繁琐的介绍,我们单刀直入,介绍一个划时代的CPU 8086 8086 从8086开始,CPU扩展到了16位,地址的位宽扩展到了20位,自此之后我们现在所熟知的计算机结…

Linux:进程的优先级 进程切换

文章目录 前言一、进程优先级1.1 基本概念1.2 查看系统进程1.3 PRI和NI1.4 调整优先级1.4.1 top命令1.4.2 nice命令1.4.3 renice命令 二、进程切换2.1 补充概念2.2 进程的运行和切换步骤(重要) 二、Linux2.6内核进程O(1)调度队列(重要&#x…

【学习心得】算力云平台上的大模型部署并实现远程调用

以AutoDL算力云平台为例,部署国产开源ChatGLM3b模型。 一、准备工作 (1)准备一台算力服务器 首先,进入AutoDL官网的算力时长选择算力服务器资源。 创建好后会自动跳转控制台的“容器实例”界面,稍等片刻后选择“快捷…

【Linux】—进程地址空间

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦 本文由:残念ing原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各…

leetcode-44-通配符匹配

题解: 代码: 参考: (1)牛客华为机试HJ71字符串通配符 (2)leetcode-10-正则表达式匹配

低成本出租屋5G CPE解决方案:ZX7981PG/ZX7981PM WIFI6千兆高速网络

刚搬进新租的房子,没有网络,开个热点?续航不太行。随身WIFI?大多是百兆级网络。找人拉宽带?太麻烦,退租的时候也不能带着走。5G CPE倒是个不错的选择,插入SIM卡就能直接连接5G网络,千…

学习日记_20241117_聚类方法(高斯混合模型)

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

列出D3的所有交互方法,并给出示例

D3.js 提供了丰富的交互方法,可以用来增强图表的用户交互体验。以下是一些常用的交互方法及其示例: 1. 鼠标事件 on("mouseover", function) 用途: 当鼠标悬停在元素上时触发。示例:svg.selectAll(".bar").on("mouseover&qu…

设计模式-参考的雷丰阳老师直播课

一般开发中使用的模式为模版模式策略模式组合,模版用来定义骨架,策略用来实现细节。 模版模式 策略模式 与模版模式特别像,模版模式会定义好步骤定义好框架,策略模式定义小细节 入口类 使用模版模式策略模式开发支付 以上使用…

模拟实现STL中的list

目录 1.设计list的结点 2.设计list的迭代器 3.list类的设计总览 4.list类的迭代器操作 5.list类的四个特殊的默认成员函数 无参的默认构造函数 拷贝构造函数 赋值运算符重载函数 析构函数 6.list类的插入操作 7.list类的删除操作 8.list.hpp源代码 1.设计list的结点…

.NET SDK 各操作系统开发环境搭建

一、Win10(推荐) 1、VS 2022 社区版 # 下载地址 https://visualstudio.microsoft.com/zh-hans/downloads/ 2、.NET 6 SDK # 下载地址 https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0 3、Hello World 如果需要使用旧程序样式时,则…

IDEA怎么定位java类所用maven依赖版本及引用位置

在实际开发中,我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景,便于排查问题,怎么通过IDEA实现呢? 可以在IDEA中打开项目,右键点击maven的pom.xml文件,或者在maven窗口下选中项目,…

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发,能够通过模板渲染结合数据生成动态页面。在这篇文章中,我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据,并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染?1.1 概…

力扣 LeetCode 144. 二叉树的前序遍历(Day6:二叉树)

解题思路&#xff1a; 方法一&#xff1a;递归&#xff08;中左右&#xff09; class Solution {List<Integer> res new ArrayList<>();public List<Integer> preorderTraversal(TreeNode root) {recur(root);return res;}public void recur(TreeNode roo…

高级 SQL 技巧讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; SQL&#xff08;结构化查询语言&#xff09;是管理和操作数据库的核心工具。从基本的查询语句到复杂的数据处理&#xff0c;掌握高级 SQL 技巧不仅能显著提高数据分析的效率&#xff0c;还能解决业务中的复…