查看: 14355|回复: 57|关注: 6

[我分享] 利用GPML-V4.1工具箱实现高斯过程回归(GPR)的多变量数据预测

[复制链接]

新手

21 麦片

财富积分


050


8

主题

110

帖子

0

最佳答案
  • 关注者: 36
发表于 2018-6-6 19:00:29 | 显示全部楼层 |阅读模式
在实现多变量数据预测过程中,发现利用MATLAB自带的高斯过程回归(Gaussian process regression,GPR)无法实现多输入多输出的数据预测,于是利用了gpml-matlab-v4.1-2017-10-19这个工具箱,并简单实现了多变量数据的预测值以及给出了每个预测值对应的方差。

注:涉及的训练数据和测试数据会在附件中给出。
  1. % X_train_s, Y_train_s: 训练数据,X_test_s, Y_test_s: 测试数据
  2. % 行:样本,列:变量
复制代码

首先是MATLAB自带的GPR工具箱使用:

  1. % 数据预测 by GPR
  2. gprMdl = fitrgp(X_train_s, Y_train_s(:,1), X_test_s);
  3. yfit_GPR(:,1) = predict(gprMdl,X_test_s);
复制代码
两行核心代码就可以实现单个变量的预测输出,但只能解决多输入单输出的数据预测问题。具体用法可以在MATLAB的命令行窗口输入 help  fitrgp


然后是gpml-matlab-v4.1-2017-10-19工具箱的多变量数据预测简单实现:

  1. %% GPR using gpml-matlab-v4.1
  2. % 初始化超参数结构
  3. meanfunc = [];                    % empty: don't use a mean function
  4. covfunc = @covSEiso;              % Squared Exponental covariance function
  5. likfunc = @likGauss;              % Gaussian likelihood
  6. hyp = struct('mean', [], 'cov', [0 0], 'lik', -1);
  7. % 优化超参数结构
  8. hyp2 = minimize(hyp, @gp, -20, @infGaussLik, meanfunc, covfunc, likfunc, ...
  9.      X_train_s, Y_train_s);
  10. % GPR建模(ymu为预测值的均值,ys为预测值的方差)
  11. [ymu ys] = gp(hyp2, @infGaussLik, meanfunc, covfunc, likfunc, ...
  12.     X_train_s, Y_train_s, X_test_s);

  13. %% 可视化结果
  14. xs = (1:size(X_test_s,1))';
  15. % 变量1
  16. % 95%的置信度边界(3σ准则)
  17. figure
  18. f1 = [ymu(:,1)+2*sqrt(ys(:,1)); flipdim(ymu(:,1)-2*sqrt(ys(:,1)),1)];
  19. fill([xs; flipdim(xs,1)], f1, [7 7 7]/8)
  20. hold on
  21. % 实际数据
  22. plot(Y_test_s(:,1 ),'r:o','MarkerSize',2)
  23. % 预测数据
  24. plot(ymu(:,1) ,'b:o','MarkerSize',2)
  25. xlabel('样本点')
  26. ylabel('幅值')
  27. legend('95%置信度边界','原始数据','预测数据')
  28. title('变量1的预测结果')
复制代码

由于篇幅问题上述代码只展示了第一个变量的预测结果及方差,下图是变量1的预测结果图。
untitled.png

最后附件给出利用GPML-V4.1工具箱实现高斯过程回归(GPR)的多变量数据预测代码,初次使用,如有错误的地方请指出,谢谢。
GPR based on GPML-V4.1.rar (1.4 MB, 下载次数: 822)

新手

21 麦片

财富积分


050


8

主题

110

帖子

0

最佳答案
  • 关注者: 36
 楼主| 发表于 2019-9-5 11:54:23 | 显示全部楼层
本帖最后由 iqiukp 于 2019-9-5 11:55 编辑

2019.9.5 更新
Gaussian Process Regression.zip (1.89 MB, 下载次数: 333)

新手

10 麦片

财富积分


050


0

主题

1

帖子

0

最佳答案
发表于 2018-7-30 16:11:08 | 显示全部楼层
代码确实好用,感谢分享,我正愁自己下载的GPML工具箱调用困难呢。
另外,我还想请教一下,如何选择和修改高斯回归模型的核函数。

新手

12 麦片

财富积分


050


2

主题

13

帖子

0

最佳答案
发表于 2018-8-28 14:49:59 | 显示全部楼层
楼主我是matlab2014b版本的,我看了下自带的好像没有GPR工具箱,你知道哪能下载吗

新手

5 麦片

财富积分


050


0

主题

1

帖子

0

最佳答案
发表于 2018-8-28 17:35:55 | 显示全部楼层
你好,请教一下,我用这个程序训练自己的数据时,matlab无法响应了。我试验的数据三万条,是因为数据量太大了吗?

新手

11 麦片

财富积分


050


3

主题

12

帖子

0

最佳答案
  • 关注者: 1
发表于 2018-9-6 20:48:12 | 显示全部楼层
jimmy_oWWn3 发表于 2018-8-28 14:49
楼主我是matlab2014b版本的,我看了下自带的好像没有GPR工具箱,你知道哪能下载吗 ...

附上的代码里面的文件夹就是GPR工具箱源文件

新手

26 麦片

财富积分


050


8

主题

46

帖子

1

最佳答案
发表于 2018-9-7 11:18:48 | 显示全部楼层
代码太好用了,给楼主好评,希望多出一些高质量的代码和文章

新手

5 麦片

财富积分


050


0

主题

1

帖子

0

最佳答案
发表于 2018-10-11 17:59:17 | 显示全部楼层
你好,请教一下,如何使用gpml工具箱,需要添加startup函数路径吗

新手

5 麦片

财富积分


050


0

主题

1

帖子

0

最佳答案
发表于 2018-10-22 20:14:10 | 显示全部楼层
楼主,你高斯过程多输入单输出的回归预测有做过吗?网上找了好多资料都是单输入单输出的,方便留下联系方式吗?

新手

5 麦片

财富积分


050


0

主题

1

帖子

0

最佳答案
发表于 2018-10-23 11:34:32 | 显示全部楼层
同想咨询楼主,请问多输入单输出的话代码应该有什么变动呢?楼楼可否留下联系方式?想要请教

新手

5 麦片

财富积分


050


0

主题

6

帖子

0

最佳答案
发表于 2018-11-22 16:42:31 | 显示全部楼层
求问楼主,我直接运行你这代码,报错未定义与 'function_handle' 类型的输入参数相对应的函数 'minimize'该怎么办呢?我是新手 求指教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表