【MATLAB】使用随机森林在回归预测任务中进行特征选择(深度学习的数据集处理)

1.随机森林在神经网络的应用

        当使用随机森林进行特征选择时,算法能够为每个特征提供一个重要性得分,从而帮助识别对目标变量预测最具影响力的特征。这有助于简化模型并提高其泛化能力,减少过拟合的风险,并且可以加快模型训练和推理速度。通过剔除不重要的特征,模型的复杂度降低,同时保持了较高的预测准确性。

        随机森林是一种集成学习算法,利用多棵决策树对特征进行建模。由于其天然的并行化、抗过拟合的特性和对非线性关系的良好适应性,随机森林在特征选择中显示出强大的效果。此外,特征选择可以帮助理解数据,并为进一步的特征工程提供指导,有效地提高模型的预测性能。

通俗点讲就是,用科学、合理的方法去除掉数据集中不需要的特征。常用在回归预测任务的数据集处理中(也就是N个输入特征,一个输出特征)。

2.代码实现

这部分代码旨在准备 MATLAB 环境。它关闭了 MATLAB 的警告信息显示,关闭所有之前打开的图形窗口,清除了 MATLAB 工作区中的所有变量,并清空命令窗口。

warning off % 关闭警告信息显示
close all % 关闭所有图形窗口
clear % 清除工作区变量
clc % 清空命令窗口

这段代码使用 readtable 函数从名为 "01.csv" 的 CSV 文件中读取数据并将其存储在变量 data 中。如果数据文件不包含表头,则需要使用 readmatrix 函数。

data = readtable('01.csv'); % 如果数据文件不包含表头,请使用readmatrix函数

这段代码将数据拆分为特征和目标变量。其中 X 存储假设前 2000 行数据的前 6 列是特征,y 存储假设前 2000 行数据的最后一列是目标变量。

X = data{1:2000, 1:6}; % 假设前6列是特征
y = data{1:2000, 7};   % 假设最后一列是目标变量

这部分使用 TreeBagger 函数构建了一个包含 100 棵树的随机森林回归模型,并计算了袋外预测器的重要性。

ens = TreeBagger(100, X, y, 'Method', 'regression', 'OOBPredictorImportance', 'on');

在这个部分中,计算了特征的重要性得分,并将其进行了归一化处理。然后将其显示出来。

% 计算特征的重要性分数
featureImportance = ens.OOBPermutedVarDeltaError;
disp(featureImportance)
normalizedFeatureImportance = featureImportance / sum(featureImportance);
disp(normalizedFeatureImportance);

这一部分可视化了特征重要性得分,通过绘制条形图展示各个特征的重要性。

% 可视化特征重要性
bar(normalizedFeatureImportance);
xlabel('特征');
ylabel('重要性得分');
title('特征重要性');

这部分代码对特征的重要性得分进行排序,并选择了最重要的四个特征进行输出。同时,重新设置了图表的横坐标,使其显示最重要的特征名称。(笔者的数据集格式为6个输入一个输出的风力发电机功率数据集)

% 特征排序及输出
[sortedImportance, sortedIdx] = sort(normalizedFeatureImportance, 'descend');
topFeatures = sortedIdx(1:4); % 选择最重要的四个特征
topFeaturesNames = {'湿度', '真实风速', '气象台风速', '风向', '温度', '气压'};
disp('最重要的特征是:');
disp(topFeaturesNames(topFeatures));
xticks(1:length(topFeaturesNames));
xticklabels(topFeaturesNames); 

 3.运行结果

        运行结果如下(以笔者的风力发电机数据集为例):

 4.完整代码

%% 清空环境变量
warning off % 关闭警告信息显示
close all % 关闭所有图形窗口
clear % 清除工作区变量
clc % 清空命令窗口
% 读取CSV文件
data = readtable('01.csv'); % 如果数据文件不包含表头,请使用readmatrix函数% 将数据拆分为特征和目标变量
X = data{1:2000, 1:6}; % 假设前6列是特征
y = data{1:2000, 7};   % 假设最后一列是目标变量ens = TreeBagger(100, X, y, 'Method', 'regression', 'OOBPredictorImportance', 'on');% 计算特征的重要性分数
featureImportance = ens.OOBPermutedVarDeltaError;
disp(featureImportance)
normalizedFeatureImportance = featureImportance / sum(featureImportance);
disp(normalizedFeatureImportance);
% 可视化特征重要性
bar(normalizedFeatureImportance);
xlabel('特征');
ylabel('重要性得分');
title('特征重要性');% 根据得分排序特征
[sortedImportance, sortedIdx] = sort(normalizedFeatureImportance, 'descend');
topFeatures = sortedIdx(1:4); % 选择最重要的四个特征% 输出最重要的特征
topFeaturesNames = {'湿度', '真实风速', '气象台风速', '风向', '温度', '气压'};
disp('最重要的特征是:');
disp(topFeaturesNames(topFeatures));% 重新设置图表横坐标
xticklabels(topFeaturesNames);

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

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

