QEP Regression with Uncertain Inputs¶
Introduction¶
In this notebook, we’re going to demonstrate one way of dealing with uncertainty in our training data. Let’s say that we’re collecting training data that models the following function.
However, now assume that we’re a bit uncertain about our features. In particular, we’re going to assume that every x_i value is not a point but a distribution instead. E.g.
Using a distributional kernel to deal with uncertain inputs¶
Rather than using a variational method (see the QEP Regression with Uncertian Inputs tutorial in the variational examples), if we explicitly know the type of uncertainty in our inputs we can pass that into our kernel.
More specifically, assuming Gaussian inputs, we will compute the symmetrized KL divergence between the Q-exponential inputs.
[1]:
import math
import torch
import tqdm
import qpytorch
from matplotlib import pyplot as plt
%matplotlib inline
%load_ext autoreload
%autoreload 2
[2]:
# Training data is 100 points in [0,1] inclusive regularly spaced
train_x_mean = torch.linspace(0, 1, 20)
# We'll assume the variance shrinks the closer we get to 1
train_x_stdv = torch.linspace(0.03, 0.01, 20)
# True function is sin(2*pi*x) with Gaussian noise
train_y = torch.sin(train_x_mean * (2 * math.pi)) + torch.randn(train_x_mean.size()) * 0.2
To effectively pass in the training distributional data, we will need to stack the mean and log variances.
[3]:
train_x_distributional = torch.stack((train_x_mean, (train_x_stdv**2).log()), dim=1)
[4]:
f, ax = plt.subplots(1, 1, figsize=(8, 3))
ax.errorbar(train_x_mean, train_y, xerr=(train_x_stdv * 2), fmt="k*", label="Train Data")
ax.legend()
[4]:
<matplotlib.legend.Legend at 0x124cb7b20>
We train the hyperparameters of the resulting distributional GP via type-II gradient descent, as is standard in many settings. We could also do fully Bayesian inference.
[5]:
from qpytorch.models import ExactQEP
from qpytorch.kernels import QExponentialSymmetrizedKLKernel, ScaleKernel
from qpytorch.means import ConstantMean
POWER =1.0
class ExactQEPModel(ExactQEP):
def __init__(self, train_x, train_y, likelihood):
super(ExactQEPModel, self).__init__(train_x, train_y, likelihood)
self.power = torch.tensor(POWER)
self.mean_module = ConstantMean()
self.covar_module = ScaleKernel(QExponentialSymmetrizedKLKernel())
def forward(self, x):
mean_x = self.mean_module(x)
covar_x = self.covar_module(x)
return qpytorch.distributions.MultivariateQExponential(mean_x, covar_x, power=self.power)
# initialize likelihood and model
likelihood = qpytorch.likelihoods.QExponentialLikelihood(power=torch.tensor(POWER))
model = ExactQEPModel(train_x_distributional, train_y, likelihood)
[6]:
# this is for running the notebook in our testing framework
import os
smoke_test = ('CI' in os.environ)
training_iter = 2 if smoke_test else 500
# Find optimal model hyperparameters
model.train()
likelihood.train()
# Use the adam optimizer
optimizer = torch.optim.Adam(model.parameters(), lr=0.25) # Includes QExponentialLikelihood parameters
# "Loss" for QEPs - the marginal log likelihood
mll = qpytorch.mlls.ExactMarginalLogLikelihood(likelihood, model)
for i in range(training_iter):
# Zero gradients from previous iteration
optimizer.zero_grad()
# Output from model
output = model(train_x_distributional)
# Calc loss and backprop gradients
loss = -mll(output, train_y)
loss.backward()
print('Iter %d/%d - Loss: %.3f lengthscale: %.3f noise: %.3f' % (
i + 1, training_iter, loss.item(),
model.covar_module.base_kernel.lengthscale.item(),
model.likelihood.noise.item()
))
optimizer.step()
Iter 1/500 - Loss: 1.597 lengthscale: 0.693 noise: 0.693
Iter 2/500 - Loss: 1.589 lengthscale: 0.826 noise: 0.576
Iter 3/500 - Loss: 1.508 lengthscale: 0.973 noise: 0.474
Iter 4/500 - Loss: 1.459 lengthscale: 1.133 noise: 0.387
Iter 5/500 - Loss: 1.418 lengthscale: 1.302 noise: 0.313
Iter 6/500 - Loss: 1.357 lengthscale: 1.483 noise: 0.251
Iter 7/500 - Loss: 1.290 lengthscale: 1.678 noise: 0.200
Iter 8/500 - Loss: 1.232 lengthscale: 1.884 noise: 0.158
Iter 9/500 - Loss: 1.181 lengthscale: 2.102 noise: 0.125
Iter 10/500 - Loss: 1.127 lengthscale: 2.327 noise: 0.098
Iter 11/500 - Loss: 1.066 lengthscale: 2.561 noise: 0.077
Iter 12/500 - Loss: 1.006 lengthscale: 2.800 noise: 0.060
Iter 13/500 - Loss: 0.952 lengthscale: 3.045 noise: 0.046
Iter 14/500 - Loss: 0.904 lengthscale: 3.294 noise: 0.036
Iter 15/500 - Loss: 0.857 lengthscale: 3.546 noise: 0.028
Iter 16/500 - Loss: 0.807 lengthscale: 3.801 noise: 0.021
Iter 17/500 - Loss: 0.758 lengthscale: 4.058 noise: 0.017
Iter 18/500 - Loss: 0.715 lengthscale: 4.316 noise: 0.013
Iter 19/500 - Loss: 0.677 lengthscale: 4.574 noise: 0.010
Iter 20/500 - Loss: 0.641 lengthscale: 4.831 noise: 0.008
Iter 21/500 - Loss: 0.605 lengthscale: 5.087 noise: 0.006
Iter 22/500 - Loss: 0.572 lengthscale: 5.342 noise: 0.005
Iter 23/500 - Loss: 0.544 lengthscale: 5.595 noise: 0.004
Iter 24/500 - Loss: 0.521 lengthscale: 5.845 noise: 0.003
Iter 25/500 - Loss: 0.501 lengthscale: 6.092 noise: 0.002
Iter 26/500 - Loss: 0.483 lengthscale: 6.335 noise: 0.002
Iter 27/500 - Loss: 0.467 lengthscale: 6.573 noise: 0.002
Iter 28/500 - Loss: 0.455 lengthscale: 6.807 noise: 0.001
Iter 29/500 - Loss: 0.445 lengthscale: 7.034 noise: 0.001
Iter 30/500 - Loss: 0.437 lengthscale: 7.256 noise: 0.001
Iter 31/500 - Loss: 0.431 lengthscale: 7.471 noise: 0.001
Iter 32/500 - Loss: 0.425 lengthscale: 7.679 noise: 0.001
Iter 33/500 - Loss: 0.420 lengthscale: 7.880 noise: 0.001
Iter 34/500 - Loss: 0.416 lengthscale: 8.073 noise: 0.001
Iter 35/500 - Loss: 0.414 lengthscale: 8.260 noise: 0.001
Iter 36/500 - Loss: 0.411 lengthscale: 8.438 noise: 0.000
Iter 37/500 - Loss: 0.409 lengthscale: 8.609 noise: 0.000
Iter 38/500 - Loss: 0.407 lengthscale: 8.773 noise: 0.000
Iter 39/500 - Loss: 0.405 lengthscale: 8.929 noise: 0.000
Iter 40/500 - Loss: 0.404 lengthscale: 9.078 noise: 0.000
Iter 41/500 - Loss: 0.402 lengthscale: 9.221 noise: 0.000
Iter 42/500 - Loss: 0.401 lengthscale: 9.356 noise: 0.000
Iter 43/500 - Loss: 0.400 lengthscale: 9.486 noise: 0.000
Iter 44/500 - Loss: 0.400 lengthscale: 9.609 noise: 0.000
Iter 45/500 - Loss: 0.399 lengthscale: 9.726 noise: 0.000
Iter 46/500 - Loss: 0.398 lengthscale: 9.839 noise: 0.000
Iter 47/500 - Loss: 0.398 lengthscale: 9.946 noise: 0.000
Iter 48/500 - Loss: 0.397 lengthscale: 10.048 noise: 0.000
Iter 49/500 - Loss: 0.397 lengthscale: 10.145 noise: 0.000
Iter 50/500 - Loss: 0.396 lengthscale: 10.238 noise: 0.000
Iter 51/500 - Loss: 0.396 lengthscale: 10.327 noise: 0.000
Iter 52/500 - Loss: 0.395 lengthscale: 10.412 noise: 0.000
Iter 53/500 - Loss: 0.395 lengthscale: 10.493 noise: 0.000
Iter 54/500 - Loss: 0.395 lengthscale: 10.571 noise: 0.000
Iter 55/500 - Loss: 0.394 lengthscale: 10.645 noise: 0.000
Iter 56/500 - Loss: 0.394 lengthscale: 10.716 noise: 0.000
Iter 57/500 - Loss: 0.394 lengthscale: 10.784 noise: 0.000
Iter 58/500 - Loss: 0.394 lengthscale: 10.849 noise: 0.000
Iter 59/500 - Loss: 0.393 lengthscale: 10.911 noise: 0.000
Iter 60/500 - Loss: 0.393 lengthscale: 10.971 noise: 0.000
Iter 61/500 - Loss: 0.393 lengthscale: 11.028 noise: 0.000
Iter 62/500 - Loss: 0.393 lengthscale: 11.083 noise: 0.000
Iter 63/500 - Loss: 0.392 lengthscale: 11.136 noise: 0.000
Iter 64/500 - Loss: 0.392 lengthscale: 11.187 noise: 0.000
Iter 65/500 - Loss: 0.392 lengthscale: 11.236 noise: 0.000
Iter 66/500 - Loss: 0.392 lengthscale: 11.284 noise: 0.000
Iter 67/500 - Loss: 0.392 lengthscale: 11.330 noise: 0.000
Iter 68/500 - Loss: 0.391 lengthscale: 11.375 noise: 0.000
Iter 69/500 - Loss: 0.391 lengthscale: 11.418 noise: 0.000
Iter 70/500 - Loss: 0.391 lengthscale: 11.460 noise: 0.000
Iter 71/500 - Loss: 0.391 lengthscale: 11.501 noise: 0.000
Iter 72/500 - Loss: 0.391 lengthscale: 11.542 noise: 0.000
Iter 73/500 - Loss: 0.390 lengthscale: 11.581 noise: 0.000
Iter 74/500 - Loss: 0.390 lengthscale: 11.619 noise: 0.000
Iter 75/500 - Loss: 0.390 lengthscale: 11.656 noise: 0.000
Iter 76/500 - Loss: 0.390 lengthscale: 11.693 noise: 0.000
Iter 77/500 - Loss: 0.390 lengthscale: 11.728 noise: 0.000
Iter 78/500 - Loss: 0.390 lengthscale: 11.763 noise: 0.000
Iter 79/500 - Loss: 0.389 lengthscale: 11.797 noise: 0.000
Iter 80/500 - Loss: 0.389 lengthscale: 11.831 noise: 0.000
Iter 81/500 - Loss: 0.389 lengthscale: 11.864 noise: 0.000
Iter 82/500 - Loss: 0.389 lengthscale: 11.896 noise: 0.000
Iter 83/500 - Loss: 0.389 lengthscale: 11.928 noise: 0.000
Iter 84/500 - Loss: 0.388 lengthscale: 11.960 noise: 0.000
Iter 85/500 - Loss: 0.388 lengthscale: 11.991 noise: 0.000
Iter 86/500 - Loss: 0.388 lengthscale: 12.022 noise: 0.000
Iter 87/500 - Loss: 0.388 lengthscale: 12.052 noise: 0.000
Iter 88/500 - Loss: 0.387 lengthscale: 12.083 noise: 0.000
Iter 89/500 - Loss: 0.387 lengthscale: 12.113 noise: 0.000
Iter 90/500 - Loss: 0.387 lengthscale: 12.143 noise: 0.000
Iter 91/500 - Loss: 0.387 lengthscale: 12.172 noise: 0.000
Iter 92/500 - Loss: 0.386 lengthscale: 12.202 noise: 0.000
Iter 93/500 - Loss: 0.386 lengthscale: 12.231 noise: 0.000
Iter 94/500 - Loss: 0.386 lengthscale: 12.261 noise: 0.000
Iter 95/500 - Loss: 0.386 lengthscale: 12.290 noise: 0.000
Iter 96/500 - Loss: 0.385 lengthscale: 12.319 noise: 0.000
Iter 97/500 - Loss: 0.385 lengthscale: 12.348 noise: 0.000
Iter 98/500 - Loss: 0.385 lengthscale: 12.378 noise: 0.000
Iter 99/500 - Loss: 0.384 lengthscale: 12.407 noise: 0.000
Iter 100/500 - Loss: 0.384 lengthscale: 12.436 noise: 0.000
Iter 101/500 - Loss: 0.384 lengthscale: 12.465 noise: 0.000
Iter 102/500 - Loss: 0.383 lengthscale: 12.495 noise: 0.000
Iter 103/500 - Loss: 0.383 lengthscale: 12.525 noise: 0.000
Iter 104/500 - Loss: 0.383 lengthscale: 12.554 noise: 0.000
Iter 105/500 - Loss: 0.382 lengthscale: 12.584 noise: 0.000
Iter 106/500 - Loss: 0.382 lengthscale: 12.614 noise: 0.000
Iter 107/500 - Loss: 0.382 lengthscale: 12.645 noise: 0.001
Iter 108/500 - Loss: 0.381 lengthscale: 12.676 noise: 0.001
Iter 109/500 - Loss: 0.381 lengthscale: 12.707 noise: 0.001
Iter 110/500 - Loss: 0.381 lengthscale: 12.738 noise: 0.001
Iter 111/500 - Loss: 0.380 lengthscale: 12.769 noise: 0.001
Iter 112/500 - Loss: 0.380 lengthscale: 12.801 noise: 0.001
Iter 113/500 - Loss: 0.380 lengthscale: 12.834 noise: 0.001
Iter 114/500 - Loss: 0.379 lengthscale: 12.866 noise: 0.001
Iter 115/500 - Loss: 0.379 lengthscale: 12.899 noise: 0.001
Iter 116/500 - Loss: 0.379 lengthscale: 12.933 noise: 0.001
Iter 117/500 - Loss: 0.378 lengthscale: 12.966 noise: 0.001
Iter 118/500 - Loss: 0.378 lengthscale: 13.001 noise: 0.001
Iter 119/500 - Loss: 0.378 lengthscale: 13.035 noise: 0.001
Iter 120/500 - Loss: 0.378 lengthscale: 13.070 noise: 0.001
Iter 121/500 - Loss: 0.377 lengthscale: 13.105 noise: 0.001
Iter 122/500 - Loss: 0.377 lengthscale: 13.141 noise: 0.001
Iter 123/500 - Loss: 0.377 lengthscale: 13.177 noise: 0.001
Iter 124/500 - Loss: 0.377 lengthscale: 13.214 noise: 0.001
Iter 125/500 - Loss: 0.377 lengthscale: 13.251 noise: 0.001
Iter 126/500 - Loss: 0.377 lengthscale: 13.288 noise: 0.001
Iter 127/500 - Loss: 0.377 lengthscale: 13.325 noise: 0.001
Iter 128/500 - Loss: 0.376 lengthscale: 13.363 noise: 0.001
Iter 129/500 - Loss: 0.376 lengthscale: 13.401 noise: 0.001
Iter 130/500 - Loss: 0.376 lengthscale: 13.440 noise: 0.001
Iter 131/500 - Loss: 0.376 lengthscale: 13.478 noise: 0.001
Iter 132/500 - Loss: 0.376 lengthscale: 13.517 noise: 0.001
Iter 133/500 - Loss: 0.376 lengthscale: 13.556 noise: 0.001
Iter 134/500 - Loss: 0.376 lengthscale: 13.594 noise: 0.001
Iter 135/500 - Loss: 0.376 lengthscale: 13.633 noise: 0.001
Iter 136/500 - Loss: 0.376 lengthscale: 13.672 noise: 0.001
Iter 137/500 - Loss: 0.375 lengthscale: 13.712 noise: 0.001
Iter 138/500 - Loss: 0.375 lengthscale: 13.751 noise: 0.001
Iter 139/500 - Loss: 0.375 lengthscale: 13.789 noise: 0.001
Iter 140/500 - Loss: 0.375 lengthscale: 13.828 noise: 0.001
Iter 141/500 - Loss: 0.375 lengthscale: 13.867 noise: 0.001
Iter 142/500 - Loss: 0.375 lengthscale: 13.906 noise: 0.001
Iter 143/500 - Loss: 0.375 lengthscale: 13.944 noise: 0.001
Iter 144/500 - Loss: 0.375 lengthscale: 13.982 noise: 0.001
Iter 145/500 - Loss: 0.375 lengthscale: 14.020 noise: 0.001
Iter 146/500 - Loss: 0.375 lengthscale: 14.058 noise: 0.001
Iter 147/500 - Loss: 0.374 lengthscale: 14.096 noise: 0.001
Iter 148/500 - Loss: 0.374 lengthscale: 14.133 noise: 0.001
Iter 149/500 - Loss: 0.374 lengthscale: 14.170 noise: 0.001
Iter 150/500 - Loss: 0.374 lengthscale: 14.206 noise: 0.001
Iter 151/500 - Loss: 0.374 lengthscale: 14.243 noise: 0.001
Iter 152/500 - Loss: 0.374 lengthscale: 14.278 noise: 0.001
Iter 153/500 - Loss: 0.374 lengthscale: 14.314 noise: 0.001
Iter 154/500 - Loss: 0.374 lengthscale: 14.349 noise: 0.001
Iter 155/500 - Loss: 0.374 lengthscale: 14.384 noise: 0.001
Iter 156/500 - Loss: 0.374 lengthscale: 14.419 noise: 0.001
Iter 157/500 - Loss: 0.374 lengthscale: 14.453 noise: 0.001
Iter 158/500 - Loss: 0.374 lengthscale: 14.487 noise: 0.001
Iter 159/500 - Loss: 0.373 lengthscale: 14.520 noise: 0.001
Iter 160/500 - Loss: 0.373 lengthscale: 14.554 noise: 0.001
Iter 161/500 - Loss: 0.373 lengthscale: 14.587 noise: 0.001
Iter 162/500 - Loss: 0.373 lengthscale: 14.619 noise: 0.001
Iter 163/500 - Loss: 0.373 lengthscale: 14.651 noise: 0.001
Iter 164/500 - Loss: 0.373 lengthscale: 14.683 noise: 0.001
Iter 165/500 - Loss: 0.373 lengthscale: 14.715 noise: 0.001
Iter 166/500 - Loss: 0.373 lengthscale: 14.746 noise: 0.001
Iter 167/500 - Loss: 0.373 lengthscale: 14.778 noise: 0.001
Iter 168/500 - Loss: 0.373 lengthscale: 14.808 noise: 0.001
Iter 169/500 - Loss: 0.373 lengthscale: 14.839 noise: 0.001
Iter 170/500 - Loss: 0.373 lengthscale: 14.869 noise: 0.001
Iter 171/500 - Loss: 0.373 lengthscale: 14.899 noise: 0.001
Iter 172/500 - Loss: 0.373 lengthscale: 14.929 noise: 0.001
Iter 173/500 - Loss: 0.373 lengthscale: 14.959 noise: 0.001
Iter 174/500 - Loss: 0.373 lengthscale: 14.988 noise: 0.001
Iter 175/500 - Loss: 0.372 lengthscale: 15.017 noise: 0.001
Iter 176/500 - Loss: 0.372 lengthscale: 15.046 noise: 0.001
Iter 177/500 - Loss: 0.372 lengthscale: 15.075 noise: 0.001
Iter 178/500 - Loss: 0.372 lengthscale: 15.103 noise: 0.001
Iter 179/500 - Loss: 0.372 lengthscale: 15.132 noise: 0.001
Iter 180/500 - Loss: 0.372 lengthscale: 15.160 noise: 0.001
Iter 181/500 - Loss: 0.372 lengthscale: 15.188 noise: 0.001
Iter 182/500 - Loss: 0.372 lengthscale: 15.215 noise: 0.001
Iter 183/500 - Loss: 0.372 lengthscale: 15.243 noise: 0.001
Iter 184/500 - Loss: 0.372 lengthscale: 15.270 noise: 0.001
Iter 185/500 - Loss: 0.372 lengthscale: 15.297 noise: 0.001
Iter 186/500 - Loss: 0.372 lengthscale: 15.324 noise: 0.001
Iter 187/500 - Loss: 0.372 lengthscale: 15.351 noise: 0.001
Iter 188/500 - Loss: 0.372 lengthscale: 15.378 noise: 0.001
Iter 189/500 - Loss: 0.372 lengthscale: 15.404 noise: 0.001
Iter 190/500 - Loss: 0.372 lengthscale: 15.430 noise: 0.001
Iter 191/500 - Loss: 0.372 lengthscale: 15.456 noise: 0.001
Iter 192/500 - Loss: 0.372 lengthscale: 15.482 noise: 0.001
Iter 193/500 - Loss: 0.372 lengthscale: 15.508 noise: 0.001
Iter 194/500 - Loss: 0.372 lengthscale: 15.533 noise: 0.001
Iter 195/500 - Loss: 0.372 lengthscale: 15.558 noise: 0.001
Iter 196/500 - Loss: 0.372 lengthscale: 15.584 noise: 0.001
Iter 197/500 - Loss: 0.372 lengthscale: 15.608 noise: 0.001
Iter 198/500 - Loss: 0.371 lengthscale: 15.633 noise: 0.001
Iter 199/500 - Loss: 0.371 lengthscale: 15.658 noise: 0.001
Iter 200/500 - Loss: 0.371 lengthscale: 15.682 noise: 0.001
Iter 201/500 - Loss: 0.371 lengthscale: 15.706 noise: 0.001
Iter 202/500 - Loss: 0.371 lengthscale: 15.730 noise: 0.001
Iter 203/500 - Loss: 0.371 lengthscale: 15.754 noise: 0.001
Iter 204/500 - Loss: 0.371 lengthscale: 15.778 noise: 0.001
Iter 205/500 - Loss: 0.371 lengthscale: 15.801 noise: 0.001
Iter 206/500 - Loss: 0.371 lengthscale: 15.825 noise: 0.001
Iter 207/500 - Loss: 0.371 lengthscale: 15.848 noise: 0.001
Iter 208/500 - Loss: 0.371 lengthscale: 15.871 noise: 0.001
Iter 209/500 - Loss: 0.371 lengthscale: 15.894 noise: 0.001
Iter 210/500 - Loss: 0.371 lengthscale: 15.916 noise: 0.001
Iter 211/500 - Loss: 0.371 lengthscale: 15.939 noise: 0.001
Iter 212/500 - Loss: 0.371 lengthscale: 15.961 noise: 0.001
Iter 213/500 - Loss: 0.371 lengthscale: 15.983 noise: 0.001
Iter 214/500 - Loss: 0.371 lengthscale: 16.005 noise: 0.001
Iter 215/500 - Loss: 0.371 lengthscale: 16.027 noise: 0.001
Iter 216/500 - Loss: 0.371 lengthscale: 16.049 noise: 0.001
Iter 217/500 - Loss: 0.371 lengthscale: 16.070 noise: 0.001
Iter 218/500 - Loss: 0.371 lengthscale: 16.092 noise: 0.001
Iter 219/500 - Loss: 0.371 lengthscale: 16.113 noise: 0.001
Iter 220/500 - Loss: 0.371 lengthscale: 16.134 noise: 0.001
Iter 221/500 - Loss: 0.371 lengthscale: 16.155 noise: 0.001
Iter 222/500 - Loss: 0.371 lengthscale: 16.176 noise: 0.001
Iter 223/500 - Loss: 0.371 lengthscale: 16.197 noise: 0.001
Iter 224/500 - Loss: 0.371 lengthscale: 16.217 noise: 0.001
Iter 225/500 - Loss: 0.371 lengthscale: 16.238 noise: 0.001
Iter 226/500 - Loss: 0.371 lengthscale: 16.258 noise: 0.001
Iter 227/500 - Loss: 0.371 lengthscale: 16.278 noise: 0.001
Iter 228/500 - Loss: 0.371 lengthscale: 16.298 noise: 0.001
Iter 229/500 - Loss: 0.371 lengthscale: 16.318 noise: 0.001
Iter 230/500 - Loss: 0.371 lengthscale: 16.338 noise: 0.001
Iter 231/500 - Loss: 0.371 lengthscale: 16.358 noise: 0.001
Iter 232/500 - Loss: 0.371 lengthscale: 16.377 noise: 0.001
Iter 233/500 - Loss: 0.371 lengthscale: 16.397 noise: 0.001
Iter 234/500 - Loss: 0.371 lengthscale: 16.416 noise: 0.001
Iter 235/500 - Loss: 0.371 lengthscale: 16.435 noise: 0.001
Iter 236/500 - Loss: 0.370 lengthscale: 16.454 noise: 0.001
Iter 237/500 - Loss: 0.370 lengthscale: 16.473 noise: 0.001
Iter 238/500 - Loss: 0.370 lengthscale: 16.492 noise: 0.001
Iter 239/500 - Loss: 0.370 lengthscale: 16.510 noise: 0.001
Iter 240/500 - Loss: 0.370 lengthscale: 16.529 noise: 0.001
Iter 241/500 - Loss: 0.370 lengthscale: 16.547 noise: 0.001
Iter 242/500 - Loss: 0.370 lengthscale: 16.566 noise: 0.001
Iter 243/500 - Loss: 0.370 lengthscale: 16.584 noise: 0.001
Iter 244/500 - Loss: 0.370 lengthscale: 16.602 noise: 0.001
Iter 245/500 - Loss: 0.370 lengthscale: 16.620 noise: 0.001
Iter 246/500 - Loss: 0.370 lengthscale: 16.638 noise: 0.001
Iter 247/500 - Loss: 0.370 lengthscale: 16.655 noise: 0.001
Iter 248/500 - Loss: 0.370 lengthscale: 16.673 noise: 0.001
Iter 249/500 - Loss: 0.370 lengthscale: 16.691 noise: 0.001
Iter 250/500 - Loss: 0.370 lengthscale: 16.708 noise: 0.001
Iter 251/500 - Loss: 0.370 lengthscale: 16.725 noise: 0.001
Iter 252/500 - Loss: 0.370 lengthscale: 16.742 noise: 0.001
Iter 253/500 - Loss: 0.370 lengthscale: 16.759 noise: 0.001
Iter 254/500 - Loss: 0.370 lengthscale: 16.776 noise: 0.001
Iter 255/500 - Loss: 0.370 lengthscale: 16.793 noise: 0.001
Iter 256/500 - Loss: 0.370 lengthscale: 16.810 noise: 0.001
Iter 257/500 - Loss: 0.370 lengthscale: 16.827 noise: 0.001
Iter 258/500 - Loss: 0.370 lengthscale: 16.843 noise: 0.001
Iter 259/500 - Loss: 0.370 lengthscale: 16.860 noise: 0.001
Iter 260/500 - Loss: 0.370 lengthscale: 16.876 noise: 0.001
Iter 261/500 - Loss: 0.370 lengthscale: 16.892 noise: 0.001
Iter 262/500 - Loss: 0.370 lengthscale: 16.908 noise: 0.001
Iter 263/500 - Loss: 0.370 lengthscale: 16.924 noise: 0.001
Iter 264/500 - Loss: 0.370 lengthscale: 16.940 noise: 0.001
Iter 265/500 - Loss: 0.370 lengthscale: 16.956 noise: 0.001
Iter 266/500 - Loss: 0.370 lengthscale: 16.972 noise: 0.001
Iter 267/500 - Loss: 0.370 lengthscale: 16.987 noise: 0.001
Iter 268/500 - Loss: 0.370 lengthscale: 17.003 noise: 0.001
Iter 269/500 - Loss: 0.370 lengthscale: 17.018 noise: 0.001
Iter 270/500 - Loss: 0.370 lengthscale: 17.034 noise: 0.001
Iter 271/500 - Loss: 0.370 lengthscale: 17.049 noise: 0.001
Iter 272/500 - Loss: 0.370 lengthscale: 17.064 noise: 0.001
Iter 273/500 - Loss: 0.370 lengthscale: 17.079 noise: 0.001
Iter 274/500 - Loss: 0.370 lengthscale: 17.094 noise: 0.001
Iter 275/500 - Loss: 0.370 lengthscale: 17.109 noise: 0.001
Iter 276/500 - Loss: 0.370 lengthscale: 17.124 noise: 0.001
Iter 277/500 - Loss: 0.370 lengthscale: 17.138 noise: 0.001
Iter 278/500 - Loss: 0.370 lengthscale: 17.153 noise: 0.001
Iter 279/500 - Loss: 0.370 lengthscale: 17.167 noise: 0.001
Iter 280/500 - Loss: 0.370 lengthscale: 17.182 noise: 0.001
Iter 281/500 - Loss: 0.370 lengthscale: 17.196 noise: 0.001
Iter 282/500 - Loss: 0.370 lengthscale: 17.211 noise: 0.001
Iter 283/500 - Loss: 0.370 lengthscale: 17.225 noise: 0.001
Iter 284/500 - Loss: 0.370 lengthscale: 17.239 noise: 0.001
Iter 285/500 - Loss: 0.370 lengthscale: 17.253 noise: 0.001
Iter 286/500 - Loss: 0.370 lengthscale: 17.267 noise: 0.001
Iter 287/500 - Loss: 0.370 lengthscale: 17.281 noise: 0.001
Iter 288/500 - Loss: 0.370 lengthscale: 17.294 noise: 0.001
Iter 289/500 - Loss: 0.370 lengthscale: 17.308 noise: 0.001
Iter 290/500 - Loss: 0.370 lengthscale: 17.321 noise: 0.001
Iter 291/500 - Loss: 0.370 lengthscale: 17.335 noise: 0.001
Iter 292/500 - Loss: 0.370 lengthscale: 17.348 noise: 0.001
Iter 293/500 - Loss: 0.370 lengthscale: 17.362 noise: 0.001
Iter 294/500 - Loss: 0.370 lengthscale: 17.375 noise: 0.001
Iter 295/500 - Loss: 0.370 lengthscale: 17.388 noise: 0.001
Iter 296/500 - Loss: 0.370 lengthscale: 17.401 noise: 0.001
Iter 297/500 - Loss: 0.370 lengthscale: 17.414 noise: 0.001
Iter 298/500 - Loss: 0.370 lengthscale: 17.427 noise: 0.001
Iter 299/500 - Loss: 0.370 lengthscale: 17.440 noise: 0.001
Iter 300/500 - Loss: 0.370 lengthscale: 17.453 noise: 0.001
Iter 301/500 - Loss: 0.370 lengthscale: 17.466 noise: 0.001
Iter 302/500 - Loss: 0.370 lengthscale: 17.478 noise: 0.001
Iter 303/500 - Loss: 0.370 lengthscale: 17.491 noise: 0.001
Iter 304/500 - Loss: 0.370 lengthscale: 17.503 noise: 0.001
Iter 305/500 - Loss: 0.370 lengthscale: 17.516 noise: 0.001
Iter 306/500 - Loss: 0.370 lengthscale: 17.528 noise: 0.001
Iter 307/500 - Loss: 0.370 lengthscale: 17.540 noise: 0.001
Iter 308/500 - Loss: 0.370 lengthscale: 17.553 noise: 0.001
Iter 309/500 - Loss: 0.370 lengthscale: 17.565 noise: 0.001
Iter 310/500 - Loss: 0.370 lengthscale: 17.577 noise: 0.001
Iter 311/500 - Loss: 0.370 lengthscale: 17.589 noise: 0.001
Iter 312/500 - Loss: 0.370 lengthscale: 17.601 noise: 0.001
Iter 313/500 - Loss: 0.370 lengthscale: 17.612 noise: 0.001
Iter 314/500 - Loss: 0.370 lengthscale: 17.624 noise: 0.001
Iter 315/500 - Loss: 0.370 lengthscale: 17.636 noise: 0.001
Iter 316/500 - Loss: 0.370 lengthscale: 17.648 noise: 0.001
Iter 317/500 - Loss: 0.370 lengthscale: 17.659 noise: 0.001
Iter 318/500 - Loss: 0.370 lengthscale: 17.671 noise: 0.001
Iter 319/500 - Loss: 0.370 lengthscale: 17.682 noise: 0.001
Iter 320/500 - Loss: 0.370 lengthscale: 17.693 noise: 0.001
Iter 321/500 - Loss: 0.370 lengthscale: 17.705 noise: 0.001
Iter 322/500 - Loss: 0.370 lengthscale: 17.716 noise: 0.001
Iter 323/500 - Loss: 0.370 lengthscale: 17.727 noise: 0.001
Iter 324/500 - Loss: 0.370 lengthscale: 17.738 noise: 0.001
Iter 325/500 - Loss: 0.370 lengthscale: 17.749 noise: 0.001
Iter 326/500 - Loss: 0.370 lengthscale: 17.760 noise: 0.001
Iter 327/500 - Loss: 0.370 lengthscale: 17.771 noise: 0.001
Iter 328/500 - Loss: 0.370 lengthscale: 17.782 noise: 0.001
Iter 329/500 - Loss: 0.370 lengthscale: 17.793 noise: 0.001
Iter 330/500 - Loss: 0.370 lengthscale: 17.803 noise: 0.001
Iter 331/500 - Loss: 0.370 lengthscale: 17.814 noise: 0.001
Iter 332/500 - Loss: 0.370 lengthscale: 17.825 noise: 0.001
Iter 333/500 - Loss: 0.370 lengthscale: 17.835 noise: 0.001
Iter 334/500 - Loss: 0.369 lengthscale: 17.846 noise: 0.001
Iter 335/500 - Loss: 0.369 lengthscale: 17.856 noise: 0.001
Iter 336/500 - Loss: 0.369 lengthscale: 17.866 noise: 0.001
Iter 337/500 - Loss: 0.369 lengthscale: 17.877 noise: 0.001
Iter 338/500 - Loss: 0.369 lengthscale: 17.887 noise: 0.001
Iter 339/500 - Loss: 0.369 lengthscale: 17.897 noise: 0.001
Iter 340/500 - Loss: 0.369 lengthscale: 17.907 noise: 0.001
Iter 341/500 - Loss: 0.369 lengthscale: 17.917 noise: 0.001
Iter 342/500 - Loss: 0.369 lengthscale: 17.927 noise: 0.001
Iter 343/500 - Loss: 0.369 lengthscale: 17.937 noise: 0.001
Iter 344/500 - Loss: 0.369 lengthscale: 17.947 noise: 0.001
Iter 345/500 - Loss: 0.369 lengthscale: 17.957 noise: 0.001
Iter 346/500 - Loss: 0.369 lengthscale: 17.967 noise: 0.001
Iter 347/500 - Loss: 0.369 lengthscale: 17.976 noise: 0.001
Iter 348/500 - Loss: 0.369 lengthscale: 17.986 noise: 0.001
Iter 349/500 - Loss: 0.369 lengthscale: 17.996 noise: 0.001
Iter 350/500 - Loss: 0.369 lengthscale: 18.005 noise: 0.001
Iter 351/500 - Loss: 0.369 lengthscale: 18.015 noise: 0.001
Iter 352/500 - Loss: 0.369 lengthscale: 18.024 noise: 0.001
Iter 353/500 - Loss: 0.369 lengthscale: 18.033 noise: 0.001
Iter 354/500 - Loss: 0.369 lengthscale: 18.043 noise: 0.001
Iter 355/500 - Loss: 0.369 lengthscale: 18.052 noise: 0.001
Iter 356/500 - Loss: 0.369 lengthscale: 18.061 noise: 0.001
Iter 357/500 - Loss: 0.369 lengthscale: 18.070 noise: 0.001
Iter 358/500 - Loss: 0.369 lengthscale: 18.079 noise: 0.001
Iter 359/500 - Loss: 0.369 lengthscale: 18.088 noise: 0.001
Iter 360/500 - Loss: 0.369 lengthscale: 18.097 noise: 0.001
Iter 361/500 - Loss: 0.369 lengthscale: 18.106 noise: 0.001
Iter 362/500 - Loss: 0.369 lengthscale: 18.115 noise: 0.001
Iter 363/500 - Loss: 0.369 lengthscale: 18.124 noise: 0.001
Iter 364/500 - Loss: 0.369 lengthscale: 18.133 noise: 0.001
Iter 365/500 - Loss: 0.369 lengthscale: 18.142 noise: 0.001
Iter 366/500 - Loss: 0.369 lengthscale: 18.150 noise: 0.001
Iter 367/500 - Loss: 0.369 lengthscale: 18.159 noise: 0.001
Iter 368/500 - Loss: 0.369 lengthscale: 18.167 noise: 0.001
Iter 369/500 - Loss: 0.369 lengthscale: 18.176 noise: 0.001
Iter 370/500 - Loss: 0.369 lengthscale: 18.184 noise: 0.001
Iter 371/500 - Loss: 0.369 lengthscale: 18.193 noise: 0.001
Iter 372/500 - Loss: 0.369 lengthscale: 18.201 noise: 0.001
Iter 373/500 - Loss: 0.369 lengthscale: 18.210 noise: 0.001
Iter 374/500 - Loss: 0.369 lengthscale: 18.218 noise: 0.001
Iter 375/500 - Loss: 0.369 lengthscale: 18.226 noise: 0.001
Iter 376/500 - Loss: 0.369 lengthscale: 18.234 noise: 0.001
Iter 377/500 - Loss: 0.369 lengthscale: 18.243 noise: 0.001
Iter 378/500 - Loss: 0.369 lengthscale: 18.251 noise: 0.001
Iter 379/500 - Loss: 0.369 lengthscale: 18.259 noise: 0.001
Iter 380/500 - Loss: 0.369 lengthscale: 18.267 noise: 0.001
Iter 381/500 - Loss: 0.369 lengthscale: 18.275 noise: 0.001
Iter 382/500 - Loss: 0.369 lengthscale: 18.283 noise: 0.001
Iter 383/500 - Loss: 0.369 lengthscale: 18.290 noise: 0.001
Iter 384/500 - Loss: 0.369 lengthscale: 18.298 noise: 0.001
Iter 385/500 - Loss: 0.369 lengthscale: 18.306 noise: 0.001
Iter 386/500 - Loss: 0.369 lengthscale: 18.314 noise: 0.001
Iter 387/500 - Loss: 0.369 lengthscale: 18.321 noise: 0.001
Iter 388/500 - Loss: 0.369 lengthscale: 18.329 noise: 0.001
Iter 389/500 - Loss: 0.369 lengthscale: 18.337 noise: 0.001
Iter 390/500 - Loss: 0.369 lengthscale: 18.344 noise: 0.001
Iter 391/500 - Loss: 0.369 lengthscale: 18.352 noise: 0.001
Iter 392/500 - Loss: 0.369 lengthscale: 18.359 noise: 0.001
Iter 393/500 - Loss: 0.369 lengthscale: 18.367 noise: 0.001
Iter 394/500 - Loss: 0.369 lengthscale: 18.374 noise: 0.001
Iter 395/500 - Loss: 0.369 lengthscale: 18.381 noise: 0.001
Iter 396/500 - Loss: 0.369 lengthscale: 18.389 noise: 0.001
Iter 397/500 - Loss: 0.369 lengthscale: 18.396 noise: 0.001
Iter 398/500 - Loss: 0.369 lengthscale: 18.403 noise: 0.001
Iter 399/500 - Loss: 0.369 lengthscale: 18.410 noise: 0.001
Iter 400/500 - Loss: 0.369 lengthscale: 18.417 noise: 0.001
Iter 401/500 - Loss: 0.369 lengthscale: 18.424 noise: 0.001
Iter 402/500 - Loss: 0.369 lengthscale: 18.431 noise: 0.001
Iter 403/500 - Loss: 0.369 lengthscale: 18.438 noise: 0.001
Iter 404/500 - Loss: 0.369 lengthscale: 18.445 noise: 0.001
Iter 405/500 - Loss: 0.369 lengthscale: 18.452 noise: 0.001
Iter 406/500 - Loss: 0.369 lengthscale: 18.459 noise: 0.001
Iter 407/500 - Loss: 0.369 lengthscale: 18.466 noise: 0.001
Iter 408/500 - Loss: 0.369 lengthscale: 18.473 noise: 0.001
Iter 409/500 - Loss: 0.369 lengthscale: 18.480 noise: 0.001
Iter 410/500 - Loss: 0.369 lengthscale: 18.486 noise: 0.001
Iter 411/500 - Loss: 0.369 lengthscale: 18.493 noise: 0.001
Iter 412/500 - Loss: 0.369 lengthscale: 18.500 noise: 0.001
Iter 413/500 - Loss: 0.369 lengthscale: 18.506 noise: 0.001
Iter 414/500 - Loss: 0.369 lengthscale: 18.513 noise: 0.001
Iter 415/500 - Loss: 0.369 lengthscale: 18.519 noise: 0.001
Iter 416/500 - Loss: 0.369 lengthscale: 18.526 noise: 0.001
Iter 417/500 - Loss: 0.369 lengthscale: 18.532 noise: 0.001
Iter 418/500 - Loss: 0.369 lengthscale: 18.539 noise: 0.001
Iter 419/500 - Loss: 0.369 lengthscale: 18.545 noise: 0.001
Iter 420/500 - Loss: 0.369 lengthscale: 18.551 noise: 0.001
Iter 421/500 - Loss: 0.369 lengthscale: 18.558 noise: 0.001
Iter 422/500 - Loss: 0.369 lengthscale: 18.564 noise: 0.001
Iter 423/500 - Loss: 0.369 lengthscale: 18.570 noise: 0.001
Iter 424/500 - Loss: 0.369 lengthscale: 18.576 noise: 0.001
Iter 425/500 - Loss: 0.369 lengthscale: 18.582 noise: 0.001
Iter 426/500 - Loss: 0.369 lengthscale: 18.589 noise: 0.001
Iter 427/500 - Loss: 0.369 lengthscale: 18.595 noise: 0.001
Iter 428/500 - Loss: 0.369 lengthscale: 18.601 noise: 0.001
Iter 429/500 - Loss: 0.369 lengthscale: 18.607 noise: 0.001
Iter 430/500 - Loss: 0.369 lengthscale: 18.613 noise: 0.001
Iter 431/500 - Loss: 0.369 lengthscale: 18.619 noise: 0.001
Iter 432/500 - Loss: 0.369 lengthscale: 18.624 noise: 0.001
Iter 433/500 - Loss: 0.369 lengthscale: 18.630 noise: 0.001
Iter 434/500 - Loss: 0.369 lengthscale: 18.636 noise: 0.001
Iter 435/500 - Loss: 0.369 lengthscale: 18.642 noise: 0.001
Iter 436/500 - Loss: 0.369 lengthscale: 18.648 noise: 0.001
Iter 437/500 - Loss: 0.369 lengthscale: 18.653 noise: 0.001
Iter 438/500 - Loss: 0.369 lengthscale: 18.659 noise: 0.001
Iter 439/500 - Loss: 0.369 lengthscale: 18.665 noise: 0.001
Iter 440/500 - Loss: 0.369 lengthscale: 18.670 noise: 0.001
Iter 441/500 - Loss: 0.369 lengthscale: 18.676 noise: 0.001
Iter 442/500 - Loss: 0.369 lengthscale: 18.682 noise: 0.001
Iter 443/500 - Loss: 0.369 lengthscale: 18.687 noise: 0.001
Iter 444/500 - Loss: 0.369 lengthscale: 18.693 noise: 0.001
Iter 445/500 - Loss: 0.369 lengthscale: 18.698 noise: 0.001
Iter 446/500 - Loss: 0.369 lengthscale: 18.703 noise: 0.001
Iter 447/500 - Loss: 0.369 lengthscale: 18.709 noise: 0.001
Iter 448/500 - Loss: 0.369 lengthscale: 18.714 noise: 0.001
Iter 449/500 - Loss: 0.369 lengthscale: 18.720 noise: 0.001
Iter 450/500 - Loss: 0.369 lengthscale: 18.725 noise: 0.001
Iter 451/500 - Loss: 0.369 lengthscale: 18.730 noise: 0.001
Iter 452/500 - Loss: 0.369 lengthscale: 18.735 noise: 0.001
Iter 453/500 - Loss: 0.369 lengthscale: 18.741 noise: 0.001
Iter 454/500 - Loss: 0.369 lengthscale: 18.746 noise: 0.001
Iter 455/500 - Loss: 0.369 lengthscale: 18.751 noise: 0.001
Iter 456/500 - Loss: 0.369 lengthscale: 18.756 noise: 0.001
Iter 457/500 - Loss: 0.369 lengthscale: 18.761 noise: 0.001
Iter 458/500 - Loss: 0.369 lengthscale: 18.766 noise: 0.001
Iter 459/500 - Loss: 0.369 lengthscale: 18.771 noise: 0.001
Iter 460/500 - Loss: 0.369 lengthscale: 18.776 noise: 0.001
Iter 461/500 - Loss: 0.369 lengthscale: 18.781 noise: 0.001
Iter 462/500 - Loss: 0.369 lengthscale: 18.786 noise: 0.001
Iter 463/500 - Loss: 0.369 lengthscale: 18.791 noise: 0.001
Iter 464/500 - Loss: 0.369 lengthscale: 18.796 noise: 0.001
Iter 465/500 - Loss: 0.369 lengthscale: 18.801 noise: 0.001
Iter 466/500 - Loss: 0.369 lengthscale: 18.806 noise: 0.001
Iter 467/500 - Loss: 0.369 lengthscale: 18.810 noise: 0.001
Iter 468/500 - Loss: 0.369 lengthscale: 18.815 noise: 0.001
Iter 469/500 - Loss: 0.369 lengthscale: 18.820 noise: 0.001
Iter 470/500 - Loss: 0.369 lengthscale: 18.825 noise: 0.001
Iter 471/500 - Loss: 0.369 lengthscale: 18.829 noise: 0.001
Iter 472/500 - Loss: 0.369 lengthscale: 18.834 noise: 0.001
Iter 473/500 - Loss: 0.369 lengthscale: 18.838 noise: 0.001
Iter 474/500 - Loss: 0.369 lengthscale: 18.843 noise: 0.001
Iter 475/500 - Loss: 0.369 lengthscale: 18.848 noise: 0.001
Iter 476/500 - Loss: 0.369 lengthscale: 18.852 noise: 0.001
Iter 477/500 - Loss: 0.369 lengthscale: 18.857 noise: 0.001
Iter 478/500 - Loss: 0.369 lengthscale: 18.861 noise: 0.001
Iter 479/500 - Loss: 0.369 lengthscale: 18.866 noise: 0.001
Iter 480/500 - Loss: 0.369 lengthscale: 18.870 noise: 0.001
Iter 481/500 - Loss: 0.369 lengthscale: 18.874 noise: 0.001
Iter 482/500 - Loss: 0.369 lengthscale: 18.879 noise: 0.001
Iter 483/500 - Loss: 0.369 lengthscale: 18.883 noise: 0.001
Iter 484/500 - Loss: 0.369 lengthscale: 18.887 noise: 0.001
Iter 485/500 - Loss: 0.369 lengthscale: 18.892 noise: 0.001
Iter 486/500 - Loss: 0.369 lengthscale: 18.896 noise: 0.001
Iter 487/500 - Loss: 0.369 lengthscale: 18.900 noise: 0.001
Iter 488/500 - Loss: 0.369 lengthscale: 18.904 noise: 0.001
Iter 489/500 - Loss: 0.369 lengthscale: 18.909 noise: 0.001
Iter 490/500 - Loss: 0.369 lengthscale: 18.913 noise: 0.001
Iter 491/500 - Loss: 0.369 lengthscale: 18.917 noise: 0.001
Iter 492/500 - Loss: 0.369 lengthscale: 18.921 noise: 0.001
Iter 493/500 - Loss: 0.369 lengthscale: 18.925 noise: 0.001
Iter 494/500 - Loss: 0.369 lengthscale: 18.929 noise: 0.001
Iter 495/500 - Loss: 0.369 lengthscale: 18.933 noise: 0.001
Iter 496/500 - Loss: 0.369 lengthscale: 18.937 noise: 0.001
Iter 497/500 - Loss: 0.369 lengthscale: 18.941 noise: 0.001
Iter 498/500 - Loss: 0.369 lengthscale: 18.945 noise: 0.001
Iter 499/500 - Loss: 0.369 lengthscale: 18.949 noise: 0.001
Iter 500/500 - Loss: 0.369 lengthscale: 18.953 noise: 0.001
Now, we test predictions. For simplicity, we will assume a fixed variance of \(0.01.\)
[7]:
# Get into evaluation (predictive posterior) mode
model.eval()
likelihood.eval()
# Test points are regularly spaced along [0,1]
# Make predictions by feeding model through likelihood
with torch.no_grad(), qpytorch.settings.fast_pred_var():
test_x = torch.linspace(0, 1, 51)
test_x_distributional = torch.stack((test_x, (1e-3 * torch.ones_like(test_x)).log()), dim=1)
observed_pred = likelihood(model(test_x_distributional))
with torch.no_grad():
# Initialize plot
f, ax = plt.subplots(1, 1, figsize=(8, 3))
# Get upper and lower confidence bounds
lower, upper = observed_pred.confidence_region(rescale=True)
# Plot training data as black stars
ax.errorbar(train_x_mean.numpy(), train_y.numpy(), xerr=train_x_stdv, fmt='k*')
# Plot predictive means as blue line
ax.plot(test_x.numpy(), observed_pred.mean.numpy(), 'b')
# Shade between the lower and upper confidence bounds
ax.fill_between(test_x.numpy(), lower.numpy(), upper.numpy(), alpha=0.5)
ax.set_ylim([-3, 3])
ax.legend(['Observed Data', 'Mean', 'Confidence'])
As a final note, we’ve made it very easy to extend the distributional kernel class by exposing a generic DistributionalInputKernel class that takes as input any distance function over probability distributions.
[ ]: