Умножить ядро ​​и функцию

Учитывая действительное ядро ​​k_1(x, x') и (параметрическую) функцию f(x), следует, что:

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

также является допустимым ядром.

Не могли бы вы сказать мне, как реализовать это свойство в gpflow?

Спасибо

1 ответ

Самый простой способ добиться этого в 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's Parameterized учебный класс. Это обеспечит сбор всех его параметров при оптимизации цели.

Надеюсь, что это помогает вам.

Другие вопросы по тегам