基于matlab的SVR回归预测

 

1 原理

        SVR(Support Vector Regression)回归预测原理,基于支持向量机(SVM)的回归分支,其核心思想是通过寻找一个最优的超平面来进行回归预测,并处理非线性回归问题。以下是SVR回归预测原理的系统全面详细介绍:

1.1 基本原理

        1.SVR通过在线性函数两侧制造一个“间隔带”,该间距被称为容忍偏差(ϵ)。

        2.对于所有落入间隔带内的样本,不计算损失。

        3.只有支持向量会对函数模型产生影响。

        4.最后,通过最小化总损失和最大化间隔来得出优化后的模型。

1.2 松弛变量与软间隔

        1.在现实任务中,很难直接确定合适的ϵ来确保大部分数据都能在间隔带内。

        2.因此,SVR引入了松弛变量ξ,使函数的间隔要求变得放松,允许一些样本可以不在间隔带内。

        3.引入松弛变量后,所有的样本数据都满足条件,这就是软间隔SVR。

1.3 核函数

        1.SVR预测还涉及到核函数的选择和应用。

        2.核函数用于将输入空间映射到高维特征空间,以便解决非线性回归问题。

        3.常见的核函数包括线性核函数、多项式核函数和RBF核函数等。

1.4 SVR计算公式

        1.SVR的计算公式旨在最小化总损失和最大化间隔。

        2.公式如下:

e9e9fbac79da49d2bcfd27a937c72a4d.png

1.5 算法步骤:

        1.数据预处理:对输入特征进行标准化处理,使其均值为0,方差为1,以提高算法的收敛速度和精度。

        2.核函数选择:选择适合的核函数,将数据映射到高维空间,以处理非线性回归问题。

1.6 SVR的特点:

        1.不仅可以用于预测,还可以用于异常值检测。

        2.通过最大化预测出错的容忍度(margin)来寻找最优解。

        3.对于回归问题,支持向量回归(SVR)相比传统回归方法,具有更好的鲁棒性和泛化能力。

        综上所述,SVR回归预测原理基于支持向量机的回归分支,通过在线性函数两侧制造“间隔带”,并利用松弛变量和核函数等技巧,实现了高效、准确的回归预测。

2 回归结果

39511dac433c4a97a44396343f23803c.jpeg

图2-1 训练集测试结果

0b4155f35aa34c73b0585ab4ff5183b9.jpeg

图2-2 测试集测试结果

        由图2-1与图2-2可以看出真实值与拟合值非常接近,不存在偏差过大的数据点。

3789098c27aa44f1bddf7ef4f340cf21.jpeg

图2-3 训练集回归

97bce1555ebe49699811f842b5aefb3d.jpeg

图2-4 测试集回归

        从图2-3与图2-4可以看出模型在训练集上训练效果很好,但在测试集上整体训练存在偏差。

9c7cbdba3d20464fae3a6cb142e0a53e.jpeg

图2-5 训练集残差图

4a8af2fffdac4b3dbd9ad93d7aa4fd0d.jpeg

图2-6 测试集残差图

        基于图2-5与图2-6 中训练集和测试集的残差图,可以观察到模型的训练效果较好。在训练集中,残差值相对较小且稳定,这表明模型正在准确地拟合数据。而在测试集中,残差值稍大但仍在可接受的范围内,说明模型在未见过的数据上也有较好的表现。

        本文在测试集数据量上划分了较大的比重,这是模型在测试集上由较好表现的重要原因之一。

3 代码

%% 清空环境变量  
warning off             % 关闭报警信息  
close all               % 关闭开启的图窗  
clear                   % 清空变量  
clc                     % 清空命令行  
%% Import data    
dataset = xlsread('data.xlsx');    
    
%% Split data into training and testing sets    
num_columns = size(dataset, 2);  
num_rows = size(dataset, 1);  
permutation_indices = randperm(num_rows);  
split_ratio = 0.6; % 训练集、测试集划分比例为9:1     
X_train = dataset(permutation_indices(1: round(num_rows*split_ratio)), 1: num_columns-1)';  
Y_train = dataset(permutation_indices(1: round(num_rows*split_ratio)), num_columns)';  
M = size(X_train, 2);  
  
X_test = dataset(permutation_indices(round(num_rows*split_ratio): end), 1: num_columns-1)';  
Y_test = dataset(permutation_indices(round(num_rows*split_ratio): end), num_columns)';  
N = size(X_test, 2);  
%% Normalize data    
[x_train, ps_input] = mapminmax(X_train, 0, 1);    
x_test = mapminmax('apply', X_test, ps_input);    
    
[y_train, ps_output] = mapminmax(Y_train, 0, 1);    
y_test = mapminmax('apply', Y_test, ps_output);    
    
%% Transpose data to fit the model    
x_train = x_train'; x_test = x_test';    
y_train = y_train'; y_test = y_test';    
    
