乘以内核和函数

时间:2019-03-06 17:35:46

标签: gpflow

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

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

也是有效的内核。

能否请您告诉我如何在gpflow中实现此属性?

谢谢

1 个答案:

答案 0 :(得分: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类。这样可以确保在优化目标时收集其所有参数。

希望这对您有所帮助。