From f81eca75e67c88be3cdc5c30844f95be9a58d6e9 Mon Sep 17 00:00:00 2001 From: "jannik.luethje" <=> Date: Thu, 11 Apr 2024 15:48:57 +0200 Subject: [PATCH] Release version 0.0.11 --- dep/mcpp | 2 +- gaussian process/training/python/utils.py | 25 +++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/dep/mcpp b/dep/mcpp index 69a763e..fb61bbb 160000 --- a/dep/mcpp +++ b/dep/mcpp @@ -1 +1 @@ -Subproject commit 69a763e55faf6557af0839a06fa82eb919b062e4 +Subproject commit fb61bbb8733b23a0b48cb86f016429594ee062c5 diff --git a/gaussian process/training/python/utils.py b/gaussian process/training/python/utils.py index 7831b30..2caa3ae 100644 --- a/gaussian process/training/python/utils.py +++ b/gaussian process/training/python/utils.py @@ -4,6 +4,7 @@ from pathlib import Path import json import torch from gpytorch.means import ConstantMean, ZeroMean +from gpytorch.likelihoods import GaussianLikelihood, FixedNoiseGaussianLikelihood # Import MeLOn import maingopy.melonpy as melonpy # If you are not getting MeLOn through MAiNGO, use: @@ -51,8 +52,16 @@ def generate_melon_gp_object(GP_model, GP_likelihood, X, y, matern, scaler): noise = GP_likelihood.noise.detach().numpy() cov_mat = GP_model.covar_module(X) - gp_data.K = cov_mat.numpy() + noise * np.eye(N=gp_data.nX) - gp_data.invK = np.linalg.inv(gp_data.K) + + if isinstance(GP_likelihood, GaussianLikelihood): + K_numpy = cov_mat.numpy() + noise * np.eye(N=gp_data.nX) + elif isinstance(GP_likelihood, FixedNoiseGaussianLikelihood): + K_numpy = cov_mat.numpy() + np.diag(noise) + else: + raise Exception(f'Likelihood {type(GP_likelihood)} currently not supported.') + + gp_data.K = K_numpy + gp_data.invK = np.linalg.inv(K_numpy) gp_data.matern = matern kernel_data = melonpy.KernelData() @@ -106,8 +115,16 @@ def save_model_to_json(filepath, filename, GP_model, GP_likelihood, X, y, matern noise = GP_likelihood.noise.detach().numpy() cov_mat = GP_model.covar_module(X).numpy() - prediction_parameters["K"] = (cov_mat + noise * np.eye(N=prediction_parameters["nX"])).tolist() - prediction_parameters["invK"] = np.linalg.inv(cov_mat + noise * np.eye(N=prediction_parameters["nX"])).tolist() + + if isinstance(GP_likelihood, GaussianLikelihood): + K_numpy = cov_mat.numpy() + noise * np.eye(N=prediction_parameters["nX"]) + elif isinstance(GP_likelihood, FixedNoiseGaussianLikelihood): + K_numpy = cov_mat.numpy() + np.diag(noise) + else: + raise Exception(f'Likelihood {type(GP_likelihood)} currently not supported.') + + prediction_parameters["K"] = K_numpy.tolist() + prediction_parameters["invK"] = np.linalg.inv(K_numpy).tolist() if not 'input' in scalers or not isinstance(scalers['input'], MinMaxScaler): raise Exception("There has to be an inputscaler which is a scikit-learn MinMaxScaler instance") -- GitLab