1

我正在尝试从之前的高斯过程中顺序采样。

问题是样本最终收敛到零或发散到无穷大。

我正在使用这里描述的基本条件

注意: kernel(X,X) 函数返回具有等距噪声的平方指数核。

这是我的代码:

n = 32

x_grid = np.linspace(-5,5,n)

x_all = []
y_all = []
for x in x_grid:
    x_all = [x] + x_all
    X = np.array(x_all).reshape(-1, 1)
    # Mean and covariance of the prior
    mu = np.zeros((X.shape), np.float)
    cov = kernel(X, X)
    if len(mu)==1: # first sample is not conditional
        y = np.random.randn()*cov + mu        
    else:
        # condition on all previous samples
        u1 = mu[0]
        u2 = mu[1:]
        y2 = np.atleast_2d(np.array(y_all)).T
        C11 = cov[:1,:1] # dependent sample
        C12 = np.atleast_2d(cov[0,1:])
        C21 = np.atleast_2d(cov[1:,0]).T
        C22 = np.atleast_2d(cov[1:, 1:])
        C22_ = la.inv(C22)
        u = u1 + np.dot(C12, np.dot(C22_, (y2 - u2)))
        C22_xC21 = np.dot(C22_, C21)
        C_minus = np.dot(C12, C22_xC21) # this weirdly becomes larger than C!
        C = C11 - C_minus        
        y = u + np.random.randn()*C
    y_all = [y.flatten()[0]] + y_all

这是一个包含 32 个样本的示例,其中它崩溃了:

在此处输入图像描述

这是一个包含 34 个样本的示例,其中它会爆炸:

在此处输入图像描述

(对于这个特定的内核,34 是(或更多)样本开始发散的样本数。

4

0 回答 0