%% Create SVM model    
c_param = 4.0;    % Penalty factor    
g_param = 0.8;    % RBF kernel parameter    
cmd_params = [' -t 2',' -c ',num2str(c_param),' -g ',num2str(g_param),' -s 3 -p 0.01'];    
svm_model = svmtrain(y_train, x_train, cmd_params);    
    
%% Predict    
[y_sim1, error_1] = svmpredict(y_train, x_train, svm_model);    
[y_sim2, error_2] = svmpredict(y_test, x_test, svm_model);    
    
%% Reverse normalize data    
Y_sim1 = mapminmax('reverse', y_sim1, ps_output);    
Y_sim2 = mapminmax('reverse', y_sim2, ps_output);    
    
%% Calculate root mean square error (RMSE)    
rmse_train = sqrt(mean((Y_sim1 - Y_train).^2));    
rmse_test = sqrt(mean((Y_sim2 - Y_test).^2));    
    
%% Plot training results    
figure;    
plot(1:M, Y_train, 'b-*', 1:M, Y_sim1, 'r-o', 'LineWidth', 1);    
legend('Actual', 'Predicted');    
xlabel('Sample');    
ylabel('Value');    
xlim([1, M]);    
grid on;     
figure;    
plot(1:N, Y_test, 'y-*', 1:N, Y_sim2, 'r-o', 'LineWidth', 1);    
legend('Actual', 'Predicted');    
xlabel('Sample');    
ylabel('Value');    
xlim([1, N]);    
grid on;
%% Plot scatter plot for training set  
figure;  
scatter(Y_train, Y_sim1, 25, 'green');  
hold on;  
plot(xlim, ylim, '--r');  
xlabel('Actual (Training)');  
ylabel('Predicted (Training)');  
xlim([min(Y_train) max(Y_train)]);  
ylim([min(Y_sim1) max(Y_sim1)]);  
title('Predicted and Actual for Training Set');  
grid on;  
  
%% Plot scatter plot for test set  
figure;  
scatter(Y_test, Y_sim2, 25, 'green');  
hold on;  
plot(xlim, ylim, '--r');  
xlabel('Actual (Test)');  
ylabel('Predicted (Test)');  
xlim([min(Y_test) max(Y_test)]);  
ylim([min(Y_sim2) max(Y_sim2)]);  
title('Predicted and Actual for Test Set');  
grid on;  
  
%% The residuals of the training set are calculated and saved as residuals train variables  
residuals_train = Y_sim1 - Y_train;  
  
%% Plot the residuals of the training set  
figure;  
plot(1:M, residuals_train, 'k', 'Marker', 'o');  
xlabel('Sample (Training)');  
ylabel('Residual');  
title('Residuals for Training Set');  
grid on;  
  
%% If necessary, you can also calculate and plot the residuals of the test set 
residuals_test = Y_sim2 - Y_test;  
figure;  
plot(1:N, residuals_test, 'k', 'Marker', 'o'); 
xlabel('Sample (Test)');  
ylabel('Residual');  
title('Residuals for Test Set');  
grid on;  
 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg中位操作相关的源码:GetBitContext结构体,init_get_bits函数、get_bits1函数和get_bits函数分析

