使用泊松似然的 GP 回归

问题描述

我正在尝试使用泊松似然实现 GP 回归。 我按照GPy中的例子做

poisson_likelihood = GPy.likelihoods.Poisson()
laplace_inf = GPy.inference.latent_function_inference.Laplace()
m = GPy.core.GP(X=X,Y=Y,likelihood=poisson_likelihood,inference_method=laplace_inf,kernel=kernel)
m.optimize()
#for ploting
pred_points = np.linspace(300,800,1000)[:,None]
#Predictive GP for log intensity mean and variance
f_mean,f_var = m._raw_predict(pred_points)
f_upper,f_lower = f_mean + 2*np.sqrt(f_var),f_mean - 2.*np.sqrt(f_var)
pb.figure(figsize=(10,13))
pb.plot(pred_points,np.exp(f_mean),color='blue',lw=2)
pb.fill_between(pred_points[:,0],np.exp(f_lower[:,0]),np.exp(f_upper[:,alpha=.1)
pb.errorbar(Xc.flatten(),Yc.flatten(),dyc,fmt='.',color='k',markersize=8,alpha=1.0,label='Data')

当我尝试使用 GPflow 做同样的事情时,我是通过以下方式实现的

poisson_likelihood = gpflow.likelihoods.Poisson()
m = gpflow.models.VGP((X,Y),kernel=k,num_latent_gps=1)
opt = gpflow.optimizers.Scipy()
opt_logs = opt.minimize(m.training_loss,m.trainable_variables,options=dict(maxiter=100))
#for ploting
xx = np.linspace(300,100).reshape(100,1)
mean,var = m.predict_f(xx)
plt.plot(X,Y,"kx",mew=2)
plt.plot(xx,np.exp(mean),"C0",lw=2)
plt.fill_between(
    xx[:,np.exp(mean[:,0] - 1.96 * np.sqrt(var[:,0])),0] + 1.96 * np.sqrt(var[:,color="C0",alpha=0.2,)

当我使用 GP 流实现这个时,超参数没有从初始化值移动。 另外,我得到了非常不同的结果,我做错了什么吗?

Result with GPflow

Result with GPy

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...