基于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;  

 

 

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

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

相关文章

SQL注入-sqlmap使用

sqlmap简介 一款自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB Sqlma…

Ps:创建数据驱动的图形 - 定义变量

Ps菜单:图像/变量/定义 Image/Variables/Define 在 Photoshop 中,变量 Variables可用于控制图层的显示或隐藏、替换文字图层的文本内容以及替换像素图层的图像,从而基于数据驱动生成大量变体图像。 在打开的“变量”对话框中,首先…

爱心商城管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,企业管理,用户管理,论坛管理,商品管理,公告管理,用户捐赠 企业账户功能包括:系统首页,个人中…

C语言 | Leetcode C语言题解之第179题最大数

题目&#xff1a; 题解&#xff1a; long cmp(int *x, int *y) {unsigned long sx 10, sy 10;while (sx < *x) {sx * 10;}while (sy < *y) {sy * 10;}return sx * (*y) (*x) - sy * (*x) - (*y); }char *largestNumber(int *nums, int numsSize) {qsort(nums, numsSi…

Hi3861 OpenHarmony嵌入式应用入门--0.96寸液晶屏 iic驱动ssd1306

使用iic驱动ssd1306&#xff0c;代码来源hihope\hispark_pegasus\demo\12_ssd1306 本样例提供了一个HarmonyOS IoT硬件接口的SSD1306 OLED屏驱动库&#xff0c;其功能如下&#xff1a; 内置了128*64 bit的内存缓冲区&#xff0c;支持全屏刷新;优化了屏幕刷新速率&#xff0c;…

JDK动态代理

JDK动态代理源码分析 4.1 JDK动态代理的实现 需要动态代理的接口 /**需要动态代理的接口 */ public interface Movie {void player();void speak();需要动态代理的接口的真实实现 /**需要动态代理接口的真实实现 */ public class RealMovie implements Movie {Override publi…

HTTP/2 协议学习

HTTP/2 协议介绍 ​ HTTP/2 &#xff08;原名HTTP/2.0&#xff09;即超文本传输协议 2.0&#xff0c;是下一代HTTP协议。是由互联网工程任务组&#xff08;IETF&#xff09;的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。…

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法…

数据清洗!即插即用!异常值、缺失值、离群值处理、残差分析和孤立森林异常检测,确保数据清洗的全面性和准确性,MATLAB程序!

适用平台&#xff1a;Matlab2021版及以上 数据清洗是数据处理和分析中的一个关键步骤&#xff0c;特别是对于像风电场这样的大型、复杂数据集。清洗数据的目的是为了确保数据的准确性、一致性和完整性&#xff0c;从而提高数据分析的质量和可信度&#xff0c;是深度学习训练和…

BUCK电路布线规则、EMI分析

电源系列文章目录 本系列文章为博主在学习工作过程中的心得记录&#xff0c;欢迎评论区交流讨论。 BUCK电路工作原理、参数计算及工作模式分析BUCK电路布线规则、EMI分析电源电路中肖特基、续流二极管要求 目录 电源系列文章目录一、PCB布线规则1、输入电感与肖特基摆放2、输…

云原生容器技术入门:Docker、K8s技术的基本原理和用途

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、容器技术概述 1、什么是容器技术 2、容器技术的历史与发展 3…

QT事件处理系统之二:窗口部件的事件拦截,以及事件的传递顺序

1、案例说明 在父窗口中为selfLineEdit窗口安装事件过滤器,这样我们可以在父窗口中首先拦截来自于selfLineEdit本身产生的事件,并且决定该事件最终是否继续传递到selfLineEdit窗口本身。 2、关键代码 selfLineEdit.cpp #include "selfLineEdit.h" #include &l…

【树形dp 换根法 BFS】2581. 统计可能的树根数目

本文涉及知识点 CBFS算法 动态规划汇总 图论知识汇总 树形dp 换根法 BFS LeetCode 2581. 统计可能的树根数目 Alice 有一棵 n 个节点的树&#xff0c;节点编号为 0 到 n - 1 。树用一个长度为 n - 1 的二维整数数组 edges 表示&#xff0c;其中 edges[i] [ai, bi] &#xf…

将知乎专栏文章转换为 Markdown 文件保存到本地

一、参考内容 参考知乎文章代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地&#xff0c;利用代码为GitHub&#xff1a;https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接&…

嵌入式学习——数据结构(哈希、排序)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2 5. 算法设计 5.1 正确性 5.2 可读性&#xff08;高内聚、低耦合&#xff09; 5.3 健壮性 5.4 高效率&#xff08;时间复杂度&am…

Visual Studio开发环境搭建

原文&#xff1a;https://blog.c12th.cn/archives/25.html Visual Studio开发环境搭建 测试&#xff1a;笔记本原装操作系统&#xff1a;Windows 10 家庭中文版 资源分享链接&#xff1a;提取码&#xff1a;qbt2 注意事项&#xff1a;注意查看本地硬盘是否够用&#xff0c;建议…

2. 数据结构分析即索引库的crud

1. 数据库脚本 DROP TABLE IF EXISTS tb_hotel; CREATE TABLE tb_hotel (id bigint(0) NOT NULL,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT COMMENT 酒店名称,address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_090…

运营管理和服务支撑阶段

我前面的所有设备都部署好了&#xff0c;现在就需要运营管理和服务支撑 遇到问题了迅速解决&#xff0c;避免风险扩大 我们也可以给客户提供上面的服务&#xff0c;提高客户的预警能力&#xff0c;安全风险处理能力 我们不仅提供设备&#xff0c;还提供服务 我们公司成立了安…

【算法专题--链表】两两交换链表中的节点 -- 高频面试题(图文详解,小白一看就懂!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 采用哨兵位头节点 &#x1f95d; 什么是哨兵位头节点&#xff1f; &#x1f34d; 解题思路 &#x1f34d; 案例图解 四、总结与提炼 五、共勉 一、前言 两两交换链表中的节点 这道题&#xff0c;可以说…

K8S - 在集群内反向代理外部资源 - headless service 的使用

在上一篇文章中 K8S - 理解ClusterIP - 集群内部service之间的反向代理和loadbalancer 介绍了 ClusterIP 的主要作用 : 在k8s 集群内部 代理 内部的多实例 service 但是ClusterIP 还有1个变种 -> 无头服务 (headless service) 它用于代理集群外部的 ip资源 当然代理外部资…