回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测

回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测

目录

    • 回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测
      • 预测效果
      • 基本介绍
      • 研究内容
      • 程序设计
      • 参考资料

预测效果

1
2

3
4
5
6
7

基本介绍

MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测,输出为选择的特征序号
Chinese:
Options:可用的选项即表示的涵义如下
  -s svm类型:SVM设置类型(默认0)
  0 – C-SVC
  1 --v-SVC
  2 – 一类SVM
  3 – e -SVR
  4 – v-SVR
  -t 核函数类型:核函数设置类型(默认2)
  0 – 线性:u’v
  1 – 多项式:(ru’v + coef0)^degree
  2 – RBF函数:exp(-r|u-v|^2)
  3 –sigmoid:tanh(r
u’v + coef0)
经过特征选择后,保留特征的序号为:
126 160 161 163 165 166 237 239 240 370
评价结果如下所示:
平均绝对误差MAE为:0.27933
均方误差MSE为: 0.15813
均方根误差RMSEP为: 0.39765
决定系数R^2为: 0.93392
剩余预测残差RPD为: 4.2631
平均绝对百分比误差MAPE为: 0.0032299

研究内容

基于SVM-RFE-BP的特征选择算法结合BP神经网络的多输入单输出回归预测是一种结合了支持向量机递归特征消除(SVM-RFE)和反向传播(BP)神经网络的方法。下面是算法的基本步骤:
数据准备:准备包含多个输入特征和一个输出变量的训练数据集。确保数据集已经进行了预处理和标准化。
特征选择:使用SVM-RFE算法对输入特征进行排序和选择。SVM-RFE是一种递归特征消除算法,它通过反复训练支持向量机(SVM)模型,并剔除最不重要的特征,直到达到指定的特征数量或达到某个停止准则。
特征提取:使用SVM-RFE选择的特征作为输入,从训练数据集中提取这些特征。
神经网络构建:构建一个BP神经网络模型,该模型具有适当的输入层、隐藏层和输出层。输入层的节点数量应与选择的特征数量相同,输出层的节点数量为1。
神经网络训练:使用特征提取的数据作为输入,将输出变量作为目标,对BP神经网络进行训练。使用反向传播算法来更新网络的权重和偏置,以最小化预测输出与实际输出之间的误差。
预测:使用训练好的BP神经网络模型对新的输入特征进行预测。将这些特征输入到训练好的神经网络中,得到对应的输出。
这种基于SVM-RFE-BP的方法可以结合支持向量机的特征选择能力和神经网络的非线性建模能力,提高回归预测的性能和准确性。然而,需要注意的是,该方法的效果取决于数据集的特征和特征选择的参数设置,因此在实际应用中需要进行适当的调优和验证。

程序设计

  • 完整源码和数据获取方式1:私信博主回复SVM-RFE-BP回归或同等价值程序兑换;
  • 完整程序和数据下载方式2(资源处直接下载):MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测
  • 完整程序和数据下载方式3(订阅《智能学习》专栏,同时获取《智能学习》专栏收录程序4份,数据订阅后私信我获取):MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测,专栏外只能获取该程序。
