并不是其实我不太明白问题,如何取样一个GP,意思是如何实际操作得到一个GP样本么?那么下面是一种方法的步骤:
1.给定mean和covariance(kernel) function,比如最简单的mean默认为0,,kernel = Standard Exponential(SE)。
2.给定mean以及kernel中的hyperparameter的初始值,比如,mean=0,就不用给,kernel =SE, 需要给出其中的
(这个表述跟gpml一致,Documentation for GPML Matlab CodeDocumentation for GPML Matlab Code)。
3. 给定想要产生的样本函数定义域,比如问题图中的范围[-5,5],如果是计算程序的,自然还涉及到取多少个点,比如在给定的[-5,5]中取均匀的100个点。
4.有了kernel,有了hyperparameter的初始值,有个具体的样本函数的范围和点,那么我们就可以计算出对应的kernel的covariance matrix,记为C。
5.对C进行SVD分解,
6. 从标准正态分布中产生n个点的样本,记为
7.一个给定kernel类型,给定hyperparameter的初始值以及具体的样本函数的input点,的GP,
.这个就是一个GP的样本。
如果要问为什么这个是个GP,那么根据这个只要计算mean和covariance就好,原因在于下面这个定理(详见https://arxiv.org/pdf/1605.07906.pdf)
所以,
,
,因为可以说明这就是以上GP的一个样本。
简单的给个基于gpml工具包的函数代码(代码需要先加载gpml的startup):- function z_gp = gp_gpml_sample(cov, x, hyp)n = size(x,1);C = feval(cov{:},hyp,x);[u,s,~] = svd(C); %SVD decomposition, C=usv'gn = randn(n,1); % Genearate a sample from standard normal distributionz_gp = u*sqrt(s)*gn;
复制代码 当然这只是一种生成GP样本的方法,并不是唯一的,只要最后可以验证定理中的指出的mean和covariance就好!
至于后面的连续不连续的问题,我更是不明白。这些函数理论上都是连续,而通过描点画的图自然不是连续的啦。
|