鉴于高斯过程中的内核,是否有可能知道从先前分布中抽取的函数的形状而不首先采样?
答案 0 :(得分:0)
我认为了解先前函数形状的最佳方法是绘制它们。这是一维的例子:
这些是来自GP先前的样本(平均值为0,由平方指数内核引起的协方差矩阵)。正如你所看到的那样,它们是平滑的,通常它会让人感觉如何摆弄"摇摇晃晃的"他们是。另请注意,在多维度的情况下,每个维度看起来都会像这样。
这是我使用的完整代码,您可以自由编写自己的内核或调整参数以查看它对样本的影响:
import numpy as np
import matplotlib.pyplot as pl
def kernel(a, b, gamma=0.1):
""" GP squared exponential kernel """
sq_dist = np.sum(a**2, 1).reshape(-1, 1) + np.sum(b**2, 1) - 2*np.dot(a, b.T)
return np.exp(-0.5 * (1 / gamma) * sq_dist)
n = 300 # number of points.
m = 10 # number of functions to draw.
s = 1e-6 # noise variance.
X = np.linspace(-5, 5, n).reshape(-1, 1)
K = kernel(X, X)
L = np.linalg.cholesky(K + s * np.eye(n))
f_prior = np.dot(L, np.random.normal(size=(n, m)))
pl.figure(1)
pl.clf()
pl.plot(X, f_prior)
pl.title('%d samples from the GP prior' % m)
pl.axis([-5, 5, -3, 3])
pl.show()