相关文章

npm修改镜像源

背景:切换npm镜像源是经常遇到的事,下面记录下具体操作命令 1. 打开终端运行"npm config get registry"命令来查看当前配置的镜像源 npm config get registry2. 修改成淘宝镜像源"https://registry.npmjs.org/" npm config set re…

Prompt Engineering实战-构建“哄哄模拟器”

目录 一 背景 二 “哄哄模拟器”的Prompt Prompt 的典型构成 三 操作步骤 3.1 创建对话 3.2 游戏测试 一 背景 前几天《AI 大模型全栈工程师》第二节课讲了“Prompt Engineering,提示工程”,里面提到一些prompt相关的技巧,原则&#xf…

探索设计模式的魅力:设计之美-揭秘设计模式、原则与UML的魔法

设计模式专栏:http://t.csdnimg.cn/U54zu 目录 一、引言 二、设计模式与设计原则 设计模式 设计原则 三、面向对象设计原则 四、UML(统一建模语言) 4.1 UML是什么 UML是一种语言 UML是一种建模语言 UML是一种图形化语言 4.2 UML有什么 4.…

5-4、S加减单片机程序【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】,查看本系列全部文章 摘要:本节介绍实现步进电机S曲线运动的代码 一、目标功能 实现步进电机转动总角度720,其中加减速各90 加速段:加速类型:S曲线  加速角度:角度为90  起步速度…

备战蓝桥杯---搜索(进阶3)

看一道比较难又有趣的题: 下面是分析: 我们不妨把属性值看成点,一个装备可以看成一条边(只能选一个端点)不存在有装备属性值的当成一个点,于是我们便形成了树或图,如果是树的话,有一…

ACK One Argo工作流:实现动态 Fan-out/Fan-in 任务编排

作者:庄宇 什么是 Fan-out Fan-in 在工作流编排过程中,为了加快大任务处理的效率,可以使用 Fan-out Fan-in 任务编排,将大任务分解成小任务,然后并行运行小任务,最后聚合结果。 由上图,可以使…

GeoServer 2.11.1升级解决Eclipse Jetty 的一系列安全漏洞问题

Eclipse Jetty 资源管理错误漏洞(CVE-2021-28165) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7656) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7657) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7658) Jetty 信息泄露漏洞(CVE-2017-9735) Eclipse Jetty 安全漏洞(CVE-2022-20…

C++之std::tuple(一) : 使用精讲(全)

相关系列文章 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析 深入理解可变参数(va_list、std::initializer_list和可变参数模版) std::apply源码分析 目录 1.简介 2.std::ignore介绍 3.创建元组 3.1.…

单片机学习笔记---串口通信(2)

目录 串口内部结构 串口相关寄存器 串口控制寄存器SCON SM0和SM1 SM2 REN TB8和RB8 TI和RI 电源控制寄存器PCON SMOD 串口工作方式 方式0 方式0输出: 方式0输入 方式1 方式1输出。 方式1输入 方式2和方式3 方式2和方式3输出: 方式2和…

【Yi-VL-34B】(5):使用3个3090显卡24G版本,运行Yi-VL-34B模型,支持命令行和web界面方式,理解图片的内容转换成文字

1,视频地址 https://www.bilibili.com/video/BV1BB421z7oA/ 2,关于Yi-VL-34B https://www.modelscope.cn/models/01ai/Yi-VL-34B/summary 易视觉语言(Yi-VL)模型是易大型语言模型(LLM)系列的开源多模态…

【C++】构造函数、初始化列表,析构函数,拷贝构造函数,运算符重载

注:本博客图片来源于学习笔记: 学习笔记https://gitee.com/box-he-he/learning-notes 完整思维导图请前往该博主码云下载。 目录 注:本博客图片来源于学习笔记: 学习笔记https://gitee.com/box-he-he/learning-notes 完整思维导图请前往该博主码云下载…

Maven - 编译报错:程序包 XXX 不存在(多模块项目)

问题描述 编译报错&#xff1a;程序包 XXX 不存在&#xff08;多模块项目&#xff09; 原因分析 检查依赖模块 pom 文件&#xff0c;看是不是引入了如下插件 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-pl…