%%  输出选择特征的对应序号
disp('经过特征选择后,保留特征的序号为:')
disp(save_index)%%  特征选择后的数据集
p_train = p_train(:, save_index);
p_test  = p_test (:, save_index);%%  矩阵转置适应模型
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';%%  创建网络%%  设置训练参数
net.trainParam.epochs = 1000;  % 最大迭代次数%%  仿真测试
t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test );%%  数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);%% 测试集结果
figure;
plotregression(T_test,T_sim2,['回归图']);
figure;
ploterrhist(T_test-T_sim2,['误差直方图']);
%%  均方根误差 RMSE
error1 = sqrt(sum((T_sim1 - T_train).^2)./M);
error2 = sqrt(sum((T_test - T_sim2).^2)./N);%%
%决定系数
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test -  T_sim2)^2 / norm(T_test -  mean(T_test ))^2;%%
%均方误差 MSE
mse1 = sum((T_sim1 - T_train).^2)./M;
mse2 = sum((T_sim2 - T_test).^2)./N;
%%
%RPD 剩余预测残差
SE1=std(T_sim1-T_train);
RPD1=std(T_train)/SE1;SE=std(T_sim2-T_test);
RPD2=std(T_test)/SE;
%% 平均绝对误差MAE
MAE1 = mean(abs(T_train - T_sim1));
MAE2 = mean(abs(T_test - T_sim2));
%% 平均绝对百分比误差MAPE
MAPE1 = mean(abs((T_train - T_sim1)./T_train));
MAPE2 = mean(abs((T_test - T_sim2)./T_test));
%%  训练集绘图
figure
%plot(1:M,T_train,'r-*',1:M,T_sim1,'b-o','LineWidth',1)
plot(1:M,T_train,'r-*',1:M,T_sim1,'b-o','LineWidth',1.5)
legend('真实值','SVM-RFE预测值')
xlabel('预测样本')
ylabel('预测结果')%% 预测集绘图
figure
plot(1:N,T_test,'r-*',1:N,T_sim2,'b-o','LineWidth',1.5)
legend('真实值','SVM-RFE预测值')
xlabel('预测样本')
ylabel('预测结果')%% 测试集误差图
figure  
ERROR3=T_test-T_sim2;
plot(T_test-T_sim2,'b-*','LineWidth',1.5)%% 绘制线性拟合图
%% 训练集拟合效果图
figure
plot(T_train,T_sim1,'*r');
xlabel('真实值')
ylabel('预测值')title(string)
hold on ;h=lsline;
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 预测集拟合效果图
figure
plot(T_test,T_sim2,'ob');
xlabel('真实值')
ylabel('预测值')
string1 = {'测试集效果图';['R^2_p=' num2str(R2)  '  RMSEP=' 
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 求平均
R3=(R1+R2)./2;
error3=(error1+error2)./2;
%% 总数据线性预测拟合图
tsim=[T_sim1,T_sim2]';
S=[T_train,T_test]';
figure
plot(S,tsim,'ob');
xlabel('真实值')
ylabel('预测值')

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/128577926?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501

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

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

相关文章

Vue中,$forceUpdate()的使用

在Vue官方文档中指出,$forceUpdate具有强制刷新的作用。 那在vue框架中,如果data中有一个变量:age,修改他,页面会自动更新。 但如果data中的变量为数组或对象,我们直接去给某个对象或数组添加属性,页面是识…

antv/l7地图,鼠标滚动,页面正常滑动-- 我们忽略的deltaY

背景 在官网项目中,需要使用一个地图,展示产品的分布区域及数量。希望的交互是,鼠标放上标点,tooltip展示地点和数量等信息。鼠标滚动,则页面随着滚动。但是鼠标事件是被地图代理了的,鼠标滚动意味着地图的…

性能测试入门知识总结

目录 1.什么是性能测试? 2.为什么要进行性能测试? 3.性能测试的常见术语 4.性能测试的分类 5.性能测试如何展开? 1.什么是性能测试? 性能测试是一种测试类型,旨在确定系统的性能以衡量性能,验证或验证…

8.15锁的优化

1.锁升级(锁膨胀) 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 偏向锁:不是真的加锁,而是做了一个标记,如果有别的线程来竞争才会真的加锁,如果没有别的线程竞争就不会加锁. 轻量级锁:一个线程占领锁资源后,另一个线程通过自旋的方式反复确认锁是否被是否(这个过程比较…

RabbitMQ安装说明文档-v2.0

rabbitmq安装 说明:请使用资料里提供的CentOS-7-x86_64-DVD-1810.iso 安装虚拟机. 1. 安装依赖环境 在线安装依赖环境: yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel …

【并发专题】单例模式的线程安全(进阶理解篇)

目录 背景前置知识类加载运行全过程 单例模式的实现方式一、饿汉式基本介绍源码分析 二、懒汉式基本介绍源码分析改进 三、懒汉式单例终极解决方案(静态内部类)(推荐使用方案)基本介绍源码分析 感谢 背景 最近学习了JVM之后&…

面试题:JS如何最快的执行垃圾回收机制

因为没看见答案,所以也不知道对不对。 JavaScript 的垃圾回收机制是由 JavaScript 引擎自动管理的,通常情况下我们无法控制垃圾回收机制的执行时间和频率。 然而,我们可以采取一些优化策略来减少垃圾回收的性能开销,从而提高代码…

golang函数传参——值传递理解

做了五年的go开发,却并没有什么成长,都停留在了业务层面了。一直以为golang中函数传参,如果传的是引用类型,则是以引用传递,造成这样的误解,实在也不能怪我。我们来看一个例子,众所周知&#xf…

uniapp发布插件显示components/xxx文件没找到,插件格式不正确

uniapp发布插件显示components/xxx文件没找到,插件格式不正确 将插件文件这样一起选中,然后右键压缩成zip文件,而不是外层文件压缩

记一次 .NET某医疗器械清洗系统 卡死分析

一:背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题,回过头来看这个案例比较经典,这篇稍微整理一下供后来者少踩坑吧。 二:WinDbg 分析 1. 为什么会卡死 因为是窗体程序,理所当然就是看主…

SQL ASNI where from group order 顺序

SQL语句执行顺序: from–>where–>group by -->having — >select --> order 第一步:from语句,选择要操作的表。 第二步:where语句,在from后的表中设置筛选条件,筛选出符合条件的记录。 …

PyTorch深度学习实战(9)——学习率优化

PyTorch深度学习实战(9)——学习率优化 0. 前言1. 学习率简介2. 梯度值、学习率和权重之间的相互作用3. 学习率优化实战3.1 学习率对缩放后的数据集的影响3.2 学习率对未缩放数据集的影响 小结系列链接 0. 前言 学习率( learning rate )是神经网络训练中…

从0到1开发go-tcp框架【4实战片— — 开发MMO之玩家聊天篇】

从0到1开发go-tcp框架【实战片— — 开发MMO】 MMO(MassiveMultiplayerOnlineGame):大型多人在线游戏(多人在线网游) 1 AOI兴趣点的算法 游戏中的坐标模型: 场景相关数值计算 ● 场景大小: 250…

解密爬虫ip是如何被识别屏蔽的

在当今信息化的时代,网络爬虫已经成为许多企业、学术机构和个人不可或缺的工具。然而,随着网站安全防护的升级,爬虫ip往往容易被识别并屏蔽,给爬虫工作增加了许多困扰。在这里,作为一家专业的爬虫ip供应商,…

2023上半年手机及数码行业分析报告(京东销售数据分析)

2023年上半年,手机市场迎来复苏,同环比来看,销量销额纷纷上涨。 而数码市场中,各个热门品类表现不一。微单相机及智能手表同比去年呈现增长态势,而笔记本电脑市场则出现下滑。 基于此现状,鲸参谋发布了20…

谈一谈Python中的装饰器

1、装饰器基础介绍 1.1 何为Python中的装饰器? Python中装饰器的定义以及用途: 装饰器是一种特殊的函数,它可以接受一个函数作为参数,并返回一个新的函数。装饰器可以用来修改或增强函数的行为,而不需要修改函数本身…

JVM深入 —— JVM的体系架构

前言 能否真正理解JVM的底层实现原理是进阶Java技术的必由之路,Java通过JVM虚拟机的设计使得Java的延拓性更好,平台无关性是其同时兼顾移动端和服务器端开发的重要特性。在本篇文章中,荔枝将会仔细梳理JVM的体系架构和理论知识,希…

Dubbo+Zookeeper使用

说明:Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。 本文介绍Dubbo的简单使用及一些Dubbo功能特性,注册中心使用的是ZooKeeper,可在…

驱动工作原理

驱动原理 在Linux操作系统中,硬件驱动程序中实现对硬件直接操作,而用户空间,通过通用的系统调用接口(open() 打开相应的驱动设备,ioctl()控制相应的功能等),实现对硬件操作,应用程序没有直接操作…

树的层次遍历

层次遍历简介 广度优先在面试里出现的频率非常高,整体属于简单题。而广度优先遍历又叫做层次遍历,基本过程如下: 层次遍历就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,类似金字塔一样…