1

我想在 GPy 中执行 coregionalized 回归,但是我使用的是伯努利似然,然后作为高斯估计,我使用拉普拉斯推理。PjkRbf下面的代码显示了我通常如何使用此设置(使用我的自定义内核)运行单输出 GP :

likelihood  = GPy.likelihoods.Bernoulli()
laplace_inf = GPy.inference.latent_function_inference.Laplace()
kernel      = GPy.kern.PjkRbf(X.shape[1])
m = GPy.core.GP(X, Y, kernel=kernel, likelihood=likelihood, inference_method=laplace_inf)

现在我正在尝试运行相同的设置,但作为多输出。这是我一直无法做到的。

我已经尝试使用GPCoregionalizedRegression带有 ICM 内核的类,如下面的代码所示:

likelihood1  = GPy.likelihoods.Bernoulli()
likelihood2 = GPy.likelihoods.Bernoulli()
laplace_inf = GPy.inference.latent_function_inference.Laplace()
K = GPy.kern.PjkRbf(X.shape[1])
icm = GPy.util.multioutput.ICM(input_dim=2,num_outputs=2,kernel=K)
m = GPy.models.GPCoregionalizedRegression([X,X],[Y1,Y2],
                                          kernel=icm, 
                                          likelihoods_list=[likelihood1, likelihood2])

运行此代码会引发 AssertionError,并带有很长的堆栈跟踪,但最后一部分显示以下内容。可能性不能断言为高斯。

~\Anaconda3\lib\site-packages\GPy\likelihoods\mixed_noise.py in gaussian_variance(self, Y_metadata)
     22 
     23     def gaussian_variance(self, Y_metadata):
---> 24         assert all([isinstance(l, Gaussian) for l in self.likelihoods_list])
     25         ind = Y_metadata['output_index'].flatten()
     26         variance = np.zeros(ind.size)

AssertionError: 

这是因为我无法将拉普拉斯推理传递GPCoregionalizedRegression模型。

任何人都可以就如何解决这个问题提供建议,或者如果有不同的模型我可以使用伯努利似然法和拉普拉斯推理方法来执行多输出回归?

4

1 回答 1

0

问题不在于您不能将拉普拉斯推理传递给GPCoregionalizedRegression,而是您的GPy.likelihoods.Bernoulli可能性列表不受支持。

在它读取的文档中

大多数似然类直接继承自 GPy.likelihoods.likelihood,尽管 GPy.likelihoods.multioutput_likelihood 使用了中间类 GPy.likelihoods.mixed_noise.MixedNoise。

由于您设置了多输出问题,因此潜在的可能性是一个GPy.likelihoods.mixed_noise.MixedNoise对象,它在 GPy 中只支持GPy.likelihoods.Gaussian对象列表。

在源代码中比较这里

class MixedNoise(Likelihood):
def __init__(self, likelihoods_list, name='mixed_noise'):
    #NOTE at the moment this likelihood only works for using a list of gaussians
    super(Likelihood, self).__init__(name=name)

因此,中的assert语句\GPy\likelihoods\mixed_noise.py检查likelihood_list项目是否Gaussian失败,如您发布的堆栈跟踪所示。

截至目前,这仍未实施。我相信GPy相对于它的继任者来说,on 的开发被认为是次要的GPflow。那里(根据示例中使用的代码),在我看来,相应函数中的似然类型没有限制(即使该示例再次仅使用高斯似然)

于 2021-10-26T13:27:51.857 回答