{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# From Linear Regression to Gaussian Processes" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "In this notebook we look at the path from linear regression to gaussian processes as outlined in [chapter 2](http://www.gaussianprocess.org/gpml/chapters/RW2.pdf) of [Gaussian Processes for Machine Learning](http://www.gaussianprocess.org/gpml/chapters/)." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "For a few examples about linear regression and its relationship to bayesian methods have a look at the following [notebook](https://nbviewer.jupyter.org/github/cs224/dev-meetup-bayesian-methods-for-hackers/blob/master/bayesian-methods-for-hackers.ipynb)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np, matplotlib.pyplot as plt, seaborn as sns\n", "\n", "import sympy\n", "sympy.init_printing()\n", "\n", "from sklearn.linear_model import LinearRegression\n", "\n", "SEED = 42\n", "np.random.seed(SEED)\n", "np.set_printoptions(edgeitems=10)\n", "np.core.arrayprint._line_width = 180" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's star by creating some `xpty` and `ypts` that will serve as the example data that we want to treat via our regression procedure." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([-2. , -1.5, -1. , -0.5, 0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xpts = np.arange(-2.0, 5.0, 0.5)\n", "xpts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function we use to generate the `ypts` is a polynomial of 4th degree:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUsAAAAWCAYAAABJ0L4DAAAABHNCSVQICAgIfAhkiAAABzhJREFU\neJztnHuIFVUcxz9rW2klWmYWJEhb2pZmFPT2WWAPeitFWE5oRWRpVISieAtkrdRVNDXpcZMoAkHD\nykyzBTODFbUEy0qdUnTVMi176drtj98Z9jo7M3fOmblzx935wLB7z8z53d/57pzfnPM7ZxYyMjIy\nMhJlAlAA5lbakROAJ4BvgN/VsQ64raIetW0mAI2I1vuBZUDfinqU0W65BtgBfE0WLMNwJ3ALcCHQ\nG5gKHAUuq6RTbZgVwMNIgOwHLAGagLMq6VRG+6MLsA0YAjSQBUtTDgCPVdqJdsIZwDHg9ko7knHi\n0CEGGwuBxcDnMdgyxUJSAEHHMQ17doCdpph8djgJuB/pwF/GbDsMw4E5wBpkmloA3tG0MZIWfcZo\n1rVJTmuHzsi9/1uZ7AfxEvAZsBP4G3lIbgSmAN0M7J0PvAnsBv5F9JwFnBmDr+WmG3K/LAF+RPQ4\nBHwBjMY/PsXd5lD2qg2NOzyCTCVHRrQTlU3ACz7nBgBDgeWaNg8hgrk5rGnHj35IrrKjsnk3sDkm\n2zpMAvorH3YBF2vW74nMJg4jAd+EcmvtZjZyz6wrk/0gngY2ACuBfcDpSBorBzyqft8Z0lYN8oA9\nB/gA+A64ChgH3AxcD/wan+uxMwKYD+xBBls/Az2Ae4DXkVTVCOTB6RB3mxPRsA+SLO9TVNZA+qbh\n6xCx79CoY6ujnJyCPGiuBOqAXzBfdLCQNg42qDsEuAioUvV1RpZVwCokDfMK5iNLW7NOFGYiI4gL\nDOtbmGsN8nD0YqqyO0/D1gpV50lX+UxVvkDbu2QZiqRC3CPIc5HAWQDudZ2Lu83G9j71cbAKyKtz\n01SZpT43Fx0F4D/1+6maTpeDfohPu5Dpblhs9DuwjnZerALe0PxOB4toHdhhMHrBchzy9x6IjIyS\nCpamWtcjoxjd0XMxFvFo7aa/srsy5PU16vodtA42nZFR+Z/IyNUh6j2aJBMRf+YUlZm0OYhI9voj\nub0tHB9cZiijrxWVdUVGQsVHI/Cu+r0qpMPlZA7it98U3Q8b6VQjkT/aOGQEFhRwdbTzYjX6uUIH\ni+SDZS2SY6pXn3OYB8sktJ6N5EBrNf1zY1GeYDlJ2Z0R8voxBN9XzojpxqKyqPdokjyH+FRfVGbS\n5iAi28urCyz12Ynw71N6QaiB9EzDOyEJ/GYkr6aDjfeCw3ZgUEC9POG0m4bkUnsho986ZIR2i6af\nDhbJBstqYD2wFdEZogXLcmoN8CqyeDUUmeI5h0mO1SIerZ9FNKtHFtcKyNa77iHrO2mPZ3zOz1Xn\nH3eV5zHv30lRjeTvC8CwonLTNvsR2V5PZMSwAxirLv4EybGVooH0BMtRiO8fGtSdgnSsHsBpyEh5\nARLQ/kKe0F6E1S4P/ISsvO1DpuDDMMci2WD5IjJCubaoLIdZsCy31uC/2p7T9BXi07rJ5ctyRIOw\nLCRYbycHOsFVHqV/J8V0xK+PXOWmbfYjFnt1tPwR1yI3cZzY+N/AXofJ9HStqhvnXjrnj7gk4Jq0\naZfXsD2Y0npfjYzWX3aV5zALln60da0deiA7IbYiC09XhKwXpaOb6majp4dJv31K1f2W1i8NVDRY\n+m0d2l/0+2jkCR8n24B/NK7frWn/UuA6ZGHnY826QSxAhuwDA64pt3azkHxxMZcjbwW9TevFkk0x\nfnc1sAj4Hpgco10v2ovWe5EHwgZE10WE2xVxSP3s4nPeKT/occ5Ut3L327FIbnkLkic84Dofpc1e\nRLb3ADIF2oNE1fkhvzhNzMZ8mhVEF2XX74aplHYWyUzDuxJ+VOG1b1KHtq61FxuV7bNDXGu6OJHW\n/j0e8WczsufRi1Qt8NwKHEH+yUN3ZIPmUY7fS5l2OiJPJJOFnVIMQ8Tb4nGuktpZJBMsOyGbhb2O\nDaruGvX5voi+tHWtvdirbId5E8Vk20ta+/fzSFs2EvygSM3WoRuQ4fh24DxVNlwZWxryy9PAg4jP\ny0pcV4PstzvZVV6Lt9i9gB+U7Ymuc5XWziKZYBlEjuD8j5fe7U3r3nhP+TrQkh9b6zrnd5+C3obq\nSuvmx2Tlw3rC/WMTk03kcWkISB7mIDI0r3Gda1SVBgS1IEU42zBKLezY6rpervIc8AeyEjcPeZd3\nMbKCWFDlxSuHadDOwrwD34UsTOSRVdECkptyyqaHtJMjOFjatNY7R/vSejzStpXI4kId8k7yNmVz\nD3CJq46N930KooEzGl2q7K1Wn7fS8q55GnTzYpT67mZkC1XO47BcdcK2uRib6BoC8spdE7In0etf\nhN2kKn7lcS5t1CK+7qT0Gzs23gIOAt5DpigHkWnKfuQGf4jjN9unRTsL8w6cIzj3aGva0QmW7U3r\nvsjWuk3I663NyCJDI6Kf18jKxr+jg6Sa3kIC4RFkS1rxP4FIi25e5Cid+27wqFeqzW5sommYkZGR\nkZGRkZGRkZGRkZGRkZGRkZE6/gfb3ljshmZETgAAAABJRU5ErkJggg==\n", "text/latex": [ "$$x^{4} - 7.5 x^{3} + 14.5 x^{2} + 3.0 x - 20.0$$" ], "text/plain": [ " 4 3 2 \n", "x - 7.5⋅x + 14.5⋅x + 3.0⋅x - 20.0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def myfn(x):\n", " return (x+1)*(x-2)*(x-2.5)*(x-4)\n", "\n", "symx = sympy.symbols('x')\n", "sympy.expand((symx+1)*(symx-2)*(symx-2.5)*(symx-4))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 108. , 38.5 , -0. , -16.875, -20. , -15.75 , -9. , -3.125, 0. , -0. , -2. , -3.375, 0. , 13.75 ])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vmyfn = np.vectorize(myfn)\n", "\n", "ypts = vmyfn(xpts)\n", "ypts" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## The standard linear model" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$\\newcommand{gpvec}[1]{{\\bf #1}}$$\n", "We have a training set $\\mathcal{D}$ of $n$ observations, $\\mathcal{D}=\\{(\\gpvec{x_i}, y_i) |\\; i = 1, ..., n\\}$, where $\\gpvec{x}$ denotes an input vector (covariates) of dimension D and $y$ denotes a scalar output or target (dependent variable); the column vector inputs for all $n$ cases are aggregated in the D × $n$ design matrix $X$, and the targets are collected in the vector $\\gpvec{y}$, so we can write $\\mathcal{D}= (X, \\gpvec{y})$." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$f(\\gpvec{x})=\\gpvec{x}^T\\cdot\\gpvec{w},\\qquad y=f(\\gpvec{x})+\\epsilon$$\n", "$$\\epsilon=\\mathcal{N}(0, \\sigma_n^2)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The standard linear regression formula for predicting $y=f_*$ for a given new $x_*$ is given by:" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$p(f_*|x_*, X, y) = \\mathcal{N}\\left(\\frac{1}{\\sigma_n^2}\\gpvec{x_*}^TA^{-1}X\\gpvec{y},\\; \\gpvec{x_*}^TA^{-1}\\gpvec{x_*}\\right)$$\n", "$$A=\\frac{1}{\\sigma_n^2}XX^T+\\Sigma_p^{-1}$$" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "In case that we set $\\Sigma_p=0$ we arrive at the standard equation for linear regression:\n", "$$\\bar{\\gpvec{w}}=(XX^T)^{-1}X\\gpvec{y}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's perform the standard linear regression via the scikit-learn `LinearRegression` method:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKwAAAAVCAYAAADb9AVlAAAABHNCSVQICAgIfAhkiAAABLRJREFU\naIHt2mmoVVUUB/Cf8rIcwAZMCSqj0owiLBoE0Vc2UCJIA32JRvuU2UwDSa+gDIswDBoosAgiMF4W\nGQ1SWdGAoCRkVtq1Qa2ksiwzNfuw9u1dr+e+e87zvvd8ev9wOJe99hr2Xmuvs/belyaa2AvwLH7C\n4N42pIl9EqdgB6bl6Xwq/sXNVe0XYy7ex+9J4PMFDbks8eU2JuGQ1L8dX2MzNuIDXIP+NfhKFfqq\nn/UFbd9bMEnM43pswVq8gQty8veUL9qxDkMqG1syOt4vAvLxqva7cRI24Xsc19moMnA4Hkv8Q+r0\nrcYlyZ51eAffYjguxNM4P/XZkcG7EXMy2jcVtGFvwGzcJvz3CjZgmMhorViYQ0ZP+WIWPsEMPFDL\nmFEiuz6VQTsTx6KfGFyRDNsPb2MVHlI8w56FKXZdvSPEhO3ARRl8pfQ0wbVinuZhQAZ9v5xyetIX\nK7AmQ9f/eDApnFRHUKtiAXuDWAgT0KZ4wHaGu5K8uRm0kmbAwv5iT7JGdrA2Co32xT1J3nnlhuqS\n4Gxsx8cFBXeGMWIhPIrFYoU2ElvTe1sN+v6idj4Cf+KzZMf2BtuxJ+Mc8emfIxLHZJyAv/EpPmqQ\nnkb74sP0PkfU2TthcFK0PIdhrfJl2BYswUoMTG1tGpdhW4S9O63CCpRkF/mrMbEB+vsK7hXjnqVj\nviqf90RA7w66wxdDU59Ps4ijEvHNHMa1yhew94nVM66irU3jAvbhJOu1GvR7REYfjkEiqzwhssxf\nYhO5L+BxMU/bRFYbLza+J4rMtQPv7qaO7vLFZjVOdMYlhS/mMK5V/YA9XUzQ7Kr2No0J2BlJzgoc\nXJC3PLntu2lDd6Gk9hFQ1lMvcTyZ+v2NkVW0Qfgu0cfpGrrTFz+oKDEqa9jN6X1AQYVZaMFz+BIz\nGyCvGtNFTfy52CD+UpD/CdwiNoF7IlaJ4MqLtXXov6X3UrtufP4SWfYanKZ4PdvdvhioIzZ3wmEi\n0j/IoaRV5yv7QPmzQ9a5XGe4MfEtx6EFecso10ZFgqIv42ox3tdr0MtHjXcUlNvdvugvSoZV5YbK\nDLsOP2N0FxVXYgueqUE7GWPFwlip2Iq+XZw4LBM7xw1dtO+M9F7dRf6+hkUiKI7XEQSVOCG9vykg\nsyd8MVqc4S+rxTxfDOyYOkpade1qlvo17NHiFq36IHtm4lsiX500RvZ/IUbiqyTrrgz6vES7MoeO\nvoQFYlw3VbWfKwL4V5HtKtHbvrgq0aaXG6rPYV8StxTniXviSkxND3GrQRTp89LvDbg1h/H1sAhH\n4igd9dYVOk4c3hdFfjVKFbbApaI2WiwOzP8QDpgs6vSFouCvRvlWpdZZYl/FdeLL9oiYg6VijqeK\neZ0mrk4r0du+ODfpWVBrUAPwo7jDrUabzmvRUgZPFspyamXYUqKPLKA761hmIl7AF2LTsVWUPG/h\ncvGpycJS8V+Kg/INp09hmLiFWoN/RJJpF5utLJT0ni+Gis3Wy/UGdWdSOrZex70QB4oVXX0U10TP\n43oRh+PrdTxArMBXu9uiPRBTxG51RL2OTXQrBoqjuvl5GSaIm4nmH7ib6A2MEaXHyN41o4kmmmhi\nX8J/bM+tXpQEyNQAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left ( 14.25, \\quad -6.25\\right )$$" ], "text/plain": [ "(14.25, -6.25)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr = LinearRegression()\n", "X = xpts[:, np.newaxis]\n", "lr.fit(X, ypts)\n", "lr.coef_.squeeze()\n", "lr.intercept_, lr.coef_[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we plot the result the fit is obviously less than optimal:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nHxroTnlTq3b8bTLv1BPzTj0x79ST9TTvqyZ8L3vppZfyyU9+Mo8++mhOnTqVF198ceWxpaWlm3oy\n3tPTnsbGhiKXyRrX29tZ6yXUla1buvO+e/pX/n564UJ+fGQ2Lx05lZeOzOblo6dzeHIhhycX8n+r\n7fimzg25e/fm3L27J3ff0ZPhnZu042+ReaeemHfqiXmnnqyHeV9V4fvFF1/Mb/7mb+Y//sf/mPvv\nvz/f//73MzU1tfL45ORk+vv7b/AZKmZnF9fFKyPceqVS5Rv35MmFLC3VejX1bWhbR4a2deSX378z\nr166nONTlZ3VD1Y3c5s+fT7feX4y33m+crXLcjs+fNXO6n3d2vEbMe/UE/NOPTHv1JO1NO99fTd+\ngWDVhO+zZ8/mU5/6VB577LHcddddSZK9e/dmYmIihw4dyp49e/K1r30tDz300E19vtX+D0NtLS2Z\nkdWksaEhu7d1Zfe2rvzie3ckSeYWL2Z0bC4Hq+eOH56YX2nHn3q68nHd7S3XXKp+x7bOtGjHX8O8\nU0/MO/XEvFNP1sO8r5rw/fWvfz2nT5/Ov//3/37lbT/7sz+bL33pS3nkkUfS2NiYcrmcRx99tIar\nBG6Xyr3j5bznzsq+D69eulw5d3xsfuX+8Zm58/nhT2byw59ce+/48rnjw/3d6dWOAwCwCpSWltb6\n6wevNT29UOslsEqVSpXLQWZmVv9lK7yxuTMXrj13fHIhr7x6+Zr36W5vWQnjQ/311Y6bd+qJeaee\nmHfqyVqa93J5jVx2DvBmdXdsyHvvLOe9V7Xjx6bOVMJ4NZTPzJ3PD16ezg9enk5Sacd3be3IUH/3\nSijv7dKOAwBQLOEbWDeaGhuyZ3tX9mzvyoeqbzt95kLlUvXqueOHJxdyaKLy56mnjydJujtaMnxV\nGL9jW2eam+qjHQcA4PYQvoF1bVPHhrzvrnLed9e17fjyruojY/M5OX8+T788naevacc7K/eND3Rn\neKA7PV2ttfwyAABY44RvoK5c3Y5/+Gd2JklOLVzIaHVX9YPjczk8sZBDE/M5NDGfp75facc3d27I\nUH9XtR3vzu6tnWluaqjllwIAwBoifAN1b3Pnhrzvri15311bklTa8aMnlu8drzTkJ+cv5Ps/ns73\nf1xpx5saS9m9tXMljA/1d2nHAQB4XcI3wE9pamzIYH9XBvu78uFcaceXjzgbGZ/LkcmFyqZu4/PJ\n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\nHdu6cse2rivt+JkL15w7fmhyIYerf/7i6crHdXe0VC9VrwTyPds7a/hVAMAbE74BgFWlu2ND3ntn\nOe+9qh0/NnWmEsaroXxm7nyefnk6T788naTSjg/t6M7u5Ya8vzs9XRu04wCsGsI3ALCqNTU2ZM/2\nruzZ3pUPVd92+syFlSPODo7P5fDEQl4+ejovHz2db3z/eJJkU0fLShAfHujO7m0daW5y7zgAtSF8\nAwBrzqaODXnfXVvyvru2JKnsrD5/4XKefmGisrv62HxOzp/P0z+eztM/rrTjTY2l7NramaHqzurD\nA93p6Wqt5ZcBQB1ZE+H7v/23/5ZvfOMbaWxszN69e/Nv/s2/cRkZrCH79zdkdLQhg4OXs2/f5Vov\nB1iHfvB0U6an21Mut+T//ZXKz5lTCxcyOn5tOz46Pp/R8fl84/uVj9vcuSGD/V01bcf9jOTN2r+/\nIdPTSbnckAceMDOwVqz68H3gwIF8/etfzx/90R+lpaUl/+yf/bN84xvfyC/90i/VemnAGzh+vJSH\nH96YAweuPJHdu/dSnnjiXHbsWKrhyoD14rU/Z9qv+jlzbTv+6qXLOXpi+d7xymZuJ+cv1Kwd9zOS\nN+vG825mYLUrLS0trerv1MceeyyvvvpqPvWpTyVJ/vAP/zDPPPNMHn300df9mOnphdu1PNaYUinp\n6+vMzMxCVvfkrw8f+lDbNU8ql+3deylPPXW2BiuqL+adevB2f86cWrhwVRifz+HJhbx66domcXPn\nhgz1d1V3Vu/O7q2daW5qqPnaqT9mhnq0lp7PlMs3Pnlj1TffU1NTueuuu1b+Xi6Xc+LEiTf8OFel\ncz3Lc2E+ird/f8N1nyAkyYEDjfne9xpcXlkw8856dyt+zvR0bUhP15Y88M5KO/7Kq5dz9MTCyqXq\nI2NzmZ2/kO//eDrfv6od3721M0MDlUvVhwa63nQ77mckb5aZoV6tp+czqz58/7SbKep7etrT2Pj2\nX5Fm/ertdR5s0aan3+jx9vT13Z611DvzznpV1M+Z7du68/77rvz95Ny5vHT4VF46MpuXDs/m4PHq\nkWfj8/nz7x1LkvRt2pi7dm/O3bt78s47NmdwYNMN23E/I3mzzAz1bj08n1n14Xvbtm2Zmppa+fvE\nxET6+/tv+DGzs4vr4pURbr1SqfKNe/Lk6r9sZa0rlxuStN/g8cXMzHiFvkjmnfXudv6cuWugM3cN\n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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig=plt.figure(figsize=(15, 8), dpi= 80, facecolor='w', edgecolor='k')\n", "ax = plt.subplot(1, 1, 1)\n", "ax.plot(xpts, ypts, 'bo')\n", "plot_x = np.linspace(-3, 6, 100)\n", "ax.plot(plot_x, lr.intercept_ + lr.coef_[0]*plot_x)\n", "ax.set_xlabel(r'$x$')\n", "ax.set_ylabel(r'$y$')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Projections of inputs into feature space" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What would happen if we do not only use the raw $x$ values as the design matrix $X$, but would add artificial or derived covariates to generate a design matrix $\\Phi$ with dimensions D${}^*$ × $n$, with D${}^*$ > D. The process by which we create the artificial derived features is a function that we call $\\phi(x)$. Obvisouly then also the new weight vector $\\gpvec{w}$ has then D${}^*$ elements and not only D elements." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$\\phi(x)=(1, x, x^2, x^3, ...)^T$$\n", "$$f(\\gpvec{x})=\\phi(\\gpvec{x})^T\\cdot\\gpvec{w}$$" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The analysis for this model is analogous to the standard linear model, except that everywhere $\\Phi=\\Phi(X)$ is\n", "substituted for $X$." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$p(f_*|x_*, X, y) = \\mathcal{N}\\left(\\frac{1}{\\sigma_n^2}\\phi(\\gpvec{x_*})^TA^{-1}\\Phi\\gpvec{y},\\; \\phi(\\gpvec{x_*})^TA^{-1}\\phi(\\gpvec{x_*})\\right)$$\n", "with $\\Phi=\\Phi(X)$ and $A=\\sigma_n^{-2}\\Phi\\Phi^T+\\Sigma_p^{-1}$. $A$ and $\\Sigma_p$ are D${}^*$×D${}^*$ matrices.\n", "\n", "In cases where we have many features (and indeed perhaps even infinitely many), where D${}^*$>$N$ (the number of features is larger than the number of training cases (the design matrix $X$ is taller than broad)) we might prefer to work with the $K$ matrix as defined in the next section. " ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's define $K=\\Phi^T\\Sigma_p\\Phi$ and let's start with the following identity:" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$\\sigma_n^{-2}\\Phi(K+\\sigma_n^2I)=\\sigma_n^{-2}\\Phi(\\Phi^T\\Sigma_p\\Phi+\\sigma_n^2I)=\\sigma_n^{-2}\\Phi\\Phi^T\\Sigma_p\\Phi+\\Phi=(A-\\Sigma_p^{-1})\\Sigma_p\\Phi+\\Phi=A\\Sigma_p\\Phi$$" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now multiplying by $A^{-1}$ from the left and $(K+\\sigma_n^2I)^{-1}$ from the right gives:" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$A^{-1}\\sigma_n^{-2}\\Phi(K+\\sigma_n^2I)(K+\\sigma_n^2I)^{-1}=A^{-1}A\\Sigma_p\\Phi(K+\\sigma_n^2I)^{-1}$$" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$\\sigma_n^{-2}A^{-1}\\Phi=\\Sigma_p\\Phi(K+\\sigma_n^2I)^{-1}$$" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now using this in the above expression for $p(f_*|x_*, X, y)$ we arrive at:" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "$$p(f_*|x_*, X, y) = \\mathcal{N}\\left(\\phi(\\gpvec{x_*})^T\\Sigma_p\\Phi(K+\\sigma_n^2I)^{-1}\\gpvec{y},\\; ...\\right)$$" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Notice that in this equation the feature space always enters in the form of $\\Phi^T\\Sigma_p\\Phi$, $\\phi(\\gpvec{x_*})^T\\Sigma_p\\Phi$ or $\\phi(\\gpvec{x_*})^T\\Sigma_p\\phi(\\gpvec{x_*})$; thus the entries of these matrices are invariably of the form $\\phi(\\gpvec{x})^T\\Sigma_p\\phi(\\gpvec{x'})$, where $\\gpvec{x}$ and $\\gpvec{x'}$ are in either the training or the test sets." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let us define $k(\\gpvec{x}, \\gpvec{x'})=\\phi(\\gpvec{x})^T\\Sigma_p\\phi(\\gpvec{x'})$. We call $k(\\cdot, \\cdot)$ a **covariance function or a kernel**. Then defining $\\psi(\\gpvec{x}) = \\Sigma_p^{1/2}\\phi(\\gpvec{x})$ we obtain a simple dot product representation $k(\\gpvec{x}, \\gpvec{x'})=\\psi(\\gpvec{x})\\cdot\\psi(\\gpvec{x'})$." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If an algorithm is defined solely in terms of inner products in input space then it can be lifted into feature space by replacing occurrences of those inner products by $k(\\gpvec{x}, \\gpvec{x'})$. **This is sometimes called the kernel trick**. This technique is particularly valuable in situations where it is more convenient to compute the kernel than the feature vectors themselves. This may be the case if the feature vector has infinitely many dimensions, e.g. like for the fourier transformation or a taylor series expansion or similar." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The above is the so called **\"weight-space view\"**. There is an equivalent view that is called the \"function-space view\". For details have a look at [chapter 2](http://www.gaussianprocess.org/gpml/chapters/RW2.pdf) of [Gaussian Processes for Machine Learning](http://www.gaussianprocess.org/gpml/chapters/)." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Both kernel ridge regression (KRR) and Gaussian process regression (GPR) learn a target function by employing internally the \"kernel trick\". A major difference is that **GPR can choose the kernel's hyperparameters based on gradient-ascent on the marginal likelihood function** (and is therefore much faster) while KRR needs to perform a grid search on a cross-validated loss function (mean-squared error loss). A further difference is that GPR learns a generative, probabilistic model of the target function and **can thus provide meaningful confidence intervals** and **posterior samples** along with the predictions while KRR only provides predictions.\n", "\n", "Have a look [here](http://scikit-learn.org/stable/auto_examples/gaussian_process/plot_compare_gpr_krr.html) for details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Worked Example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create the matrix $\\Phi$ by extending our original input to the linear regression via the features, the powers of the polynomial:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ -2.00000000e+00, 4.00000000e+00, -8.00000000e+00, 1.60000000e+01],\n", " [ -1.50000000e+00, 2.25000000e+00, -3.37500000e+00, 5.06250000e+00],\n", " [ -1.00000000e+00, 1.00000000e+00, -1.00000000e+00, 1.00000000e+00],\n", " [ -5.00000000e-01, 2.50000000e-01, -1.25000000e-01, 6.25000000e-02],\n", " [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],\n", " [ 5.00000000e-01, 2.50000000e-01, 1.25000000e-01, 6.25000000e-02],\n", " [ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00],\n", " [ 1.50000000e+00, 2.25000000e+00, 3.37500000e+00, 5.06250000e+00],\n", " [ 2.00000000e+00, 4.00000000e+00, 8.00000000e+00, 1.60000000e+01],\n", " [ 2.50000000e+00, 6.25000000e+00, 1.56250000e+01, 3.90625000e+01],\n", " [ 3.00000000e+00, 9.00000000e+00, 2.70000000e+01, 8.10000000e+01],\n", " [ 3.50000000e+00, 1.22500000e+01, 4.28750000e+01, 1.50062500e+02],\n", " [ 4.00000000e+00, 1.60000000e+01, 6.40000000e+01, 2.56000000e+02],\n", " [ 4.50000000e+00, 2.02500000e+01, 9.11250000e+01, 4.10062500e+02]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_poly = np.hstack([X, X**2, X**3, X**4])\n", "X_poly" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we perform the exact same linear regression as we did above, but only with the extended design matrix including the features:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "(-20.000000000000085, array([ 3. , 14.5, -7.5, 1. ]))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr_poly = LinearRegression()\n", "lr_poly.fit(X_poly, ypts)\n", "lr_poly.intercept_, lr_poly.coef_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see this linear regression recovers all of the \"weights\" of the polynomial of 4th degree that we used to generate the data:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$x^{4} - 7.5 x^{3} + 14.5 x^{2} + 3.0 x - 20.0$$" ], "text/plain": [ " 4 3 2 \n", "x - 7.5⋅x + 14.5⋅x + 3.0⋅x - 20.0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.expand((symx+1)*(symx-2)*(symx-2.5)*(symx-4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we can plot the recovered polynomial:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n5ZW2auDwVhUOaFMgFN3nz5sOQ0PLczRqcL5GDc7XyEF5yvIStJFe0ml/Jm1HvOvr6zV69OjexyUl\nJaqrqzusr2WWDA5kd1/QH8k1oChLZ4yaomf+WK+xp67RkKqtKhteq7X/O0471gzWypWmlixxsJOW\nZPQ7jtSxDlHRWFxd3VEFuiMKdEcVDEUVDMcUDEXVHYopGE48193zXCgSUzgS79nG1N4ZV+lJcZ1z\nakymKyaHY989slt/n/T/wucy+EuJmyTFY4biMYdiUVPxmEM3/8ZQbo4pt9Mht8uU2+WQ27nv1uMy\n5XGb8rpMuV2mvG6z97ne19x7nu/LKcQ7dhi6+ur9R+v/+EdG6/tSMBRVTVNAtc0BLfsoKOfgkE6b\n2Kns/C6Zrtg+fzYQksoLszSkzK8h5TkaUp6jERV5XO4Taa+/7M+kdPD+tMMdnC8szJZpsqoyDq6o\niMteJVtjo7R1hV/1m8p1/FkrVDq0XpPO/VDDTtikNf8Yr4aGEhUX211lZqDf8Vm2bZO+9jVp2bI9\nz02eLD37rFRZeXh/RyQaU1tnWG2docS2K7Ft7wqpvSusjkBYnYGIOgMRdQTD6gyEFQzFPvsv/gxe\nf2Ibi5gKhxyKxxyKxxLhdWCFQ2WlDrmcplymQ05nYrR59yj07pFp02HIsftmGOrdt+vd2TN6H1pK\n7I/E45YsS70j5r33LUvxmKVoPK5odPc2rljcUjSWGH2PRuNqao6rvjEu04zL4YzJYcbldMfkdCe+\nJ23BxK2vGIbkdTvl85jyeZw9N1fv/Sxvz3Nep7I8e9937fP67u055zi0cuW+/8bKlaauvdavDz7o\nu7qT6d13pU8+kUaOlKZNs6eGQHdEja1BNbZ2q6E1oIbWoBpbg6prDmhnfadaOkL7/PmKnvGoeNxQ\ne2OO2uvz1FaXr7b6PP3s7jx9558YzUb/le77MykdvMvLy1VfX9/7uKamRhUVFZ/5dc3NXWl/RATJ\nYRiJN21TU+pPVUl3JSUOSdkKdmRp8TMnqXRYncZNX628sjadfOm7WrqrRCeuG6Hyoiy7S+236Hcc\nrgsvzNpn5FJKhPALL4zqmXmtau0Mq60rrNbORIhu3StYt3WG1R4I77Ng0+EwJGV5ncr2OpXtde0J\nfm5TXo9Tvp6Q6N39nNu5ZyTXlRgFXr3KpcsuzVEsakra/xf/iy92pezMmsWLHfryl7M/9WzPVHln\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig=plt.figure(figsize=(15, 8), dpi= 80, facecolor='w', edgecolor='k')\n", "ax = plt.subplot(1, 1, 1)\n", "ax.plot(xpts, ypts, 'bo')\n", "plot_x = np.linspace(-3, 6, 100)\n", "ax.plot(plot_x, lr_poly.intercept_ + lr_poly.coef_[0]*plot_x + lr_poly.coef_[1]*plot_x**2 + \n", " lr_poly.coef_[2]*plot_x**3 + lr_poly.coef_[3]*plot_x**4)\n", "ax.set_xlabel(r'$x$')\n", "ax.set_ylabel(r'$y$')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }