递归特征消除(RFE)与随机森林回归模型的 MATLAB 实现

在机器学习中,特征选择是提高模型性能的重要步骤。本文将详细探讨使用递归特征消除(RFE)结合随机森林回归模型的实现,以研究对股票收盘价影响的特征。我们将逐步分析代码并介绍相关的数学原理。

1. 数据准备

首先,我们清空工作区并加载数据,假设最后一列是股票的收盘价,前面的列是特征变量。

clear; close all; clc;
df = readtable('Chabuhou.csv');
X = df(:, 1:end-1); % 特征
y = df{:, end}; % 收盘价

在这段代码中,我们将特征变量 X 定义为数据表的所有列,除了最后一列。同时,目标变量 y 定义为最后一列。这里的数学表示为:

2. 数据划分

接下来,我们将数据划分为训练集和测试集。使用 80% 的数据进行训练,20% 的数据用于测试。

cv = cvpartition(size(X, 1), 'HoldOut', 0.2); 
X_train = X(training(cv), :);
y_train = y(training(cv));
X_test = X(test(cv), :);
y_test = y(test(cv));

 这里,cvpartition 函数帮助我们创建了一个不分层的划分,以适应回归问题。

3. 随机森林回归模型初始化

接下来,我们初始化随机森林回归模型。

template = templateTree('MaxNumSplits', 20); 
numLearningCycles = 100;

随机森林模型通过多个决策树的集成来提高预测准确性。每棵树的最大分裂数设置为 20,总共生成 100 棵树。

4. 递归特征消除(RFE)

我们使用 RFE 方法来选择特征。该过程如下:

  1. 初始化所有特征为“被选中”状态。
  2. 使用 K 折交叉验证评估模型的性能。
  3. 计算每个特征的重要性,并移除贡献最小的特征。
numFeatures = size(X_train, 2);
selectedFeatures = true(1, numFeatures); % 初始化所有特征被选中
kFold = 5; % 5 折交叉验证
cvp = cvpartition(y_train, 'KFold', kFold); % K 折交叉验证fold_scores = zeros(kFold, numFeatures);
optimalRMSE = inf(numFeatures, 1); % 初始化 RMSE 为无穷大for i = 1:numFeaturesif any(selectedFeatures)model = fitrensemble(X_train(:, selectedFeatures), y_train, 'Method', 'Bag', ...'Learners', template, 'NumLearningCycles', numLearningCycles);cvModel = crossval(model, 'CVPartition', cvp);fold_rmse = kfoldLoss(cvModel, 'LossFun', 'mse', 'Mode', 'individual') .^ 0.5;fold_scores(:, i) = fold_rmse;avgRMSE = mean(fold_rmse);optimalRMSE(i) = avgRMSE;if i < numFeaturesfeatureImportance = predictorImportance(model);[~, leastImportantIdx] = min(featureImportance);selectedFeatures(leastImportantIdx) = false;endend
end

 

5. 找到最佳特征数

最后,我们找到最佳特征数,即对应于最小 RMSE 的特征数量。

[~, optimalIndex] = min(optimalRMSE);
optimalNumFeatures = sum(selectedFeatures); % 计算选中的特征数fprintf('最佳特征数: %d\n', optimalNumFeatures);

 

 

6. 可视化结果

最后,我们可视化递归特征消除过程中的交叉验证得分。

figure('Position', [100 100 1200 800], 'Color', 'w');
title('Recursive Feature Elimination with Cross-Validation (RFCV)', ...'FontSize', 16, 'FontWeight', 'bold', 'Interpreter', 'none');
xlabel('Number of features selected', 'FontSize', 14);
ylabel('Cross-validation score (RMSE)', 'FontSize', 14);
hold on;for i = 1:kFoldplot(1:numFeatures, fold_scores(i, :), 'o-', 'Color', [0.5 0.5 0.5], ...'LineWidth', 0.8, 'MarkerSize', 5, 'MarkerFaceColor', [0.5 0.5 0.5]);
endplot(1:numFeatures, optimalRMSE, 'o-', 'Color', '#696969', 'LineWidth', 3, ...'DisplayName', 'Mean CV RMSE');
xline(optimalIndex, '--', 'Color', '#E76F51', ...'LineWidth', 2, 'Label', sprintf('Optimal = %d', optimalNumFeatures));
legend('Location', 'Best');
grid on;
hold off;

 

