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

这篇具有很好参考价值的文章主要介绍了【MATLAB第52期】#源码分享 | 基于MATLAB的高斯过程GPR超参数(sigma)自动优化算法 时间序列预测模型 五折交叉验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

一、效果展示

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

二、优化思路

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期”即可获取数据及代码下载链接。文章来源地址https://www.toymoban.com/news/detail-528356.html

到了这里,关于【MATLAB第52期】#源码分享 | 基于MATLAB的高斯过程GPR超参数(sigma)自动优化算法 时间序列预测模型 五折交叉验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MATLAB第67期】# 源码分享 | 基于MATLAB的morris全局敏感性分析

    目标函数 后台私信回复“67期”即可获取下载链接。

    2024年02月13日
    浏览(49)
  • 分享52个Java源码,总有一款适合您

    Java源码 分享52个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接:https://pan.baidu.com/s/1YpNL5QWwQ18Y-KRmFHFs5g?pwd=qc8w 提取码:qc8w   开源Java博客Roller v5.0 for tomcat meshcms v3.6 源码版 meshcms v3

    2024年02月03日
    浏览(40)
  • 基于高斯过程的贝叶斯优化

    bayes-optimization是最早开源的贝叶斯优化库之一,也是为数不多至今依然保留着高斯过程优化的优化库。由于开源较早、代码简单,bayes-opt常常出现在论文、竞赛kernels或网络学习材料当中,因此理解Bayes_opt的代码是极其重要的课题。不过,bayes-opt对参数空间的处理方式较为原始

    2024年01月19日
    浏览(48)
  • 【MATLAB第56期】#源码分享 | 基于MATLAB的机器学习算法单输入多输出分类预测模型思路(回归改分类)

    针对单输入多输出分类预测,可采用回归的方式进行预测。 本文采用BP神经网络进行演示。 数据为1输入,5输出,总共482个样本。 输出分为五个指标,每个指标共4个评分维度,即【0 10 20 30】 保持样本均匀多样性,可将数据打乱。 若不需要打乱,上面代码改成: 训练样本数

    2024年02月17日
    浏览(36)
  • 【MATLAB第2期】源码分享#基于LSTM时间序列单步预测,含验证和预测未来

    matlab2020a + cpu 单列数据,2018/10~2018/12 共三个月,92个数据。 ​ 样本标准化处理,其中,前85个数据作为训练样本,来验证后7个数据效果。最后预测未来7个数据。 numTimeStepsTrain = floor(85);%85数据训练 ,7个用来验证 dataTrain = data(1:numTimeStepsTrain+1,:);% 训练样本 dataTest = data(numTime

    2024年02月05日
    浏览(40)
  • 【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测

    高斯混合模型GMM广泛应用于数据挖掘、模式识别、机器学习和统计分析。其中,它们的参数通常由最大似然和EM算法确定。 关键思想是使用高斯混合模型对数据(包括输入和输出)的联合概率密度函数进行建模。 文献参考:https://doi.org/10.1016/j.specom.2012.06.005。 使用工具箱ne

    2024年02月15日
    浏览(46)
  • 【MATLAB源码-第139期】基于matlab的OFDM信号识别与相关参数的估计,高阶累量/小波算法调制识别,循环谱估计,带宽估计,载波数目估计等等。

    在现代无线通信系统中,正交频分复用(OFDM)因其高效的频谱利用率、强大的抗多径衰落能力以及灵活的带宽分配等优势,成为了一种非常重要的调制技术。然而,随着无线通信网络的复杂性增加,对OFDM信号的识别与参数估计提出了更高的要求。这不仅是为了提高通信质量

    2024年02月19日
    浏览(46)
  • 基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 MATLAB2013B        基于高斯混合模型(Gaussian Mixture Model, GMM)的视频背景提取和人员跟踪算法是一种广泛应用的计算机视觉方法,主要用于分离视频序列中的静态背景和动态前景

    2024年04月25日
    浏览(40)
  • Matlab相机标定方法及主要参数含义,坐标变换过程

    网上有很多关于matlab相机标定的资料,但找了很久没有相应的参数说明:怎样利用获得参数从世界坐标系变换到图像坐标系,所以这里为了记录一下,也方便新人理解。 首先由图像到参数的获取部分在网上有很多资料,也很容易,在这就不再赘述,我利用的标定板的格子大小

    2024年02月05日
    浏览(45)
  • 基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 Python 2.2 Matlab 🎉3 参考文献 🌈4 Matla

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包