一、引言 由《音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB》可以知道,H.264 码流中的操作单位是位(bit),而不是字节。因为视频的传输和存贮是十分在乎体积的,对于每一个比特(bit&#xf…

策略模式 + 抽象工厂实现多方式登录验证

文章目录 1、需求背景2、常规想法3、工厂模式 配置文件解耦 策略模式4、具体实现5、其他场景6、一点思考 1、需求背景 以gitee为例,登录验证的方式有多种: 用户名密码登录短信验证码登录微信登录 先写一个登录接口,适配所有方式&#xff…

udp协议 服务器

1 TCP和UDP基本概念 TCP:(Transmission Control Protocol)是一种面向连接、可靠的基于字节流的传输层通信协议。并且提供了全双工通信,允许两个应用之间建立可靠的链接以进行数据交换 udp:(User Datagram Protocol):是一种无链接、不可靠、基于数据报文传输层协议&…

websocket服务执行playwright测试

上一篇博客从源码层面分析了playwright vscode插件实现原理,在上一篇博客中提到,backend服务是一个websocket服务。这遍博客将介绍如何封装一个websocket服务,通过发送消息来执行playwright测试。 初始化项目 第一步是初始化项目和安装必要的…

​【VMware】VMware Workstation的安装

目录 🌞1. VMware Workstation是什么 🌞2. VMware Workstation的安装详情 🌼2.1 VMware Workstation的安装 🌼2.2 VMware Workstation的无限使用 🌞1. VMware Workstation是什么 VMware Workstation是一款由VMwar…

【K8s】专题六:Kubernetes 资源限制及服务质量等级

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、资源限制 1、基本介绍 2、工作原理 3、限制方法 二、服务质量等级 一、资源限制 1…

【软件测试入门】测试用例经典设计方法 — 因果图法

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、因果图设计测试用例的步骤 1、分析需求 阅读需求文档,如果User Case很复杂&am…

DIY灯光特效:霓虹灯动画制作教程

下面我们根据这张霓虹灯案例,教大家如何用智能动物霓虹灯闪烁的效果,大家可以根据思路,实现自己想要的动效效果,一起动手来做吧。 即时设计-可实时协作的专业 UI 设计工具 设置背景 新建画板尺寸为:800PX^600PX,设置背景色#120527。 绘制主题 输入自己喜欢文案,轮廓化,具体…

PHP-CGI的漏洞(CVE-2024-4577)

通过前两篇文章的铺垫,现在我们可以了解 CVE-2024-4577这个漏洞的原理 漏洞原理 CVE-2024-4577是CVE-2012-1823这个老漏洞的绕过,php cgi的老漏洞至今已经12年,具体可以参考我的另一个文档 简单来说,就是使用cgi模式运行的PHP&…

充电桩--充电桩智能化发展趋势

聚焦光伏产业、深耕储能市场、探究充电技术 小Q下午茶 相互交流学习储能和BMS相关内容 43篇原创内容 公众号 一、背景介绍 国家提出“新基建”以来,充电基础设施产业跃入人们的视线成为热门话题。充电基础设施作为充电网、车联网、能源网和物联网的连接器&…

JS对象、数组、字符串超详细方法

JavaScript 对象方法 对象创建的方式 对象字面量 var dog1 {name: "大黄",age: 2,speak: function () {console.log("汪汪");}, };使用Object构造函数 var dog2 new Object(); dog2.name "大黄"; dog2.age 2; dog2.speak function () …

卷积的通俗解释

以时间和空间两个维度分别理解卷积,先用文字来描述: 时间上,任何当前信号状态都是迄至当前所有信号状态的叠加;时间上,任何当前记忆状态都是迄至当前所有记忆状态的叠加;空间上,任何位置状态都…

初见:AntDB智能运维“三剑客“之ADC

引言 6月15日,PostgreSQL数据库技术峰会广州站圆满落幕。峰会上,亚信安慧数据库智能运维产品负责人李志龙介绍了AntDB的6大数据库引擎和3大工具产品能力。 这里的3大工具分别指: AntDB数据库迁移工具包 MTK 数据库智能运维平台 ACC AntDB数据…

SwiftUI 6.0(iOS 18/macOS 15)关于颜色 Color 的新玩法

概览 WWDC 2024 重装升级的 SwiftUI 6.0 让 Apple 不同平台(iOS 18/macOS 15)显得愈发的冰壶玉衡、美轮美奂。 之前梦寐以求的颜色混合功能在 WWDC 24 里终于美梦成真啦! 在本篇博文中,您将学到如下内容: 概览1. 梦想…

this.$prompt 提示框增加文本域并修改文本域高度

2024.06.24今天我学习了如何对提示框增加文本域的方法&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <script>methods:{reject_event(){this.$prompt(驳回内容, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,inputType: textarea,inputPlaceholder…

精益思想在机器人开发中的应用体现

精益思想源于制造业&#xff0c;旨在通过消除浪费、优化流程、持续改进来提升企业竞争力。在机器人开发中&#xff0c;精益思想同样具有指导意义。它要求开发团队在需求分析、设计、制造、测试等各个环节中&#xff0c;不断追求精益求精&#xff0c;力求在降低成本的同时提升产…

同元软控智能电动汽车数字化解决方案亮相CICV 2024

2024年6月18日-20日&#xff0c;由中国汽车工程学会、国家智能网联汽车创新中心、清华大学车辆与运载学院、清华大学智能绿色车辆与交通全国重点实验室举办的第十一届国际智能网联汽车技术年会&#xff08;CICV 2024&#xff09;在北京召开。苏州同元软控信息技术有限公司&…

C++并发之协程实例(四)(通过迭代器访问生成器序列)

目录 1 协程2 实例3 运行 1 协程 协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的&#xff1a;它们通过返回到调用方来暂停执行&#xff0c;并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码&#xff08;例如&#xff0c;在没有显式回调…

【Linux】Centos升级到国产操作系统Openeuler

一、前言 迁移工具采用Openeuler官网提供的x2openEuler工具&#xff0c;是一款将源操作系统迁移到目标操作系统的迁移工具套件&#xff0c;具有批量化原地升级能力&#xff0c;当前支持将源 OS 升级至 openEuler 20.03。 官网链接&#xff1a;openEuler迁移专区 | 迁移专区首页…

8、MFC界面开发

界面开发 1、创建Ribbon样式的应用程序框架2、为Ribbon Bar添加控件2.1 下拉菜单2.2 添加消息处理函数 1、创建Ribbon样式的应用程序框架 创建MFC界面时选择样式为"Office"&#xff0c;然后再选择功能区。 2、为Ribbon Bar添加控件 Ribbon界面开发利用Ribbon Des…