此部分通过绘制每一折的 RMSE 和平均 RMSE,帮助我们直观了解特征选择过程的效果。最终结果的可视化不仅提高了分析的直观性,还为后续的模型优化提供了数据支持。

结论

通过使用递归特征消除结合随机森林回归模型,我们能够有效选择对股票收盘价影响显著的特征。这种方法不仅提高了模型的准确性,还为特征的重要性提供了定量的评估。希望本文能够为您理解特征选择在机器学习中的重要性提供帮助。

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

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

相关文章

wordpress发邮件SMTP服务器配置步骤指南?

wordpress发邮件功能如何优化&#xff1f;怎么用wordpress发信&#xff1f; 由于WordPress默认的邮件发送功能可能不够稳定&#xff0c;配置SMTP服务器成为了许多网站管理员的选择。AokSend将详细介绍如何在WordPress中配置SMTP服务器&#xff0c;以确保邮件能够顺利发送。 w…

注册安全分析报告:惠农网

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

BLE MESH学习2——自定义MESH网络架构思考

BLE MESH学习2——自定义MESH网络架构思考 基于对WCH CH582这款单片机的了解&#xff0c;其可以实现mesh配网、朋友节点、低功耗节点和中继节点的角色&#xff0c;基本功能无问题。在此基础上&#xff0c;考虑满足IoT需求的MESH架构设计&#xff0c;作为后续设计的“白皮书”。…

第170天:应急响应-战中溯源反制对抗上线CSGoby蚁剑Sqlmap等安全工具

目录 案例一&#xff1a;溯源反制-Webshell工具-Antsword 案例二&#xff1a;溯源反制-SQL注入工具-SQLMAP 案例三&#xff1a;溯源反制-漏洞扫描工具-Goby 案例四&#xff1a;溯源反制-远程控制工具-CobaltStrike 反制Server&#xff0c;爆破密码&#xff08;通用&#x…

快餐食品检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

快餐食品检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

sql堆叠注入

准备知识&#xff1a; php中multi_query()&#xff1a;一次可以执行多个sql语句比如&#xff1a;查询注入id1&#xff1b;update xxx; 定义&#xff1a;如果后端代码中&#xff0c;数据库执行的方法是multi_query()&#xff0c;那么就可以一次执行多个sql&#xff0c;也就可以…

java面向对之象类的继承与多态

目录 1.类的继承 图解 案例:创建一个动物类和一个猫类 1.代码 1)动物类 2)猫类 3.测试类 2.效果 2.父类方法的重写 案例:如何重写父类的方法 1.代码 1&#xff09;Animal类 2&#xff09;Dog类 3&#xff09;测试类 2.效果 3.super关键字 案例:如何在子类中调用父类的方…

肺结节分割与提取系统(基于传统图像处理方法)

Matlab肺结节分割(肺结节提取)源程序&#xff0c;GUI人机界面版本。使用传统图像分割方法&#xff0c;非深度学习方法。使用LIDC-IDRI数据集。 工作如下&#xff1a; 1、读取图像。读取原始dicom格式的CT图像&#xff0c;并显示&#xff0c;绘制灰度直方图&#xff1b; 2、图像…

系统架构设计师论文《论企业集成平台的理解与应用》精选试读

论文真题 企业集成平台&#xff08;Enterprise Imtcgation Plaform,EIP)是支特企业信息集成的像环境&#xff0c;其主要功能是为企业中的数据、系统和应用等多种对象的协同行提供各种公共服务及运行时的支撑环境。企业集成平台能够根据业务模型的变化快速地进行信息系统的配置…

使用XML实现MyBatis的基础操作

