{ "metadata": { "name": "", "signature": "sha256:a6c6a1f9f470ca9fefc98912d7c2b3eff35018b73b1523a7fef4667000a89a46" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook was put together by [Jake Vanderplas](http://www.vanderplas.com) for PyCon 2014. Source and license info is on [GitHub](https://github.com/jakevdp/sklearn_pycon2014/)." ] }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Validation and Model Selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This section builds on the previous discussions, and goes into more depth on how to evaluate and improve a the training of a supervised Classification or Regression model.\n", "\n", "By the end of this section, you will:\n", "\n", "- Know several metrics by which models can be evaluated\n", "- Know the difference between *bias* and *variance*, and why there is a tradeoff\n", "- Know how to use *(cross) validation curves* to evaluate & improve your model\n", "- Know how to use *learning curves* to further evaluate & improve your model\n", "\n", "Recall our previous discussion of the importance of splitting data into a *training set* and a *testing set*: we'll be extending that here." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Exploring Validation Metrics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How can you evaluate the performance of a model?\n", "\n", "The simplest way might be to count the number of matches and mis-matches. But this is not always sufficient. For example, imagine you have a situation where you'd like to identify a rare class of event from within a large number of background sources (in my field, an example of this is finding variable stars from the background of non-varying stars). This \"number of matches\" metric can break down:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Generate an un-balanced 2D dataset\n", "np.random.seed(0)\n", "X = np.vstack([np.random.normal(0, 1, (950, 2)),\n", " np.random.normal(-1.8, 0.8, (50, 2))])\n", "y = np.hstack([np.zeros(950), np.ones(50)])\n", "\n", "plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='none',\n", " cmap=plt.cm.Accent);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Quick Exercise #1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use a *Support Vector Machine*, and see how well the model can classify this data. You can use what we did above as a template:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.svm import SVC\n", "# First instantiate the \"Support Vector Classifier\" (SVC) model\n", "\n", "\n", "# Next split the data (X and y) into a training and test set\n", "\n", "\n", "# fit the model to the training data\n", "\n", "\n", "# compute y_pred, the predicted labels of the test data\n", "\n", "\n", "# Now that this is finished, we'll compute the classification rate\n", "# print \"accuracy:\", np.sum(ytest == ypred) * 1. / len(y_test)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Did you do well? Would you say that this is a good classification scheme for the problem?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Run the following to load the solution:\n", "# %load solutions/06-1_svm_class.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "The Problem with Simple Validation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The problem here is that we might not care how well we can classify the **background**, but might instead be concerned with successfully pulling-out an uncontaminated set of **foreground** sources. We can get at this by computing statistics such as the **precision**, the **recall**, and the **f1 score**:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.cross_validation import train_test_split\n", "from sklearn import metrics\n", "from sklearn.svm import SVC\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)\n", "clf = SVC().fit(X_train, y_train)\n", "y_pred = clf.predict(X_test)\n", "\n", "print \"accuracy:\", metrics.accuracy_score(y_test, y_pred)\n", "print \"precision:\", metrics.precision_score(y_test, y_pred)\n", "print \"recall:\", metrics.recall_score(y_test, y_pred)\n", "print \"f1 score:\", metrics.f1_score(y_test, y_pred)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "accuracy: 0.968\n", "precision: 0.833333333333\n", "recall: 0.625\n", "f1 score: 0.714285714286\n" ] } ], "prompt_number": 5 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "What do these mean?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These are ways of taking into account not just the classification results, but the results **relative to the true category**.\n", "\n", "$$ {\\rm accuracy} \\equiv \\frac{\\rm correct~labels}{\\rm total~samples} $$\n", "\n", "$$ {\\rm precision} \\equiv \\frac{\\rm true~positives}{\\rm true~positives + false~positives} $$\n", "\n", "$$ {\\rm recall} \\equiv \\frac{\\rm true~positives}{\\rm true~positives + false~negatives} $$\n", "\n", "$$ F_1 \\equiv 2 \\frac{\\rm precision \\cdot recall}{\\rm precision + recall} $$\n", "\n", "The **accuracy**, **precision**, **recall**, and **f1-score** all range from 0 to 1, with 1 being optimal.\n", "Here we've used the following definitions:\n", "\n", "- *True Positives* are those which are labeled ``1`` which are actually ``1``\n", "- *False Positives* are those which are labeled ``1`` which are actually ``0``\n", "- *True Negatives* are those which are labeled ``0`` which are actually ``0``\n", "- *False Negatives* are those which are labeled ``0`` which are actually ``1``\n", "\n", "\n", "We can quickly compute a summary of these statistics using scikit-learn's provided convenience function:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print metrics.classification_report(y_test, y_pred,\n", " target_names=['background', 'foreground'])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " precision recall f1-score support\n", "\n", " background 0.97 0.99 0.98 234\n", " foreground 0.83 0.62 0.71 16\n", "\n", "avg / total 0.97 0.97 0.97 250\n", "\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tells us that, though the overall correct classification rate is 97%, we only correctly identify 67% of the desired samples, and those that we label as positives are only 83% correct! This is why you should make sure to carefully choose your metric when validating a model." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Quick Exercise #2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compare the *K Neighbors Classifier*, the *Gaussian Naive Bayes Classifier*, and the *Support Vector Machine Classifier* on this toy dataset, using their default parameters. Which is most accurate? Which is most precise? Which has the best recall?\n", "\n", "Imagine that you are a medical doctor, and here the features are biometric measurements, and the labels are\n", "\n", "- 0 = no disease\n", "- 1 = potential infection\n", "\n", "For your patients, which classifier might you choose? (That is, would you be more concerned with accuracy, precision, or recall?)" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "# Run the following to load the solution:\n", "# %load solutions/06-2_unbalanced.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Cross-Validation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the simple train/test split as above can be useful, but there is a disadvantage: **Your fit is ignoring a portion of your dataset**. One way to address this is to use cross-validation.\n", "\n", "The simplest cross-validation scheme involves running two trials, where you split the data into two parts, first training on one, then training on the other:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "X1, X2, y1, y2 = train_test_split(X, y, test_size=0.5)\n", "print X1.shape\n", "print X2.shape" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(500, 2)\n", "(500, 2)\n" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "y2_pred = SVC().fit(X1, y1).predict(X2)\n", "y1_pred = SVC().fit(X2, y2).predict(X1)\n", "\n", "print np.mean([metrics.precision_score(y1, y1_pred),\n", " metrics.precision_score(y2, y2_pred)])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.794117647059\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is known as **two-fold** cross-validation, and is a special case of *K*-fold cross validation.\n", "\n", "Because it's such a common routine, scikit-learn has a K-fold cross-validation scheme built-in:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.cross_validation import cross_val_score\n", "\n", "# Let's do a 2-fold cross-validation of the SVC estimator\n", "print cross_val_score(SVC(), X, y, cv=2, scoring='precision')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 0.90909091 0.76190476]\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's also possible to use ``sklearn.cross_validation.KFold`` and ``sklearn.cross_validation.StratifiedKFold`` directly, as well as other cross-validation models which you can find in the ``cross_validation`` module." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Quick Exercise #3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ``SVC`` classifier takes a parameter ``C`` whose default value is ``1``. Using 5-fold cross-validation, make a plot of the precision as a function of ``C``, for the ``SVC`` estimator on this dataset. For best results, use a logarithmic spacing of ``C`` between 0.01 and 100." ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "# Run the following to load the solution:\n", "# %load solutions/06-3_5fold_crossval.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Grid Search" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This exercise you just completed is an example of a **grid search** for model evaluation. Again, because this is such a common task, Scikit-learn has a grid search tool built-in, which is used as follows. Note that ``GridSearchCV`` has a ``fit`` method: it is a meta-estimator: an estimator over estimators!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.grid_search import GridSearchCV\n", "\n", "clf = SVC()\n", "Crange = np.logspace(-2, 2, 40)\n", "\n", "grid = GridSearchCV(clf, param_grid={'C': Crange},\n", " scoring='precision', cv=5)\n", "grid.fit(X, y)\n", "\n", "print \"best parameter choice:\", grid.best_params_" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "best parameter choice: {'C': 0.13433993325989002}\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "/Users/jakevdp/anaconda/lib/python2.7/site-packages/sklearn/metrics/metrics.py:1734: UserWarning: The sum of true positives and false positives are equal to zero for some labels. Precision is ill defined for those labels [ 1.]. The precision and recall are equal to zero for some labels. fbeta_score is ill defined for those labels [ 1.]. \n", " average=average)\n" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "scores = [g[1] for g in grid.grid_scores_]\n", "plt.semilogx(Crange, scores);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEFCAYAAAAG45eHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAF7xJREFUeJzt3X9wFPX9x/HXYYJD0wooFsld+o1NYhILRh0Q0dJGZzqh\ndIwt2pr+sBRTiLSRoVOr/WHb0HaQ2HacDmlrqEJFS5r+cCbUxqMGOW0ViCMIWhADBT1ubJwIiKIl\n5LLfP7akhiR3t7t3uftcno+Zm3C7n9v98PF85cP7PrfrsyzLEgAgK41LdwcAAKlDyANAFiPkASCL\nEfIAkMUIeQDIYoQ8AGSxuCF/yy23aOrUqZoxY8aIbZYtW6aSkhJVVFRo586dSe0gAMC9uCG/aNEi\nBYPBEfe3t7dr//796urq0po1a7R06dKkdhAA4F7ckJ87d64mT5484v6NGzdq4cKFkqTZs2fr2LFj\n6u7uTl4PAQCuea7JRyIRFRQUDDwPBAI6fPiw18MCAJIgKR+8nnllBJ/Pl4zDAgA8yvF6AL/fr3A4\nPPD88OHD8vv9Q9oVFxfrwIEDXk8HAGNKUVGR9u/f7/r1nmfy1dXVWr9+vSRp27ZtmjRpkqZOnTqk\n3YEDB2RZVkofP/zhD1P+2njtYu0fad9w28/cFu854+l+22iMpZfzOHmd2/Hkvemu3WiMp9fJcdyZ\n/Oc//3k9+eST6unpUUFBgVasWKFTp05Jkurq6jR//ny1t7eruLhYeXl5WrdunacOeVFZWZny18Zr\nF2v/SPuG237mNi9/N7dMHE8v21LN7TmdvM7tePLedNfOhPH0WZY1Kpca9vl8GqVTjQkNDQ1qaGhI\ndzeyAmOZXIxncnnNTr7xaqh0zJ6yFWOZXIxnZmEmDwAZjJk8AGBEhDwAZDFCHgCyGCEPAFmMkM9i\n77wj/eAH0uOPS7296e4NgHRgdU0W++tfpWXLpPPPl15+WZo3T7r+eumTn5TOOSfdvQOQCK/ZSchn\nsdtvlyZOlL7/fem116S//EVqa5P+/ndpzhw78KurpalTpcOHpUOHpFdesX+efrzyitTTI910k/St\nb0mlpen9OwFjDSGPEV1+ubR6tXT11YO3v/WWtGmTHfjt7dLbb0sXXCAVFkr/93+DfxYWShMmSGvW\nSL/6lfTRj0p33inNnj36fx9gLCLkMawjR+yA7umRxo8fuV1fn2RZUm5u/GOeOCGtXSv9/Of2se+4\nwy79cGVpIHX4MhSG9eST0lVXxQ54ScrJSSzgJSkvT7rtNqmrS1q8WPrOd6SKCunhh6X/XrMOQIZh\nJp+lbrtNKiiwZ9upYll22WflSmnSJGnjxtSdCxirmMljWFu2SNdck9pz+Hz2ip2ODmnPHvsngMxC\nyGeh7m57tcxll43O+caPlxob7dU80ejonBNAYgj5LLRli/Txj9v19tGyYIFds3/44dE7J4D4CPks\nNBqlmjP5fNLPfibddZf9TVsAmYGQz0JPPCFde+3on3fOHPtx772jf24Aw2N1TZYJh+0vQXV3S+PS\n8Cv8wAH7i1L//Kf9TVoA3rC6BoNs2SJVVqYn4CWpqEj68pelFSvSc34AgxHyWSZdpZr3uusu6Y9/\nlPbuTW8/ABDyWcWy0vOh65nOPVf69rfta9wASC9CPov861/25QUy4UqR9fXSiy/av3QApA8hn0VO\nl2oy4YJhZ58t3X23/QWp/v509wYYuwj5LJIJpZr3+tzn7IufbdiQ7p4Amae/Xzp2LP7DK5ZQZgnL\nkqZNk7ZulS68MN29+Z9//EP64hell16yr0sPjDWWJb3+uvTCC3YJ88UX7T/v2WOvgov3L+833+R6\n8pC9kmX+fOngwXT3ZKgFC+y185nwQeyWLdIjj6S7FxhJcbF08832h/dO9fVJjz5qly0zIWpOnbJv\nu/nCC/Y1nWbMsB/Tp9s/P/IR++qt8XDTEEiSfvlL6bnn7Jt6ZJqXX7avbf/ss+n9V8b999vLO2+/\n3f7MAJnFsuz3yKOPStddJ916q/0N6ngz3Vdftf/bPvCA/f76zGfi30dhNJx1lv1La8YM+85rbj8r\n85qdo3gJK6TSE0/Yb+5MdNFF0o9/bM/mm5tHv5/9/fZ9bltbpaeesvuDzPXGG9KDD0pf+Yr9y/jW\nW6Uvfcm+X/Fp0agUDEr33Sc984z0hS/Y9zaYPj1t3c5YzOSzQH+/9MEPSrt2SX5/unszsu3bpZoa\ne5b205+Ozmz6P/+RFi2yb0je1iadf37qz4nkOP29j+Zm6W9/k264wf585+mnpd/8xp4d19XZN5nP\ny0t3b1OHcg30/PP2G33fvnT3JL6jR6XaWjt0W1vtf86myhtvSJ/+tP2B9IMP8sGvybq7pXXrpJYW\n6cor7XC//PJ092p0EPLQvffade9f/zrdPUmMZdmfIaxYITU12b+gkm3/fulTn5Kuv15atSp91/IB\nvOICZciI69U44fPZ34jdtMn+ILSuTnr33eQdf+tWae5c6RvfkO65h4DH2MZM3nB9fdKUKVJXl5n1\n5uPHpSVL7DXDa9bYny14sXWrtHy5XZ6ZPz85fQTSidU1Y9yOHdKHPmRmwEvSOefYddb777fXR3u9\nR+zEifaHdKN1f1sg0zGTN9yqVdJrr0m/+EW6ewIgFVJekw8GgyorK1NJSYkaGxuH7O/p6dG8efN0\n6aWXavr06frtb3/rujNwzrR6PIDRFXMmH41GVVpaqo6ODvn9fs2aNUstLS0qLy8faNPQ0KCTJ0/q\n7rvvVk9Pj0pLS9Xd3a2cnMGVIGbyydfbK513nn3Lv0S+Hg3APCmdyXd2dqq4uFiFhYXKzc1VTU2N\n2traBrWZNm2ajh8/Lkk6fvy4zjvvvCEBj9TYvt2+djwBD2AkMdM4EomooKBg4HkgEND27dsHtVm8\neLGuvfZa5efn66233tIf/vCH1PQUQ2zZQqkGQGwxQ96XwBV1Vq5cqUsvvVShUEgHDhzQJz7xCe3a\ntUsf+MAHhrRtaGgY+HNlZaUqKysddxj/09lpf3sUQPYIhUIKhUJJO17MkPf7/QqHwwPPw+GwAoHA\noDbPPPOMvve970mSioqKdOGFF2rfvn2aOXPmkOO9N+Th3Ztv2jV5ANnjzAnwihUrPB0vZk1+5syZ\n6urq0qFDh9Tb26vW1lZVV1cPalNWVqaOjg5JUnd3t/bt26cPf/jDnjqFxLz9tvT+96e7FwAyWcyZ\nfE5OjpqamlRVVaVoNKra2lqVl5erublZklRXV6fvfve7WrRokSoqKtTf36977rlH57q54j8ce/tt\naZiqGAAM4MtQBrvgAmnnTvsqiwCyExcoG8Mo1wCIh5m8ofr7pdxc+z6SXGURyF7M5Meod96xb4JB\nwAOIhYgw1FtvUaoBEB8hbyhW1gBIBCFvKD50BZAIQt5QlGsAJIKQNxQzeQCJIOQNRU0eQCIIeUNR\nrgGQCELeUJRrACSCkDcU5RoAiSDkDUW5BkAiCHlDUa4BkAhC3lCUawAkgpA3FDN5AIkg5A1FTR5A\nIgh5Q1GuAZAIQt5QlGsAJIKQNxTlGgCJIOQNxUweQCIIeUNRkweQCELeQH190smT9j1eASAWQt5A\nJ05IeXmSz5fungDIdIS8gSjVAEgUIW8gVtYASBQhbyBW1gBIFCFvIMo1ABJFyBuImTyARBHyBqIm\nDyBRhLyBKNcASBQhbyDKNQASRcgbiHINgEQR8gZiJg8gUYS8gajJA0hU3JAPBoMqKytTSUmJGhsb\nh20TCoV02WWXafr06aqsrEx2H3EGyjUAEpUTa2c0GlV9fb06Ojrk9/s1a9YsVVdXq7y8fKDNsWPH\n9PWvf12bNm1SIBBQT09Pyjs91lGuAZComDP5zs5OFRcXq7CwULm5uaqpqVFbW9ugNhs2bNANN9yg\nQCAgSZoyZUrqegtJlGsAJC5myEciERUUFAw8DwQCikQig9p0dXXpyJEjuuaaazRz5kw99NBDqekp\nBlCuAZComOUaXwIXLD916pR27NihzZs365133tGcOXN05ZVXqqSkJGmdxGCUawAkKmbI+/1+hcPh\ngefhcHigLHNaQUGBpkyZogkTJmjChAn62Mc+pl27dg0b8g0NDQN/rqys5ENalyjXANkrFAopFAol\n7Xg+y7KskXb29fWptLRUmzdvVn5+vq644gq1tLQM+uD1pZdeUn19vTZt2qSTJ09q9uzZam1t1cUX\nXzz4RD6fYpwKDpx3nrRvn8THH0D285qdMWfyOTk5ampqUlVVlaLRqGpra1VeXq7m5mZJUl1dncrK\nyjRv3jxdcsklGjdunBYvXjwk4JFclGsAJCrmTD6pJ2ImnxS9vfb9XXt7uccrMBZ4zU6+8WqYEyfs\nWTwBDyARhLxhWD4JwAlC3jDU4wE4QcgbhuWTAJwg5A1DuQaAE4S8YSjXAHCCkDcM5RoAThDyhqFc\nA8AJQt4wlGsAOEHIG4ZyDQAnCHnDUK4B4AQhbxjKNQCcIOQNQ7kGgBOEvGGYyQNwgpA3DDV5AE4Q\n8oZhJg/ACULeMNTkAThByBuGcg0AJwh5w1CuAeAEIW8QyyLkAThDyBvk5Elp3Dhp/Ph09wSAKQh5\ngzCLB+AUIW8QVtYAcIqQNwgrawA4RcgbhHINAKcIeYNQrgHgFCFvEGbyAJwi5A1CTR6AU4S8QZjJ\nA3CKkDcINXkAThHyBqFcA8ApQt4glGsAOEXIG4RyDQCnCHmDUK4B4BQhbxDKNQCcIuQNQrkGgFNx\nQz4YDKqsrEwlJSVqbGwcsd2zzz6rnJwcPfLII0ntIP6Hcg0Ap2KGfDQaVX19vYLBoPbs2aOWlhbt\n3bt32HZ33nmn5s2bJ8uyUtbZsY5yDQCnYoZ8Z2eniouLVVhYqNzcXNXU1KitrW1Iu9WrV+vGG2/U\n+eefn7KOgnINAOdihnwkElFBQcHA80AgoEgkMqRNW1ubli5dKkny+Xwp6CYkZvIAnIsZ8okE9vLl\ny7Vq1Sr5fD5ZlkW5JkVO38Q7Ly/dPQFgkpxYO/1+v8Lh8MDzcDisQCAwqM1zzz2nmpoaSVJPT48e\ne+wx5ebmqrq6esjxGhoaBv5cWVmpyspKD10fW959176Bd07M/2IATBcKhRQKhZJ2PJ8VY+rd19en\n0tJSbd68Wfn5+briiivU0tKi8vLyYdsvWrRI1113nRYsWDD0RP+d6cOd11+Xpk+3fwIYO7xmZ8x5\nYU5OjpqamlRVVaVoNKra2lqVl5erublZklRXV+f6xHCG5ZMA3Ig5k0/qiZjJe7Jrl3TzzdLu3enu\nCYDR5DU7+carIVg+CcANQt4QlGsAuEHIG4I18gDcIOQNQbkGgBuEvCEo1wBwg5A3BOUaAG4Q8oag\nXAPADULeEMzkAbhByBuCmjwANwh5QzCTB+AGIW8IavIA3CDkDUG5BoAbhLwhKNcAcIOQNwTlGgBu\nEPKGoFwDwA1C3hCUawC4wU1DDNDfL+XmSqdOSeP4tQyMKdw0ZAw4cUKaMIGAB+AcsWEASjUA3CLk\nDcDKGgBuEfIGYGUNALcIeQNQrgHgFiFvAEIegFuEvAGoyQNwi5A3ADV5AG4R8gagXAPALULeAJRr\nALhFyBuAcg0Atwh5A1CuAeAWIW8AyjUA3CLkDUC5BoBbhLwBKNcAcIuQNwDlGgBuEfIGoFwDwC1C\n3gCUawC4RcgbgJAH4FZCIR8MBlVWVqaSkhI1NjYO2f+73/1OFRUVuuSSS3T11Vdr9+7dSe/oWEZN\nHoBbcW/kHY1GVVpaqo6ODvn9fs2aNUstLS0qLy8faLN161ZdfPHFmjhxooLBoBoaGrRt27bBJ+JG\n3q709Ulnn23/9PnS3RsAoy3lN/Lu7OxUcXGxCgsLlZubq5qaGrW1tQ1qM2fOHE2cOFGSNHv2bB0+\nfNh1hzDYiRNSXh4BD8CduCEfiURUUFAw8DwQCCgSiYzY/oEHHtD8+fOT0ztQqgHgSU68Bj4HU8gt\nW7Zo7dq1evrpp4fd39DQMPDnyspKVVZWJnzssYrlk8DYEgqFFAqFkna8uCHv9/sVDocHnofDYQUC\ngSHtdu/ercWLFysYDGry5MnDHuu9IY/EsLIGGFvOnACvWLHC0/Hilmtmzpyprq4uHTp0SL29vWpt\nbVV1dfWgNq+++qoWLFighx9+WMXFxZ46hMEo1wDwIu5MPicnR01NTaqqqlI0GlVtba3Ky8vV3Nws\nSaqrq9OPfvQjHT16VEuXLpUk5ebmqrOzM7U9HyMo1wDwIu4SyqSdiCWUrrS0SG1t0u9/n+6eAEiH\nlC+hRHpRrgHgBSGf4SjXAPCCkM9wrK4B4AUhn+EIeQBeEPIZjpo8AC8I+QxHTR6AF4R8hqNcA8AL\nQj7DUa4B4AUhn+Eo1wDwgpDPcJRrAHhByGc4yjUAvCDkMxzlGgBeEPIZjnINAC8I+QzW2yv199s3\n8gYANwj5DHZ6Fs9NvAG4RchnMEo1ALwi5DMYIQ/AK0I+g7F8EoBXhHwGY/kkAK8I+QxGuQaAV4R8\nBqNcA8ArQj6DUa4B4BUhn8Eo1wDwipDPYJRrAHhFyGcwyjUAvCLkMxjlGgBeEfIZjHINAK8I+QxG\nuQaAV4R8BqNcA8ArQj6DEfIAvCLkMxg1eQBeEfIZjJo8AK8I+QxGuQaAV4R8hrIsQh6Ad4R8hjp5\nUho3Tho/Pt09AWCyuCEfDAZVVlamkpISNTY2Dttm2bJlKikpUUVFhXbu3Jn0To5FzOIBJEPMkI9G\no6qvr1cwGNSePXvU0tKivXv3DmrT3t6u/fv3q6urS2vWrNHSpUtT2uGxIt7KmlAoNGp9yXaMZXIx\nnpklZsh3dnaquLhYhYWFys3NVU1Njdra2ga12bhxoxYuXChJmj17to4dO6bu7u7U9XiMiLeyhv+R\nkoexTC7GM7PEDPlIJKKCgoKB54FAQJFIJG6bw4cPJ7mbifHy5kr0tfHaxdo/0r7htj/1VGhQyKfj\nfxwTx9PLtlRze04nr3M7nk62n7nNpLF08tpE2pkwnjmxdvp8voQOYllWQq/75jcT7JVLzzwT0lVX\nVab0tfHaxdo/0r7htj/2WEj5+f/bFgqFVFkZv3/J5OWcib42XrtY+4fb52Vbqrk9p5PXuR1PJ9vP\n3GbSWDp5bSLtjBhPK4atW7daVVVVA89XrlxprVq1alCburo6q6WlZeB5aWmp9e9//3vIsYqKiixJ\nPHjw4MHDwaOoqChWTMcVcyY/c+ZMdXV16dChQ8rPz1dra6taWloGtamurlZTU5Nqamq0bds2TZo0\nSVOnTh1yrP3798c6FQAgBWKGfE5OjpqamlRVVaVoNKra2lqVl5erublZklRXV6f58+ervb1dxcXF\nysvL07p160al4wCA+HzWmQV1AEDW4BuvAJDFCHkAyGJpDfm2tjYtWbJENTU1evzxx9PZlaxw8OBB\nffWrX9VnP/vZdHfFaCdOnNDChQu1ZMkSbdiwId3dMR7vy+RynJue1uYkydGjR63a2tp0dyNr3Hjj\njenugtHWr19vPfroo5ZlWdZNN92U5t5kD96XyZVobiZlJn/LLbdo6tSpmjFjxqDtiVzcTJJ+8pOf\nqL6+PhldyQpexxNDORnT936L+6yzzhr1vpqA92hyuRnPhHMzGb9RnnrqKWvHjh3W9OnTB7b19fVZ\nRUVF1sGDB63e3l6roqLC2rNnj7V+/Xpr+fLlViQSsfr7+6077rjD6ujoSEY3sobb8TyNGdNQTsb0\noYceGpjJ19TUpKvLGc3JeJ7G+3JkTsbTaW4mZSY/d+5cTZ48edC2kS5udvPNN+vee+9Vfn6+Vq9e\nrc2bN+tPf/rTwNp7uB/PI0eO6NZbb9Xzzz/PLOoMTsZ0wYIF+vOf/6yvfe1rqq6uTlOPM5uT8eR9\nGZ+T8WxqanKUmzG/DOXFcBcu2759+6A2y5Yt07Jly1LVhaySyHiee+65uu+++0a7a8YaaUzf9773\nae3atWnsmZlGGk/el+6MNJ6rV6/WbbfdlvBxUra6JtGLmyExjGfyMabJxXgmV7LGM2Uh7/f7FQ6H\nB56Hw2EFAoFUnS7rMZ7Jx5gmF+OZXMkaz5SF/Hsvbtbb26vW1lbqmx4wnsnHmCYX45lcSRvPZHwy\nXFNTY02bNs0aP368FQgErLVr11qWZVnt7e3WRRddZBUVFVkrV65MxqnGBMYz+RjT5GI8kyuV48kF\nygAgi3HtGgDIYoQ8AGQxQh4AshghDwBZjJAHgCxGyANAFiPkASCLEfIAkMUIeQDIYv8P0PMKUy4T\nf4QAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Grid search can come in very handy when you're tuning a model for a particular task." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Quick Exercise #4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use ``GridSearchCV`` with the nearest neighbors estimator (``sklearn.neighbors.KNeighborsClassifier``) to determine the optimal number of neighbors (``n_neighbors``) for classifying digits (use accuracy as your metric)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.datasets import load_digits\n", "digits = load_digits()\n", "X, y = digits.data, digits.target\n", "\n", "# construct the K Neighbors classifier\n", "\n", "\n", "# Use GridSearchCV to find the best accuracy given choice of ``n_neighbors``\n", "\n", "\n", "# Plot the accuracy as a function of the number of neighbors.\n", "# Does this change significantly if you use more/fewer folds?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "# Run the following to load the solution:\n", "# %load solutions/06-4_gridsearch.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Overfitting, Underfitting and Model Selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we've gone over the basics of metrics, validation, and cross-validation, it's time to go into even more depth regarding model selection.\n", "\n", "The issues associated with validation and \n", "cross-validation are some of the most important\n", "aspects of the practice of machine learning. Selecting the optimal model\n", "for your data is vital, and is a piece of the problem that is not often\n", "appreciated by machine learning practitioners.\n", "\n", "Of core importance is the following question:\n", "\n", "**If our estimator is underperforming, how should we move forward?**\n", "\n", "- Use simpler or more complicated model?\n", "- Add more features to each observed data point?\n", "- Add more training samples?\n", "\n", "The answer is often counter-intuitive. In particular, **Sometimes using a\n", "more complicated model will give _worse_ results.** Also, **Sometimes adding\n", "training data will not improve your results.** The ability to determine\n", "what steps will improve your model is what separates the successful machine\n", "learning practitioners from the unsuccessful." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Illustration of the Bias-Variance Tradeoff" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this section, we'll work with a simple 1D regression problem. This will help us to\n", "easily visualize the data and the model, and the results generalize easily to higher-dimensional\n", "datasets. We'll explore a simple **linear regression** problem.\n", "This can be accomplished within scikit-learn with the `sklearn.linear_model` module.\n", "\n", "We'll create a simple nonlinear function that we'd like to fit" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def test_func(x, err=0.5):\n", " y = 10 - 1. / (x + 0.1)\n", " if err > 0:\n", " y = np.random.normal(y, err)\n", " return y" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's create a realization of this dataset:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def make_data(N=40, error=1.0, random_seed=1):\n", " # randomly sample the data\n", " np.random.seed(1)\n", " X = np.random.random(N)[:, np.newaxis]\n", " y = test_func(X.ravel(), error)\n", " \n", " return X, y" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "X, y = make_data(40, error=1)\n", "plt.scatter(X.ravel(), y);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRajQRUQs4v8BBngv2rMlpVwAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now say we want to perform a regression on this data. Let's use the built-in linear regression function to compute a fit:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "X_test = np.linspace(-0.1, 1.1, 500)[:, None]\n", "\n", "from sklearn.linear_model import LinearRegression\n", "model = LinearRegression()\n", "model.fit(X, y)\n", "y_test = model.predict(X_test)\n", "\n", "plt.scatter(X.ravel(), y)\n", "plt.plot(X_test.ravel(), y_test)\n", "print \"mean squared error:\", metrics.mean_squared_error(model.predict(X), y)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "mean squared error: 1.78514645061\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have fit a straight line to the data, but clearly this model is not a good choice. We say that this model is **biased**, or that it **under-fits** the data.\n", "\n", "Let's try to improve this by creating a more complicated model. We can do this by adding degrees of freedom, and computing a polynomial regression over the inputs. Let's make this easier by creating a quick PolynomialRegression estimator:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class PolynomialRegression(LinearRegression):\n", " \"\"\"Simple Polynomial Regression to 1D data\"\"\"\n", " def __init__(self, degree=1, **kwargs):\n", " self.degree = degree\n", " LinearRegression.__init__(self, **kwargs)\n", " \n", " def fit(self, X, y):\n", " if X.shape[1] != 1:\n", " raise ValueError(\"Only 1D data valid here\")\n", " Xp = X ** (1 + np.arange(self.degree))\n", " return LinearRegression.fit(self, Xp, y)\n", " \n", " def predict(self, X):\n", " Xp = X ** (1 + np.arange(self.degree))\n", " return LinearRegression.predict(self, Xp)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we'll use this to fit a quadratic curve to the data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "model = PolynomialRegression(degree=2)\n", "model.fit(X, y)\n", "y_test = model.predict(X_test)\n", "\n", "plt.scatter(X.ravel(), y)\n", "plt.plot(X_test.ravel(), y_test)\n", "print \"mean squared error:\", metrics.mean_squared_error(model.predict(X), y)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "mean squared error: 0.919717192242\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This reduces the mean squared error, and makes a much better fit. What happens if we use an even higher-degree polynomial?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "model = PolynomialRegression(degree=30)\n", "model.fit(X, y)\n", "y_test = model.predict(X_test)\n", "\n", "plt.scatter(X.ravel(), y)\n", "plt.plot(X_test.ravel(), y_test)\n", "plt.ylim(-4, 14)\n", "print \"mean squared error:\", metrics.mean_squared_error(model.predict(X), y)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "mean squared error: 0.375570136658\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nEupCCFGF/D/5tDpBCe+38AAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "When we increase the degree to this extent, it's clear that the resulting fit is no longer reflecting the true underlying distribution, but is more sensitive to the noise in the training data. For this reason, we call it a **high-variance model**, and we say that it **over-fits** the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Detecting over-fitting\n", "Clearly, computing the error on the training data is not enough (we saw this previously). But computing this *training error* can help us determine what's going on: in particular, comparing the training error and the validation error can give you an indication of how well your data is being fit.\n", "\n", "Let's do this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "degrees = np.arange(1, 30)\n", "\n", "X, y = make_data(100, error=1.0)\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)\n", "\n", "training_error = []\n", "test_error = []\n", "mse = metrics.mean_squared_error\n", "\n", "for d in degrees:\n", " model = PolynomialRegression(d).fit(X_train, y_train)\n", " training_error.append(mse(model.predict(X_train), y_train))\n", " test_error.append(mse(model.predict(X_test), y_test))\n", " \n", "# note that the test error can also be computed via cross-validation\n", "plt.plot(degrees, training_error, label='training')\n", "plt.plot(degrees, test_error, label='test')\n", "plt.legend()\n", "plt.xlabel('degree')\n", "plt.ylabel('MSE');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nhwmBiIgAAP8PZ6TQCKbg+y8AAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a typical bias/variance plot.\n", "\n", "On the **Left Side** of the plot, we have a **high-bias** model, characterized by the training and test data showing equally bad performance. This shows that the model is **under-fitting** the data, because it does equally poorly on both known and unknown values.\n", "\n", "On the **Right Side** of the plot, we have a **high-variance model**, characterized by a divergence of the training and test data. Here the model is **over-fitting** the data: in other words, the particular noise distribution of the input data has too much effect on the result.\n", "\n", "The optimal model here will be around the point where the **test** error is minimized." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Quick Exercise # 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's appy this learning curve idea to a **Decision Tree** regression on this dataset. ``sklearn.tree.DecisionTree`` takes a number of hyper-parameters, but one that can really control the over-fitting, under-fitting is the ``max_depth`` parameter especially controls the tradeoff between bias and variance.\n", "\n", "Generate a dataset like the one above, but containing 500 points, and use a Decision Tree regressor to explore the effect of the ``max_depth`` parameter on the bias/variance tradeoff. What is the optimal value?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.tree import DecisionTreeRegressor" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "# Run the following to load the solution:\n", "# %load solutions/06-5_decisiontree.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Quick Exercise #6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One popular and effective way to address over-fitting is to use **Ensemble methods**. ``sklearn.ensemble.RandomForestRegressor`` uses multiple randomized decision trees and averages their results. The ensemble of estimators can often do better than any individual estimator for data that is over-fit. Repeat the above experiment using the Random Forest regressor, with 10 trees. What is the best ``max_depth`` for this model? Does the accuracy improve?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Run the following to load the solution:\n", "# %load solutions/06-6_randomforest.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Illustration of Learning Curves" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The exact turning-point of the tradeoff between bias and variance is highly dependent on the number of training points used. Here we'll illustrate the use of *learning curves*, which display this property.\n", "\n", "The idea is to plot the mean-squared-error for the training and test set as a function of *Number of Training Points*" ] }, { "cell_type": "code", "collapsed": false, "input": [ "X, y = make_data(200, error=1.0)\n", "degree = 3\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)\n", "\n", "N_range = np.linspace(15, X_train.shape[0], 20).astype(int)\n", "\n", "def plot_learning_curve(degree=3):\n", " training_error = []\n", " test_error = []\n", " mse = metrics.mean_squared_error\n", " \n", " for N in N_range:\n", " XN = X_train[:N]\n", " yN = y_train[:N]\n", " \n", " model = PolynomialRegression(degree).fit(XN, yN)\n", " training_error.append(mse(model.predict(XN), yN))\n", " test_error.append(mse(model.predict(X_test), y_test))\n", " \n", " plt.plot(N_range, training_error, label='training')\n", " plt.plot(N_range, test_error, label='test')\n", " plt.plot(N_range, np.ones_like(N_range), ':k')\n", " plt.legend()\n", " plt.title('degree = {0}'.format(degree))\n", " plt.xlabel('num. training points')\n", " plt.ylabel('MSE')\n", " \n", "plot_learning_curve(3)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nn+6tOH78eHbu3LnuLbYNT9f/pL1797LZs2czxlSr/unTp7OMjIxW4SBL/UrbrNSZk+iUWW5uLq5c\nuYIhQ4agpKQE1tbWAABra2uUlJQouLr2vffee1i3bh00NR//11CV+nNycmBpaYn58+djwIABiImJ\nwcOHD1WmfnNzc7z//vtwdHSEnZ0dTE1NMXbsWJWpH2j//0pRUREEAoFkPlX4e964cSMmTpwIQHXq\nT05OhkAggJ+fX6vXZalfacNBFc6Wbk9tbS2mTZuGf/3rXzA2Nm41TUNDQ2k/26FDh2BlZYXAwMB2\nT0hU5vpFIhHS09Px5ptvIj09HYaGhoiLi2s1jzLXn52dja+//hq5ubkoKipCbW0ttm3b1moeZa7/\nac+qVZk/xz//+U/o6uri5ZdfbnceZau/rq4Oq1evxqpVqySvtfd3DDy7fqUNB3t7e+Tn50ue5+fn\nt0o+ZdXU1IRp06Zhzpw5mDJlCgDuF9S9e/cAAMXFxbCyslJkie06e/YsDhw4AGdnZ0RHR+PXX3/F\nnDlzVKZ+gUAAgUCAQf+7+NX06dORnp4OGxsblaj/0qVLCA4OhoWFBbS1tREVFYVz586pTP1A+//X\nn/57LigogL29vUJqfJakpCQcOXIE27dvl7ymCvVnZ2cjNzcX/v7+cHZ2RkFBAQYOHIiSkhKZ6lfa\ncAgKCsLt27eRm5uLxsZG7Ny5E5GRkYouq0OMMSxcuBBeXl549913Ja9HRkZi8+bNAIDNmzdLQkPZ\nrF69Gvn5+cjJycFPP/2EUaNGYevWrSpTv42NDRwcHHDr1i0AwIkTJ+Dt7Y2IiAiVqN/DwwPnz5/H\no0ePwBjDiRMn4OXlpTL1A+3/X4+MjMRPP/2ExsZG5OTk4Pbt2xg8eLAiS21TSkoK1q1bh+TkZOjr\n60teV4X6fX19UVJSgpycHOTk5EAgECA9PR3W1tay1S/fwyPydeTIEda/f3/m4uLCVq9erehynun0\n6dNMQ0OD+fv7s4CAABYQEMCOHj3KHjx4wEaPHs3c3NzY2LFjWUVFhaJLfSahUCjpraRK9V+9epUF\nBQUxPz8/NnXqVFZZWalS9a9du5Z5eXkxHx8fNnfuXNbY2Ki09c+aNYvZ2toyHR0dJhAI2MaNGzus\n9Z///CdzcXFh7u7uLCUlRYGVc56uPzExkbm6ujJHR0fJ3+/ixYsl8ytr/bq6upLv/0nOzs6SA9KM\nPX/9dBIcIYQQKUrbrEQIIURxKBwIIYRIoXAghBAihcKBEEKIFAoHQgghUigcCCGESKFwID1GRkYG\njh49+tzvKyoqwksvvfTM+cLDw1FdXS1LaV3WmXVv3rwZxcXF3VQRUXV0ngPpMZKSknD58mV88803\nUtNEIhG0tXm7MaJSGDlyJL744gsMHDhQ0aUQFUB7DkQhcnNz4enpiddffx0+Pj4YP3486uvrAQCh\noaG4fPkyAKCsrAzOzs4AuI37lClTMG7cODg7OyMhIQFffPEFBgwYgKFDh6KioqLd9TU2NuLTTz/F\nzp07ERgYiF27diE2NhZz5szB8OHD8eqrryIvLw8jRozAwIEDMXDgQJw7d05Sa8sNVZKSkhAVFYUJ\nEyagf//+WL58uWQdTk5OKC8v7/CzXbx4EX5+fggMDMQHH3zQ5o1ahEIhRowYgUmTJsHDwwOLFy+W\nXEBtx44d8PPzg6+vL1asWNHpde/ZsweXLl3C7NmzMWDAANTX12PFihXw9vaGv78/PvjgA5n/LYma\nkufp3IR0Vk5ODtPW1mYZGRmMMe7GNtu2bWOMMRYaGsouX77MGGOstLSUOTk5McYY27RpE3N1dWW1\ntbWstLSUmZiYsA0bNjDGGHvvvffY119/3eE6k5KS2FtvvSV5/tlnn7GgoCDJzXXq6uok47du3WJB\nQUGSWluumb9p0ybWr18/Vl1dzerr61nfvn1ZQUEBY4xJrp/f0Wfz9vZm58+fZ4wxtmLFCubr6ytV\n52+//cb09fVZTk4OE4vFbOzYsWzPnj2ssLCQOTo6srKyMiYSidioUaPY/v37O73uJ7/XsrKyVveF\nqKqq6vC7Iz0P7TkQhXF2dpZcd37gwIHIzc195ntGjhwJQ0ND9OnTB6amppJbmfr6+j7z/Yy7uZXk\nuYaGBiIjI6GnpweA27t47bXX4OfnhxkzZuDmzZttLmf06NEwNjaGnp4evLy8kJeX16nPVlVVhdra\nWgwZMgQA8PLLL7d7SeXBgwfDyckJmpqaiI6Oxu+//45Lly4hNDQUFhYW0NLSwuzZs3Hq1KlOrfvJ\n7wAAevfuDX19fSxcuBD79u2DgYFBh98d6XkoHIjCtGyUAUBLSwtisRgAoK2tjebmZgCQNMe09R5N\nTU3Jc01NTYhEog7X19b163v16iUZ/+qrr2Bra4tr167h0qVLaGxs7FTdba23M/O0FwxP18oYa7P2\n9l5v73t9crna2tpIS0vD9OnTcejQIYSFhbVbC+mZKByI0mjZWDo5OeHSpUsAgD179jzXeztibGyM\nmpqadqdXV1fDxsYGALBly5ZWG1V56N27N4yNjZGWlgYA+Omnn9qdNy0tDbm5uWhubsauXbsQEhKC\nwYMHIzU1FQ8ePIBYLMZPP/2EF1988ZnrbflujI2NJT2aHj58iMrKSkyYMAFffvklMjIy5PAJiTqh\ncCAK8/Sv3pbny5Ytw7fffosBAwbgwYMHktefvrPY0+Mtzzds2IANGzZIrW/kyJG4efOm5ID008t4\n8803sXnzZgQEBCArKwtGRkZS6+rsndja+2yJiYmIiYlBYGAg6urq0Lt37zbfO2jQICxduhReXl7o\n168fpk6dChsbG8TFxWHkyJEICAhAUFCQpFmtve/lyefz5s3DG2+8gQEDBqCmpgYRERHw9/dHSEgI\nvvrqq2d+JtKzUFdWQrrRw4cPYWhoCACIi4tDSUmJ1IZZKBQiPj4eBw8eVESJhAAA1LtjNyFK5vDh\nw1izZg1EIhGcnJyQlJQkNY8q3SeaqC/acyCEECKFjjkQQgiRQuFACCFECoUDIYQQKRQOhBBCpFA4\nEEIIkULhQAghRMr/Aw8ag66aaRLUAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This shows a typical learning curve: for very few training points, there is a large separation between the training and test error, which indicates **over-fitting**. Given the same model, for a large number of training points, the training and testing errors converge, which indicates potential **under-fitting**.\n", "\n", "It is easy to see that, in this plot, if you'd like to reduce the MSE down to the nominal value of 1.0 (which is the magnitude of the scatter we put in when constructing the data), then adding more samples will *Never* get you there. For $d=3$, we've already converged. What about for $d=1$?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plot_learning_curve(2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nqFHs6tWrTRtsDep6mvLQoUNs+vTpjDHNij84OJglJCRUSw6NiV9tm5Vq6iCXmZmpwogaJi0tDfHx\n8fDx8UFubq7sKSxLS0u17gX+wQcfYN26ddDWfvm/hqbEn5qaivbt22P27Nnw8vLC3LlzUVRUpBHx\nm5mZ4aOPPoKtrS06duyIdu3aYcSIERoR+6tqizcrKws2Njay4zTh3/P27dsxduxYAJoT/9GjR2Fj\nYwM3N7dq2xsTv9omB03uDCcWizFp0iRs2rQJxsbG1fZpaWmp7Xc7ceIEOnToAE9PT7nOiVXUOf7y\n8nLExcVhwYIFiIuLg6GhIdasWVPtGHWNPyUlBV999RXS0tKQlZUFsViM3bt3VztGXWOvzZviVefv\n8sUXX0BfXx/Tpk2r9Rh1i7+4uBhRUVFYuXKlbFtt/46BN8evtsmhU6dOyMjIkL3PyMiolvnUlVQq\nxaRJkxAaGorx48cD4P6CysnJAQBkZ2ejQ4cOqgyxVleuXMGxY8dgZ2eHkJAQ/PHHHwgNDdWY+G1s\nbGBjY4M+ffoAAIKDgxEXFwcrKyu1j//WrVsYMGAAzM3Noauri4kTJ+Lq1asaEfuravt/5fV/z0+f\nPkWnTp1UEuObREdH49SpU9izZ49smybEn5KSgrS0NLi7u8POzg5Pnz6Ft7c3cnNzGxW/2iaH3r17\n4+HDh0hLS4NEIsG+ffsQFBSk6rDqxBhDeHg4nJycsHjxYtn2oKAg7Ny5EwCwc+dOWdJQN1FRUcjI\nyEBqair27t0Lf39//PTTTxoTv5WVFTp37owHDx4AAM6ePQtnZ2cEBgaqffy9evXCtWvXUFJSAsYY\nzp49CycnJ42I/VW1/b8SFBSEvXv3QiKRIDU1FQ8fPkTfvn1VGWqNYmJisG7dOhw9ehStW7eWbdeE\n+F1dXZGbm4vU1FSkpqbCxsYGcXFxsLS0bFz8yr09olynTp1iPXr0YA4ODiwqKkrV4bzRxYsXmZaW\nFnN3d2ceHh7Mw8OD/fbbb+z58+ds2LBhrHv37mzEiBEsPz9f1aG+kUAgkD2tpEnx37lzh/Xu3Zu5\nubmxCRMmsIKCAo2Jf+3atczJyYm5uLiwmTNnMolEotaxT506lVlbWzM9PT1mY2PDtm/fXme8X3zx\nBXNwcGA9e/ZkMTExKoyc83r827ZtY926dWO2trayf7/z58+XHa+u8evr68t+/1fZ2dnJbkgz1vD4\nqRMcIYQQOWrbrEQIIUR1KDkQQgiRQ8mBEEKIHEoOhBBC5FByIIQQIoeSAyGEEDmUHEiLkZCQgN9+\n+63Bn8vKysLbb7/9xuPGjRuHwsLCxoSmsPqce+fOncjOzm6iiIimo34OpMWIjo7G7du38fXXX8vt\nKy8vh66uSmfN5Z2fnx/Wr18Pb29vVYdCNADVHIhKpKWlwdHREe+++y5cXFwwatQolJaWAgB8fX1x\n+/ZtAIBQKISdnR0A7uI+fvx4jBw5EnZ2dvjmm2+wfv16eHl5oX///sjPz6/1fBKJBCtWrMC+ffvg\n6emJ/fv3IzIyEqGhoRg0aBDCwsLw5MkTDBkyBN7e3vD29sbVq1dlsVZNqBIdHY2JEydizJgx6NGj\nB5YuXSo7R9euXZGXl1fnd7t58ybc3Nzg6emJjz/+uMaJWgQCAYYMGYKAgAD06tUL8+fPlw2g9ssv\nv8DNzQ2urq5YtmxZvc994MAB3Lp1C9OnT4eXlxdKS0uxbNkyODs7w93dHR9//HGj/1uSZkqZ3bkJ\nqa/U1FSmq6vLEhISGGPc5Da7d+9mjDHm6+vLbt++zRhj7NmzZ6xr166MMcZ27NjBunXrxsRiMXv2\n7Blr27Yt27p1K2OMsQ8++IB99dVXdZ4zOjqa/eMf/5C9//zzz1nv3r1lE+wUFxfL1h88eMB69+4t\ni7VqzPwdO3Ywe3t7VlhYyEpLS1mXLl3Y06dPGWNMNn5+Xd/N2dmZXbt2jTHG2LJly5irq6tcnOfP\nn2etW7dmqamprKKigo0YMYIdOHCAZWZmMltbWyYUCll5eTnz9/dnR44cqfe5X/1dhUJhtbkhXrx4\nUedvR1oeqjkQlbGzs5ONO+/t7Y20tLQ3fsbPzw+GhoawsLBAu3btZFOZurq6vvHzjJvcSvZeS0sL\nQUFBaNWqFQCudvHOO+/Azc0NkydPxt27d2ssZ9iwYTA2NkarVq3g5OSEJ0+e1Ou7vXjxAmKxGD4+\nPgCAadOm1Tqkct++fdG1a1doa2sjJCQEly5dwq1bt+Dr6wtzc3Po6Ohg+vTpuHDhQr3O/epvAAAm\nJiZo3bo1wsPDcfjwYbRp06bO3460PJQciMpUXZQBQEdHBxUVFQAAXV1dVFZWAoCsOaamz2hra8ve\na2tro7y8vM7z1TR+vYGBgWx948aNsLa2RmJiIm7dugWJRFKvuGs6b32OqS0xvB4rY6zG2GvbXtvv\n+mq5urq6uHHjBoKDg3HixAmMHj261lhIy0TJgaiNqotl165dcevWLQDAgQMHGvTZuhgbG0MkEtW6\nv7CwEFZWVgCAXbt2VbuoKoOJiQmMjY1x48YNAMDevXtrPfbGjRtIS0tDZWUl9u/fj8GDB6Nv376I\njY3F8+fPUVFRgb1792Lo0KFvPG/Vb2NsbCx7oqmoqAgFBQUYM2YM/u///g8JCQlK+IakOaHkQFTm\n9b96q94vWbIEW7ZsgZeXF54/fy7b/vrMYq+vV73funUrtm7dKnc+Pz8/3L17V3ZD+vUyFixYgJ07\nd8LDwwP379+HkZGR3LnqOxtbbd9t27ZtmDt3Ljw9PVFcXAwTE5MaP9unTx8sWrQITk5OsLe3x4QJ\nE2BlZYU1a9bAz88PHh4e6N27t6xZrbbf5dX3s2bNwrx58+Dl5QWRSITAwEC4u7tj8ODB2Lhx4xu/\nE2lZ6FFWQppQUVERDA0NAQBr1qxBbm6u3IVZIBBgw4YNOH78uCpCJAQA0Lwf7CZEzZw8eRKrV69G\neXk5unbtiujoaLljNG2uaNI8Uc2BEEKIHLrnQAghRA4lB0IIIXIoORBCCJFDyYEQQogcSg6EEELk\nUHIghBAi5/8Baw91WHF7zrEAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 28 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that it hasn't converged yet: you still might expect to decrease the test error by adding more points.\n", "\n", "What about the other extreme?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plot_learning_curve(5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRK5CYII=\n", "text": [ "" ] } ], "prompt_number": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ "For $d=5$, it's converged, but to a better value than for $d=3$.\n", "\n", "Thus you can **bring the two curves closer together** by adding more points, but you can **bring the convergence level down** only by adding complexity to the model.\n", "\n", "This can be very useful, because it gives you a hint about how to improve upon results which are sub-par. To make this more concrete, imagine an astronomy project in which the results are not robust enough. You must think about whether to spend your valuable telescope time observing *more objects* to get a larger training set, or *more attributes of each object* in order to improve the model. The answer to this question is important, and can be addressed using these metrics." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Final Exercise" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's return to our digits data. Using what you've learned here, explore several classifiers and find the optimal classifier for this dataset. What is the best **accuracy** you can attain on a 5-fold cross-validation over the data? Are there indications that more training data would be helpful in improving this accuracy?" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "# As this final exercise is fairly open-ended, there is no solution provided!" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 } ], "metadata": {} } ] }