高斯过程matlab编程实战详解
本次结论公式均来自《Gaussian Processes for Machine Learning》-> http://www.gaussianprocess.org/gpml/
P19
P114
OK,开始吧。
问题记录:
1、如果某些情况下出现核矩阵不对称,可通过(H+H')/2进行处理
2、矩阵求逆不正定,加一个正则化项,也叫吉洪诺夫正则化,就是单位矩阵eye(n)*epsilon,但是epsilon需要特别小,太大就变成回归形式了,但是多小是个问题,1e-7/(1e-22*n)都有,以后有时间一定要好啊后研究研究,感觉写程序这个东西很难受
样本:
x=(-7.5:1:7.5)';
y=sin(x);

预测点:

xstar=(-7.5:0.5:7.5)';

超参数初始值:

loghyper = [log(1.0); log(1.0);  log(0.1)];  %分别为length-scale,sigmaf,sigman并取ln对数

求最大似然估计和倒数或者预测均值和方差

[nlZ dnlZ] =  GPR(loghyper, x,y)
[mu, S2] = GPR(loghyper,  x,y,xstar)

协方差中的(欧式距离)^2函数

function C =  SQDIST(Sample,Pre);
%求样本的欧氏距离并放入对应的协方差矩阵中,可以看作
% for i=1:n
%     for j=1:n
%         K(i,j)=norm(x(i,:)-x(j,:))^2;
%     end
% end
if nargin==1[n,D1] = size(Sample);C=zeros(n);for d = 1:D1    C=C+(repmat(Sample(:,d),  1 ,m) - repmat(Sample(:,d)',  n,1)).^2;   end
end
%求样本与样本点间的欧氏距离并放入对应的协方差矩阵中,可以看作
% for i=1:m
%     for j=1:n
%         K(i,j)=norm(x(i,:)-xpre(j,:))^2;
%     end
% end
if nargin==2[n,D1] = size(Sample);[m,D2] = size(Pre);C=zeros(n,m);for d = 1:D1    C=C+(repmat(Sample(:,d),  1 ,m) - repmat(Pre(:,d)',  n,1)).^2;   end
end
end

函数->求预测值和方差或者求最大似然估计及其梯度

function  [outputArg1,outputArg2] =  GPR(inputloghyper,  inputx,inputy,inputxstar)
% m个dim维的样本
% inputx:m*dim
% inputy:m*1
% inputxstar:n*dim
%  inputloghyper:log(hyper)=[theta(1),theta(2),theta(3)]
ell = exp(inputloghyper(1));                             % characteristic length-scale
sf2 = exp(2*inputloghyper(2));                           % sigmaf
sn2 = exp(2*inputloghyper(3));                           % sigman:noise variance
[m,dim]=size(inputx);
%按照公式2.31求协方差矩阵%
Kxx=zeros(m,m);
KKxx=sf2*exp(-0.5*SQDIST(inputx/ell,inputx/ell));
Kxx=Kxx+KKxx;
KKxx=sn2*eye(size(inputx,1));
Kxx=Kxx+KKxx;
%cholesky分解
L=chol(Kxx)';
alpha=L'\(L\inputy);
%求最大似然估计及其梯度
if nargin==3% minlogpyx,求最大似然估计的相反数,优化时求minimizeoutputArg1=0.5*inputy'*alpha+sum(log(diag(L)))+0.5*m*(2*pi);%gradientoutputArg2 =  zeros(size(inputloghyper));W =  L'\(L\eye(m))-alpha*alpha';%求K的关于超参数的偏导数,这里注意,我们的参数是lnx,这里sf2的偏导数是exp(2*logtheta)' =2*exp(2*logtheta)=2*sf2,而不是sf^2'=2*sf=2*exp(logtheta)dell =  sf2*exp(-SQDIST(inputx/ell)/2).*SQDIST(inputx/ell);  dsf =  2*sf2*exp(-SQDIST(inputx/ell)/2);dsn =  2*sn2*eye(size(inputx,1));%求迹,这里参考GPML,但是为什么这样算还不知道,直接求迹不对,望大神指点迷津outputArg2(1)=sum(sum(W.*dell))/2;outputArg2(2)=sum(sum(W.*dsf))/2;outputArg2(3)=sum(sum(W.*dsn))/2;
end
%求预测值和方差
if nargin==4n=size(inputxstar,1);Kxxstar=zeros(m,n);KKxxstar=sf2*exp(-0.5*SQDIST(inputx/ell,inputxstar/ell));Kxxstar=Kxxstar+KKxxstar;%求均值fmean=Kxxstar'*alpha;outputArg1=fmean;v = L\Kxxstar;V=sf2+sn2-sum(v.*v)';%方差减去sn2V = V-exp(2*inputloghyper(3));outputArg2=V;
end
end

结果:

nlZ =48.6337
dnlZ =-14.49629.44110.5962
mu =-0.9273-0.6795-0.21670.28950.70270.94650.97010.75510.3491-0.1420-0.5949-0.9024-0.9908-0.8364-0.4765-0.00000.47650.83640.99080.90240.59490.1420-0.3491-0.7551-0.9701-0.9465-0.7027-0.28950.21670.67950.9273
S2 =0.00980.02180.00970.01550.00960.01430.00960.01400.00950.01390.00950.01390.00950.01390.00950.01390.00950.01390.00950.01390.00950.01390.00950.01400.00960.01430.00960.01550.00970.02180.0098

画图:mu+-2sigma

figure
f = [mu+2*sqrt(S2);flipdim(mu-2*sqrt(S2),1)];
fill([xstar; flipdim(xstar,1)], f, [7 7 7]/8, 'EdgeColor', [7 7 7]/8);
hold on
plot(xstar,mu,'k-','LineWidth',2);
plot(x, y, 'k+', 'MarkerSize', 17);
figure
errorbar(xstar, mu, 2*sqrt(S2), 'g');
hold on
plot(x, y, 'k+', 'MarkerSize', 17)

结果

高斯过程的matlab程序实现及其参数优化相关推荐

  1. matlab粒子群加约束条件_多目标粒子群(PSO)与MATLAB程序视频教程及动态优化问题约束条件...

    [内容简介]<粒子群算法与应用和MATLAB程序详解视频>共15章186节视频,总学时1917分钟,合32小时.主要内容包括:粒子群算法(PSO)基本概念与算法流程,粒子群算法利用MATL ...

  2. 无功优化的matlab程序,遗传算法的无功优化matlab实现

    [实例简介] 基于遗传算法的无功优化matlab实现方法软件包,调试基本通过,可直接下载应用,具体例子可以自己修改一下原代码. [实例截图] [核心代码] matlab实现方法软件包,调试基本通过,可 ...

  3. 18-考虑柔性负荷的综合能源系统低碳经济优化调度MATLAB程序

    资源地址: 18考虑柔性负荷的综合能源系统低碳经济优化调度MATLAB程序_柔性负荷优化调度程序资源-CSDN文库 参考文献: 考虑柔性负荷的综合能源系统低碳经济优化调度_薛开阳 考虑用户侧柔性负荷的 ...

  4. Java外接Matlab程序(详细步骤)

    检查Matlab中JDK版本和自己的JDK版本是否一致,不一致需要调整 步骤1:创建Matlab函数,函数文件名computeAdd.m,函数功能为返回两数相加之和. function result ...

  5. matlab中有解耦指令吗,powertrain-mounting_Opti 发动机悬置系统解耦率、固有频率以及参数优化程序 matlab 266万源代码下载- www.pudn.com...

    文件名称: powertrain-mounting_Opti下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 397 KB 上传时间: 2014-02-12 ...

  6. PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序

    PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序 [含风电.光伏.微型燃机.储能蓄电池.燃料电池] 参考文献:基于改进粒子群算法的微电网优化调度 摘 要:当今全球普遍面临着能源 ...

  7. 基于双层优化的微电网系统规划设计方法matlab程序(yalmip+cplex)

    基于双层优化的微电网系统规划设计方法matlab程序(yalmip+cplex) 参考文献:基于双层优化的微电网系统规划设计方法 摘要:规划设计是微电网系统核心技术体系之一.从分布式电源的综合优化(组 ...

  8. 用matlab进行批量优化,多目标优化实例和matlab程序

    <多目标优化实例和matlab程序>由会员分享,可在线阅读,更多相关<多目标优化实例和matlab程序(2页珍藏版)>请在人人文库网上搜索. 1.NSGA-II 算法实例目前的 ...

  9. 基于遗传算法的微电网经济运行优化matlab程序

    基于遗传算法的微电网经济运行优化matlab程序 摘 要: 微电网作为智能电网的一部分,是分布式电源接入电网的一种有效手段,微电网经济运行是其中一个重要研究方面.考察微电网经济性,通常是从最小运行成本 ...

最新文章

  1. pytorch 归一化与反归一化
  2. java 状态迁移图_kafka 实战笔记
  3. 【C语言】第九章 复杂数据类型与结构体 题解
  4. Oracle 11gR2 ORA-12638 身份证明检索失败解决方法
  5. Python中直接查看对象值和使用print()输出的区别
  6. python actor_Python定义一个Actor任务
  7. C++ container member map
  8. easyswoole验证码的使用
  9. SAE J1939协议读取车辆故障码
  10. ubuntu18.04安装中文输入法ibus
  11. 华为管理学案例分析_华为战略管理案例分析.docx
  12. Powerdesigner下载安装
  13. python实现时序异常检测_时序预测 01 - 异常检测 Smoothed z-score algorithm 标准化的一些实践、调参总结 -Python/pandas/numpy...
  14. CSS3模拟小仓鼠一直奔跑的动画特效
  15. 服务器下多网站设置,网站配置多个服务器
  16. 【树莓派基础小实验笔记】1. 点亮LED二极管
  17. matlab绘图实验六,matlab 实验一 特殊函数与图形
  18. Linux·内核编译错误
  19. 【Nginx 流量控制】控制一秒处理多少请求
  20. swift json

热门文章

  1. Microsoft Remote Desktop远程连接Ubuntu 22.04桌面
  2. 国内个人免费在SCI、IEEE等数据库下载文献方法
  3. 关于检测浏览器是否支持flash的js代码
  4. windows10ftp搭建,实现主机与虚拟机文件传输文件,以及解决FTP文件夹错误,无法与服务器建立连接。
  5. Java设计模式:访问者模式,同一数据对象,不同访问者索取目的不同
  6. 每天记录学习的新知识 :Navigation
  7. 无线网络渗透-1: 802.11 AP扫描
  8. android操作系统的开发语言组成
  9. 2018年统计用区划代码和城乡划分代码(截止2018年10月31日)
  10. Sql Server 按姓氏笔画排序