def train_phys_gp(pch, pch_phys, snr, snr_phys, pch_pred): pch = pch.reshape(-1, 1) # needed for SK learn input pch_phys = pch_phys.reshape(-1, 1) pch_pred = pch_pred.reshape(-1, 1) snr = snr.reshape(-1, 1) snr_phys = snr_phys.reshape(-1, 1) kernel_sk = C(1, (1e-5, 1e5)) * RBF(1, (1e-8, 1e5)) + W(1, (1e-5, 1e5)) gpr_phys = GaussianProcessRegressor(kernel=kernel_sk, n_restarts_optimizer=20, normalize_y=True) gpr_phys.fit_phys(pch, pch_phys, snr, snr_phys) mu_sk_phys, std_sk_phys = gpr_phys.predict(pch_pred, return_std=True) std_sk_phys = np.reshape(std_sk_phys, (np.size(std_sk_phys), 1)) theta_phys = gpr_phys.kernel_.theta lml_phys = gpr_phys.log_marginal_likelihood() return mu_sk_phys, std_sk_phys, theta_phys, lml_phys