{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ModelList (Multi-Output) QEP Regression\n", "\n", "## Introduction\n", "\n", "This notebook demonstrates how to wrap uncorrelated QEP models into a convenient Multi-Output QEP model using a ModelList. \n", "\n", "Unlike in the Multitask case, this do not model correlations between outcomes, but treats outcomes independently. This is equivalent to setting up a separate QEP for each outcome, but can be much more convenient to handle, in particular it does not require manually looping over models when fitting or predicting.\n", "\n", "This type of model is useful if \n", "- when the number of training / test points is different for the different outcomes\n", "- using different covariance modules and / or likelihoods for each outcome\n", "\n", "For block designs (i.e. when the above points do not apply), you should instead use a batch mode GP as described in the [batch uncorrelated multioutput example](./Batch_Uncorrelated_Multioutput_QEP.ipynb). This will be much faster because it uses additional parallelism." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import math\n", "import torch\n", "import qpytorch\n", "from matplotlib import pyplot as plt\n", "\n", "%matplotlib inline\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set up training data\n", "\n", "In the next cell, we set up the training data for this example. We'll be using a different number of training examples for the different QEPs." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "train_x1 = torch.linspace(0, 0.95, 50) + 0.05 * torch.rand(50)\n", "train_x2 = torch.linspace(0, 0.95, 25) + 0.05 * torch.rand(25)\n", "\n", "train_y1 = torch.sin(train_x1 * (2 * math.pi)) + 0.2 * torch.randn_like(train_x1)\n", "train_y2 = torch.cos(train_x2 * (2 * math.pi)) + 0.2 * torch.randn_like(train_x2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up the sub-models\n", "\n", "Each individual model uses the `ExactQEP` model from the [simple regression example](../01_Exact_QEPs/Simple_QEP_Regression.ipynb)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "POWER = 1.0\n", "class ExactQEPModel(qpytorch.models.ExactQEP):\n", " def __init__(self, train_x, train_y, likelihood):\n", " super().__init__(train_x, train_y, likelihood)\n", " self.power = torch.tensor(POWER)\n", " self.mean_module = qpytorch.means.ConstantMean()\n", " self.covar_module = qpytorch.kernels.ScaleKernel(qpytorch.kernels.RBFKernel())\n", " \n", " def forward(self, x):\n", " mean_x = self.mean_module(x)\n", " covar_x = self.covar_module(x)\n", " return qpytorch.distributions.MultivariateQExponential(mean_x, covar_x, power=self.power)\n", " \n", "\n", "likelihood1 = qpytorch.likelihoods.QExponentialLikelihood(power=torch.tensor(POWER))\n", "model1 = ExactQEPModel(train_x1, train_y1, likelihood1)\n", "\n", "likelihood2 = qpytorch.likelihoods.QExponentialLikelihood(power=torch.tensor(POWER))\n", "model2 = ExactQEPModel(train_x2, train_y2, likelihood2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now collect the submodels in an `UncorrelatedMultiOutputQEP`, and the respective likelihoods in a `MultiOutputLikelihood`. These are container modules that make it easy to work with multiple outputs. In particular, they will take in and return lists of inputs / outputs and delegate the data to / from the appropriate sub-model (it is important that the order of the inputs / outputs corresponds to the order of models with which the containers were instantiated)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "model = qpytorch.models.UncorrelatedModelList(model1, model2)\n", "likelihood = qpytorch.likelihoods.LikelihoodList(model1.likelihood, model2.likelihood)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set up overall Marginal Log Likelihood\n", "\n", "Assuming independence, the MLL for the container model is simply the sum of the MLLs for the individual models. `SumMarginalLogLikelihood` is a convenient container for this (by default it uses an `ExactMarginalLogLikelihood` for each submodel)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from qpytorch.mlls import SumMarginalLogLikelihood\n", "\n", "mll = SumMarginalLogLikelihood(likelihood, model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train the model hyperparameters\n", "\n", "With the containers in place, the models can be trained in a single loop on the container (note that this means that optimization is performed jointly, which can be an issue if the individual submodels require training via very different step sizes)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter 1/60 - Loss: 1.629\n", "Iter 2/60 - Loss: 1.598\n", "Iter 3/60 - Loss: 1.564\n", "Iter 4/60 - Loss: 1.525\n", "Iter 5/60 - Loss: 1.481\n", "Iter 6/60 - Loss: 1.431\n", "Iter 7/60 - Loss: 1.375\n", "Iter 8/60 - Loss: 1.316\n", "Iter 9/60 - Loss: 1.256\n", "Iter 10/60 - Loss: 1.199\n", "Iter 11/60 - Loss: 1.148\n", "Iter 12/60 - Loss: 1.105\n", "Iter 13/60 - Loss: 1.071\n", "Iter 14/60 - Loss: 1.043\n", "Iter 15/60 - Loss: 1.020\n", "Iter 16/60 - Loss: 1.002\n", "Iter 17/60 - Loss: 0.986\n", "Iter 18/60 - Loss: 0.971\n", "Iter 19/60 - Loss: 0.957\n", "Iter 20/60 - Loss: 0.943\n", "Iter 21/60 - Loss: 0.928\n", "Iter 22/60 - Loss: 0.912\n", "Iter 23/60 - Loss: 0.895\n", "Iter 24/60 - Loss: 0.876\n", "Iter 25/60 - Loss: 0.857\n", "Iter 26/60 - Loss: 0.837\n", "Iter 27/60 - Loss: 0.815\n", "Iter 28/60 - Loss: 0.794\n", "Iter 29/60 - Loss: 0.772\n", "Iter 30/60 - Loss: 0.751\n", "Iter 31/60 - Loss: 0.730\n", "Iter 32/60 - Loss: 0.711\n", "Iter 33/60 - Loss: 0.692\n", "Iter 34/60 - Loss: 0.674\n", "Iter 35/60 - Loss: 0.658\n", "Iter 36/60 - Loss: 0.641\n", "Iter 37/60 - Loss: 0.624\n", "Iter 38/60 - Loss: 0.607\n", "Iter 39/60 - Loss: 0.590\n", "Iter 40/60 - Loss: 0.573\n", "Iter 41/60 - Loss: 0.557\n", "Iter 42/60 - Loss: 0.541\n", "Iter 43/60 - Loss: 0.526\n", "Iter 44/60 - Loss: 0.512\n", "Iter 45/60 - Loss: 0.498\n", "Iter 46/60 - Loss: 0.484\n", "Iter 47/60 - Loss: 0.470\n", "Iter 48/60 - Loss: 0.457\n", "Iter 49/60 - Loss: 0.443\n", "Iter 50/60 - Loss: 0.429\n", "Iter 51/60 - Loss: 0.416\n", "Iter 52/60 - Loss: 0.403\n", "Iter 53/60 - Loss: 0.391\n", "Iter 54/60 - Loss: 0.380\n", "Iter 55/60 - Loss: 0.369\n", "Iter 56/60 - Loss: 0.358\n", "Iter 57/60 - Loss: 0.348\n", "Iter 58/60 - Loss: 0.338\n", "Iter 59/60 - Loss: 0.329\n", "Iter 60/60 - Loss: 0.320\n" ] } ], "source": [ "# this is for running the notebook in our testing framework\n", "import os\n", "smoke_test = ('CI' in os.environ)\n", "training_iterations = 2 if smoke_test else 60\n", "\n", "\n", "# Find optimal model hyperparameters\n", "model.train()\n", "likelihood.train()\n", "\n", "# Use the Adam optimizer\n", "optimizer = torch.optim.Adam(model.parameters(), lr=0.1) # Includes GaussianLikelihood parameters\n", "\n", "for i in range(training_iterations):\n", " optimizer.zero_grad()\n", " output = model(*model.train_inputs)\n", " loss = -mll(output, model.train_targets)\n", " loss.backward()\n", " print('Iter %d/%d - Loss: %.3f' % (i + 1, training_iterations, loss.item()))\n", " optimizer.step()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Make predictions with the model" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set into eval mode\n", "model.eval()\n", "likelihood.eval()\n", "\n", "# Initialize plots\n", "f, axs = plt.subplots(1, 2, figsize=(8, 3))\n", "\n", "# Make predictions (use the same test points)\n", "with torch.no_grad(), qpytorch.settings.fast_pred_var():\n", " test_x = torch.linspace(0, 1, 51)\n", " # This contains predictions for both outcomes as a list\n", " predictions = likelihood(*model(test_x, test_x))\n", " \n", "for submodel, prediction, ax in zip(model.models, predictions, axs):\n", " mean = prediction.mean\n", " lower, upper = prediction.confidence_region(rescale=True)\n", " \n", " tr_x = submodel.train_inputs[0].detach().numpy()\n", " tr_y = submodel.train_targets.detach().numpy()\n", " \n", " # Plot training data as black stars\n", " ax.plot(tr_x, tr_y, 'k*')\n", " # Predictive mean as blue line\n", " ax.plot(test_x.numpy(), mean.numpy(), 'b')\n", " # Shade in confidence \n", " ax.fill_between(test_x.numpy(), lower.detach().numpy(), upper.detach().numpy(), alpha=0.5)\n", " ax.set_ylim([-3, 3])\n", " ax.legend(['Observed Data', 'Mean', 'Confidence'])\n", " ax.set_title('Observed Values (Likelihood)')\n", "\n", "None" ] } ], "metadata": { "anaconda-cloud": {}, "bento_stylesheets": { "bento/extensions/flow/main.css": true, "bento/extensions/kernel_selector/main.css": true, "bento/extensions/kernel_ui/main.css": true, "bento/extensions/new_kernel/main.css": true, "bento/extensions/system_usage/main.css": true }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.12" } }, "nbformat": 4, "nbformat_minor": 4 }