我正在试验 GPy 如何捕获底层过程。我使用已知的rbf超参数模拟了许多高斯过程,并试图查看 GPy 模型是否对超参数做出有意义的推断。
起点很简单,模拟无噪音:
import numpy as np
import GPy
def arbKer(var, l): # Arbitrary kernel with variance and lengthscale
# RBF form
kernel = GPy.kern.RBF(input_dim=1, variance=var, lengthscale=l)
return kernel
def priorGPclean(X, var, l, nsamp, show=True): # Simulate a bunch of noiseless/clean kernel
# GP controlled noise drawn from a covariance matrix generated from kernel
k = arbKer(var, l)
mu = np.zeros((len(X))) # vector of the means
C = k.K(X,X) # covariance matrix
Y = np.random.multivariate_normal(mu,C,nsamp)
Y = np.transpose(Y)
return (Y)
X = np.random.rand(100)[:,None]; X=X*15-5
Y = priorGPclean(X, 4.5, 2., nsamp=1, show=False)
现在,很明显,根据下图,即使是来自这个模拟 GP 曲线的非常密集的采样也不会导致推断更接近已知方差:var = 4.5
,这种模式怎么会导致推断var=8.5
?我用不同的随机初始化重新运行了代码,但仍然得到了相同的不合理值。
图像可以在这里看到。
谁能给我一个提示?
非常感谢!