java版 高斯过程,三维高斯过程回归

我对高斯过程和python也很陌生 . 我试图为3d模型生成一个非常简单的高斯回归 .

我有一个非常简单的函数Python代码:

import numpy as np

def exponential_cov(x, y, params):

return params[0] * np.exp( -0.5 * params[1] * np.subtract.outer(x, y)**2)

def conditional(x_new, x, y, params):

B = exponential_cov(x_new, x, params)

C = exponential_cov(x, x, params)

A = exponential_cov(x_new, x_new, params)

mu = np.linalg.inv(C).dot(B.T).T.dot(y)

sigma = A - B.dot(np.linalg.inv(C).dot(B.T))

return(mu.squeeze(), sigma.squeeze())

import matplotlib.pylab as plt

# GP PRIOR

tu = [1, 10]

Si_tu = exponential_cov(0, 0, tu)

xpts = np.arange(-5, 5, step=0.01)

plt.errorbar(xpts, np.zeros(len(xpts)), yerr=Si_tu, capsize=0, color='#95daed', alpha=0.5, label='error') #error

plt.plot(xpts, np.zeros(len(xpts)), linestyle='dashed', color='#3105b2', linewidth=2.5, label='mu'); #mu

# GP FOR 1ST POINT

x = [1.]

y = np.sin(x)+np.cos(np.sqrt(15)*x)

Si_1 = exponential_cov(x, x, tu)

def predict(x, data, kernel, params, sigma, t):

k = [kernel(x, y, params) for y in data]

Sinv = np.linalg.inv(sigma)

y_pred = np.dot(k, Sinv).dot(t)

sigma_new = kernel(x, x, params) - np.dot(k, Sinv).dot(k)

return y_pred, sigma_new

x_pred = np.linspace(-5, 5, 1000) #change step here!!

print "x_pred="

print(x_pred)

predictions = [predict(i, x, exponential_cov, tu, Si_1, y) for i in x_pred]

y_pred, sigmas = np.transpose(predictions)

print "y_pred ="

print(y_pred )

print "sigmas ="

print(sigmas )

# GP FOR 2ND POINT

m, s = conditional([-1], x, y, tu)

y2 = np.sin(-1)+np.cos(np.sqrt(15)*(-1))

x.append(-1)

y=np.append(y,y2)

Si_2 = exponential_cov(x, x, tu)

predictions = [predict(i, x, exponential_cov, tu, Si_2, y) for i in x_pred]

y_pred, sigmas = np.transpose(predictions)

print "y_pred ="

print(y_pred )

print "sigmas ="

print(sigmas )

通过使用这段代码,我得到函数 np.sin(x) + np.cos(np.sqrt(15) * x) 的非常好的拟合结果,但我真正想做的是为函数 Z = np.sin(2*X) * np.cos(2*Y) / 2 尝试相同的高斯过程 .

我知道这个想法基本相同,但是我无法将我的python代码调整到[x,y]输入以获得z .

我将非常感谢您的帮助,提示或链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值