def get_estimated_mean_and_std(gp: GaussianProcess, array_samples_parameters, X): functions_samples = [] X = X.reshape((-1, gp.array_dataset.shape[1])) for num_samples, sample_gp_parameter in enumerate( array_samples_parameters): gp.set_kernel_parameters(*sample_gp_parameter.flatten()) functions_samples.append(gp.get_sample(X)) yield gp.get_sample(X) if num_samples % 50 == 0: print(f'num samples: {num_samples} \r')
def plot_vi_gp(obj, mu, Sigma, X, y): gp = GaussianProcess(GaussianLinearKernel(0., 0., 0., 0., 0., 0.), X, y) xlim, = obj.boundaries x_gt = np.linspace(xlim[0], xlim[1], 100) xx = np.linspace(xlim[0] - 2, xlim[1] + 2, 200) plt.plot(x_gt, obj.evaluate_without_noise(x_gt), c='c') plt.title(f"Gaussian Process Regression") mu = mu.flatten() for _ in range(500): sample_gp_parameter = onp.random.multivariate_normal(mu, Sigma) gp.set_kernel_parameters(*sample_gp_parameter) function_sample = gp.get_sample(xx.reshape((-1, 1))) plt.plot(xx, function_sample, alpha=0.3, c='C0') plt.scatter(gp.array_dataset, gp.array_objective_function_values, c='m', marker="+", zorder=1000, s=(30, )) plt.pause(0.01) plt.show()