|
在实现多变量数据预测过程中,发现利用MATLAB自带的高斯过程回归(Gaussian process regression,GPR)无法实现多输入多输出的数据预测,于是利用了gpml-matlab-v4.1-2017-10-19这个工具箱,并简单实现了多变量数据的预测值以及给出了每个预测值对应的方差。
注:涉及的训练数据和测试数据会在附件中给出。
- % X_train_s, Y_train_s: 训练数据,X_test_s, Y_test_s: 测试数据
- % 行:样本,列:变量
复制代码
首先是MATLAB自带的GPR工具箱使用:
- % 数据预测 by GPR
- gprMdl = fitrgp(X_train_s, Y_train_s(:,1), X_test_s);
- yfit_GPR(:,1) = predict(gprMdl,X_test_s);
复制代码
两行核心代码就可以实现单个变量的预测输出,但只能解决多输入单输出的数据预测问题。具体用法可以在MATLAB的命令行窗口输入 help fitrgp
然后是gpml-matlab-v4.1-2017-10-19工具箱的多变量数据预测简单实现:
- %% GPR using gpml-matlab-v4.1
- % 初始化超参数结构
- meanfunc = []; % empty: don't use a mean function
- covfunc = @covSEiso; % Squared Exponental covariance function
- likfunc = @likGauss; % Gaussian likelihood
- hyp = struct('mean', [], 'cov', [0 0], 'lik', -1);
- % 优化超参数结构
- hyp2 = minimize(hyp, @gp, -20, @infGaussLik, meanfunc, covfunc, likfunc, ...
- X_train_s, Y_train_s);
- % GPR建模(ymu为预测值的均值,ys为预测值的方差)
- [ymu ys] = gp(hyp2, @infGaussLik, meanfunc, covfunc, likfunc, ...
- X_train_s, Y_train_s, X_test_s);
- %% 可视化结果
- xs = (1:size(X_test_s,1))';
- % 变量1
- % 95%的置信度边界(3σ准则)
- figure
- f1 = [ymu(:,1)+2*sqrt(ys(:,1)); flipdim(ymu(:,1)-2*sqrt(ys(:,1)),1)];
- fill([xs; flipdim(xs,1)], f1, [7 7 7]/8)
- hold on
- % 实际数据
- plot(Y_test_s(:,1 ),'r:o','MarkerSize',2)
- % 预测数据
- plot(ymu(:,1) ,'b:o','MarkerSize',2)
- xlabel('样本点')
- ylabel('幅值')
- legend('95%置信度边界','原始数据','预测数据')
- title('变量1的预测结果')
- 复制代码
复制代码
由于篇幅问题上述代码只展示了第一个变量的预测结果及方差,下图是变量1的预测结果图。
最后附件给出利用GPML-V4.1工具箱实现高斯过程回归(GPR)的多变量数据预测代码,初次使用,如有错误的地方请指出,谢谢。
|
|