1

给定一个有效的内核 k_1(x, x') 和一个(参数)函数 f(x),可以得出:

k_2(x, x') = f(x) k_1(x, x') f(x'),

也是一个有效的内核。

你能告诉我如何在 gpflow 中实现这个属性吗?

谢谢

4

1 回答 1

3

在 GPflow 中实现这一点的最简单方法是创建一个继承自 的新类,Kernel它添加了您想要的功能。您需要的代码类似于:

import gpflow
from typing import Callable

class MyKernel(gpflow.Kernel):

    def __init__(self, input_dim, base_kernel: gpflow.Kernel, function: Callable):
        super().__init__(input_dim)
        self.base_kernel = base_kernel
        self.function = function

    def K(self, X, X2=None):
        if X2 is None:
            X2 = X
        return self.function(X) * self.base_kernel.K(X, X2) * self.function(X2)

    def Kdiag(self, X):
        return self.function(X)**2 * self.base_kernel.Kdiag(X, X2)

如果您还想优化参数,self.function您将需要确保self.function从 gpflow 的Parameterized类继承。这将确保在优化目标时收集其所有参数。

希望这可以帮助你。

于 2019-03-12T14:40:53.460 回答