{ "metadata": { "name": "", "signature": "sha256:45eb4d5f790f900da8ac7932d3e3f0ec6702d57f7c3d54b7475b4f1274aeead3" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline\n", "rcParams['figure.figsize'] = 14, 7" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Regularized least squares and cross validation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While calculating CSD, we often have to deal with noisy measurements. \n", "\n", "Finding a set of optimal parameters for our model, we have to solve the bias\u2013variance dilemma which is the problem of simultaneously minimizing the bias (how accurate a model is across different training sets) and variance of the model error (how sensitive the model is to small changes in training set). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The error may be decomposed into:\n", "\n", "$Err(x) = \\left(E[\\hat{f}(x)]-f(x)\\right)^2 + E\\left[\\hat{f}(x)-E[\\hat{f}(x)]\\right]^2 +\\sigma_e^2$\n", "\n", "$Err(x) = \\mathrm{Bias}^2 + \\mathrm{Variance} + \\mathrm{Irreducible\\ Error}$" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Example - noisy measurements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose we took some noisy measurements of function $f(x) = 0.08 x^2 + 1.0$ for $x \\in \\lbrace{ 0,1,2,3,4,5,6,7,8,9 \\rbrace}$ \n", "The noise will add variance, but not so much bias. The noise is from normal distribution so $E(noise) = 0$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "\n", "X = np.array(range(0,10))\n", "Y = 0.08*X**2 + 1.0\n", "\n", "fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)\n", "ax1.plot(X,Y)\n", "ax1.set_title(\"model function\")\n", "\n", "Y2 = Y + np.random.random_sample(size(X))-0.5\n", "ax2.scatter(X,Y2)\n", "ax2.plot(X,Y)\n", "ax2.set_title(\"noisy measurements\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nYy1dulRnzpzRvffeq65du7q+17t3b82fP1+LFy9W8+bNFRwcnCX5KlSooFWrViW5ZkVHRys4OFgL\nFy7UsmXLtGbNGl28eFGHDx9O0vl3l7dgwYKpXruuvg5VqFBBlSpVSpIhIiLCtS4nPQvcy5cvr3z5\n8uncuXOu97p48WKa1oq6+1kDBgzQtm3btHfvXv3+++96880305wH3odCBcbdd999WrFihb777jvF\nxcVp/Pjxyp8/v5o3b66mTZsqd+7cmjJliuLi4vTZZ59p69atrj/br18/TZs2TVu2bJFlWYqKikrS\nsk/Jfwun+vXra+3atTp27JguXryoMWPGpPpn/vHAAw9o9erVWrx4seLj43Xu3DlXq7906dKuRY3X\n0r17d40ePVpnz57V2bNn9eqrr6b4mAEAIKl/5ubu3btr9uzZ2rVrl2JiYvTSSy+padOmSbr2kr1A\nfsGCBbp48aL8/f0VGBgof39/1/c7duyo7du3a8qUKerVq1eW5Xzsscf00ksvuR5FO3PmjJYtWybJ\n7jLky5dPQUFBioqK0ksvvZSmvPXq1dOePXu0a9cuXblyRSNGjLjm2PzjhhtuUGBgoMaNG6fLly8r\nISFBu3fv1rZt2675+pQEBwfrtttu09NPP61Lly4pMTFRBw8eTPM5YaVLl05yk2/btm3avHmz4uLi\nFBAQoPz58yf53wW+h0IFOebqOydXn29So0YNzZ8/37WmZcWKFfryyy+VO3du5c2bV5999pnmzJmj\n4sWL65NPPlHnzp1d79OoUSPNnDlTTz75pIKCglStWjXNnTs3TXeE/nvGSps2bdStWzfVrVtXTZo0\nUfv27ZO9j7vPUKFCBa1cuVLjx49X8eLF1aBBA/3888+SpL59+2rv3r0qVqyYOnXqlCzHyy+/rMaN\nG6tu3bqqW7euGjdurJdffvmaPxMAkNTVc3Hr1q01atQode7cWSEhITp8+HCS9RJXz6fz589XpUqV\nVKRIEc2YMUMLFixwfS9//vzq1KmTjhw5cs15+78/P6WvrzZw4EB16NBBt912mwoXLqxmzZppy5Yt\nkqRevXqpYsWKKlu2rK677jo1a9YsTXmrV6+uYcOGqU2bNqpRo4Zatmzp9lol2TuCLV++XDt37lTl\nypVVsmRJ9e/fXxEREdd8fWqfce7cuYqNjVXt2rUVFBSk++67z9XVSe29Bg4cqCVLligoKEiDBg1S\n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\nx9H7u3nzZvl8PoWFhVldSsi99NJLWrx4sZqamvT111879lLOQCCg8vJyNTY26uTJk+rv79eePXus\nLitoiouLVVNTc8Pv1q9fL7/fr+bmZuXk5Gj9+vUWVWdP9ClncVufktzTq+hTzhCsPhWUoOL3+zVu\nnLmprKwsnTt3LhibtQ23LXwZHx+vzMxMSVJUVJS8Xq/a2tosrio0zp07p+rqaq1atUpOvwqyq6tL\ndXV1KikpkWTOQZs8ebLFVYXGfffdp/DwcHV3d6uvr0/d3d1KSEiwuqygefTRRxUdHX3D76qqqlRU\nVCRJKioq0v79+60ozbboU87ipj4luadX0afoUzcLSlC5XkVFhRYvXhzszVrKzQtfBgIBffnll8rK\nyrK6lJB45ZVXtHHjxsH/wDhZS0uLpkyZouLiYs2fP18vvPCCuru7rS4rJGJiYvTqq68qKSlJ06ZN\n0/33368nn3zS6rJCqr29XXFxcZKkuLg4tbe3W1yRfdGnnMXpfUpyT6+iT9GnbnbHn3i/36/09PQ/\n/Bw8eHDwb958801NmDBBK1as+BPl25fTT7MO5dKlSyooKNDmzZsVFRVldTlBd+jQIcXGxmrevHmO\n/oZqQF9fnxobG1VWVqbGxkZNmjTJsZcHnTlzRps2bVIgEFBbW5suXbqkd9991+qyRk1YWJgrxy36\nlPs4vU9J7upV9Cn61M2GvT3x9Y4cOTLs6zt27FB1dbU+/vjjO93kmHEnC186zdWrV/XMM89o5cqV\nevrpp60uJyTq6+tVVVWl6upqXblyRb/++qsKCwu1c+dOq0sLCY/HI4/Ho4ceekiSVFBQ4NgG8MUX\nX2jhwoV64IEHJElLly5VfX29nnvuOYsrC524uDj9+OOPio+P14ULFxQbG2t1SaOOPkWfciI39Sr6\nFH3qZkE5h1hTU6ONGzfqwIEDioiICMYmbcVtC18ahqHS0lL5fD69/PLLVpcTMmvXrlVra6taWlq0\nZ88ePfHEE44c+AfEx8crMTFRzc3NkqSjR48qLS3N4qpCY/bs2WpoaNDly5dlGIaOHj0qn89ndVkh\nlZ+fr8rKSklSZWWlo//j9mfQp5zFLX1Kclevok/Rp/7ACIKUlBQjKSnJyMzMNDIzM40XX3wxGJu1\nlerqaiM1NdVITk421q5da3U5IVVXV2eEhYUZGRkZg/+mhw8ftrqskKqtrTXy8vKsLiPkTpw4YSxY\nsMCYO3eusWTJEqOzs9PqkkJmw4YNhs/nM+bMmWMUFhYavb29VpcUNMuWLTOmTp1qhIeHGx6Px6io\nqDB+/vlnIycnx5g1a5bh9/uNjo4Oq8u0FfqUs7ixTxmGO3oVfcoZgtWnWPARAAAAgO04+/YRAAAA\nAMYkggoAAAAA2yGoAAAAALAdggoAAAAA2yGoAAAAALAdggoAAAAA2yGoAAAAALCd/wHCAVevcN9u\neQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's try to fit some functions." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.optimize import curve_fit\n", "\n", "def poly_7(x, a, b, c, d, e, f, g, h):\n", " return h*x**7+g*x**6 + f*x**5 + e*x**4 + d*x**3 + c*x**2 + b*x + a\n", "\n", "popt, pcov = curve_fit(poly_7, X, Y2, p0=(10.0, 0.2, 0.1, 0.0,0.0,0.0,0.0,0.0))\n", "\n", "a = popt[0]\n", "b = popt[1]\n", "c = popt[2]\n", "d = popt[3]\n", "e = popt[4] \n", "f = popt[5]\n", "g = popt[6]\n", "h = popt[7]\n", "residuals = Y2 - poly_7(X, a,b,c,d,e,f,g,h)\n", "fres = np.linalg.norm(residuals)\n", "print \"7-degree polynomial error: \",fres\n", "\n", "fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharex=True, sharey=True)\n", "ax1.scatter(X,Y2)\n", "xlin = np.linspace(0,9, 50)\n", "ax1.plot(xlin, poly_7(xlin,a,b,c,d,e,f,g,h))\n", "ax1.set_title(\"Overfit - high variance\")\n", "\n", "def poly_1(x, a, b):\n", " return a*x + b\n", "\n", "popt, pcov = curve_fit(poly_1, X, Y2, p0=(10.0, 0.2))\n", "\n", "a = popt[0]\n", "b = popt[1]\n", "residuals = Y2 - poly_1(X, a,b)\n", "fres = np.linalg.norm(residuals)\n", "print \"linear approximation error: \", fres\n", "\n", "ax2.scatter(X,Y2)\n", "ax2.plot(xlin, poly_1(xlin, a, b))\n", "ax2.set_title(\"Underfit - high bias\")\n", "\n", "def poly_2(x, a, b, c):\n", " return a*x**2 + b*x + c\n", "\n", "popt, pcov = curve_fit(poly_2, X, Y2, p0=(10.0, 0.2, 0.0))\n", "\n", "a = popt[0]\n", "b = popt[1]\n", "c = popt[2]\n", "residuals = Y2 - poly_2(X, a,b,c)\n", "fres = np.linalg.norm(residuals)\n", "print \"error of the correct model: \", fres\n", "\n", "ax3.scatter(X,Y2)\n", "ax3.plot(xlin, poly_2(xlin, a,b,c))\n", "ax3.set_title(\"Correct model\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "7-degree polynomial error: 0.161557406365\n", "linear approximation error: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 1.48952709068\n", "error of the correct model: 0.568171379783\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that the higher the polynomial order is, the smallest the error. However if we were to add few more points without recalculating the polynomial coefficients, the incorrect models would fail miserably." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "So how to overcome this problem?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to give preference to some particular solution, we are can introduce a regularization parameter $\\lambda$.\n", "\n", "Now the least squares regularization turns into Tikhonov regularization (Regularized Least Squares)\n", "\n", "$$\\min_{f \\in H} \\sum_{i = 1}^n\\left(f(X_i) - Y_i\\right)^2 + \\lambda ~ ||{f}||^2_K$$\n", "\n", "The regularization parameter $\\lambda$ determines how much we distrust our data.\n", "\n", "Too low $\\lambda$ will leave noise in the measurements and therefore modelled function may not extrapolate well.\n", "\n", "Too high $\\lambda$ may eventually ignore the data." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "How to choose a correct $\\lambda$? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To validate our data we can only use our own measurements. So we can split them into a training set and testing set, interpolate the function obtained from processing the training set and find how well we can predict the test samples. This procedure is called **cross validation**.\n", "\n", "Repeating the procedure for different $\\lambda$, we can find which regularization parameter gives the best results (smallest error). \n", "\n", "Very high $\\lambda$ suggests that our measurements are too noisy or our model may be invalid.\n", "We would expect $\\lambda$ to be somewhere between 0 and 1." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "The role of Scikit-learn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In SciPy (scikit-learn) we have some handful procedures for cross-validation. \n", "For example - there are index generators, which enable us to perform:\n", "* Leave One Out cross validation\n", "* Leave P Out cross validation\n", "* K-Fold cross validation\n", "* Shuffle split iterated cross validation\n", "\n", "\n", "Some examples:" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Leave One Out" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.cross_validation import LeaveOneOut\n", "\n", "#for example\n", "#X = np.array([[0., 0.], [1., 1.], [-1., -1.], [2., 2.]])\n", "Y = np.array([0, 1, 0, 1])\n", "\n", "loo = LeaveOneOut(len(Y), indices=True)\n", "print(loo)\n", "print \"train test\"\n", "for train_ind, test_ind in loo:\n", " #do something with the indices and data\n", " print(\"%s %s\" % (train_ind, test_ind))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "sklearn.cross_validation.LeaveOneOut(n=4)\n", "train test\n", "[1 2 3] [0]\n", "[0 2 3] [1]\n", "[0 1 3] [2]\n", "[0 1 2] [3]\n" ] } ], "prompt_number": 4 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Leave P Out" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Leave P Out divides the samples into testing subset of size p and training set of size n-p" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.cross_validation import LeavePOut\n", "\n", "lpo = LeavePOut(n=len(Y), p=2, indices=True)\n", "print(lpo)\n", "print \"train test\"\n", "for train_ind, test_ind in lpo:\n", " #do something with the indices and data\n", " print(\"%s %s\" % (train_ind, test_ind))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "sklearn.cross_validation.LeavePOut(n=4, p=2)\n", "train test\n", "[2 3] [0 1]\n", "[1 3] [0 2]\n", "[1 2] [0 3]\n", "[0 3] [1 2]\n", "[0 2] [1 3]\n", "[0 1] [2 3]\n" ] } ], "prompt_number": 5 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "K-Fold" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An advantage of K-Fold cross validation is reduction of the number of iterations required to complete the task." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.cross_validation import KFold\n", "\n", "#for example:\n", "#X = np.array([[0., 0.], [1., 1.], [-1., -1.], [2., 2.]])\n", "Y = np.array([0, 1, 0, 1])\n", "\n", "kf = KFold(len(Y), n_folds=2, indices=True)\n", "print(kf)\n", "print \"train test\"\n", "for train_ind, test_ind in kf:\n", " print(\"%s %s\" % (train_ind, test_ind))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "sklearn.cross_validation.KFold(n=4, n_folds=2)\n", "train test\n", "[2 3] [0 1]\n", "[0 1] [2 3]\n" ] } ], "prompt_number": 6 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Shuffle Split" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.cross_validation import ShuffleSplit\n", "Y = np.array([0, 1, 0, 1])\n", "\n", "ss = ShuffleSplit(len(Y), n_iter=2, test_size = 0.5, indices=True)\n", "print(ss)\n", "print \"train test\"\n", "for train_ind, test_ind in ss:\n", " print(\"%s %s\" % (train_ind, test_ind))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "ShuffleSplit(4, n_iter=2, test_size=0.5, indices=True, random_state=None)\n", "train test\n", "[3 2] [1 0]\n", "[0 1] [2 3]\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And more.\n", "\n", "We can recalculate our model with different $\\lambda$ to find out which model works best." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Cross validation for determining model - example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the previous functions we can check how the models extrapolate. This is pure cross validation and curve fitting. No regularization parameter was introduced in this example." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def error_7(x_train, y_train, x_test, y_test):\n", " popt, pcov = curve_fit(poly_7, x_train, y_train, p0=(10.0, 0.2, 0.1, 0.0,0.0,0.0,0.0,0.0))\n", "\n", " a = popt[0]\n", " b = popt[1]\n", " c = popt[2]\n", " d = popt[3]\n", " e = popt[4] \n", " f = popt[5]\n", " g = popt[6]\n", " h = popt[7]\n", "\n", " y_estimated = poly_7(x_test, a,b,c,d,e,f,g,h) \n", " err = np.linalg.norm(y_test - y_estimated)\n", " return err\n", "\n", "X = np.array(range(0,10))\n", "Y = 0.04*X**2 + 1.0\n", "Y2 = Y + np.random.random_sample(size(X))-0.5\n", "\n", "loo = LeaveOneOut(len(Y), indices=True)\n", "error = 0.0\n", "for ind_train, ind_test in loo:\n", " error += error_7(X[ind_train], Y2[ind_train], X[ind_test], Y2[ind_test])\n", "\n", "print \"Total error:\", error" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Total error: 27.2241098604\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can see how badly this model extrapolates." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def error_1(x_train, y_train, x_test, y_test):\n", " popt, pcov = curve_fit(poly_1, x_train, y_train, p0=(10.0, 0.2))\n", "\n", " a = popt[0]\n", " b = popt[1]\n", "\n", " y_estimated = poly_1(x_test, a,b) \n", " err = np.linalg.norm(y_test - y_estimated)\n", " return err\n", "\n", "error = 0.0\n", "for ind_train, ind_test in loo:\n", " error += error_1(X[ind_train], Y2[ind_train], X[ind_test], Y2[ind_test])\n", "\n", "print \"Total error:\", error" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Total error: 3.68014736226\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now this looks better." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def error_2(x_train, y_train, x_test, y_test):\n", " popt, pcov = curve_fit(poly_2, x_train, y_train, p0=(10.0, 0.2,0.0))\n", "\n", " a = popt[0]\n", " b = popt[1]\n", " c = popt[2]\n", "\n", " y_estimated = poly_2(x_test, a,b,c) \n", " err = np.linalg.norm(y_test - y_estimated)\n", " return err\n", "\n", "error = 0.0\n", "for ind_train, ind_test in loo:\n", " error += error_2(X[ind_train], Y2[ind_train], X[ind_test], Y2[ind_test])\n", "\n", "print \"Total error:\", error" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Total error: 1.90230633991\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we can see that the 2nd degree polynomial extrapolates best." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is how we manage to minimize the error connected with too high variance." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Visualization of $\\lambda$ parameter influence" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets now solve a linear equation $Ax = b$\n", "\n", "$x = (A+\\lambda I)^{-1} b$ " ] }, { "cell_type": "code", "collapsed": false, "input": [ "A = np.array([\n", " [1.0, 0.5, 0.2, 0.0, 0.0],\n", " [0.5, 1.0, 0.5, 0.2, 0.0],\n", " [0.2, 0.5, 1.0, 0.5, 0.2],\n", " [0.0, 0.2, 0.5, 1.0, 0.5],\n", " [0.0, 0.0, 0.2, 0.5, 1.0],\n", " ])\n", "b = np.array([[1],[2],[3],[4],[5]])\n", "fig, (ax1, ax2) = plt.subplots(1,2)\n", "ax1.imshow(A, interpolation=\"none\")\n", "ax1.set_title(\"A\")\n", "ax2.imshow(b, interpolation=\"none\")\n", "ax2.set_title(\"b\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nyJHYsmVLr+e+17Fjx2Lu3LmxaNGieOONN3rd/O+3rE8/d1/C77Tt27fHT37yk9i5c2efz73zzjvj\nwQcfjFwuF8VisU+3zoUmADBkPfnkk90+VlVVFa+99lqMHj06Xn311Rg1atRZ5373u9+Nn/70p3Hs\n2LE4fvx4FAqF+PnPf97ruaedOHEibrzxxrjlllvis5/9bDQ3N3c9ls/no7q6+ozjx4wZE/l8vuvr\nQ4cOxZgxY8752LnOj4jYvXt33H777dHa2hojRozo87m///3vY968eRERceTIkfjVr34VlZWV0dTU\n1O2foVvnAADn0NTUFOvWrYuIiHXr1sWcOXPOOmbFihWRz+fjwIEDsXHjxpg+fXq0tLT06dxisRiL\nFy+O2trauPPOO2PKlCmxf//+aG9vj87Ozti0adNZEdfU1BQtLS0REfHcc8/Fhz/84a5b9H05/+DB\ng/HlL3851q9fH+PHj+/653059y9/+UscOHAgDhw4EHPnzo0f/vCHPUZmhCuaAADn9J3vfCduuumm\neOSRR6KmpiYef/zxiIg4fPhw3H777fHLX/7yrHNO34Luy7k7d+6M9evXxxVXXBH19fUREfG1r30t\nZs6cGYVCIRYvXhyTJk2KH/3oRxER8fWvfz2uv/762LZtW4wfPz4++MEPxqOPPtr1vSsqKmLt2rU9\nnn/ffffF3/72t67XWVZWVsauXbv6dO774XedAwCQhFvnAAAkITQBAEhCaAIAkITQBAAgCaEJAEAS\nQhMAgCSEJgAASfwfwgyIrh0RmG8AAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, (ax1, ax2, ax3, ax4) = plt.subplots(1,4)\n", "\n", "x = dot(inv(A), b)\n", "ax1.imshow(x, interpolation=\"none\")\n", "ax1.set_title(\"x for lambda=0.0\")\n", "ax4.plot(x)\n", "\n", "lambd = 1.0\n", "x = dot(inv(A + lambd*identity(A.shape[0])), b)\n", "ax2.imshow(x, interpolation = \"none\")\n", "ax2.set_title(\"x for lambda=1.0\")\n", "ax4.plot(x)\n", "\n", "\n", "lambd = 20.0\n", "x = dot(inv(A + lambd*identity(A.shape[0])), b)\n", "ax3.imshow(x, interpolation = \"none\")\n", "ax3.set_title(\"x for lambda=20.0\")\n", "ax4.plot(x)\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nUyKN1AAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 12 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "References" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Computer Science and Artificial Intelligence Laboratory - Technical Report\n", " Notes on Regularized Least Squares\n", " Ryan M. Rifkin and Ross A. Lippert\n", "2. http://en.wikipedia.org/wiki/Bias-variance_dilemma\n", "3. http://scott.fortmann-roe.com/docs/BiasVariance.html\n", "4. http://en.wikipedia.org/wiki/Tikhonov_regularization\n", "5. Scikit-learn documentation http://scikit-learn.org/" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 } ], "metadata": {} } ] }