【MATLAB第52期】#源码分享 | 基于MATLAB的高斯过程GPR超参数(sigma)自动优化算法 时间序列预测模型 五折交叉验证

news2024/11/24 19:32:07

【MATLAB第52期】#源码分享 | 基于MATLAB的高斯过程GPR超参数(sigma)自动优化算法 时间序列预测模型 五折交叉验证

后台私信回复“52期”即可免费获取数据及代码。

一、效果展示

在这里插入图片描述
在这里插入图片描述

二、优化思路

1.数据
一列时间序列数据 ,滑动窗口尺寸为15。
2.思路
使用GPR自动优化函数,对sigma进行自动寻优。
适应度值log(1+loss)。
迭代次数默认30.

三、代码展示

%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行

%%  导入数据(时间序列的单列数据)
result = xlsread('数据集.xlsx');

%%  数据分析
num_samples = length(result);  % 样本个数 
kim = 15;                      % 延时步长(kim个历史数据作为自变量)
zim =  1;                      % 跨zim个时间点进行预测

%%  构造数据集
for i = 1: num_samples - kim - zim + 1
    res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];
end

%%  划分训练集和测试集
temp = 1: 1: 922;

P_train = res(temp(1: 700), 1: 15)';
T_train = res(temp(1: 700), 16)';
M = size(P_train, 2);

P_test = res(temp(701: end), 1: 15)';
T_test = res(temp(701: end), 16)';
N = size(P_test, 2);

%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);

[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);

%%  转置以适应模型
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';

%训练模型  这个是模型参数 ,运行较好地结果 
gprMdl= fitrgp(p_train,t_train,'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions',...
     struct('Optimizer','randomsearch'));%训练高斯过程模型 HyperparameterOptimizationOptions 五折交叉验证自动优化超参数sigma

%gprMdl = fitrgp(p_train,t_train,'Basis','None','KernelFunction','Exponential');
[t_sim1] = gprpre(gprMdl);
T_sim1=mapminmax('reverse',t_sim1, ps_output);%训练集拟合结果

[t_sim2,~,~] = predict(gprMdl,p_test);
T_sim2=mapminmax('reverse',t_sim2, ps_output);

%%  均方根误差
error1 = sqrt(sum((T_sim1' - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2' - T_test ).^2) ./ N);

%%  绘图
figure()
subplot(211)
plot(1: M, T_train, 'r-', 1: M, T_sim1, 'b-', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'优化后训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid

subplot(212)
plot(1: N, T_test, 'r-', 1: N, T_sim2, 'b-', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'优化后测试集预测结果对比';['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid


%%  相关指标计算
%  R2
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;

disp(['优化后训练集数据的R2为:', num2str(R1)])
disp(['优化后测试集数据的R2为:', num2str(R2)])

%  MAE
mae1 = sum(abs(T_sim1' - T_train)) ./ M ;
mae2 = sum(abs(T_sim2' - T_test )) ./ N ;

disp(['优化后训练集数据的MAE为:', num2str(mae1)])
disp(['优化后测试集数据的MAE为:', num2str(mae2)])

%  MBE
mbe1 = sum(T_sim1' - T_train) ./ M ;
mbe2 = sum(T_sim2' - T_test ) ./ N ;

disp(['优化后训练集数据的MBE为:', num2str(mbe1)])
disp(['优化后测试集数据的MBE为:', num2str(mbe2)])

%% 优化前 Sigma = 0.5
%gprMdl1 = fitrgp(p_train,t_train,'Basis','None','KernelFunction','Exponential');
[t_sim11] = gprpre(gprMdl1);
T_sim11=mapminmax('reverse',t_sim11, ps_output);%训练集拟合结果
L1 = resubLoss(gprMdl1)%损失函数

[t_sim22,~,~] = predict(gprMdl1,p_test);
T_sim22=mapminmax('reverse',t_sim22, ps_output);

%%  均方根误差
error11 = sqrt(sum((T_sim11' - T_train).^2) ./ M);
error22 = sqrt(sum((T_sim22' - T_test ).^2) ./ N);

%%  绘图
figure()
subplot(211)
plot(1: M, T_train, 'r-', 1: M, T_sim11, 'b-', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'优化前训练集预测结果对比'; ['RMSE=' num2str(error11)]};
title(string)
xlim([1, M])
grid

subplot(212)
plot(1: N, T_test, 'r-', 1: N, T_sim22, 'b-', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'优化前测试集预测结果对比';['RMSE=' num2str(error22)]};
title(string)
xlim([1, N])
grid



%%  相关指标计算
%  R2
R11 = 1 - norm(T_train - T_sim11')^2 / norm(T_train - mean(T_train))^2;
R22 = 1 - norm(T_test -  T_sim22')^2 / norm(T_test -  mean(T_test ))^2;

disp(['优化前训练集数据的R2为:', num2str(R11)])
disp(['优化前测试集数据的R2为:', num2str(R22)])

%  MAE
mae11 = sum(abs(T_sim11' - T_train)) ./ M ;
mae22 = sum(abs(T_sim22' - T_test )) ./ N ;

disp(['优化前训练集数据的MAE为:', num2str(mae11)])
disp(['优化前测试集数据的MAE为:', num2str(mae22)])

%  MBE
mbe11 = sum(T_sim11' - T_train) ./ M ;
mbe22 = sum(T_sim22' - T_test ) ./ N ;

disp(['优化前训练集数据的MBE为:', num2str(mbe11)])
disp(['优化前测试集数据的MBE为:', num2str(mbe22)])

四、代码免费获取

后台私信回复“52期”即可获取数据及代码下载链接。

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

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

相关文章

《前端开发 实践之 Webstorm 学习》

目录 Webstorm 简介官方下载地址安装记录-教程下载其他版本方法 是否推送数据统计许可证激活插件功能版本控制查看代码责任人插件(annotate) Webstorm 简介 作为 jetbrains 公司旗下一款 JavaScript 开发工具,Web前端开发神器之一 个人博客地址: 官方下载…

网络安全自学黑客入门(超详细)

前言 前几天发布了一篇 网络安全(黑客)自学 没想到收到了许多人的私信想要学习网安黑客技术! 却不知道从哪里开始学起!怎么学?如何学? 今天给大家分享一下,很多人上来就说想学习黑客&#xf…

银河麒麟服务器V10 SP1 .Net6.0 开机自动启动

开机自动启动,折腾了一小天,设置/etc/init.d/ 、update-rc.d,可能刚开始用,经验不多吧,尝试多种方式我的服务怎么都启动不起来,根据之前nginx和redis的自动启动经验,使用systemd管理服务&#x…

【EXCEL】给数据添加图表(数据条、柱状图、折线图等),快速分析功能图文详解

目录 0.环境 1.背景简介 2.具体实现 2.1 给数据添加数据条 实现效果: 具体操作: 2.2 给数据添加柱状图图表 实现效果: 具体操作: 2.3 给数据添加迷你图(在表格中的折线图) 实现效果: …

基于PyQt5的桌面图像调试仿真平台开发(13)图像边缘显示

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

JavaWeb学习笔记1

目录 web标准 三个组成部分 HTML 标题标签 水平线标签 换行标签 图片标签 布局标签: 超链接标签 属性: 视频标签: 音频标签: 段落标签: 文本加粗标签: 表格标签 表单标签 表单项 CSS Css引入方式…

1.6 OSI 七层参考模型

OSI 参考模型 OSI参考模型解释的通信过程OSI参考模型数据封装与通信过程物理层功能数据链路层功能网络层的功能传输层功能会话层功能表示层功能应用层功能 开放系统互连 (OSI)参考模型是由国际标准化组织 (ISO) 于1984年提出的分层网络体系结构模型目的是支持异构网络系统的互联…

数学建模--TOPSIS

代码 topsis.m Positivization.m inter2Max.m Mid2Max.m Min2Max.m

C++学习 函数

目录 函数 函数的定义 函数的调用 值传递 常见的样式 函数的声明 函数的分文件编写 1.创建后缀.h的头文件 2.创建后缀.cpp的源文件 3.头文件中写函数声明 4.源文件中写函数定义 5.函数调用 函数 作用: C中的函数充当了组织和重用代码的重要工具,提供了抽…

8-js高级-3

JavaScript 进阶 - 3 了解构造函数原型对象的语法特征,掌握 JavaScript 中面向对象编程的实现方式,基于面向对象编程思想实现 DOM 操作的封装。 编程思想构造函数原型综合案例 编程思想 学习 JavaScript 中基于原型的面向对象编程序的语法实现&#xff…

大胜归来!妙记多这份「高考填志愿」指南请收好!

2023年高考已经落下帷幕,上周和本周多个省份就要公布高考分数了,志愿填报还会远吗? 不知道自己的分数能报什么院校? 不知道目标院校的王牌专业有哪些? 不知道目标专业的就业方向? 不知道有哪些志愿填报小…

C# 简述.NET中堆和栈的区别

目录 一,引言 二,.NET的堆栈 三,.NET中的托管堆 四,.NET中的非托管堆 五、堆栈、托管堆和非托管堆的比较 六,总结 一,引言 .NET提供了垃圾回收机制,使程序员从内存管理中被解放出来。但这…

Unity 语法详解之查找游戏物体的方法(含查找隐藏物体)

为了更好的看懂,有一个非常基础的知识,如果不知道可以移步去了解一下哦 unity | gameobject和transform的区别和关联通俗解释_gameobject transform_菌菌巧乐兹的博客-CSDN博客 一、前情提要 大写的GameObject是个类,里面写满了物体有关的…

python利用docxtpl将excel数据写入word表格

解决问题一:将excel数据读取,并将其保存在word中的表格 解决问题二:使用xlrd读入excel数据,如果是整数的话,打开word后发现保存变成了浮点数,后边多了“.0”。 问题一、 可以参考docxtpl快速上手使用,数…

电商API知识点整理(二)关键字搜索接口item_search获取商品列表

关键字搜索接口名称:item_search 接口背景: 随着互联网的普及和电子商务市场的快速发展,越来越多的消费者开始通过关键字搜索来寻找自己感兴趣的商品。为了满足用户的需求,电商平台开发了各种搜索接口,其中之一就是i…

22个最佳WordPress网站预约插件(2023)

您是否正在寻找可以节省您和您的客户时间的自动预订或预约插件?您是否厌倦了将业务输给竞争对手?您是否正在寻找一种简化在线预约和预订的方法? 您的网站应该让客人可以轻松查看和预订可用的预约。这是WordPress预约插件可以帮助您实现在线业…

基于Python的DES算法的企业用户数据安全加密系统设计与实现

博主介绍:擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例…

【SLAM14讲】04 三维空间刚体运动

一、坐标系之间的欧式变换 xW , yW , zW定义的世界坐标系,xC , yC , zC 定义的相机坐标系。 相机视野中某个向量 p,它的坐标为pc,而从世界坐标系下看,它的坐标 pw。 二、相机运动 相机运动是一个刚体运动,它保证了同…

golang arena

go 1.20新特性 goland设置 Enviroment 定义环境变量 Go tool arguments 就是go build 的参数 Program arguments 启动参数 GOEXPERIMENTarenas -tags goexperiment.arenas //go:build goexperiment.arenaspackage mainimport ("arena""fmt""net/…

可以实现语音录入的好用的记事本app是哪个?

在现代快节奏的工作生活中,记事本成为了人们不可或缺的工具之一。然而,传统的手写记事本已经无法满足人们快速、高效的需求,语音记事的好处不言而喻。 它不仅能够提高工作效率,减少输入时间,还能够帮助用户更好地记录…