Умножить ядро и функцию
Учитывая действительное ядро 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
учебный класс. Это обеспечит сбор всех его параметров при оптимизации цели.
Надеюсь, что это помогает вам.