目录 前言 1.准备工作 1.1⽂件配置 1.2添加 mapper 接⼝ 2.增删改查操作 2.1增(Insert) 2.2删(Delete) 2.3改(Update) 2.4查(Select) 前言 接下来我们会使用的数据表如下&#xff1a; 对应的实体类为&#xff1a;UserInfoMapper 所有的准备工作都在如下文章。 MyBati…

github创建仓库并本地使用流程,以及问题src refspec xxx does not match any

1.在 GitHub 上创建一个新仓库 登录你的 GitHub 账户。 点击右上角的 “” 按钮&#xff0c;然后选择 “New repository”。 填写仓库名称&#xff08;如 my-repo&#xff09;。 &#xff08;可选&#xff09;添加描述&#xff0c;选择是否公开或私有仓库。 &#xff08;可选&…

电层相关 -- Transponder Muxponder

光波长转换类单板&#xff08;Optical Transponder Unit&#xff0c;简称OTU单板&#xff09;主要将客户侧业务经过封装映射、汇聚等处理后&#xff0c;输出符合WDM系统要求的标准波长的光信号。OTU的主要功能有两类&#xff1a;Transponder 和Muxponder&#xff0c;简称TP和MP…

Python 字典(Dictionary) items(),pop(‘key‘)方法

描述 Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。 语法 items()方法语法&#xff1a; dict.items()参数 NA。 返回值 返回可遍历的(键, 值) 元组数组。 实例 以下实例展示了 items()函数的使用方法&#xff1a; tinydict {Google: …

使用Docker搭建WAF-开源Web防火墙VeryNginx

1、说明 VeryNginx 基于 lua_nginx_module(openrestry) 开发,实现了防火墙、访问统计和其他的一些功能。 集成在 Nginx 中运行,扩展了 Nginx 本身的功能,并提供了友好的 Web 交互界面。 文章目录 1、说明1.1、基本概述1.2、主要功能1.3、应用场景2、拉取镜像3、配置文件4、…

IPv6为什么没有完全代替IPv4

IPv4的设计始于20世纪70年代末,随着ARPANET的扩展和网络需求的增加,工程师们意识到需要一个更大规模、更灵活的地址系统。IPv4在1981年被正式定义为RFC 791,它成为了互联网协议套件的一部分,并迅速被广泛采用。 IPv4地址由32位(4字节)组成,通常以点分十进制表示。例如,…

宠物咖啡馆服务优化:SpringBoot框架的实现技巧

3系统分析 3.1可行性分析 通过对本基于Spring Boot的宠物咖啡馆平台的设计与实现实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于Spring Boot的宠物咖啡馆…

GNURadio 平台实现FM信号调制解调

一、FM 信号调制信号流图 波形图&#xff1a; 红色是已调制的FM信号&#xff0c;蓝色是调制信号波形。 频谱图&#xff1a; 瀑布图&#xff1a; 二、FM 信号解调信号流图 解调信号波形&#xff1a; 解调信号频谱&#xff1a; 具体可以通过audio sink 模块听音分析是否解调准确…

CC2530定时器1中断实现定时1-3

源码 #include "iocc2530.h"//引用CC2530头文件int t1_Count0; //定时器1溢出次数计数void Init_Led(void){ /*******************LED1初始化部分******************/P1SEL &~ 0x01; //设置P1_0口为通用I/O口P1DIR | 0x01; //设置P1_0口为输出口P…

机器学习篇-day03-线性回归-正规方程与梯度下降-模型评估-正则化解决模型拟合问题

一. 线性回归简介 定义 线性回归(Linear regression)是利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。 回归方程(函数) 一元线性回归: y kx b > wx b k: 斜率, 在机器学习中叫 权重(weight), 简称: w b: 截距, 在机…

react中css样式隔离

使用CSS Modules css模块化 1, 创建组件样式文件时以 xxx.module.css命名, 例如 Home.module.css 代替 Home.css 2, 在组件jsx导入样式文件时使用 import styles from ./xxx.module.css 导入 代替 import ./xxx.css 3, 在组件中需要设置样式的标签上添加class值, classNa…