{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Dealing with Bias and Variance" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import addutils.toc ; addutils.toc.js(ipy_notebook=True)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import scipy.io\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from addutils import css_notebook\n", "from sklearn import metrics\n", "import sys\n", "import os\n", "from IPython.core.display import Image\n", "css_notebook()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ " \n", " \n", " \n", " \n", "
\n", " \n", " BokehJS successfully loaded.\n", "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import bokeh.plotting as bk\n", "bk.output_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 Bias-Variance Tradeoff" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 (In)Formal introduction to Bias and Variance\n", "\n", "Roughly speaking Machine Learning algorithms try to characterize a tradeoff between generalization (how well the model represents the general concept or function to learn) and apporoximation (how well the model fits the data). A small error denotes a good approximation of the function _out of sample_. A more complex model has a better chance of approximating $f$, in contrast a less complex model has a better chance of generalizing (picking the right approximation) out of sample.\n", "\n", "A more formal definition can be given after *Hastie, et al. 2009*.\n", "Let's explain Bias-Variance using linear regression problems, and specifically we'll use a squared-error measure as loss function. Assume further that the output $Y = f(X) + \\epsilon$ where $E(\\epsilon) = 0$ and $Var(\\epsilon) = \\sigma_\\epsilon^2$\n", "\n", "We estimate a model $\\widehat{f}(X)$ of a function $f(X)$, and the expected squared error of a given point $x_0$ is:\n", "\n", "$$Err(x_0) = E[(Y - \\widehat{f}(x_0))^2]$$\n", "\n", "It is possible to decompose this error in its Bias and Variance components:\n", "\n", "$$Err(x_0) = \\big(E[\\widehat{f}(x_0)] - f(x_0)\\big)^2 + E\\big[\\widehat{f}(x_0) - E[\\widehat{f}(x_0)]\\big]^2 + \\sigma_{\\epsilon}^2$$\n", "\n", "$$Err(x_0) = Bias^2 + Variance + Irreducible Error$$\n", "\n", "Where $Irreducible Error$ is the variance in the true relationship that cannot be captured by any model no matter how well we estimate $f(X)$. $Bias^2$ is the difference between the average of our estimate from the true mean. $Variance$ is the expected squared deviation of $\\widehat{f}(x_0)$ around its mean. Usually the more complex is the model the lower the Bias but the higher the variance. We can give a pictorial illustration of the relationship with the image below. (The image is taken from [this](http://scott.fortmann-roe.com/docs/BiasVariance.html) blog)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nGTNmHDp0SDlGt2/fvnjxYgzD7ty5o7RxLdIzqIGeRXzx7vnnRQ1iGU4AAI1O0zPVmbvzA0UNrDuP\nnjUIFKcpJCQk5OLFi87OztnZ2crJYUvKHQACZy33nTBPCRbfhEQoyIg7l3Y16vnjFGiiMRcXlyFD\nhri7uzs7O/fo0cPJyamNcvEikejJkyePHz/Oy8tLTk6Oi4srKSmRP4thNPveAzyGjXULCKUzVFlz\n/sru9Unn/sYw7OrVq2SRR6rh8/nW1ta1tbXz5s3bs2ePEiwC0rN66Dnx7OMbh1Kl4lfxns6kjVjo\n3WuEc4ffZSOdRM8aBIrTVFFQUODs7CyTyX766aevvvpKCRaLiorc3d3r6uosnNxmbj1FY6gmT5Og\nribp3N8P/j0srOORjzCZzNDQ0AkTJgwZMsTevkM7dTMyMuLi4iIjI2/evCmXrr6Zpc+4Ob2CJ6vq\nQK2IX7f/89F1FaXdunVLSUlRThLEhQsX/vnnn/r6+s+fP9fT06PaHNKzmuj5yq4HyedzmvbbdAbN\ne2z3wI8Vtr2uM+hZs0B5Q6ni999/j42NZTAYBw4c0NdXzOpR28ybNy85ORmj0Sd886e+maUSLDZD\nxK+9eXjbv7+uyH94WyoWAYC3t/fq1av3798/b9683r17GxoadtCEubl5//79Z8+ePWvWLDMzs9LS\n0hcvXogb6vOSbqZePCGTSi1dPZSfSJLBYhtbO2TeOF9ZWUkQRFBQkBKMWlpa7tmzRywWu7i49OnT\nh2pzSM+gHnquKeMXppaRk94kNDrmOdzZwllha8mdQc+aBRpPU4JMJnN2di4oKFBaLfSbN28GBgYS\nBOEzfu6Q2SuUYPE1CCL92pm4v7Y08KoAAMOwMWPGrF27tl+/flRbjo2N/fHHH+Xbmows7YI+WdO1\n/xCq7bbk3JYvM2+cZ7PZaWlprq6uSrDYp0+fhw8fDhw48NatW5QaQnpWHz2LhdK9n54X1IpwqQwA\n6EyanonOvIhRdKaCVyK0WM8ah9qdddEO4uPjCwoKAGD+/PlKMIfj+OLFiwmC0DPt4j/tMyVYbMqL\n/MdHVoX/t+2rBl4VhmGTJ09OSUk5ffq0Ejo1ABg6dOi1a9fi4+PJEx01pc/++WHBmY2La1+UvPW1\nCvZkzkommyMSiZYuXaoci+QRqfj4+OzsbEoNaZmen6W/uH4wJXZfcmFaectn1VzPLA4j/Ofhdp4W\n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\n", "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image('utilities/bias_variance.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose the center (red) of each diagram is the real function to learn. As we move away from the center the prediction gets worse and worse. Each dot in the picture is a realization of the model given a subsample of the dataset; each circle is a different model (whose particular realizations are the dots) and model's characteristics are described by the two corresponding labels (horizontal and vertical).\n", "\n", "Having a model (top left) with both Low Bias and Low Variance is practically impossible since, as we will see next, if we decrese one the other increase (in this case both generalization and approximation will be good and we could learn almost the real function); the hard part is hence finding the best possible balance between the two. In case of Low Bias and High Variance (top right), the model is capable of representing the correct function but the model may be too complex, and thus more supsceptible in variation on the dataset. For this reason each dot (function approximation) draw from this model may vary considerably from estimate to estimate, depending on the particular subsample used for training. For High Bias and Low Variance (bottom left) the model is constantly learning a substantially different function respect to the true one, but each run is independent from the particular subsample of data (it generalize well but it approximate poorly). If we have a model that has both High Varianche and High Bias (bottom right) the model si constantly learning a wrong model with high variability between subsamples and thus the probability of picking a good model is very low. \n", "\n", "One can think of Bias and Variance as urn that contains a bunch of candidate approximations of an unknown function $f$. If we have few candidates in the urn (think about degenerating and have only one function in it), but each candidate is far away from the true value of $f$; in this case the Bias is high and the Variance is low, no matter of the dataset we will always return the same function. If we have a bigger urn containing a lot of candidates the probability that it contains the true function is higher, but it is difficult to navigate through the candidates to find the right one. In this case the Bias is lower but the Variance is higher, we have so many varieties that depending on which sample we get the function differs.\n", "\n", "Next we will show what we mean by complexity of the model with some practical examples in order to further understand the Bias-Variance tradeoff." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sys.path.append(os.getcwd() + \"/utilities\")\n", "import biasvariance\n", "from bokeh.models.ranges import Range1d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this figure, we use polynomials with different degrees `d` to fit the same data.\n", "\n", "For `d=1`, the model suffers from **high bias**: the model complexity is not enough to represent the data.\n", "\n", "At the other extreme, for `d=6` the model suffers from **high variance**: the mode overfit the data because it has too many free parameters. In this case a typical behaviour is that if any of the input points are varied slightly, it could result in a very different approximation. This kind of model will fit perfectly the training data while failing to do so on validation data.\n", "\n", "In the middle picture, for `d=2`, we have found a good model." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "biasvariance.plot_bias_variance(8, random_seed=42, err=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Bias-Variance Tradeoff explained with a regression example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section we will explore a simple **linear regression** problem.\n", "This can be accomplished within scikit-learn with the `sklearn.linear_model` module.\n", "\n", "We consider the situation where we have only 2 data points: " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn import linear_model\n", "X = np.array([0.5, 1.0]).reshape(2,1)\n", "y = np.array([0.5, 1.0])\n", "X_test = np.array([0.0, 2.0]).reshape(2,1)\n", "regr = linear_model.LinearRegression()\n", "regr.fit(X, y)\n", "fig = bk.figure(plot_width=400, plot_height=300, title=None)\n", "fig.circle(X[:,0], y, size=5)\n", "fig.line(X_test[:,0], regr.predict(X_test), color='green')\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In real life situation, we have noise (e.g. measurement noise) in our data:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import seaborn as sns\n", "import addutils.palette as pal\n", "import random\n", "cat_colors = map(pal.to_hex, sns.color_palette('bright', 6))\n", "random.shuffle(cat_colors)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "np.random.seed(0)\n", "fig = bk.figure(plot_width=400, plot_height=300, title=None)\n", "\n", "for i in range(6):\n", " noise = np.random.normal(loc=0, scale=.1, size=X.shape)\n", " noisy_X = X + noise\n", " regr.fit(noisy_X, y)\n", " \n", " fig.circle(noisy_X[:,0], y, size=8, fill_color=cat_colors[i], line_color='black')\n", " fig.line(X_test[:,0], regr.predict(X_test), color=cat_colors[i])\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, our linear model captures and amplifies the noise in the data. It displays a lot of variance. This means that if we subsample the data and we fit a different model to each subsample (each pair of points) we obtain a model that differ substantially from the true model. There are several techniques to reduce variance. **Regularization** is one of those, it is a way to change the tradeoff between Bias and Variance by putting more weights on either one. We will briefly use it in this example while we leave a more detailed explanation for the next section.\n", "\n", "We can use another linear estimator that uses **regularization**: the Ridge estimator. This estimator regularizes the coefficients by shrinking them to zero, under the assumption that very high correlations are often spurious. High alphas give high regularization (shrinkage):" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "regr = linear_model.Ridge(alpha=0.08)\n", "\n", "fig = bk.figure(plot_width=400, plot_height=300, title=None)\n", "for i in range(6):\n", " noise = np.random.normal(loc=0, scale=.1, size=X.shape)\n", " noisy_X = X + noise\n", " regr.fit(noisy_X, y)\n", " fig.circle(noisy_X[:,0], y, size=8, color=cat_colors[i], line_color='black')\n", " fig.line(X_test[:,0], regr.predict(X_test), color=cat_colors[i])\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, the estimator displays much less variance. However it systematically under-estimates the coefficient. It displays a biased behavior. As explained earlier we changed the tradeoff between Bias and Variance with regularization. Changing one quantity (for example decreasing Variance) inevitably increases the other (Bias). \n", "\n", "With the next examples we will try to answer the following question: **If our estimator is underperforming, how should we move forward?**\n", "\n", "- Do I need a Simple or more Complicated Model ?\n", "- Do I need More Training Samples ?\n", "- Do I need more features for each observed data point ?\n", "\n", "The answer is often counter-intuitive. In particular, **Sometimes using a more complicated model will give _worse_ results.** Also, **Sometimes adding training data will not improve your results.** The ability to determine what steps will improve your model is what separates the successful machine learning practitioners from the unsuccessful." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2 Regularization: what it is and why it is necessary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**The core idea behind regularization is that we are going to prefer models that are simpler**, even if they lead to more errors on the training set. We start by defining a 9th order polynomial function. This represents our 'ground truth'. You can imagine it like a signal measured at diffrent times:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "f = lambda t: 1.2*t**2 + 0.1*t**3 - 0.6*t**5 - 0.8*t**9\n", "gt_coeff = [0, 0, 1.2, 0.1, 0., -0.6, 0., 0., 0., -0.8]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Unfortunately in real life situation every signal is affected by a measurement error; in this example we simulate it with the variable `noise_level`. Our ground truth is a 9th order polynomial.\n", "\n", "At first it would seem an obvius choice to use a 9th order polynomial to fit the signal. If you play a little with the following code you will discover that not using a regularization technique (`LinearRegression` doesn't allow any regularization), most of the time could be a bad choice, and a simpler (lower-order) model it is much better to avoid overfitting.\n", "\n", "Try to change the following variables:\n", "\n", "* `orders`: orders of the polynomials to fit\n", "* `n_samples`: when the number of the samples is small it's difficult to fit a high-order model and you have overfitting\n", "* `noise_level`: whit very low noise it's easier to fit higher-order polynomials\n", "\n", "*Keep in mind that we didn't fix the random generator seed, so every time you run the cell you'll have a different noise distribution on the samples*.\n", "\n", "**As you can see we use a linear algorithm to fit a nonlinear function, this is possible because we use the linear algorithm to fit the nonlinear coefficients that we define in the regressors**." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ground Truth coeff.: +0.0 +0.0 +1.2 +0.1 +0.0 -0.6 +0.0 +0.0 +0.0 -0.8\n", "LinReg coefficients: +0.0 -0.9 +4.3 +11.6 -18.2 -42.8 +35.3 +61.7 -21.4 -31.9\n" ] }, { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tmin, tmax = -1.1, 1.0\n", "n_samples = 25\n", "noise_level = 0.2\n", "orders = [4, 9]\n", "np.random.seed(1)\n", "t = tmin + np.random.rand(n_samples) * (tmax-tmin) # Sample points\n", "y_noisy = f(t) + noise_level*np.random.normal(size=n_samples) # Noisy measure\n", "\n", "fig = bk.figure(plot_width=700, plot_height=400,\n", " title='4th and a 9th order polynomial with Ground truth')\n", "fig.circle(t, y_noisy, size=8, fill_alpha=0.4)\n", "\n", "p = np.linspace(tmin, tmax, 200) # Array to calc. the prediction\n", "colors = ['royalblue', 'green']\n", "for order in orders:\n", " X = np.array([t**i for i in range(order+1)]).T # Regressor\n", " Xp = np.array([p**i for i in range(order+1)]).T # Regressor for prediction\n", " poly_linreg = linear_model.LinearRegression().fit(X, y_noisy)\n", " fig.line(p, poly_linreg.predict(Xp), legend='linreg order: %02i' % order,\n", " color=colors.pop(), line_width=3.0)\n", "\n", "fig.line(p, f(p), legend=\"truth\", color='red', line_width=4.0)\n", "fig.legend.label_text_font_size = '14pt'\n", "fig.legend.orientation = 'top_left'\n", "np.set_printoptions(precision=2)\n", "print 'Ground Truth coeff.: ', ' '.join(['%+5.1f' %n for n in gt_coeff])\n", "print 'LinReg coefficients: ', ' '.join(['%+5.1f' %n for n in poly_linreg.coef_])\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we compare the previous `LinearRegression` algorithm with the `Lasso` algorithm.\n", "\n", "`Lasso` (least absolute shrinkage and selection operator) is an alternative regularized version of least squares: it is a **shrinkage estimator**: unlike `ridge regression`, as the penalty term increases, lasso sets more coefficients to zero, this means that the lasso estimator produces smaller models." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ground Truth coeff.: +0.0 +0.0 +1.2 +0.1 +0.0 -0.6 +0.0 +0.0 +0.0 -0.8\n", "LinReg coefficients: +0.0 -0.0 +1.0 -0.0 +0.0 -0.0 +0.0 -0.0 +0.0 -1.3\n" ] }, { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "order = 9\n", "np.random.seed(1)\n", "X = np.array([t**i for i in range(order+1)]).T\n", "Xp = np.array([p**i for i in range(order+1)]).T\n", "poly_linreg = linear_model.LinearRegression().fit(X, y_noisy)\n", "poly_lasso = linear_model.Lasso(alpha = 0.005).fit(X, y_noisy)\n", "\n", "fig = bk.figure(plot_width=700, plot_height=400)\n", "fig.circle(t, y_noisy, size=8, alpha=0.4)\n", "fig.line(p, poly_linreg.predict(Xp), legend='linreg order: %02i' % order,\n", " color='royalblue', line_width=3.0)\n", "fig.line(p, poly_lasso.predict(Xp), legend='lasso order: %02i' % order,\n", " line_width=3.0, color='green')\n", "fig.line(p, f(p), legend=\"truth\", color='red', line_width=4.0)\n", "\n", "fig.legend.label_text_font_size = '15pt'\n", "fig.legend.orientation = 'top_left'\n", "fig.title = '9th order LinReg and Lasso with Ground truth'\n", "\n", "np.set_printoptions(precision=2)\n", "print 'Ground Truth coeff.: ', ' '.join(['%+5.1f' %n for n in gt_coeff])\n", "print 'LinReg coefficients: ', ' '.join(['%+5.1f' %n for n in poly_lasso.coef_])\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Try by yourself: play a little with the code of the two previous cells by changing `n_samples` and `noise_level` to verify that:\n", "\n", "* When `n_samples` is very high (>1000) it's very unlikely to have overfitting. This means that with more data it's possible to fit more complex models without overfitting.\n", "* When `n_samples` is very low (<40) it's almost impossible to fit with Linear Regression without overfitting. In this case regularization is always required\n", "* When `n_samples` is very high (>1000) and `noise_level` is very low, the Lasso algorithm keeps just the coefficients actually used to calculate the ground truth function. This means that Lasso can deal with high dimesional problems where most of the features can be neglected producing compact linear models.\n", "\n", "Another way to look at the Bias-Variance tradeoff in previous examples is to consider how the model fits the data. As stated at the beginning of this section when model complexity increases Bias decrease while Variance increses. The optimal model performance is achieved when the level of complexity is such that an increase in Bias is equivalent in reduction of Variance. If the model complexity exceed this threshold we are overfitting (the model is to adapted to the data and does not generalize well) if the model is behind this threshold is said to be underfitting (the model does not fit well the data and it has a poor error for out of sample data)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3 Do I need a Simple or a Complex Model?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to show the relation between the size of the training dataset and the complexity of the model we generate some example data in the same way we did in the very first example but with more than ten times the number of samples. The we fit a polynomial model and we plot the error w.r.t. the degree of polynomial.\n", "\n", "Here **Training Data** are plotted in **Blue** while **Validation Data** are **Red**:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn import cross_validation\n", "N = 100\n", "test_size = 0.40\n", "error = 1.0\n", "np.random.seed(1)\n", "x = np.random.random(N)\n", "y = biasvariance.test_func(x, error)\n", "x_tr, x_valid, y_tr, y_valid = cross_validation.train_test_split(x, y, test_size=test_size)\n", "fig = bk.figure(plot_width=700, plot_height=400, title=None)\n", "fig.circle(x_tr, y_tr, color='blue', size=6, alpha=0.5)\n", "fig.circle(x_valid, y_valid, color='red', size=6, alpha=0.5)\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The **model parameters** *(in our case, the coefficients of the polynomials)* are learned using the **training set**.\n", "\n", "The **meta-parameters** *(in our case, the degree of the polynomial)* are adjusted so that this **validation error** is minimized.\n", "\n", "Finally, the labels are predicted for the **test set**.\n", "\n", "The **validation error** of our polynomial classifier can be visualized by plotting the error as a function of the polynomial degree:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import warnings\n", "warnings.filterwarnings('ignore', message='Polyfit*')\n", "\n", "degrees = np.arange(41)\n", "train_err = np.zeros(len(degrees))\n", "validation_err = np.zeros(len(degrees))\n", "\n", "for i, d in enumerate(degrees):\n", " p = np.polyfit(x_tr, y_tr, d)\n", " train_err[i] = biasvariance.compute_error(x_tr, y_tr, p)\n", " validation_err[i] = biasvariance.compute_error(x_valid, y_valid, p)\n", "\n", "fig = bk.figure(plot_width=700, plot_height=400, title=None)\n", "\n", "fig.line(degrees, validation_err,\n", " line_width=2, legend='cross-validation error', color='royalblue')\n", "fig.line(degrees, train_err, line_width=2, legend='training error', color='green')\n", "fig.line([0, 20], [error, error], line_dash='dashed', legend='intrinsic error', color='black')\n", "\n", "fig.xaxis.axis_label = 'degree of fit'\n", "fig.yaxis.axis_label = 'rms error'\n", "\n", "fig.grid.grid_line_color = None\n", "\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this toy dataset, error = 1.0 is the best we can hope to obtain. Choosing `d=6` in this case gets us very close to the optimal error.\n", "\n", "Notice that in the above plot, `d=6` gives the best results. But in the very first example, we found that `d=6` vastly over-fits the data. What’s going on here? The difference is the **number of training points** used:\n", "\n", "**As a general rule of thumb, the more the training points, the more complex the model can be.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4 Do I need More Training Samples?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to exploit the relationship outlined above, between the complexity of the model and the number of examples, we use a tool called **Learning Curves**. Learning Curves works by plotting the training error and validation (or test) error as a **function of the number of training points**:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def plot_learning_curve(d, N=100, y_range=None):\n", " test_size = 0.40\n", " n_sizes = 50 # Number of testing point in which to split the size\n", " n_runs = 20 # Number of times to run the test for each training set size\n", " sizes = np.linspace(2, N, n_sizes).astype(int)\n", " train_err = np.zeros((n_runs, n_sizes))\n", " validation_err = np.zeros((n_runs, n_sizes))\n", " for run in range(n_runs):\n", " for nsize, size in enumerate(sizes):\n", " x_tr, x_valid, y_tr, y_valid = cross_validation.train_test_split(x, y,\n", " test_size=test_size, random_state=run)\n", " # Train on only the first `size` points\n", " p = np.polyfit(x_tr[:size], y_tr[:size], d)\n", " # Validation error is on the *entire* validation set\n", " validation_err[run, nsize] = biasvariance.compute_error(x_valid, y_valid, p)\n", " # Training error is on only the points used for training\n", " train_err[run, nsize] = biasvariance.compute_error(x_tr[:size], y_tr[:size], p)\n", "\n", " fig = bk.figure(plot_width=400, plot_height=300, title='d = %i' % d,\n", " x_range=(0, N-1)) \n", " fig.title_text_font_size = '11pt'\n", " fig.xaxis.axis_label_text_font_size = '9pt'\n", " fig.yaxis.axis_label_text_font_size = '9pt'\n", " \n", " fig.line(sizes, validation_err.mean(axis=0), \n", " line_width=2, legend='mean validation error', color='royalblue')\n", " fig.line(sizes, train_err.mean(axis=0),\n", " line_width=2, legend='mean training error', color='green')\n", " fig.line([0, N], [error, error],\n", " line_dash='dashed', legend='intrinsic error', color='black')\n", " \n", " fig.xaxis.axis_label = 'traning set size'\n", " fig.yaxis.axis_label = 'rms error'\n", " fig.legend.orientation = 'top_right'\n", " \n", " if y_range:\n", " fig.y_range = Range1d(y_range[0], y_range[1])\n", "\n", " fig.grid.grid_line_color = None\n", " bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we look at the behavior of $E_{train}$ and $E_{test}$.\n", "\n", "As we increase $N$, $E_{test}$ decreases until the limit of the algorithm, that is its $Bias$.\n", "\n", "As we increase $N$, $E_{train}$ increases, because with few datapoints the task is simpler, while adding more data increase the difficulty of the algorithm to fit them.\n", "\n", "The discrepancy of the two curves is the **generalization error**. It should shrink and get tighter as generalization increases." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAFrCAYAAAFap1psAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAS\ndAAAEnQB3mYfeAAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6\neD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYg\neG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4K\nICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlm\nZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRh\ndGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9y\nZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAQABJREFUeAHsnQd8FMX3wGdvLr33hBB6qNJ7b1JV\npPwQsSIqIupPUf8oqAhKkaZi4weiooIFKSIiRaU3JdSQBBJ6IIWQXkhCkvnP2zDH5bhL7pK73O3d\nu89nM7tT3/vO25fZ2d1ZQvCHBJCAFQhQSpkVmsUmkUAtEmAdO9aqlatqUTfrNzVhwgfWFwIlQALV\nIcDGjz9RnXJYxggCjDHruMLadvhGsLBIFpae7m2Rio2p1N4hc+t1MYaDRfOwjAwfAM1/kkUbskLl\nrGvXYis0W3mT7N9/B8rAAXpUVP/Kczt2qsUskh071oesWvUGOXBgeKWIw8MvEB+fTJFH+v77TmK/\nsvD4vwc6t+/S80hleWwizWr/QWug/dZN60fUoLimKJs37wvNgZl31FDf66+/vhACc9WdkcF8EhNJ\n31OnyH0XL5KuV6+StsbWvWKFZNTZ9NuuA/fyOn8ztl5D+aQZM6awWbO+kWbNespQnhrFZx98qYuh\nCq5fZ5GTJjEG29y5LIpbubOhvLUZ38+337nabM8sbQFE/nMzS2UKrMTeh6E20SXs88/n2IQg9iwE\nWnIt9S7r3LkEYdcSbGwGCSABJGAiAaOuhkysUxHZ+Vjec/Jkks0YkSfPR40i04cNk/Aem6m9BxdG\n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\nAmUm8P/aVLDfr0+xHQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image('utilities/learning_curves.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the left picture (simple model) we can see that the model \"true\" error (the best the model can do) is high and pretty soon (that is for lower values of $N$) we reach the point were both $E_{train}$ and $E_{test}$ are closer. In the right picture (complex model) we can see that, since it is more complex, it has a better approximation of the target function and thus can achieve (in principle) a lower $E_{test}$ error. The function is so complex that with few data points it fits them perfectly reaching a training error of zero. However if we look at the corresponding $E_{test}$ we can see that it is very high, we haven't learn anything. As the number of examples grows, $E_{test}$ starts lowering and it gets lower than the other model, but the discrepancy between the two errors remains higher than that of the previous example. \n", "\n", "Let's see a practical example:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_learning_curve(d=1, N=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A polynomial model with `d=1` is a **high-biased estimator** which under-fits the data. This is indicated by the fact that **both the training and validation errors are very high**.\n", "\n", "*Adding more data WON'T work in this case.*\n", "\n", "**When both TRAINING and VALIDATION curves converge to an high error, we have a HIGH BIAS model.** In this situation we can try one of the following actions:\n", "\n", "* Using a more sophisticated model (i.e. in this case, increase ``d``)\n", "* Gather more features for each sample.\n", "* Decrease regularlization.\n", "\n", "Now let's look at a model with higher degree (and thus higher variance):" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_learning_curve(d=10, N=100, y_range=(0,12))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example it is possible to see that with `d=10` a **high-variance** estimator may **overfit data** when the number of samples is not sufficent. It is possible to note it by looking at the discrepancy between the two curves. When the number of samples is low we have a low training error, but the corresponding test error is really high. As the number of samples increase the test error decrease and converge to the model error but it may be to slow to converge and still have an higher discrepancy between the two curves.\n", "\n", "**When the learning curves does not converge using the full training set, it indicates a HIGH VARIANCE model, and the model is OVERFITTING the data.**\n", "\n", "A high-variance model can be improved by:\n", "\n", "* Gathering more training samples.\n", "* Using a less-sophisticated model (i.e. in this case, make `d` smaller)\n", "* Increase regularization.\n", "\n", "*In particular, gathering more features for each sample will not help the results.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6 Do the right thing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.1 High Bias" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If our algorithm shows high **bias**, the following actions might help:\n", "\n", "- **Add more features**. In our example of predicting home prices,\n", " it may be helpful to make use of information such as the neighborhood\n", " the house is in, the year the house was built, the size of the lot, etc.\n", " Adding these features to the training and test sets can improve\n", " a high-bias estimator\n", "- **Use a more sophisticated model**. Adding complexity to the model can\n", " help improve on bias. For a polynomial fit, this can be accomplished\n", " by increasing the degree d. Each learning technique has its own\n", " methods of adding complexity.\n", "- **Use fewer samples**. Though this will not improve the classification,\n", " a high-bias algorithm can attain nearly the same error with a smaller\n", " training sample. For algorithms which are computationally expensive,\n", " reducing the training sample size can lead to very large improvements\n", " in speed.\n", "- **Decrease regularization**. Regularization is a technique used to impose\n", " simplicity in some machine learning models, by adding a penalty term that\n", " depends on the characteristics of the parameters. If a model has high bias,\n", " decreasing the effect of regularization can lead to better results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.2 High Variance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If our algorithm shows **high variance**, the following actions might help:\n", "\n", "- **Use fewer features**. Using a feature selection technique may be\n", " useful, and decrease the over-fitting of the estimator.\n", "- **Use a simpler model**. Model complexity and over-fitting go hand-in-hand.\n", "- **Use more training samples**. Adding training samples can reduce\n", " the effect of over-fitting, and lead to improvements in a high\n", " variance estimator.\n", "- **Increase Regularization**. Regularization is designed to prevent\n", " over-fitting. In a high-variance model, increasing regularization\n", " can lead to better results.\n", "\n", "These choices become very important in real-world situations. For example,\n", "due to limited telescope time, astronomers must seek a balance between\n", "observing a large number of objects, and observing a large number of\n", "features for each object. Determining which is more important for a\n", "particular learning task can inform the observing strategy that the\n", "astronomer employs. In a later exercise, we will explore the use of\n", "learning curves for the photometric redshift problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.3 More Sophisticate Methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a lot more options for performing validation and model testing.\n", "In particular, there are several schemes for cross-validation, in which\n", "the model is fit multiple times with different training and test sets.\n", "The details are different, but the principles are the same as what we've\n", "seen here.\n", "\n", "For more information see the ``sklearn.cross_validation`` module documentation,\n", "and the information on the scikit-learn website." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.4 One Last Caution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using validation schemes to determine hyper-parameters means that we are\n", "fitting the hyper-parameters to the particular validation set. In the same\n", "way that parameters can be over-fit to the training set, hyperparameters can\n", "be over-fit to the validation set. Because of this, the validation error\n", "tends to under-predict the classification error of new data.\n", "\n", "For this reason, it is recommended to split the data into three sets:\n", "\n", "- The **training set**, used to train the model (usually ~60% of the data)\n", "- The **validation set**, used to validate the model (usually ~20% of the data)\n", "- The **test set**, used to evaluate the expected error of the validated model (usually ~20% of the data)\n", "\n", "*This may seem excessive, and many machine learning practitioners ignore the need\n", "for a test set. But if your goal is to predict the error of a model on unknown\n", "data, using a test set is vital*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7 Additional examples on Regularization: Ridge Regression and Stocastic Gradient Descent (SGD)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`LinearRegression` fits a linear model with coefficients $w = (w_1, \\ldots, w_p)$ to minimize the residual sum of squares between the observed responses in the dataset, and the responses predicted by the linear approximation.\n", "\n", "Mathematically it solves a problem of the form: \n", "\n", "$$ \\underset{w}{min} \\|Xw -y\\|_2^2$$\n", "\n", "Let's see the `diabetes` dataset:" ] }, { "cell_type": "code", "execution_count": 21, "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", "
0123456
00.0380760.0506800.0616960.021872-0.044223-0.034821-0.043401
1-0.001882-0.044642-0.051474-0.026328-0.008449-0.0191630.074412
20.0852990.0506800.044451-0.005671-0.045599-0.034194-0.032356
3-0.089063-0.044642-0.011595-0.0366560.0121910.024991-0.036038
40.005383-0.044642-0.0363850.0218720.0039350.0155960.008142
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6\n", "0 0.038076 0.050680 0.061696 0.021872 -0.044223 -0.034821 -0.043401\n", "1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163 0.074412\n", "2 0.085299 0.050680 0.044451 -0.005671 -0.045599 -0.034194 -0.032356\n", "3 -0.089063 -0.044642 -0.011595 -0.036656 0.012191 0.024991 -0.036038\n", "4 0.005383 -0.044642 -0.036385 0.021872 0.003935 0.015596 0.008142" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn import datasets\n", "diabetes = datasets.load_diabetes() # Diabetes is a dataset with 442 samples and 10 attributes\n", "X = pd.DataFrame(diabetes.data)\n", "y = pd.DataFrame(diabetes.target)\n", "\n", "warnings.filterwarnings(\"ignore\", category=DeprecationWarning)\n", "X[X.columns[0:7]].head() # Show the first 3 attributes for the first 7 samples" ] }, { "cell_type": "code", "execution_count": 22, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456
count4.420000e+024.420000e+024.420000e+024.420000e+024.420000e+024.420000e+024.420000e+02
mean-3.639623e-161.309912e-16-8.013951e-161.289818e-16-9.042540e-171.301121e-16-4.563971e-16
std4.761905e-024.761905e-024.761905e-024.761905e-024.761905e-024.761905e-024.761905e-02
min-1.072256e-01-4.464164e-02-9.027530e-02-1.123996e-01-1.267807e-01-1.156131e-01-1.023071e-01
25%-3.729927e-02-4.464164e-02-3.422907e-02-3.665645e-02-3.424784e-02-3.035840e-02-3.511716e-02
50%5.383060e-03-4.464164e-02-7.283766e-03-5.670611e-03-4.320866e-03-3.819065e-03-6.584468e-03
75%3.807591e-025.068012e-023.124802e-023.564384e-022.835801e-022.984439e-022.931150e-02
max1.107267e-015.068012e-021.705552e-011.320442e-011.539137e-011.987880e-011.811791e-01
\n", "
" ], "text/plain": [ " 0 1 2 3 4 \\\n", "count 4.420000e+02 4.420000e+02 4.420000e+02 4.420000e+02 4.420000e+02 \n", "mean -3.639623e-16 1.309912e-16 -8.013951e-16 1.289818e-16 -9.042540e-17 \n", "std 4.761905e-02 4.761905e-02 4.761905e-02 4.761905e-02 4.761905e-02 \n", "min -1.072256e-01 -4.464164e-02 -9.027530e-02 -1.123996e-01 -1.267807e-01 \n", "25% -3.729927e-02 -4.464164e-02 -3.422907e-02 -3.665645e-02 -3.424784e-02 \n", "50% 5.383060e-03 -4.464164e-02 -7.283766e-03 -5.670611e-03 -4.320866e-03 \n", "75% 3.807591e-02 5.068012e-02 3.124802e-02 3.564384e-02 2.835801e-02 \n", "max 1.107267e-01 5.068012e-02 1.705552e-01 1.320442e-01 1.539137e-01 \n", "\n", " 5 6 \n", "count 4.420000e+02 4.420000e+02 \n", "mean 1.301121e-16 -4.563971e-16 \n", "std 4.761905e-02 4.761905e-02 \n", "min -1.156131e-01 -1.023071e-01 \n", "25% -3.035840e-02 -3.511716e-02 \n", "50% -3.819065e-03 -6.584468e-03 \n", "75% 2.984439e-02 2.931150e-02 \n", "max 1.987880e-01 1.811791e-01 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X[X.columns[0:7]].describe() # Describe the first three columns" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[(0, numpy.float64),\n", " (1, numpy.float64),\n", " (2, numpy.float64),\n", " (3, numpy.float64),\n", " (4, numpy.float64),\n", " (5, numpy.float64),\n", " (6, numpy.float64),\n", " (7, numpy.float64),\n", " (8, numpy.float64),\n", " (9, numpy.float64)]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zip(X.columns, [type(x) for x in X.ix[0,:]]) # Check the datatypes of the columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Keep just the attributes in the column number 2 (3rd column) and use 25% of the data as a testing set:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = cross_validation.train_test_split(np.array(X[X.columns[2:3]]),\\\n", " np.array(y),\\\n", " test_size=0.25, random_state=0)\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "regr1 = linear_model.LinearRegression().fit(X_train, y_train)\n", "\n", "fig = bk.figure(plot_width=640, plot_height=300, title=None)\n", "fig.circle(X_test[:,0], y_test[:,0], color='black')\n", "fig.line(X_test[:,0], regr1.predict(X_test)[:,0], color='blue',\n", " legend='linear regression', line_width=3)\n", "fig.legend.orientation = 'bottom_right'\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.1 Ridge Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Linear Regression rely on the independence of the model terms. When terms are correlated and the columns of the design matrix $X$; have an approximate linear dependence, the matrix $(X^TX)^{-1}$ becomes\n", "close to singular. As a result, the least-squares estimate becomes highly sensitive to random errors in the observed response *y*, producing a large variance. This situation of multicollinearity can arise, for example, when data are collected without an experimental design.\n", "\n", "The ridge coefficients minimize a penalized residual sum of squares:\n", "\n", "$$ \\underset{w}{min} \\|Xw -y\\|_2^2 + \\alpha \\|w\\|_2^2$$\n", "\n", "\n", "Here, positive $\\alpha \\geq 0 \\hspace{2 pt}$ is a complexity parameter that controls the amount of shrinkage: the larger the value of $\\alpha$, the greater the amount of shrinkage and thus the coefficients become more robust to collinearity." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "regr2 = linear_model.Ridge(alpha = 0.5)\n", "regr2.fit(X_train, y_train)\n", "\n", "fig = bk.figure(plot_width=640, plot_height=330, title=None)\n", "fig.circle(X_test[:,0], y_test[:,0], color='black')\n", "fig.line(X_test[:,0], regr1.predict(X_test)[:,0], color='blue',\n", " legend='linear regression', line_width=3)\n", "fig.line(X_test[:,0], regr2.predict(X_test)[:,0], color='red',\n", " legend='ridge regression', line_width=3)\n", "fig.legend.orientation = 'bottom_right'\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Keep all the 10 attributes and split training and testing sets:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = cross_validation.train_test_split(np.array(X),\\\n", " np.array(y),\\\n", " test_size=0.25, random_state=0)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fit the ridge regressor on all the attributes and calculate the fits for a given $\\alpha$" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Coefficients: [[ 11.2 -91.95 372.15 211.51 -5.48 -54.35 -170.41 117.16 304.\n", " 98.04]]\n", "Variance score: 0.37\n" ] } ], "source": [ "regr3 = linear_model.Ridge(alpha = 0.6)\n", "regr3.fit(X_train, y_train)\n", "print 'Coefficients: ', regr3.coef_\n", "print ('Variance score: %.2f' % regr3.score(X_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The larger the value of $\\alpha \\geq 0 \\hspace{2 pt}$, the greater the amount of shrinkage and thus the coefficients become more robust to collinearity. Nevertheless, the value of $\\alpha \\hspace{2 pt}$ cannot be increased indefinitely: there is an optimal point above which the variance scores and residual sum of squales drop sharply:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_alphas = 200\n", "alphas = np.logspace(-5, 1, n_alphas)\n", "regr3 = linear_model.Ridge(fit_intercept=False)\n", "\n", "scores = []\n", "for a in alphas:\n", " regr3.set_params(alpha=a)\n", " regr3.fit(X_train, y_train)\n", " scores.append(regr3.score(X_test, y_test))\n", "\n", "fig = bk.figure(plot_width=640, plot_height=330,\n", " title=r'Variance Scores as a function of alpha',\n", " x_axis_type='log', x_range=(min(alphas), max(alphas)))\n", "fig.title_text_font_size = '11pt'\n", "fig.xaxis.axis_label = 'alpha'\n", "fig.yaxis.axis_label = 'scores'\n", "fig.axis.axis_label_text_font_size = '10pt'\n", "fig.line(alphas, scores, line_color='blue')\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.2 Stochastic Gradient Descent (SGD)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Stochastic Gradient Descent` is a simple yet very efficient approach to discriminative learning of linear classifiers under convex loss functions such as (linear) Support Vector Machines and Logistic Regression. Even though SGD has been around in the machine learning community for a long time, it has received a considerable amount of attention just recently in the context of large-scale learning.\n", "\n", "SGD has been successfully applied to large-scale and sparse machine learning problems often encountered in text classification and natural language processing. Given that the data is sparse, the classifiers in this module easily scale to problems with more than $10^5$ training examples and more than $10^5$ features." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.datasets.samples_generator import make_regression\n", "\n", "X, y = make_regression(n_samples=100000, n_features=1, n_informative=1,\\\n", " random_state=0, noise=35)\n", "\n", "reg3 = linear_model.SGDRegressor(alpha=0.1, n_iter=20)\n", "reg3.fit(X, y)\n", "\n", "fig = bk.figure(plot_width=630, plot_height=300, title=None)\n", "fig.circle(X[::1000, 0], y[::1000], color='black')\n", "fig.line(X[::1000, 0], reg3.predict(X[::1000]), color='red', line_width=3)\n", "fig.grid.grid_line_color = None\n", "fig.axis.minor_tick_out = 0\n", "bk.show(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.2 Support Vector Machines\n", "\n", "\n", "**TODO:** aggiungere SVM" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "Visit [www.add-for.com]() for more tutorials and updates.\n", "\n", "This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License." ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 0 }