{ "metadata": { "name": "", "signature": "sha256:dedd4a39e2a148ee282e8a5d84b4f97a4aa9cacc9b315bc442023e6b1c50434b" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Low Rank Process with Non Gaussian Likelihood\n", "\n", "# Gaussian Process Summer School, Melbourne, Australia\n", "### 25th-27th February 2015\n", "### James Hensman and Neil Lawrence\n", "\n", "In this lab we are going to consider approaches to dealing with non-Gaussian likelihoods." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import GPy\n", "import pods\n", "from IPython.display import display" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sparse GP Classification\n", "\n", "In this section we'll combine expectation propagation with the low rank approximation to build a simple image classificationa application. For this toy example we'll classify whether or not the subject of the image is wearing glasses.\n", "correspond to whether the subject of the image is wearing glasses.\n", "Set up the ipython environment and download the data:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = pods.datasets.olivetti_glasses()\n", "Xtrain = data['X']\n", "ytrain = data['Y']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here\u2019s a simple way to visualise the data. Each pixel in the image will become an input\n", "to the GP." ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(Xtrain[120].reshape(64,64,order='F'),\n", "interpolation='nearest',cmap=plt.cm.gray)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nItYC2N92gZtvvhnA4sw6Jkkyng0bNmDDhg2j/W3btrUeawd9KeV2ALcDQERsBvD5UsqfRMR/BnAL\ngDsG/9/Tdg3VS4e41XK1uomuZGPdzgXG1Os7nZfrr7rk8uXLR9uqd7lVWnxNNqcBwHPPPTfaVrdY\nF+WG26QmO7dajtuuz4HbpH3GLqVaxvfXazpXaWfqc9QmR3FtULdmnovgQKZA89l2CXDpcgPWRtXp\nUtZGV+ecYSu+CuCGiNgJ4OOD/SRJ3gZUO+eUUrYB2DbYPgTg+klVKkmSyXHCe+R1MdmxF5yLHa7X\nZNONeuSxGMbiPNAUAfWavNrLBYdU8d553bHYrPVk8bSLaMxecWp25BjybuWeis0stmv7XC7C2rx6\nivPS5H5xJjQX/FKvyXVx5lgXnNUF+6hVb4GFebam732S9Iwc9EnSM3LQJ0nPmLhOP9SHukTHqXXR\nVb1v1apVo23VT1mXVPOMW0l35plnjrZ1VRjrbHrNw4cPt9ab9UDVM/kezhSm+j7rzk4/1Vxv3D7t\nT8bp1C75hCtTE5MzobEp1bn9uhWG2i/OvdUFLHXvpNatDeeGq/3CddE21ObHa1y/6qgkSd4x5KBP\nkp4xcfF+KG4tVmBMLlMxyJk6nLnE1YVFQFUZFppfje+hIrULDslqgYqmLNppG1jEVfGTzZB6P2fm\ndKvQ+DpaT+4zLeN9F9teTWjcLy6ttAt+qeI8PxcVm12Ka7e6stZjzvW1W+np0rg36lF1VJIk7xhy\n0CdJz8hBnyQ9Y+I6/dC05PTaxQiSCTR1NtWnWJfV89hMplFnXH56F8jRuQvzvtaz7fpAsw3scgw0\ndcvZ2dlGGdd79erVjTJuu+qnLjKRW9HoEjd0yd3HcN30Oeg+w32o7xm7EqveXpvX3uXHczp8rXlN\nj3XXzPz0SZKMJQd9kvSMJctltxTXZlOOlrHoqCIne6mpJx17vqn4xPsuT5rDBcPQ+7n8eCwCtgUu\nAY4VD9kcpKYirpvrT+dd5vrB5SZwufrUO9B55LkVh3ye5il0AT34fdG2c39qGb+fLuiKMzt2icHf\nRn7pk6Rn5KBPkp6Rgz5JesbEdfqF4PQwZ+p7/vnnR9u6mszlN2dTmEbHefbZZ0fbqiuzfqV6pprU\n2lAdlHVZ1b+5ns7ko9fk85zJR8tYl1RzGrddz+O+1jIXqNKt8uP7u+fnVu6pudBFwHEBJ1lXV93c\n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\n", "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now fetch the class labels" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Divide the data into a training/testing set:" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we choose some inducing inputs. Here we've chosen inducing inputs by applying k-means clustering to the training data. Think about whether this is a good scheme for choosing the inputs? Can you\n", "devise a better one?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import cluster\n", "M = 8\n", "#Z, distortion = cluster.vq.kmeans(Xtrain,M)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "Xtrain_std = (Xtrain - Xtrain.mean(0)[None,:] )/ (Xtrain.std(0)[None,:])\n", "Z = np.random.permutation(Xtrain_std)[:M].copy()\n", "print Xtrain.mean()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "132.132182617\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we\u2019re ready to build the classifier object." ] }, { "cell_type": "code", "collapsed": false, "input": [ "k = GPy.kern.RBF(Xtrain.shape[1],lengthscale=20) + GPy.kern.White(Xtrain.shape[1],0.001)\n", "model = GPy.models.SparseGPClassification(Xtrain_std, ytrain, kernel=k, Z=Z)\n", "display(model)\n", "model.optimize()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "clang: warning: argument unused during compilation: '-fopenmp'\n", "In file included from /Users/neil/.cache/scipy/python27_compiled/sc_1790bf65208b11355ffcfd4b65a5f1091.cpp:11:\n", "In file included from /Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/scipy/weave/blitz/blitz/array.h:26:\n", "In file included from /Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/scipy/weave/blitz/blitz/array-impl.h:37:\n", "/Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/scipy/weave/blitz/blitz/range.h:120:34: warning: '&&' within '||' [-Wlogical-op-parentheses]\n", " return ((first_ < last_) && (stride_ == 1) || (first_ == last_));\n", " ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ ~~\n", "/Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/scipy/weave/blitz/blitz/range.h:120:34: note: place parentheses around the '&&' expression to silence this warning\n", " return ((first_ < last_) && (stride_ == 1) || (first_ == last_));\n", " ^\n", " ( )\n", "In file included from /Users/neil/.cache/scipy/python27_compiled/sc_1790bf65208b11355ffcfd4b65a5f1091.cpp:23:\n", "In file included from /Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:4:\n", "In file included from /Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:17:\n", "In file included from /Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1761:\n", "/Users/neil/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: \"Using deprecated NumPy API, disable it by \" \"#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\" [-W#warnings]\n", "#warning \"Using deprecated NumPy API, disable it by \" \\\n", " ^\n", "/Users/neil/.cache/scipy/python27_compiled/sc_1790bf65208b11355ffcfd4b65a5f1091.cpp:24:10: fatal error: 'omp.h' file not found\n", "#include \n", " ^\n", "2 warnings and 1 error generated.\n", "\n", " Weave compilation failed. Falling back to (slower) numpy implementation\n", "\n" ] }, { "html": [ "\n", "\n", "

\n", "Model: SparseGPClassification
\n", "Log-likelihood: -329.515082269
\n", "Number of Parameters: 32771
\n", "

\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "
SparseGPClassification.ValueConstraintPriorTied to
inducing inputs (8, 4096)
add.rbf.variance 1.0 +ve
add.rbf.lengthscale 20.0 +ve
add.white.variance 0.001 +ve
" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 1\n", "Look at the following figure. What is being shown? Why does it look\n", "like this?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.figure()\n", "plt.imshow(model.Z[0].gradient.reshape(64,64,order='F'),\n", " interpolation='nearest',\n", " cmap=plt.cm.gray)\n", "plt.colorbar()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAATMAAAEGCAYAAAAJ73JAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXuwXNV15r/FQ2DMQ4iXJCQk9AKJtwwCjHkZEDKOceIZ\nG3smjsvxpFI1ccy4ZlKxnaqZ8h8zsV0Zx56KM5U44FCeVGKwjYMxFhIP2xAMWCCBJCT0BgmhBy9Z\nOFYs0Jo/uvvoO9/ts27fvt23722tX5VKp3ufs88++5y7e6/vrL2WuTuSJEnGOof1ugFJkiSdIAez\nJEn6ghzMkiTpC3IwS5KkL8jBLEmSviAHsyRJ+oIczJIkaYqZ3W5mO81sZYfqW2xmr5vZD+X7T5vZ\nBjM7YGYT2q0/B7MkSar4FoBFHazvKwA+3uT7RwFcB+CF4VSeg1mSJE1x90cAvM7fmdlMM/uxmS0z\ns5+Z2VlDqO8hAG82+X6Fuw9rIAOAI4ZbQZIkhxR/C+AP3X2DmV0K4K9Rm1X1nBzMkiRpCTM7FsDl\nAO4ys8bX4+plHwLwxSaHbXP3941E+3IwS5KkVQ4D8Ia7X6QF7v59AN9voY6uLQZPzSxJkpZw918C\n2Gxm/x4ArMb5Q6zGhlleSQ5mSZI0xcz+EcBjAM4ys61m9kkA/xHAp8xsBYBVAG4eQn2PALgTwHX1\n+m6of/8ZM9sK4HQAz5rZ37bV3uGEADKzRQC+BuBwAH/n7l9uu7IkSZJh0PZgZmaHA3gewPUAXgLw\nCwAfc/c1nWtekiRJawzHzFwAYIO7b3H3/QD+CcAHO9OsJEmSoTGct5mnA9hKn7cBuJR3MLMMY5sk\nPcLd2xbTgaH//Q73fMNlOINZSxf6vve9D+vXr8e5556LuXPnYu7cuQCAvXv3Fvvs37+/XDGZvgcO\nHKis++233y59PuywgxPNZsctWbIECxcuLO0HAOQzM6DOI488sul+2u7DDz+8sk415c0MixcvxqJF\ni8Jr0DI+37hx40plv/nNbyrbyedvdr4HH3wQ11133YA+4+O0zohWpYtm+z388MO49tprB5yP2/aO\nd7yjVPbrX/+6ss6jjjqq2I7u0b/927+VysaNG4elS5fihhtuGNBn/Pmtt94qlfH943sClO+f9jXX\no9cwbtw4/Mu//AuuuOIKKJMmTQIAbNiwARs2bCi+X7JkyYB92yH6+2P0b6oXDGcwewnAVPo8FbXZ\nWYmbbroJ9913Hz70oQ8N41RJkkTMmjULs2bNKj53ajAbSzlChjOYLQMw28ymA9gO4BYAH9Odjjvu\nOIwbN27ACM+/itGMQGdt/Ouqv97Rr4O7w8yKf1Xni2Yg+sse/Qpzmda5b98+vPXWW9i3b9+AOqOH\nh/fVGUHUTu5f7aP9+/fD3Zv+Ah9xRPXjwbMTrZPLtI5oVnP00UfjsMMOw5FHHjlgNsR9qH3N16tt\n4fPr7Ktqv0Y9ZobDDjtswPl43+h+aZ1cD8/4tW3NZnsHDhzAW2+9NeD6+DiehXaKQ2Iwc/e3zOzT\nAO5HzTXjtqo3mWeffXa7p+koM2fO7HUTCmbMmNHrJhSceeaZvW5CwWjql9H0vEyZMqUn523VzBwN\nDGs5k7v/GMCPB9uvoZP1mtH0cI6mP9oczJozmp6XqVOnDr5TFzgkZmat0jABok7RqbNO66vQOnl6\nrqYWi8Q6Heep+jvf+c7KOhU2ffQa+Dg1KfjXToV8NqvVLGKzJfrFVLOW29LMnGoQmcp6vnZ/sfm4\nSF5QuF+GYk6puVp1vqE8g5GEwOfTZzAy26P9IvOUn2s9XyfIwSxJkr4gB7MkSfqCHMySJOkLcjAj\nGvrCUFwzWEdSzYP31Y5mzUCPO/bYYyuPY1Sn4jpZnwBqrgTN2qXH/eu//mupjHUPPY61IdXr9u3b\nV2yr42jkusAaj14f91PkiBv12XHHHVf6/MYbbzStX+tUjYevT9vC7VbdiIm0PdW3IlcXbmfkXqJl\n3E+RZqYuR5GzdKRPcjsj15N2ycEsSZK+4JBxzUiSpL/JmRnRMAl++ctflr7nKb9O/6Oy6LV4BE/5\n9deGzUU10SKTMHoNz1P+6NeNTStFTa1onShfw69+9avKdkb9qaZPtJaQ3SN2795dedwxxxxTKmNz\nTuuMTDsm6jOWE5RojaXWqX1fdZyej5+DZus9GwxlVQGfT/uMzzGUv4dWycEsSZK+IAezJEn6ghzM\nkiTpC3IwIxo2frNoDVXwvvrKnHUBLWN9Rl/fR7HAmrW3WT1DiffF52A9S+tRTamqfqDs4hFdn/Z1\ntISItRp1IWGtJnL30DK+pkhr0+vjOtXdg9umx3H/RtE2tC18DtUZeVmbHsf6mmptkQsQ95MuyYr0\nNCaK/Rf9TbXLWBrMeh9RLUmSUcuBAwda+tcMM1tkZmvNbL2Z/WmT8hPN7G4ze8bMnjCzc4bT1hzM\nkiSpxN1b+qfUEx79FYBFAOYB+JiZaficLwB42t0vAPB7AL4+nLaOmGYWeTUPJSBiFD6ZzQ2dcvM0\nXk20ViMk6PmisNn8WU0RbmezkNpV7WLTJOqzyG1Df0X5+tQ8Pf7444vtPXv2lMr4fp5wwgmlssjN\ngPteXRdYNlAJga89ikIyfvz4Uhmbj3pc5K7D1xBFxojcPfR54c+vvvpqy+fTlSdMFNWlEwzDzCwS\nHgGAmTUSHnHMw7kAvlQ/z/NmNt3MTnH33VpZK+TMLEmSStqdmaF5wqPTZZ9nAHwIAMxsAYBpANqO\nQpmDWZIklQxjMGtlSvclAOPNbDmATwNYDqA6AN0gpGtGkiSVVJmZjz32GH7+859Hhw6a8Mjd9wL4\n/cZnM9sMYFO7be36YNbQOlRzYVtftZooMQlrX1G0Br0J/Fk1LD5fFK1T23XSSScV26rR8TnU/SLS\n6Fg70fOx5qPnY/1JtRq+dtWNuJ3RUiftF752PY71LW0na1PqnhBpgnzfo0iz2mesF0buLKwPAnHE\nEG6b1sll+pzxfdGIxnwOPR8fp2V8DSO5nOnyyy/H5ZdfXnz+6le/qrsMmvDIzE4A8Gt3/42Z/QGA\nn7r7m+22NWdmSZJU0m7UjKqER2b2h/Xyv0HtLeff15MNrwLwqeG0NQezJEkqGY7TbLOER/VBrLH9\ncwBntX0CoeuDWWPqG5lMkduGRk/gKfcrr7xSKouC+0VmbZR7kD3PtS18XHTTo+l/FD1B4XPo9UVB\nK/ma1MufzcdoZYSa9Hz/IvcZNcP4PkSZySNTMkpSEq3giPKeRu4e6v5w6qmnVp6PXUF05cfevXuL\nbb3P0SoG7os33yxbYdzubmQVH0srAHJmliRJJTmYJUnSF+RgliRJX5CDGdHojCihSRQ9QXWVHTt2\nFNtaJ+tBqnNEbg1cT5R4V1+1R7oOH6e6WOQq0ar2Fuk/2i+sRalWE2lYfL2q/1SdGyhrPpEWFS0h\n0vvHZZH7TOR+EUWV0LawNqV1clmUmET7jK9BIy9zxnKtM0oCzM9EpCW2y1jKATCoYmhmt5vZTjNb\nSd9NMLOlZrbOzJaY2fiojiRJxibDWAEw4rTy+uNbqK18Zz4HYKm7zwHwYP1zkiR9xlgazAY1M939\nkboXL3MzgKvr23cA+AkqBrTGNDXKDxnlF9SgeVxPdJx2cJT4IXKdYNNVz8emUOSxHplFUVKPaKVA\nZIapuRFde+Se0GoilChBTBS9RM12Poe6iUSJV9jcV5mAn58oz6rC+0ZBOaNrj6QVjYTBbkYa+YP3\n1X6JImp0gtEyULVCu5rZae6+s769E8BpHWpPkiSjiENhMCtwd68vR2jKd77zHQC1X8g5c+Zgzpw5\nwz1lkiTCtm3b8NJLL3W83kNhMNtpZhPdfYeZTQKwq2rHW265BQCwa1flLkmSDJMpU6ZgypSDocCe\nfPLJjtR7KAxm9wD4BIAv1///QeUJ6lqOajysV6gewx2oS5Y4AkWUZCNKhKKaUqTHsLuCni/SXKJE\nGqx76PlUt6o6X3QNSrTkJTqOtajIpUPLWk2uErVF+yxyEWA3B9XMougX3J+RXqjtjPRQ1gH1HnG/\n6PIwfs7VpSNK8MzPWTcSmowl14xBBzMz+0fUxP6TzWwrgP+OWlC1O83sUwC2APhINxuZJElv6KuZ\nmbt/rKLo+g63JUmSUUZfDWbdgqfuOh1ns2HChAmlMg7AqESrCiLYxFAveDa1ItM1MjnV9IkiJFTV\nD8RTfjan1NyIEqjw9elr/igoYKuBAIcSxYL7QtvCpp2W8Wc1Cbmdag5HJnZk0vNzoH3darITLeO2\n6TN+yimnVLaT6+mGSZiDWZIkfcFYGswyoUmSJJUMZwXAYEmA6/tcY2bLzWyVmf1kOG3NmVmSJJW0\nOzOjJMDXo5bc5Bdmdo+7r6F9xgP4BoAb3X2bmZ08nLaOWKRZ1RaiCAlRlM9Iw4pcAvimqAZx4okn\nFtuqZXCEhKidmrSENZeTTy7fI9aN9GFh/Sdy29B2sktAdO2R60e05EzbGUWljYjcRLivNSIJ60jH\nHntsqYzdHKKIE7p8itH7x1qbJh9hNHIv+1Oq/holOY4SEkcRaplo+Vu7DEOHayUJ8H8A8D133wYA\n7v6KVjIU0sxMkqSSLicBng1ggpk9bGbLzOzjw2lrmplJklQyjBcArRx4JID5AK4DcAyAn5vZ4+6+\nvp0Tdn0wa0yf1Wxgc0CnztyBUXQI7WguU9OOp/HqRf3CCy8U2xo0j82piRMnogq9Bq5H64yCT7JJ\noy4d3Gd63Ouvv15sq3c5mwpqnvL1RV73ap7yZzW1uEyPY5Nel7hxP+lxbFqqWwibp9rXbJ6qmcnn\nUFOSP6v5xs+y9lmU7ITRe8v3TK+PzcwoEOZIJjR56qmn8PTTT0eHDpoEGLWZ2yvu/msAvzaznwG4\nAMDoHMySJBm7VA1m8+fPx/z584vPt912m+4yaBJgAP8M4K/qLwuOAnApgAHZhFslB7MkSSpp18xs\nJQmwu681s8UAngVwAMA33f25dtuag1mSJJV0Mwlw/fNfAPiLtk9CdH0wa2heUaJY1TKihBiM1slJ\nIV599dVSGcd60tf3rK/NmzevVMZazRlnnFEqW7duXbH92muvlcrOPPPMYnvPnj2lMtaYVMNiPU+1\nE75e1UdYc1GtJnrtHy1Lih5kvoZo2ZUuR9u5c2exvWHDhlIZu0do5AjuQ9VR+TPrSwDw7ne/u9jm\n+6XXcPzxx5fKuM/0WYp0TT6On0ctUzi6rD6frPvpPeG+bnWJ2VDoq6gZSZIcuoyl5Uw5mCVJUkkO\nZkTDjIoCx6nJFCUK4X3Va5tNSXa3AIDTTz/or8cROQHgpJNOKrbVFOE8nWrebNy4sdiOzCmFHxD1\nZud+UhOUzRQ1b9jFgl0V9Djtz8jVhVGzj805dbvhOvU4vkdqdrE5pX3N9/qyyy4rla1Zc9CpXF0s\nuA/1mbjqqqtQxdy5c4vtlStXlsrY/UOfXXY30f7klSe6giJK1MOfo6gnet87QQ5mSZL0BTmYJUnS\nF+RgliRJX5CDGdFYChJFHI10MdUkomVJvOxkwYIFpTLWxVSTePzxx4ttXaJxzTXXFNu7d++urFOj\ng/KrdtWNWOf46lfLDs8f+MAHim3VfziihpaxBqP9wkufhhL5g4kSJ+sDz+fQJUt87Xo+Xgp02mnl\nVKwvv/xysc1aJVB28VA3mNmzZxfbl156aamM9501a1apjK+JNTkAmDZtWtM2A2VdLIpMrM8E16Ou\nIHz/tIy1WtVfO0G6ZiRJ0hfkzCxJkr4gBzOiyiuZv1dTkl/tq0tHFOWBp9wa6WD58uWVZfz6/uKL\nLy6Vvfjii8W2mj78il5f+0+ePLnYVlcQNq8uvPDCUhnvq6/auV901QT3U2SCRgk4otyY0WqEKNmJ\neuSzp70mJuF2q2sLu3ScddZZpTI2EdVNZP36gwEYtm0rB2244IILim3tl1WrVhXbUWDKKHCj9hmb\ngZoPllcjaL8w+rfC5++GmZmDWZIkfUEOZkmS9AU5mCVJ0hfk20yiEQFVbX3uJB39WY+JIgjoa3h2\nSVD3BNafOCorUI6GodFkWYfQ4/iazjvvvFIZv0LXpSvcFj0uSmjL/RQl0NUIEKwRalv4uKEkHY7u\nURSJla9JI6Jw/2qdrEGym4bWo9FLeF99JrZu3YoquJ3nn39+qYz1StZUtUz7k/Utfeb5Pui9ZS1T\n+4yPU3ePTjCWZmaDxtk1s6n1hAOr67ntPlP/foKZLTWzdWa2pJ42KkmSPmI4eTNHmlaChu8H8Fl3\nPwfAZQD+yMzmAvgcgKXuPgfAg/XPSZL0Ed1MAmxmHzSzZ+pJgJ8ys/cOp62DmpnuvgPAjvr2m2a2\nBrWUUTcDuLq+2x0AfoImA1rDFFRvbzY/okQMkamlLg+MvqZm80rNMPbWVxOG3T1OOOGEUhkHRNRX\n9Jqbswo1G9gEjZJXqPnG5x+KG0UUrSFyBYlWaXCd2s4o32bUTj6HRhPhdmpyFTZP1XTl+xe5Q6i8\nwBFL9HxsYuvzyc+kHsf3Xe8f95n2H5vO7eYyjehmEmAAD7j7P9f3Pw/A3QBmDaisRYaUzqWenOAi\nAE8AOM3dG85AOwGcVnFYkiRjlGHMzIokwO6+H0AjCTDXzSLmsQCGlQS45RcAZnYsgO8BuNXd98ra\nPDezple0dOlSALUZyOzZs0tr5ZIk6QxbtmzBk08+2fF6h6GHNUsCfKnuZGa/DeDPAUwCsLDdkwEt\nDmZmdiRqA9m33f0H9a93mtlEd99hZpMA7Gp27A033AAgXsScJMnwmD59Oi666KLi85IlSzpS7zBc\nM1oaBevjyQ/M7EoA3wZw1iCHVDLoYGa1KdhtAJ5z969R0T0APgHgy/X/f9Dk8GJkj6JmKLyMRn8Z\n+DhdlsSzRV2aw+4Xqqdx23T5DWtRWieX6Wt/rlNdSFgfUf2HX6/rtbOuo5FtObJClMxXiXSq6Fc5\n0syixLTRvWVNK0rOwYmEgfJ90X5hVBfj50fbyW3R/mM9VLVRfiY0ITEvydIkztwvqn3xM6/t5GsY\nyUizq1evxurVq6NDW0kCzOd5xMyOMLOT3P3Vqv0iWpmZXQHgdwE8a2aNBY6fB/AlAHea2acAbAHw\nkXYakCTJ6KVqMJs3b14pk9ldd92luwyaBNjMZgLYVJep5tfP19ZABrT2NvNRVL8ouL7dEydJMvrp\nZhJgAP8OwO+Z2X4AbwL46HDa2vUVAI0ps5pT0av2Zsc34NfiavbxlFsD4/GrcPUSZ7Mlym2o7gkc\nrFFNSTZT9IFgl4AosKF6dEfuHtyfWif3i0aV4H3VXSCSApjoPkQrFaJ7q24UUZ3RCgc2VzmpzWC0\nusJBTUleVaDPBLdzKMEu+bPeP26bPp+doJtJgN39KwC+0vYJhFybmSRJJaPFu78VcjBLkqSSHMyS\nJOkLMmoG0dBd1J6P9Bj+NVC9grUF1cVYu9GlR6xXaJ38Sltf37MWpTeW26ltYW1DdQ7WY/RVO7uG\nRJFDo6TKEVHyYNW+onYykR6qv+ysy0UJbaMIHpFLTpSwRZ9B3jdayqX9wufT/ox0K9ZA9Ti+du3P\nyE2F+1o1z06QM7MkSfqCHMySJOkLcjBrQuRhPZRAdVX7AeUlU2pusMmm5iKbEVrG54giTkRuDWqm\ncJ16Dey2oW2JEoxE2kZkhrGZqWXc9+rywH2h18Bt0WtnU0tN5ch05jpVouC2qQkarXDg4yJTTk1H\njqLB9wso9+FQEsTwNUX5NvX62DzV1SudIAezJEn6ghzMkiTpC3IwS5KkL0jXjCZESzSiDlP9gIlc\nCaLX6RoVNnpFz2Ua6YC1E9VAoutjfS3Sajh5C1COiKshlbge1Xi4L/R8rLNE2qW6l3CduuyKI4ho\nX3P/apQH/qy6GF+7akO8PE0T0vByI62TrymKGKvPEi8r03vL16f6FtcTLWPTOrkebQsTuc+0S87M\nkiTpC3IwS5KkL8jBjKgyE7mTolfmkZmppg8TuYJEr+/V3IgCN0awSaORFbhMIzmwyRQFbowiVegq\nBjYt1dTiftHjIlOS71Hksa73iD3ftYzvmbppcNm0adNKZZs2bSq2X3mlHEae2xYlLVGPfD6/9jUH\ngOTIKbqvmvTcFq0zCjra6oASuTG1Sw5mSZL0BTmYJUnSF4ylt5mdf/2RJEnf0M0kwPV9/k+9/Bkz\nu6jZPq3S9ZlZletBtEyIX9Fr9IsoImekfbWaZCNamqM6DrtqRK/aNfrFrFkH85yqK8G9995bbEdR\nU1VXYXeIKHKDXh+7f7z6ajn8OvfTlVdeWSrja9LEyRxhVfXCKEEMa1raTi7TPrvkkkuK7WXLlpXK\nIq006rPIBYLr1HZGS7KiqCD8/Ojzyc91tNxO3WA6QTeTAJvZTQBmuftsM7sUwP8FcFm7bc2ZWZIk\nlXQzCTCAmwHcUT/PEwDGm1nbycRzMEuSpJJhDGbNkgBrEoZm+0xpt61dNzMb0+4ot6K+oufX1FEO\nSJ2qs2mpLh1sYmhuxcjlgl/Zq9nH6BSfTVDO2QmUvdkfffTRUhmbZZMnTy6VRclA2AzTHJ4c2UHv\nAz+IkVvDs88+Wyq7+OKLi201TyMzjPtJI05wX+sfCN9rdYfg52XGjBmlMn4mNMEIm5JaJ59Pnw9+\nttTVhU1CXTESielRbkw+LjL7ItO4XYbxNrPVA1WHavuE+TYzSZJKqgazDRs2YMOGDdGhrSQB1n2m\n1L9rixzMkiSppGo2OWPGjNIs+P7779ddBk0CDOAeAJ8G8E9mdhmAN9x9Z7ttzcEsSZJKupkE2N3v\nM7ObzGwDgF8B+ORw2tr1waxhx0evrLWMl87oK3P+rMs3WHuLosLq0hXWdVQDiZLysvalLiTsuqCa\n4PLly4ttXooDlKNhRK4n2i+sCWq0jalTD87k9ZeWr0GXCbHmo3rT6tWri23V6LjP1DWDOf7440uf\nWd/S+xAlEWGNSdvJ2qKej49TXSxKZBNpZoy2k++tuonw/YyWVkWMJteM+rFhEuD650+3fQIhfJtp\nZkeb2RNmtsLMnjOzP69/P8HMlprZOjNbYmbjo3qSJBmbDMdpdqQJBzN33wfgWne/EMD5AK41s/cA\n+ByApe4+B8CD9c9JkvQZY2kwG9TMdPfG3H8carbv66g5u11d//4OAD/BIAOaulHwZ3Uz4Cm4TsfZ\njFCzL4oaECWMYJNCgx7yjVKTgk1LfS3OdaopuXHjxmJbvecnTZpUbHMQQD0HB4YEytcU5U/UPmNO\nPvnk0me+BjVh2CyLzCI10dj9Y8uWLZXn01UTbIbpNfC+amLzvlonP4PqJsLSgAaRjKK18DOh5mGU\nqIefLXWR4T5Ud4/IHO4Eo2WgaoVBnWbN7DAzWwFgJ4CH3X01gNPorcNOAG177SZJMnrpt5nZAQAX\nmtkJAO43s2ul3M2s8moWL14MoParMXPmTMycOXOYTU6SRNmyZQteeqltF61KxlLUjJbfZrr7HjP7\nEYB3AdhpZhPdfYeZTQKwq+q4RYsWAYiDLCZJMjymT5+OefPmFZ8feOCBjtQ7WmZdrRAOZmZ2MoC3\n3P0NM3sHgBsAfBE1Z7dPAPhy/f8fVNXRGNmHMpixTqa6A+tGUQIH1b5Y19HjWK/QaKSs56muwjqO\nLj3aufOg79/27dsrz6dLnaIkuaqTMayvqasEX5PqaazB6PUxqvFwf0YuMlq2Y8eOYlt/9blOvfYo\nqgRH59VlSaz1RQlN9Hzc7kj7Ui2Yn4lIW4uW4mmfRW5FkStPJ+ibwQzAJAB3mNlhqOlr33b3B81s\nOYA7zexTALYA+Eh3m5kkSS/om8HM3VcCmN/k+9dQi1OUJEkf0zeDWSdoTJHVdYGn6lFkDEVfTVeV\nqbl46qmnNj03EOdyZJNGp/88xdfjWIzVqBIcTDBa4aDt5DL1WI/yQ27bdnB9r5rfvG+Ui1NNV+6L\nyHzTPuP7ELkgRKtC1Mxklws9H5ugJ554YqmM263uHmzOnXZa+WU994W6FUUyCO+r/cl9rcfpfWF4\n32g1QrvkYJYkSV+Qg1mSJH1BX7pmJEly6JEzM6IxsmunRMlSuUw1iSj5SET0ap/r1DJuiy7pYV1O\nNTpedqVuKRdccEGx/fTTT5fK+HrVbYN1OXb9AMq6nC6R4jKNYsEak+pNrEFGCTj0+nhJlronsL6l\nEX8j1xDWmFRPmz17dmUZR/dQtwZeeqTXzterS6R4X30++flRnZj7rNXEJ3q+yK0okwAnSZJUkINZ\nkiR9QQ5mRKMzdFrN03N9pcxlakqySRN5Zut0PMq32WpUAj2Oz6dmH59PozXwCoddu8orwdhDXsvY\nzNXVAHwNHIwRKLuCrFmzplQW5eLk/lUTm81Vje7B90hdSNj8VtOcUVOL3RO0LdxuXYmxdevB5D/6\nTLDZrm4bkesJm51qYkeuGXyPouQ4keiupmu0iqETdGMwM7MJAL4DYBrqTvfu/obsczSAnwI4CrWI\nPf/s7p+P6s1Uc0mSVNKlqBmDxkMMYilWkoNZkiSVHDhwoKV/Q6RI/lv//7eb7dQkluJrzfZrkINZ\nkiSVdGlm1lI8xCaxFJ+LKh0xzUxtff6smgSX6VIgLtNX0axfcKIO3VePY+1GNTPeV5NlMKrxcDu1\njLUaLWPtTc/HS250iQt/VvcLXo7DbiF6PtW3+HzaFq5T3TZYU9Lr4wdf7wPrgFGiZnWxYE1SdT/W\n81QX4+dF28muIOoyws9L5B6k7Yz+6KPEObyMTbW2KIlPJ2i3TjNbCmBik6I/k/or4yE2iaV4jbv/\npOqc+TYzSZJKqgazrVu3ll6uNDnuhqoyM2s5HmK9rkYsxYtRC9HflBzMkiSppGowmzJlCqZMmVJ8\nfvzxx4dS7aDxEINYipWM2GAW5YCMIiQobNLoFJ/N1Sjvopq8bFpGZmb0Gv6kk04qlUUJONjlQl/f\nT5x4cGauphYH8NMckGxCRYEG1TzlB1JdJdhk0z5jE0pdJdjs0/O1GhlD3T2iaCIckFHr5LbpfeBn\nQk1evl49H5vY+lyzia+RVPja1TSPEpOwaRnJNd2gS35mX0KTeIhmNhnAN939/QAmA/h7jaUYVZoz\nsyRJKum9Qe53AAAawElEQVRSxqem8RDdfTuA99e3n0WTWIoROZglSVJJrgBIkqQvyMGMaGgDOl2N\nXmmzVhMld1C9iT9rJE/WS1RnYH0mitKhr+9Zn9HX8OzKoG4NL7zwQrGtr/05FZ8ug2I3FXVBYE1J\n62TdSlP9sbaodXKyYtV4+JrUDYb7Qq+dz6HPQORewu3UfuFzREvVVPPkdquexmXaL3wfOPIGUL4P\nqmtyO6OlThp9mK83ej61nZ0gB7MkSfqCHMySJOkLcjAjGmaimpmR+cbT7Chfo07V2WzR47hM3S/4\n9b2aPmyyqbsHu1hs2rSpVMae9eouwCaMmmhRJAmuR/fjdusDGHnkz5o1q9jWfmF3EzXt+D5oYhKO\n/KHn43um52PTUu8fywZ67VxPlG9TpQfeV81MdTdh+NlVeYFRk5DNQL32KKpL1X5A7LLSCXIwS5Kk\nL8gcAEmS9AU5M0uSpC/ou8HMzA4HsAzANnf/QCuRIulYAAPteZ6+6lSWtQzVxaJlUKxvqT7CGoXW\nyVqNvk7npCKqiy1btqzY3r59e6mMr0mTyHI7Vf/h6+PlS1qnXjtfn7og8PU98sgjpbKHHnqo6bmB\nchQLjV7Lepr2Nbdb3QUiF4RID+Uyje4R3Vt2w9F+4TpVM2N3He0X1k71/vH5VU+LklTzoBEt/VPN\nrN0EP60ylgazVuOZ3QrgOQCNKxs0UmSSJGOfLsUz6wqDDmZmNgXATQD+DkDjZ6GlSJFJkoxtxtJg\n1oqZ+ZcA/gQA218tRYoEDk611a0hMjN5uqzTavYSV/OGp/VaJ5sm6i7ApuVZZ51VKtuwYUOxvXTp\n0lLZ5s2bi22NmsHXoO4XfH69Pm6nmpkcUSNa/aDXzp919QObKRrhgqM+aDvZVUPPxw+3mlr8HOg1\nRKYy95leA7czys+qx7HLirpisNmp0Uv4udNr5331GrhOTYDD/al/K4zKC1HO104wWgaqVgiv3sx+\nC8Aud1+Og7OyEl672rFzxUmStEyXcgB0hcFmZu8GcLOZ3QTgaADHm9m3AbQcKfLBB2shiMwMM2bM\nGLA2MEmS4bNx40asX7++4/WOpZlZOJi5+xcAfAEAzOxqAP/N3T9uZl/BIJEiG1x33XUAupM6PkmS\nGjNnzsT06dOLz41JxHDpm8GsCY0raxopshkNO151ANZSVMuIEtPylFbdKHh5UfTKXF9hc5TW554r\nJ4BZsWJFsc0aCxDrP9y2SN/SOvl6VYfjB0v1rSgaBZ9Dl9hwPeoqwfuq9sW6kZa9+OKLxbb+iHGU\nCb23UQSPSPti15couquWcRQL1bA4ei275wDAtGnTim1NuBNFk+W+OPXUU0tl0d8Df1bNjPupS4EU\nO15nq65dZjYetReP56A29vy+u1fG525ZMXT3n7r7zfXt19z9enef4+4Lq3zMkiQZ2/QqCXCdrwO4\nz93nopYIeE1UaebNTJKkki4NZoO6dtXTy13p7rfX2/GWu1fnesQILGdqvDpWM5NNoShRiMImmpoN\n/Po+CgqoESD4Zrz2WjlpMnvrq2nH5puaRSeffHLl+dgcUM9zvgY1Kdh0VlcCNt/02tU1hOFrUs96\n9oKP8oLq/eM6NVclt1sDMPL1RQERI/cS7Ws2lTl5C1C+Rxr5g8/HUUCA8jWpaa6fmeiPnsvUPOWy\nKADjWDEz0Zpr15kAdpvZtwBcAOApALf6wSznA8iZWZIklbTrmmFmS81sZZN/N/N+gWvXEaglNPlr\nd58P4FcYZKVRLjRPkqSSqpnZrl27Si9Jmhw33CTA21BbC/6L+ufvIgezJEnapWowO+WUU0oyhHoB\nDMKgSYDrA91WM5vj7utQS023Oqq064NZozPU1mftJHK/ULcG1pHUBYH1imgZlCb8YA1GXRf4tf/K\nlStLZbzc6Nxzzy2VnX322cW2Xh//oqn2xftGWpReA+s4eg3cT6ozsk4VJV+OIq/qcaxFqWYW1cl6\npSYB5r5WVxB2g1Ft9swzzyy21Y1i0qRJxba6X7BOFkWo1XvE59B7xH2veigT+WTq/Yu0y07QwyTA\nAPDHAP7BzMYB2Ajgk1GlOTNLkqSSbgxmrSQBrn9+BsAlrdabg1mSJJX08wqAIdMw96JO0Wk17xtN\nudXc4Km7JozgKX80HVeziE0fNacuu+yyYvuqq64qlXH0BA3qGCUmYdSlgq9Jy/iatJ1siuh9iHKU\nsrmoJhMfp0Iwm4+8xAYom4FqavH91OglXPb888+XyhYuXFhsq1vKRRddVGw/8MADpTI2CVUmYJki\nyuGpUgcfF5n0+gaQ75HeB64nyt16qEfNyJlZkiSVjJaIGK2Qg1mSJJXkzCxJkr4gB7MmDCURQ6sa\nT7TsQ49jPSGKSqB6GutBWuell15abHMkBaCsx6iGxa4TL7zwQqmMtSl16Tj//POLbV02s3HjxmJb\nl13Nmzev2OYkLEA5ki7XD5T1Jo3gcd999xXbjz9eDmQQuZCwq8TLL79cKuN4XHPnzi2VrVu3rthW\n7Yv7U3U41v30PkyePBlVbNu2rdiOIqJo5BZ241CXDm5nlHBHr4HPr88n/+1EywDbJQezJEn6ghzM\nkiTpC3IwIxpT5OgVtnqsc1lkEqqpxedQ73L2INdX3zyt15v30ksvFdu6ZIOjMGhuTD5fdO1PPfVU\nqYw935955plS2Qc/+MFiW4M6cj28+gAoX9+SJUtKZRzQUs32c845p9hWN5hHH3202H7sscdKZWxy\nq3nKpvPy5ctLZRy5Qu8Dm8MaxYLRe7RgwYJim+8lUHbjUHOfzXaNtsHPlj67HL1ETUJ+7qJnPkpo\nEiWP6cabx3ybmSRJX5AzsyRJ+oIczJIk6QtyMCMa9r/qW5EbBesHqjtwmb5qj5KWcJkm12UtQ8vY\nxUKj0LJupMunWNfRpUczZswotufPn18q43avXbu2VMbLeLZu3Voq47ap+wVrZhqJ9fXXX29aPwBs\n2bKl2FZXgu3btxfbeo/YjUI1F26nLhP62c9+Vmy///3vL5WtWXMw/LtG1GD3D9asAGDx4sWV13De\neecV26rf8TOh18Calt531uFUg+Rrj6IPtxqRVtsyhiLNdoWcmSVJUkkOZkmS9AU5mBEN805dLKIE\nDjxd1qkzm4v6epv3jRKoqAnKpqVGgGAzTG8sm1dqMrG5o6Yru1yo6wJ7patZxOYpR+UAgCeeeKLY\n1mgNHLVDXRD4etV8e+SRR4rt008/vVTGuTFVQmA3js2bN5fKOLqImsrsAqFe97xyQE00Poe2hU27\nWbNmlcr43ur947yW2p+cY1NXfvAzou5BfI4ogGaUtETLWGo51F0zMqFJkiSVdCPVnJlNqCc8WWdm\nS+rJfpvtd2s9CcoqM7t1sHpzMEuSpJJeJQE2s3MB/CfUIs1eAOC3zGxmVGkOZkmSVNKrJMAAzgbw\nhLvvc/e3AfwUwIeiSlvSzMxsC4BfAngbwH53X2BmEwB8B8A01JMSuPsbemzDLUGTrLJGoJ0RJTSJ\n3ChYJ9OInKzjqO7Amp3qVNxuXdLDbdNkGbykSCNHsI6jbg18Po0cwUumrr766lIZR7jgbW3nnXfe\nWSqLosmyhqZ6E0dmVZ2K+1fdWd773vcW2xpNljUlXa41e/bsyjr5vmtkW76fGo2Cl3JxchMgdg/i\n51P1NH4+9XlhDU01ZO4z1do4Qq0eF+nEnaCHSYBXAfif9XFmH2q5AZ6MKm31BYADuKaeiKBBY6r4\nFTP70/rnMK9dkiRji3YHMzNbCmBik6I/k/rdzAacxN3XmtmXASxBLQHwcgDh24ihvM00+XwzgMb0\n4A4AP0EOZknSV1QNZnv27BnwBliOG24SYLj77QBurx/zvwC82Gy/BkOZmT1gZm8D+Bt3/yZamyoW\nr9H5NXi9oU23gbJZFLltqAkaeUPzlF/L2CTVtkRTfDYHdIof5cacOPHgD5b2SxTFgr3NOZCh7quR\nONhN5Prryxm+2MxU1wzuF5UJ2ARWs4/Nf3WjYLcU7gc9n7rPsCuIRhP57Gc/W2yrTMBuFJo8hoNI\nqizB+2qUFTYJVV7Q6ClV6PVxP0U5NdWlg59rrbMTVLlmHHfccSVZgoNZtsCgSYABwMxOdfddZnYG\ngN8BcGmz/Rq0Ophd4e4vm9kpAJaaWWmdTdVUMUmSsU2PkwB/18xOArAfwH929+qpIFoczNz95fr/\nu83sbgALALQ0VbzrrrsA1MTdmTNnYubM8O1qkiRtsGnTpgEpDTtBj5MAX6X7RAw6mJnZMQAOd/e9\nZvZOAAsBfBEtThU//OEPAxjo7Z0kSeeYMWNGaYXIQw891JF6+20502kA7q5rMkcA+Ad3X2Jmy9Bk\nqqg07H/VjTi6QJTQRMtYv1Cdg3UjtfVZa1DhkpeEqObCukCUrFj1O35lr24GrBWpDscJMjSSA2tm\nU6dOLZWx5qJLljjihGoufD6NQsKfWVvTc+iSLI6ooRFDeLmWLpHiHzyO9AoA999/f7F94403lspY\n39LZCT9nmuiFnx9112HdKnKH0Puu7kJMqxFkVTPjMtVR+fzRMqh26avBzN03A7iwyfdNp4pJkvQP\nfTWYJUly6JKDGdHwntYpNn+OAjAOJRhd1PFsXul+7FqgZhibmVFiEjUN2CRVlwB+na+uC2zSqAc5\nuxmo2c7t1uO43atWrSqVcbv1HvE5NOghm4RqWvFnXY3ArgsaoYRNQu0zDqSoLiR8TWrS8zWpmRnJ\nEtxnKi/w86omKLdbTdAoaQnfB32WWF7QFQfczkM9akbOzJIkqSRnZkmS9AU5mCVJ0hfkYEY09JvI\nNUOJOjDSePg41eHYzWAoCU3YlUDbxXqJ6hyRPrJ3715UwdoUJ+EFYlcCPodqPKz7cQRVYKCbChMt\n11LXEIajwnL/AeX7ovoPl2k72f1D71Gk60RL1fieqR4aLbdjDSuKqKF6Gmto+rzw/VQXmWh5E+uj\nmlylE+RgliRJX5CDWZIkfUEOZkTDJDjxxBNL37NnOLscAOXpeeTxrLCpoMcxkYe1mgbcTnUX4OMi\ns1bNvsijm8+h3vP8YKlpxe1Wdw820djjHyibN+rWwK4M2k42O9Us4vNrGQdyjP5Q9D4wUWIZda3h\n61NTmffV/mSTTe8fP2dRAMboGVR4Xz2OV6VEfw9Rn7VLumYkSdIX5MwsSZK+IAezJEn6ghzMiIZm\noa/oOfHEN77xjcrj9XVzlDyYtYwoCbDqW6w1qD7CupG6l0TJilkbUp1PE/hWnU9dEFiLipIq67Id\nLtOkJVymepr2U6uwFqU6I6PaZfSH06oGqnWyZqfuF3yP9HmJXHn4fmp/RglGuG36vERLq7hMXXL4\n70P1wk4wlgazTDWXJEklXUoC/GEzW21mb5vZ/Ip9pprZw/X9VpnZZwarN83MJEkq6dLbzJWoxfT/\nm2Cf/QA+6+4rzOxYAE+Z2VJ3X1N1QNcHs4Y5pMH9pkyZUmzrdJxNKDV1Ik93Pk5/LXiqrsexKaRT\ndS5TN4PINYPPp+YNH6d18vnVPOXrU/OGryk6X2RqKep2UFWnBsnkMu3rKK8k39voGvQPjPtJnyU9\nf9Vx2p/RMxGdj68pWh2g7eLnJYp6EgUd7QZdCpu9FoilA3ffAWBHfftNM1sDYDKA3g1mSZKMXUaD\nZmZm0wFcBOCJaL8czJIkqaQLSYC/4O4/HEI9xwL4LoBb3f3NaN8czJIkqaRqMNu3b18oQ0RJgFvF\nzI4E8D0A/8/dmyZMYro+mDVe90+aNKn0/cqVK5tuA8C73vWuYluX9LDGo+4JrS7niPQYffXNdao+\nwW3ROvmz6jFcp+pirD/ptbPOoi4IgzxYxXaksUT9p9pQlBw5WprDfaZlURSLVnU41SC5f6MlSwpf\nn+4X3QdG9Uh17anaV4/jtkSRibsh1lcNZkcddVTpWY0iwQxCU+HMag/HbQCec/evtVJRumYkSVJJ\nl1wzfsfMtgK4DMCPzOzH9e8nm9mP6rtdAeB3AVxrZsvr/xZF9aaZmSRJJV2a7d0N4O4m3xdJgN39\nUQxxstX1waxhYqmZsm7dumJbTaTFixcX2x/96EdLZWya6Ktvnv6rCcO/HjpV52m9mplsHmsiY76m\nl19+uVTGkSqi3JhqFnG7tYw9+/Xa2RRR04f31TK+dnWxiKJ0MFGil6jOKKKGmmR8Dp0JRKZk5JbC\n/clJZoByP6lZG+W/ZPQZ5PsQmd9qZvLzE5mqen2dYDS8zWyVnJklSVJJDmZJkvQFOZglSdIX9N1g\nZmbjAfwdgHMAOIBPAlgP4DsApgHYAuAj7v6GHtt4rb1x48bS96ylaPIK1i8ef/zxUtmCBQuK7Shx\nq+pUGkmCYZ1Mk2xwgpHVq1eXyjihrep+XE8UwUN1I2636nes3WhSXnb/UF2Moz5oO/k+REtl1IWE\n261lkRtF5JbC/RQliFGiCMPcFn0G2J1AI2Oo1sewbqXtjJbicTtV3+Lz6zVwu7U/+RmJlm61y1ga\nzFp9W/B1APe5+1wA5wNYC+BzAJa6+xwAD9Y/J0nSR3TDNaNbDDqYmdkJAK5099sBwN3fcvc9AG4G\ncEd9tzsA/HbXWpkkSU84cOBAS/9GA62YmWcC2G1m3wJwAYCnAPwXAKe5eyMTyU4ApzU7uGFebtq0\nqfT9okUH/d80WOEZZ5xRbEerA6LIGFGuQzXf2Nw55ZRTmlzFwDq0HjVr+fW65qZkE1GDF7J5o2YY\nJ7aIPM+1ndw2bSebdmpiR2YfX7uaTJG5E0UTeeWVV5qeWz9HJqeucOC2qNnH90VXW/B90fvA1651\nskkY3dvXX3+9skyfF3bzidwv0swcnCMAzAfw1+4+H8CvICal16547Fx1kiQtMZbMzFZmZtsAbHP3\nX9Q/fxfA5wHsMLOJ7r7DzCYB2NXs4Pvvv7/YnjVrFmbNmjXMJidJomzcuBFbtmzpeL2jZaBqhUEH\ns/pgtdXM5rj7OgDXA1hd//cJAF+u/990VfuNN94IYGg5BJMkGRozZ87E3Llzi8+8imY49NVgVueP\nAfyDmY0DsBE114zDAdxpZp9C3TWj2YH33nsvgIGvxa+55ppi+/LLLy+VsSah2sL3v//9YvuWW24p\nlUXJUvk1vN4gdjPQCBfsyqB62p49e1AFX4O6Q3A9Kp7yUivV9jhar+pbfA69vijyB3/We8Rakeox\nrT7kqhtxu/l+6fn0PrA2pefma1etjffV+8XuEJqkOkr0wvqhunDwPdO+Zi1TXXJYC9N7y21R/S6K\nMNwJ+m4wc/dnAFzSpOj6zjYnSZLRRN8NZkmSHJqMFreLVuj6YLZw4UIAA1cArF27tti++OKLS2Wb\nN28utl977bVS2fr164vtFStWlMrmzZtXbEee2ZE3e+SxrqZP9Gqf263uEGzyqmnHppeaMBy1Q80p\nNsP0AYxyV0Y5Q/n8UZKNyGRS1wU2w/Qa2CzTtnC/RHklI3eIKKemyhJ8nN4Hfn7UtItcgKLoJXyc\n5phlVx6N+KLn6DQ5M0uSpC8YS4NZRppNkqSSXiUBru+3xcyerUeZfXKwekdkMFPv/17BJmqvefHF\nF3vdhAI263uNyhG9ZLQ8twCwZk1lusiu0iWn2UYS4J8NdnoA17j7Re6+YJB9u29mjhs3Di+88AIu\nuaT8MpT1A3X2e8973lNs6wA0derUYlsfNta0pk2bVirbt28f1qxZg6lTp4ZJL1SrYR0nigqr8L6q\nDe3duxcbNmzAiSeeGLogROJrpEWpHsP6nSZjfvvtt7Fx40ZMnjx5wPVF5+NrVxcL1teG4i7g7nj+\n+ecxadKkAfeB9UntzyghMWuCWsb9pPdy/Pjx2L59O+bPnz/gjzVaNsR6aJToRTVI1sV0OdPu3bvx\n2GOP4cgjjxxwDeyEri4knaBXSYCJlh1U08xMkqSSHi9ncgAPmNkyM/uDwXbOFwBJklTSrmtGh5IA\nX+HuL5vZKQCWmtlad3+k8pzdfFthZmPnVUiS9BnuPqw1hEP9+x3q+czsYQD/1d2fbmHf/wHgTXf/\n31X7dHVmNtzOTJKkd4zQ329VEuBjABzu7nvN7J0AFgL4YlRRamZJkowoLSYBngjgETNbAeAJAPe6\n+5Kw3rHkFJckSVJFV2dmZrbIzNaa2Xoz+9NunqvJuW83s51mtpK+m2BmS81snZktqSdqGYm2TDWz\nh+uOgqvM7DO9aI+ZHW1mT5jZCjN7zsz+vBftkDYdXneK/GEv29LMQbOHbRlvZt81szX1+3RpL+/R\nWKFrg5mZHQ7grwAsAjAPwMfMbG58VEf5Vv3cTK+SsOwH8Fl3Pwe1qfUf1ftiRNvj7vsAXOvuF6KW\nmOZaM3vPSLdDuBXAczgYqbhXbWnmoNmrtmQCoXZo1Y9kqP8AXA5gMX3+HIDPdet8FW2YDmAlfV6L\nWu4CoGaTrx3J9lA7foBa+KSetQfAMQB+gVr6wJ60A8AUAA8AuBbAD3t5jwBsBnCSfDfibQFwAoBN\nTb4fFc/uaP7XTTPzdABb6fO2+ne9pKUkLN3EzKYDuAg1UXPE22Nmh9VF1Z0AHnb31b1oR52/BPAn\nANiZqVdtaeag2Yu2FAmEzOxpM/tm/W1ez5/d0U43B7NR/WbBaz9xI9pGMzsWwPcA3Orue7lspNrj\n7ge8ZmZOAXCVmV3bi3aY2W8B2OXuy1Hxen6E79EV7n4RgPehJgNc2aO2ZAKhNunmYPYSgKn0eSpq\ns7NestPMJgJAlISlG5jZkagNZN9290a+hJ61x2u5T38E4F09ase7AdxsZpsB/COA95rZt3vUFrj7\ny/X/dwO4G8CCHrWlWQKh+agnEBrhtowpujmYLQMw28ym13MH3ALgni6erxXuQS35ChAkYek0VltR\nexuA59z9a71qj5md3HgLZmbvAHADgOUj3Q4AcPcvuPtUdz8TwEcBPOTuH+9FW8zsGDM7rr7dcNBc\n2Yu2uPsOAFvNbE79q0YCoR+OdFvGHN0U5FCbsj8PYAOAz4+kGIjar/12AL9BTbv7JIAJqAnO6wAs\nATB+hNryHtR0oRWoDR7LUXvTOqLtAXAegKfr7XgWwJ/Uv+9Jv1C7rgZwT6/agppOtaL+b1XjWe3h\n83IBai9nngHwfdReCvT0Ho2Ff+k0myRJX5DLmZIk6QtyMEuSpC/IwSxJkr4gB7MkSfqCHMySJOkL\ncjBLkqQvyMEsSZK+IAezJEn6gv8PlmKxNHpnqigAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 20 }, { "cell_type": "raw", "metadata": {}, "source": [ "# Exercise 1 answer here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 2\n", "Write some code to evaluate the model\u2019s performance, using the held-out data that we separated earlier. How is the error rate? Is that better than random guessing? \n", "\n", "*Hint:* \n", "```python\n", "GPy.util.classification.conf_matrix(prob_estimate,ytest)\n", "```" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Exercise 2 answer here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 3\n", "\n", "Write another simple for loop to optimize the model. How low can you get the error rate to go? What kind of kernel do you think might be appropriate for this classification task?" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Exercise 3 answer here" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }