{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Ease of Use\n", "\n", "*Max Zwiessele* 20th of September 2015\n", "\n", "*Minor edits by Alan Saul* 19th of February 2016\n", "\n", "GPy is deveoped for the easy application of Gaussian process based analyses, for the user to not be confused by the complexity of some applications. This improves readability and prevents errors of scientific code of Gaussian process based applications. This platform is meant as a framework for your work evolving around GPs.\n", "\n", "A model in GPy is an object with an objective function. If necessary, this object can include gradients w.r.t. its parameters, in order for gradient based optimizations to take place. The useability of GPy comes with its great power and handling of its parameters. The parameters of a model are always nameable, accessible and interchangeable.\n", "\n", "We want to demonstrate the light handedness of GPys parameterized framework on a simple Gaussian process regression example in order to show how easy it is to generate an analysis flow in GPy." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caching disabled: False\n" ] } ], "source": [ "import numpy as np, GPy, pandas as pd\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the purpose of this notebook we will use the regression task of the abalone dataset - the prediction of age of Abalone (edible snails) from physical measurements. \n", "\n", "We can download the dataset from http://www.cs.toronto.edu/%7Edelve/data/abalone/desc.html. For convenience we include alittle script which downloads the data and saves it locally as a pickle file. The data gets saved in this directory. When running the script it loads the data into a pandas data frame called `data`:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexlengthdiameterheightwhole_weightshucked_weightviscera_weightshell_weightrings
0M0.4550.3650.0950.51400.22450.10100.15015
1M0.3500.2650.0900.22550.09950.04850.0707
2F0.5300.4200.1350.67700.25650.14150.2109
3M0.4400.3650.1250.51600.21550.11400.15510
4I0.3300.2550.0800.20500.08950.03950.0557
\n", "
" ], "text/plain": [ " sex length diameter height whole_weight shucked_weight viscera_weight \\\n", "0 M 0.455 0.365 0.095 0.5140 0.2245 0.1010 \n", "1 M 0.350 0.265 0.090 0.2255 0.0995 0.0485 \n", "2 F 0.530 0.420 0.135 0.6770 0.2565 0.1415 \n", "3 M 0.440 0.365 0.125 0.5160 0.2155 0.1140 \n", "4 I 0.330 0.255 0.080 0.2050 0.0895 0.0395 \n", "\n", " shell_weight rings \n", "0 0.150 15 \n", "1 0.070 7 \n", "2 0.210 9 \n", "3 0.155 10 \n", "4 0.055 7 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%run load_abalone\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Make training and test possible, by subsetting the data randomly. \n", "# We will use 1/8 of the data as training set:\n", "train_idx = np.random.choice(data.shape[0], data.shape[0]/8)\n", "test_idx = np.setdiff1d(np.arange(data.shape[0]), train_idx)[:400]\n", "# make sex a categorical factor, for usage in regression task\n", "_tmp = data.copy()\n", "sex_labels, sex_uniques = pd.factorize(data['sex'], size_hint=3)\n", "_tmp['sex'] = sex_labels\n", "data_train, data_test = _tmp.loc[train_idx].copy(), _tmp.loc[test_idx].copy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have the data, we can start writing a GP, with which we will show how you can manipulate and show the model easily. We will have one kernel for each input dimension, named after the data input. For starters we will use only one input, and expand. This will also show how easy it is to create complex GPy models and still have full access to all parameters and their settings." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Select one input for now: we will use the diameter:\n", "selected_input = 'length'\n", "simple_kern = GPy.kern.Matern32(1, # How many dimension does this kernel have?\n", " name=selected_input # The name of this kernel\n", " )\n", "# Try out different kernels and see how the output changes. \n", "# This process is called model selection, as the kernel\n", "# represents the prior believe over function\n", "# values of the output." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "X_train = data_train.loc[:, 'sex':'shell_weight']\n", "Y_train = data_train.loc[:, ['rings']]\n", "\n", "X_test = data_test.loc[:, 'sex':'shell_weight']\n", "Y_test = data_test.loc[:, ['rings']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note! Carefull with this next line on slow or low memory machines. We are running a GP on more then 2000 datapoints. If you are not sure, try modifying `GPRegression` into `SparseGPRegression`, which will load a memory and runtime efficient version of GPRegression. This will add additional parameters `inducing_input`, which are due to the sparse model." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "simple_model = GPy.models.GPRegression(X_train.loc[:,[selected_input]].values, Y_train.values, kernel=simple_kern)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "

\n", "Model: GP regression
\n", "Objective: 2170.64968542
\n", "Number of Parameters: 3
\n", "Number of Optimization Parameters: 3
\n", "Updates: True
\n", "

\n", "\n", "\n", "\n", "\n", "\n", "
GP_regression. valueconstraintspriors
length.variance 1.0 +ve
length.lengthscale 1.0 +ve
Gaussian_noise.variance 1.0 +ve
" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "simple_model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first thing which we can see, is that the diameter kernel was added properly into the model and we can see its name in the output. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Optimize the simple model and plot the result\n", "simple_model.optimize(messages=1)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_ = simple_model.plot(plot_training_data=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, the GP can fit the data ok, although the noise on the data is clearly poisson distributed. You can try to run the Poisson regression on this data now (see e.g. [Posson regression](../GPy/Poisson regression tutorial.ipynb)). We will go on using more inputs and showing the parameter handling." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def log_likelihood(m, X_test, Y_test):\n", " import scipy as sp\n", " mu, var = m.predict(X_test, full_cov=True)\n", " return sp.stats.multivariate_normal.logpdf(Y_test.flatten(), mu.flatten(), var).sum()\n", "\n", "def RMSE(m, X_test, Y_test):\n", " mu, var = m.predict(X_test, full_cov=False)\n", " return np.sqrt(((mu - Y_test)**2).mean())\n", " " ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "result_df = pd.DataFrame(index=['Log-likelihood', 'Root-mean-squared-error'])\n", "result_df['simple'] = [log_likelihood(simple_model, X_test[[selected_input]].values, Y_test.values), RMSE(simple_model, X_test[[selected_input]].values, Y_test.values)]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
simple
Log-likelihood-1097.859349
Root-mean-squared-error3.683326
\n", "
" ], "text/plain": [ " simple\n", "Log-likelihood -1097.859349\n", "Root-mean-squared-error 3.683326" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will now use the full data set, but will switch to a sparse GP for better performace." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create one kernel for each input dimension, except the categorical (sex) dimension:\n", "kernels = []\n", "for dim, name in enumerate(X_train.columns):\n", " if name != \"sex\":\n", " kernels.append(GPy.kern.Matern32(1, #input dim\n", " active_dims=[dim], # Dimension of X to work on\n", " name=name\n", " )\n", " )\n", "kern_numeric = reduce(lambda a,b: a+b, kernels)\n", "kern_numeric.name = 'kernel'" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
kernel. valueconstraintspriors
length.variance 1.0 +ve
length.lengthscale 1.0 +ve
diameter.variance 1.0 +ve
diameter.lengthscale 1.0 +ve
height.variance 1.0 +ve
height.lengthscale 1.0 +ve
whole_weight.variance 1.0 +ve
whole_weight.lengthscale 1.0 +ve
shucked_weight.variance 1.0 +ve
shucked_weight.lengthscale 1.0 +ve
viscera_weight.variance 1.0 +ve
viscera_weight.lengthscale 1.0 +ve
shell_weight.variance 1.0 +ve
shell_weight.lengthscale 1.0 +ve
" ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kern_numeric" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have a kernel over all input dimensions named in the right way. We can use this kernel in a `SparseGPRegression` model:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "numerical_model = GPy.models.SparseGPRegression(X_train.values, Y_train.values, \n", " kernel=kern_numeric, num_inducing=40)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "

\n", "Model: sparse gp
\n", "Objective: 1742.19660811
\n", "Number of Parameters: 335
\n", "Number of Optimization Parameters: 335
\n", "Updates: True
\n", "

\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
sparse_gp. valueconstraintspriors
inducing inputs (40, 8)
kernel.length.variance 1.0 +ve
kernel.length.lengthscale 1.0 +ve
kernel.diameter.variance 1.0 +ve
kernel.diameter.lengthscale 1.0 +ve
kernel.height.variance 1.0 +ve
kernel.height.lengthscale 1.0 +ve
kernel.whole_weight.variance 1.0 +ve
kernel.whole_weight.lengthscale 1.0 +ve
kernel.shucked_weight.variance 1.0 +ve
kernel.shucked_weight.lengthscale 1.0 +ve
kernel.viscera_weight.variance 1.0 +ve
kernel.viscera_weight.lengthscale 1.0 +ve
kernel.shell_weight.variance 1.0 +ve
kernel.shell_weight.lengthscale 1.0 +ve
Gaussian_noise.variance 1.0 +ve
" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numerical_model" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "numerical_model.optimize(messages=1, max_iters=3e3)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ngCigZOOpXfUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "numerical_model.kern.plot_ARD()\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Evaluate the log likelihood for the whole numerical model:\n", "result_df['all numerics'] = [log_likelihood(numerical_model, X_test.values, Y_test.values),\n", " RMSE(numerical_model, X_test.values, Y_test.values)]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
simpleall numerics
Log-likelihood-1097.859349-1034.375885
Root-mean-squared-error3.6833263.002696
\n", "
" ], "text/plain": [ " simple all numerics\n", "Log-likelihood -1097.859349 -1034.375885\n", "Root-mean-squared-error 3.683326 3.002696" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When comparing to the model with only the one selected input we have a slight improvement in RMSE. Now we have an additional input, which seperates the data into three different tasks. We can resolve different tasks in GPs using the so-called coregionalization technique." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_ = data[['sex','rings']].boxplot(by='sex')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to add coregionalization to a model we merely have to create the right kernel, which understands the coregionalization structure in the data:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ "kern_coreg = GPy.kern.Coregionalize(1, # Dimensionality of coregionalize input\n", " len(sex_uniques), # How many different tasks do we have?\n", " rank=3, # How deep is the coregionaliztion,\n", " # the higher the rank, the more flexible the\n", " # coregionalization, rank >= 1\n", " active_dims=[X_train.columns.get_loc('sex')] ,\n", " # Which dimension of the input carries the task information?\n", " name = 'sex',\n", " ) * kern_numeric.copy()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "full_model = GPy.models.SparseGPRegression(X_train.values, Y_train.values, kernel=kern_coreg, num_inducing=40)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "full_model.optimize(messages=1, max_iters=3e3)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\navh/rMQ/jv2YNGcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "W, k = full_model.kern.sex.parameters\n", "coregionalization_matrix = GPy.util.linalg.tdot(W)\n", "GPy.util.diag.add(coregionalization_matrix, k)\n", "\n", "fig, ax = plt.subplots()\n", "c = ax.matshow(coregionalization_matrix, cmap=plt.cm.hot)\n", "ax.set_xticks([0, 1, 2])\n", "ax.set_xticklabels(sex_uniques[[0, 1, 2]], fontdict=dict(size=23))\n", "ax.set_yticks([0, 1, 2])\n", "ax.set_yticklabels(sex_uniques[[0, 1, 2]], fontdict=dict(thickness='bold'))\n", "ax.xaxis.tick_top()\n", "plt.colorbar(c, ax=ax)\n", "fig.tight_layout()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "full_model.kern.kernel.plot_ARD()\n", "_ = plt.legend()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Evaluate the log likelihood for the whole numerical model with coregionalization:\n", "result_df['coreg'] = (\n", " log_likelihood(full_model, X_test.values, Y_test.values),\n", " RMSE(full_model, X_test.values, Y_test.values)\n", ")" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
simpleall numericscoreg
Log-likelihood-1097.859349-1034.375885-1051.892968
Root-mean-squared-error3.6833263.0026963.034311
\n", "
" ], "text/plain": [ " simple all numerics coreg\n", "Log-likelihood -1097.859349 -1034.375885 -1051.892968\n", "Root-mean-squared-error 3.683326 3.002696 3.034311" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this particular case we can see, that making the model more flexible by adding more inputs and priors leads to a better result, this is not necessarily true, as the model may get too flexible and overdoes the fitting of the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have seen how easy it is to build a complex model around a dataset using GPy. As a last I want to show the comparison between all three models:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [], "source": [ "result_df.loc['neg-log-likelihood'] = -result_df.loc['Log-likelihood']" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_ = result_df.T[['neg-log-likelihood', 'Root-mean-squared-error']].plot(kind='bar', subplots=True, legend=False)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }