基于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.mzph.cn/pingmian/32975.shtml

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

相关文章

ViT:4 Pruning

实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)…

文华财经T8自动化交易程序策略模型指标公式源码

文华财经T8自动化交易程序策略模型指标公式源码: //定义变量 //资金管理与仓位控制 8CS:INITMONEY;//初始资金 8QY:MONEYTOT;//实际权益 8QY1:MIN(MA(8QY,5*R),MA(8QY,2*R)); FXBL:N1; DBKS:8QY1*N1;//计算单笔允许亏损额度 BZDKS:MAX(AA-BB,N*1T)*UNIT; SZDKS:MAX…

北方银行 - HDFS 现代化快速案例研究

故事很重要,客户故事是最好的。他们提供令人瞠目结舌的统计数据或克服巨大障碍的那些是获得最佳头条新闻的那些。它们也是最难发表的。我们知道,因为我们将与您分享一些我们正在孜孜不倦地努力出版的内容 - 但现在它们将保持匿名。话虽如此,如…

爬取同样内容,xpath方法会比bs4要慢很多吗?

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 红豆生南国,春来发几枝。 大家好,我是Python进阶者。 一、前言 前几天在Python白银交流群【沐子山树】问了一个Python网络爬虫的…

ARM32开发--WDGT看门狗

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 什么是看门狗 ARM中的看门狗 独立看门狗定时器 窗口看门狗定时器 独立看门狗FWDGT 初始化配置 喂狗 完整代码 窗口看门狗WWDGT 初始化配置 喂狗 完整代码 注意 总结 前言 嵌入式系统在如今的科技发…

JSON序列化与反序列化

目录 JSON序列化 查看JSON文件,设置数据模板类 ​编辑 Newtonsoft.Json下载 运行结果展示 JSON反序列化 序列化是将对象或数据结构转换为可以存储或传输的格式(如JSON字符串)的过程,而反序列化则是将这个格式的数据转换回原…

Web渗透:文件上传-后端过滤

在上一篇文件上传的内容中笔者阐述了文件上传漏洞产生的相关原理以及使用了一个pikachu靶场的例子进行演示,在这个例子中涉及到了前端代码对于文件上传漏洞的相关防护,以及站在攻击者的角度我们要如何绕过前端的防护成功进行攻击;但是事实上对…

很冷门但真的有趣的IOS应用

Tuesday Tuesday纪念日小组件是一款功能丰富的倒数日和桌面小组件工具APP。此外,Tuesday软件还具有超萌小清新的风格,界面设计清新可爱,适合各种场景使用。用户可以通过小组件实现各种趣味功能,满足不同心情需求。 SideNotes Si…

吴恩达机器学习 第三课 week2 推荐算法(上)

目录 01 学习目标 02 推荐算法 2.1 定义 2.2 应用 2.3 算法 03 协同过滤推荐算法 04 电影推荐系统 4.1 问题描述 4.2 算法实现 05 总结 01 学习目标 (1)了解推荐算法 (2)掌握协同过滤推荐算法(Collabo…

查找和排序

目录 一、查找 1.1查找的基本概念 1.2顺序查找 1.3折半查找(二分查找) 1.4散列表的查找 1.4.1基本概念 1.4.2散列函数的构造方法 1.4.3解决冲突的方法 二、排序 2.1排序的基本概念 2.2插入排序 2.2.1直接插入排序: 2.2.2希尔排序…

linux 简单使用 sftp 和 lftp命令

目录 一. 环境准备二. sftp命令连接到SFTP服务器三. lftp命令3.1 连接FTP和SFTP服务器3.2 将文件从sftp服务器下载到本地指定目录 四. 通过WinSCP命令行从SFTP服务器获取文件到Windows 一. 环境准备 ⏹在安卓手机上下载个MiXplorer,用作SFTP和FTP服务器 官网: htt…

windows无法启动redis-server

Warning: no config file specified, using the default config. In order to specify a config file use D:\Code_enve\Redis\redis-server.exe /path/to/redis.conf Creating Server TCP listening socket *:6379: bind: No such file or directory以上是问题的报错信息&…

AIGC-Animate Anyone阿里的图像到视频 角色合成的框架-论文解读

Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation 论文:https://arxiv.org/pdf/2311.17117 网页:https://humanaigc.github.io/animate-anyone/ MOTIVATION 角色动画的目标是将静态图像转换成逼真的视频,这在在线零…

计网:网络应用层【Email应用/SMTP协议】

Email应用与SMTP协议 Email应用层的构成 客户端服务器协议 用户代理 用于读写邮件消息;与服务器交互,收发邮件消息 常见的客户端:Outlook,Foxmail(这两个是需要下载的客户端),Web客户端&…

【论文复现|智能算法改进】一种基于多策略改进的鲸鱼算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】 2.改进点 混沌反向学习策略 将混沌映射和反向学习策略结合,形成混沌反向学习方法,通过该方 法…

VB实现加法计算

textbox1失去焦点,检查输入的值是否为数字。 textbox2中按下Enter键,检查输入的值是否为数字。 textbox3获得焦点,计算textbox1和textbox2的和。 Public Class Form1Private Sub TextBox1_LostFocus(sender As Object, e As EventArgs) Hand…

基于Django + Web + MySQL的智慧校园系统

基于Django Web MySQL的智慧校园系统 由于时间紧迫,好多功能没实现,只是个半吊子的后台管理系统,亮点是项目安全性还算完整,权限保护加密功能检索功能有实现,可参考修改 功能如下(服务为超链接&#xff0…

yii2 ActiveForm使用技巧

持续更新&#xff1a; 1、搜索输入框&#xff1a;form-inline <?php $form ActiveForm::begin([action > [index],method > get,options > [class > form-inline] &#xff08;增加此行代码&#xff09; ]); ?>

PBR网络数据流量分流+NQA联动静态路由

一、实验目的&#xff1a; 企业有两个网段&#xff0c;业务1网段和业务2网段&#xff0c;拓扑图如下&#xff0c; 二、实验要求 pc1报文走左侧链路到达ar1&#xff0c;pc2报文走右侧链路到达ar1&#xff0c;且当ar2或者ar3发生故障时候&#xff0c;可以通过另一个设备到达ar1…

1.4 Kettle 数据同步工具详细教程

工具介绍 一、概述 Kettle&#xff0c;又名 Pentaho Data Integration&#xff08;PDI&#xff09;&#xff0c;是一个开源的数据集成工具&#xff0c;最初由 Pentaho 公司开发。它能够从多种数据源提取、转换并加载&#xff08;ETL&#xff09;数据&#xff0c;适用于数据仓…