{ "metadata": { "name": "", "signature": "sha256:7ebb3e1c06b3cc29183d75f7da1608e810832f602d443a57fbfa8b0d7faefdbb" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# GPy Introduction: Covariance Functions in GPy\n", "\n", "## Machine Learning Summer School, Sydney, Australia\n", "\n", "### 23rd February 2015\n", "\n", "### Neil D. Lawrence and Nicolas Durrande\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "from IPython.display import display\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pods\n", "import GPy" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pytz/__init__.py:29: UserWarning: Module pods was already imported from /Users/neil/sods/ods/pods/__init__.pyc, but /Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages is being added to sys.path\n", " from pkg_resources import resource_stream\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Covariance Functions in GPy\n", "\n", "We've [introduced Gaussian processes](gaussian process introduction.ipynb) and built a simple class in python for fitting these models. In the last session we introduced Gaussian process models through constructing covariance functions in numpy. The GPy software is a BSD licensed software package for modeling with Gaussian processes in python. It is designed to make it easy for the user to construct models and interact with data. The software is BSD licensed to ensure that there are as few as possible constraints on its use. The GPy documentation is produced with Sphinx and is available [here](http://gpy.readthedocs.org/en/latest/).\n", "\n", "In the introduction to Gaussian processes we defined covariance functions (or kernels) as functions to which we passed objects in GPy covariance functions are objects.\n", "\n", "In GPy the covariance object is stored in GPy.kern. There are several covariance functions available. The exponentiated quadratic covariance is stored as RBF and can be created as follows." ] }, { "cell_type": "code", "collapsed": false, "input": [ "kern = GPy.kern.RBF(input_dim=1)\n", "display(kern)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "
rbf.ValueConstraintPriorTied to
variance 1.0 +ve
lengthscale 1.0 +ve
" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here it's been given the name 'rbf' by default and some default values have been given for the lengthscale and variance, we can also name the covariance and change the initial parameters as follows," ] }, { "cell_type": "code", "collapsed": false, "input": [ "kern = GPy.kern.RBF(input_dim=1, name='signal', variance=4.0, lengthscale=2.0)\n", "display(kern)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "
signal.ValueConstraintPriorTied to
variance 4.0 +ve
lengthscale 2.0 +ve
" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the Kernel\n", "\n", "The covariance function expresses the covariation between two points. the .plot() method can be applied to the kernel to discover how the covariation changes as a function as one of the inputs with the other fixed (i.e. it plots k(x, z) as a function of a one dimensional x whilst keeping z fixed. By default z is set to 0.0." ] }, { "cell_type": "code", "collapsed": false, "input": [ "kern.plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the title of the kernel is taken from the name we gave it (signal). \n", "\n", "## Changing Covariance Function Parameters\n", "\n", "When we constructed the covariance function we gave it particular parameters. These parameters can be changed later in a couple of different ways firstly, we can simple set the field value of the parameters. If we want to change the lengthscale of the covariance to 3.5 we do so as follows." ] }, { "cell_type": "code", "collapsed": false, "input": [ "kern.lengthscale = 3.5\n", "display(kern)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "
signal.ValueConstraintPriorTied to
variance 4.0 +ve
lengthscale 3.5 +ve
" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can even change the naming of the parameters, let's imagine that this covariance function was operating over time instead of space, we might prefer the name timescale for the lengthscale parameter." ] }, { "cell_type": "code", "collapsed": false, "input": [ "kern.lengthscale.name = 'timescale'\n", "display(kern)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "
signal.ValueConstraintPriorTied to
variance 4.0 +ve
timescale 3.5 +ve
" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can set the time scale appropriately." ] }, { "cell_type": "code", "collapsed": false, "input": [ "kern.timescale = 10.\n", "display(kern)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "
signal.ValueConstraintPriorTied to
variance 4.0 +ve
timescale 10.0 +ve
" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Further Covariance Functions in GPy\n", "\n", "There are other types of basic covariance function in GPy. For example the Linear kernel,\n", "$$\n", "k(\\mathbf{x}, \\mathbf{z}) = \\alpha \\mathbf{x}^\\top \\mathbf{z}\n", "$$\n", "and the Bias kernel,\n", "$$\n", "k(\\mathbf{x}, \\mathbf{z}) = \\alpha\n", "$$\n", "where everything is equally correlated to each other. Brownian implements Brownian motion which has a covariance function of the form,\n", "$$\n", "k(t, t^\\prime) = \\alpha \\text{min}(t, t^\\prime).\n", "$$\n", "\n", "Broadly speaking covariances fall into two classes, *stationary* covariance functions, for which the kernel can always be written in the form\n", "$$\n", "k(\\mathbf{x}, \\mathbf{z}) = f(r)\n", "$$\n", "where $f(\\cdot)$ is a function and $r$ is the distance between the vectors $\\mathbf{x}$ and $\\mathbf{z}$, i.e.,\n", "$$\n", "r = ||\\mathbf{x} - \\mathbf{z}||_2 = \\sqrt{\\left(\\mathbf{x} - \\mathbf{z}\\right)^\\top \\left(\\mathbf{x} - \\mathbf{z}\\right)}.\n", "$$\n", "This partitioning is reflected in the object hierarchy in GPy. There is a base object Kern and this is inherited by Stationary to form the stationary covariance functions (like RBF and Matern32).\n", "\n", "## Computing the Covariance Function\n", "\n", "When using numpy to construct covariances we defined a function, kern_compute which returned a covariance matrix given the name of the covariance function. In GPy, the base object Kern implements a method K. That allows us to compute the associated covariance. Visualizing the structure of this covariance matrix is often informative in understanding whether we have appropriately captured the nature of the relationship between our variables in our covariance function. In GPy the input data is assumed to be provided in a matrix with $n$ rows and $p$ columns where $n$ is the number of data points and $p$ is the number of features we are dealing with. We can compute the entries to the covariance matrix for a given set of inputs X as follows." ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = pods.datasets.olympic_marathon_men()\n", "# Load in the times of the olympics\n", "X = data['X']\n", "K=kern.K(X)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now to visualize this covariation between the time points we plot it as an image using the imshow command from matplotlib.\n", "python\n", "plt.imshow(K, interpolation='None')\n", "\n", "Setting the interpolation to 'None' prevents the pixels being smoothed in the image. To better visualize the structure of the covariance we've also drawn white lines at the points where the First World War and the Second World War begin. At other points the Olympics are held every four years and the covariation is given by the computing the covariance function for two points which are four years apart, appropriately scaled by the time scale." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def visualize_olympics(K):\n", " \"\"\"Helper function for visualizing a covariance computed on the Olympics training data.\"\"\"\n", " fig, ax = plt.subplots(figsize=(8,8))\n", " im = ax.imshow(K, interpolation='None')\n", "\n", " WWI_index = np.argwhere(X==1912)[0][0]\n", " WWII_index = np.argwhere(X==1936)[0][0]\n", "\n", " ax.axhline(WWI_index+0.5,color='w')\n", " ax.axvline(WWI_index+0.5,color='w')\n", " ax.axhline(WWII_index+0.5,color='w')\n", " ax.axvline(WWII_index+0.5,color='w')\n", " plt.colorbar(im)\n", " \n", "visualize_olympics(kern.K(X))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n4tQAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "kern.timescale" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "
Indexsignal.timescaleConstraintPriorTied to
[0]10.0+veN/A
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "\u001b[1msignal.timescale\u001b[0;0m:\n", "Param([ 10.])" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "of 10 is ensuring that neighbouring Olympic years are correlated, but there is only weak dependency across the period of each of the world wars. If we increase the timescale to 20 we obtain stronger dependencies between the wars." ] }, { "cell_type": "code", "collapsed": false, "input": [ "kern.timescale = 20\n", "visualize_olympics(kern.K(X))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Covariance Matrices and Covariance Functions\n", "\n", "A Gaussian process specifieds that any finite set of realizations of the function will jointly have a Gaussian density. In other words, if we are interested in the joint distribution of function values at a set of particular points, realizations of those functions can be sampled according to a Gaussian density. The Gaussian process provides a prior over an infinite dimensional object: the function. For our purposes we can think of a function as being like an infinite dimensional vector. The mean of our Gaussian process is normally specified by a vector, but is now itself specified by a *mean function*. The covariance of the process, instead of being a matrix is also a *covariance function*. But to construct the infinite dimensional matrix we need to make it a function of two arguments, $k(\\mathbf{x}, \\mathbf{z})$. When we compute the covariance matrix using k.K(X) we are computing the values of that matrix for the different entries in $\\mathbf{X}$. GPy also allows us to compute the cross covariance between two input matrices, $\\mathbf{X}$ and $\\mathbf{Z}$.\n", "\n", "## Sampling from a Gaussian Process\n", "\n", "We cannot sample a full function from a process because it consists of infinite values, however, we can obtain a finite sample from a function as described by a Gaussian process and visualize these samples as functions. This is a useful exercise as it allows us to visualize the type of functions that fall within the support of our Gaussian process prior. Careful selection of the right covariance function can improve the performance of a Gaussian process based model in practice because the covariance function allows us to bring domain knowledge to bear on the problem. If the input domain is low dimensional, then we can at least ensure that we are encoding something reasonable in the covariance through visualizing samples from the Gaussian process. \n", "\n", "For a one dimensional function, if we select a vector of input values, represented by X, to be equally spaced, and ensure that the spacing is small relative to the lengthscale of our process, then we can visualize a sample from the function by sampling from the Gaussian (or a multivariate normal) with the numpy command\n", "python\n", "F = np.random.multivariate_normal(mu, K, num_samps).T\n", "\n", "where mu is the mean (which we will set to be the zero vector) and K is the covariance matrix computed at the points where we wish to visualize the function. The transpose at the end ensures that the the matrix F has num_samps columns and $n$ rows, where $n$ is the dimensionality of the *square* covariance matrix K. \n", "\n", "Below we build a simple helper function for sampling from a Gaussian process and visualizing the result. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "def sample_covariance(kern, X, num_samps=10):\n", " \"\"\"Sample a one dimensional function as if its from a Gaussian process with the given covariance function.\"\"\"\n", " from IPython.display import HTML\n", " display(HTML('

## Samples from a Gaussian Process with ' + kern.name + ' Covariance

'))\n", " display(kern)\n", " K = kern.K(X) \n", "\n", " # Generate samples paths from a Gaussian with zero mean and covariance K\n", " F = np.random.multivariate_normal(np.zeros(X.shape[0]), K, num_samps).T\n", "\n", " fig, ax = plt.subplots(figsize=(8,8))\n", " ax.plot(X,F)\n", "\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are now in a position to define a vector of inputs, a covariance function, and then to visualize the samples from the process." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# create an input vector\n", "X = np.linspace(-2, 2, 200)[:, None]\n", "\n", "# create a covariance to visualize\n", "kern = GPy.kern.RBF(input_dim=1)\n", "\n", "# perform the samples.\n", "sample_covariance(kern, X)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "

## Samples from a Gaussian Process with rbf Covariance

" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] }, { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "
rbf.ValueConstraintPriorTied to
variance 1.0 +ve
lengthscale 1.0 +ve

## Samples from a Gaussian Process with poly Covariance

" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] }, { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "
poly.ValueConstraintPriorTied to
variance 1.0 +ve
" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nTJ3V+8YbMHYsPPOMfXXhqGGWcguZyzI58e5p8g+WslaL4GDjOoyY4sXIkfa1ottisbBp0yY+//xz\nVq9ezYABAxg3bhwDBgyw76Huf9q4EW67DebPRx80iAPFxazPzWV9Tg5bCgpo5e3N4JAQhoWF0crb\nu9pWZVss5cTHTyMn5ydat/4WP7/21fK89kSStZ1LTFQ9PFasUJ3QHn3U/ubzHE5aGjz7rNrGIsv5\n/0vx4WKSPkrj9Lw0Et18WVZZh0Z3hHLvJBe7q6ITExNZuHAh8+bNw8fHh/HjxzN69Gj7aGBymSrX\nrGHviy+y5bXX2FK7Npvy8vBzc6NfUBD9g4LoExh42Su5L0VxcRyHD9+Jp2ckUVHzcHd3zhfAkqwd\nRFKSKui+/FL1z58+HRo0MDoqJ7d3L0ydCtnZaj67Xz+jIzJMZXYlaV+mE/9hOqVJ5fxkDievZx2G\n3O/N4MGqcZy9SE1NZenSpSxevJijR49y2223MX78eDp16uQw+3stuk58aSl7i4rYU1TElvh4dlks\nNPHy4uo6dejh7881AQE08vKyWgy6rnP69EecOPEsjRu/Qt269znMv++VkGTtYNLS4K23VNe/m29W\nW7/atjU6Kid2dj57+nSIilIrBJ3kP8RSYSH7h2zi3k2n7M9cdriEcKBuBFdNDmLUaA176vmRnZ3N\n8uXLWbx4Mbt372bIkCHcfvvt9OvXD3crVJM1Rdd1siorOVpayqHi4nPJ+UBxMaHu7rT39aX9gQN0\nX7CAbq+9RkD7mhl+rqhIJy5uPBUVqURHf4mPT8saua8tk2TtoHJy1PqPDz6AVq1U0h40yL4aRziU\n8nL46CO10ODGG+Gll6B+faOjqna6WSfvtzwOz8mk6PtMTure/OkfQeSYMG67282uXqfEx8ezatUq\nVq1axe7duxk4cCCjRo1i0KBBeNrRUIBZ10mrqCCprIyk8nLiS0s5WlLCkZISjpaWYtF1ory9ifb2\nVsnZ15cYX1+CXF3VosmfflJXDQzV6bpOevqXJCRMo06d8TRq9ILTrPb+X+wzWR87Bs2aGXJ/e1NR\nAd98o0Zhi4rULqMxY9ThIcIA+fmquv74Y5g4EZ54wr7Oa7wA3aKT93s+Rz7KJH9VJummWmz3DiNs\nRG2G3OdF+/bVckqi1ZlMJrZv387q1av57rvvyM3N5aabbmLIkCFcd911eFlxyPdKlJnNZFZWkllZ\nSUZFhXp75vGp8nKSy8tJKivjdEUFIe7uNPDwINLDg6ZeXkR5e9PizNtQd/f/Hl4uK1O9j1NTVc/v\nGjgJpawsiaNHJ1FenkJU1Fz8/e2s442V2WeyDgtTrYsmT4aBA1XfZvGvdB02b4Z33lELOkeMULmi\nY0ejI6teuq7/7dI0DVdb/P44dUptlv/+e9UN7f777WoTsW7Ryf2jgAPvZlD6UyZZFe5s8wojdHht\nbpzkTadOtp+gdV3nyJEjbNiwgZ9//pmNGzcSGRnJkCFDGDJkCJ07d77gSm5d19FR87o6YDn/8UU+\nZgEqLBbKzrvKdf3v7595W2w2U2A2U2AyUWA2k28ynXt89m1WZSVlFgth7u7UrlVLvXV3J+zM4/oe\nHjTw8KCBpyf1PDzwuJwhtbQ01T60QQN1zruVRxEsFhOnT88hMfEl6tefSmTkDFxc7HdqwVrsM1mX\nlKhy8f331Xjv/ferAxdk79IlSUmBefPUmRS1a6ukffvtxlXbFouFjIwMUlJSSElJITs7m5ycnHPX\n2fcLCwspLS09d5WUlFBaWkp5eTn//H7UNO3sNzeapuHh4XHBy9PTE39/f/z9/QkICLjg48DAQMLC\nwggNDSU0NBQfH5/qW+gSG6uq60OH1KleI0fa7FyFucxM2o95HPg4C/PmbHIq3DgYVpuQW8PoN97n\nbxW0RdcpMZspPpN8isxmis9eZz529io5k6gqdJ2K895e8GO6TqXFci4ZmvkrGZ7/1nyBj5l0ncrE\nRMpjYynfs4eKnTtB03Dr0gW3Tp1w7dABQkL+lmD18/7+2SQMoJ25XDRNvT3/sabh8s8/1zQ8NA1P\nF5dzl8d5j8//mI+rK/6urvi7uV3wrZ+rK6Hu7gS4uVX/gqtdu1SiHj9e7Wiw8vdibu5G4uMfwt09\nnObN38PHR9ozXox9Juvz7719u0raq1erDfqTJzteuWglZjOsW6eOn/31V9UZbcwY1Yu/uncaZWdn\nc+zYMeLj4zl27BjHjh0jMTGRU6dOkZaWRkBAAPXq1aNevXqEhoYSHBx87goJCSEoKAg/Pz+8vb3x\n8vLCy8vr3GMPD49zyflCv7xMJhPl5eUXvEpLSyksLKSgoODclZ+f/7f3z75gyMrKIjMzE7PZfC5x\nn3+FhYURERFx7qpTpw7h4eGX1vd540aYMUP9p7zyihoxsoHStCijnN3zMjm9NIuAAwXE+3pwtL03\n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\n69eXZs2aJZVlknOSpfYr2kudVnaSUnJTLLqXlJRd0okTvlJMzBzJaDSY5R6ZmZL0+uuS5OcnSb/+\nKklGo1luIyNTIjEajdJXv38l+c71lfZH7i/4vFotScOHS9LTT0tSQkLh1jodd1ry+8pPWnJmiZl2\nK/OkEbL7+JppUQfvCy+8QKdOnZg2bZolt2FWziWc4+mlT9O8YnN2D92Np6NlyqVKkoHo6I+4dm0s\n9eptoGrVqWaJ9t62DerWFXmnYWEiHasMGkpkZB6KQqHg3VbvEvJiCMO3DGfOiTlIkoS9vei73qMH\ntGwp/j4eRfNKzTk+6jhf/P4Fnx39LP+gI1MOsagZfMSIESxbtgyrMppcu/riat7e+zY/9PiB/nX7\nW2wfWm0KV68OQZJ0BAeHYG9v+ijT1FR46y1h+v75Z3je/I24ZGRKPLGZsfTf0J+qrlVZ3ns5TnYi\nR3H1ahEtvmYNdOz46HUScxLpsroL7au1Z16XeaUikFbm3ymVPmutVoutbdlrFac36pm6fyrbrm1j\n6+Ct1PexXN3MrKzThIUNxMfnJapXn4mVGQL0tm+HV18VPrlZswrnj5ORKS9o9BrG/jaWsDthbB+8\nnUouonTy0aMwcKBIYRwy5NHrZKgz6LGmB7U8a7G059JSH2xbXimVYl0WTTopeSkM3jgYaytrQl4M\nwUNpmX6OkiQRH7+ImzdnULv2Ury8epv8HunpMHGiKBe6bBm0aWPyW8jIlAkkSWLOiTksOrOIrYO2\n0qxiMwAuX4auXUVhoNdff/Q6udpc+m/oj4ONAyEvhli0LLFM0SiqWMu2FBNyIfECzZc2p5l/M3YN\n2WUxoTYaNVy7Nob4+MU0afKHWYR6505o0EA0Lbh4URZqGZn/QqFQ8P5z7/Nt12/p+mtXNl3ZBIhm\nNcePi9P1p5+Khjb/hZOdE9sGb8Pe2p4ea3qQrcl+AruXKQnIJ2sTsfbyWt7c/SbfdfuOwfUHW2wf\nWm0Sly/3w87Olzp1VmJj42zS9fPyRNONPXvEabptW5MuLyNT5jmXcI7ea3vzxtNvMOXZKSgUChIT\nxQm7TRv45ptH52IbjAZe3/U65xLOWTRwVebxkU/WFsJgNDB1/1TeP/g++4fvt6hQZ2ef4+zZ5ri7\nd6JevY0mF+pz56BpU8jJgdBQWahlZIpCU/+mnHrlFL9e+pW3dr+FwWjAzw+OHIHz5+Hll0Gv/+81\n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\n", "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Combining Covariance Functions\n", "\n", "Covariance functions can be combined in various ways to make new covariance functions. \n", "\n", "### Adding Covariance Functions\n", "\n", "Perhaps simplest thing you can do to combine covariance functions is to add them. The sum of two Gaussian random variables is also Gaussian distributed, with a covariance equal to the sum of the covariances of the original variables (similarly for the mean). This implies that if we add two functions drawn from Gaussian processes together, then the result is another function drawn from a Gaussian process, and the covariance function is the sum of the two covariance functions of the original process.\n", "$$\n", "k(\\mathbf{x}, \\mathbf{z}) = k_1(\\mathbf{x}, \\mathbf{z}) + k_2(\\mathbf{x}, \\mathbf{z}).\n", "$$\n", "Here the domains of the two processes don't even need to be the same, so one of the covariance functions could perhaps depend on time and the other on space,\n", "$$\n", "k\\left(\\left[\\mathbf{x}\\quad t\\right], \\left[\\mathbf{z}\\quad t^\\prime\\right]\\right) = k_1(\\mathbf{x}, \\mathbf{z}) + k_2(t, t^\\prime).\n", "$$\n", "\n", "In GPy the addition operator is overloaded so that it is easy to construct new covariance functions by adding other covariance functions together." ] }, { "cell_type": "code", "collapsed": false, "input": [ "k1 = GPy.kern.RBF(1, variance=4.0, lengthscale=10., name='long term trend')\n", "k2 = GPy.kern.RBF(1, variance=1.0, lengthscale=2., name='short term trend')\n", "kern = k1 + k2\n", "kern.name = 'signal'\n", "kern.long_term_trend.lengthscale.name = 'timescale'\n", "kern.short_term_trend.lengthscale.name = 'timescale'\n", "display(kern)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "
signal.ValueConstraintPriorTied to
long term trend.variance 4.0 +ve
long term trend.timescale 10.0 +ve
short term trend.variance 1.0 +ve
short term trend.timescale 2.0 +ve
" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Multiplying Covariance Functions\n", "\n", "An alternative is to multiply covariance functions together. This also leads to a valid covariance function (i.e. the kernel is within the space of Mercer kernels), although the interpretation isn't as straightforward as the additive covariance. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "k1 = GPy.kern.Linear(1)\n", "k2 = GPy.kern.RBF(1)\n", "kern = k1*k2\n", "display(kern)\n", "fig, ax = plt.subplots(figsize=(8,8))\n", "im = ax.imshow(kern.K(X), interpolation='None')\n", "plt.colorbar(im)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "
mul.ValueConstraintPriorTied to
linear.variances 1.0 +ve
rbf.variance 1.0 +ve
rbf.lengthscale 1.0 +ve