{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Hyperparameters and Model Validation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "\n", "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n", "\n", "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "< [Introducing Scikit-Learn](05.02-Introducing-Scikit-Learn.ipynb) | [Contents](Index.ipynb) | [Feature Engineering](05.04-Feature-Engineering.ipynb) >" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "In the previous section, we saw the basic recipe for applying a supervised machine learning model:\n", "\n", "1. Choose a class of model\n", "2. Choose model hyperparameters\n", "3. Fit the model to the training data\n", "4. Use the model to predict labels for new data\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "\n", "The choice of model and choice of hyperparameters are perhaps `the most important part`.\n", "- we need a way to *validate* that our model and our hyperparameters are a good fit to the data.\n", "\n", "There are some pitfalls that you must avoid to do this effectively." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Thinking about Model Validation\n", "\n", "Model validation is very simple: \n", "- Applying the trained model to test data, \n", "- Comparing the prediction to the known values.\n", " - The use of `holdout sets`\n", " - The use of `cross-validation` " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Model validation the wrong way\n", "\n", "Let's demonstrate the naive approach to validation using the Iris data" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:32:17.802317Z", "start_time": "2019-04-22T02:32:16.569539Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from sklearn.datasets import load_iris\n", "iris = load_iris()\n", "X = iris.data\n", "y = iris.target" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Next we choose a model and hyperparameters. \n", "\n", "Here we'll use a *k*-neighbors classifier with ``n_neighbors=1``.\n", "- This is a very simple and intuitive model \n", " - \"the label of an unknown point is the same as the label of its closest training point\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:32:40.133781Z", "start_time": "2019-04-22T02:32:40.104334Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from sklearn.neighbors import KNeighborsClassifier\n", "model = KNeighborsClassifier(n_neighbors=1)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Then \n", "- we train the model, and \n", "- use it to predict labels for data we already know:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:32:44.419953Z", "start_time": "2019-04-22T02:32:44.407331Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "model.fit(X, y)\n", "y_model = model.predict(X)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Finally, we compute the fraction of correctly labeled points:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:32:49.172903Z", "start_time": "2019-04-22T02:32:49.159985Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import accuracy_score\n", "accuracy_score(y, y_model)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We see an accuracy score of 1.0, which indicates that 100% of points were correctly labeled by our model!\n", "\n", "- In fact, this approach contains a fundamental flaw: \n", " - *it trains and evaluates the model on the same data*.\n", "- Furthermore, the nearest neighbor model is an *instance-based* estimator that simply stores the training data, \n", " - it predicts labels by comparing new data to these stored points: \n", " - except in contrived cases, it will get 100% accuracy *every time!*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Model validation the right way: Holdout sets\n", "\n", "- We hold back some subset of the data from the training of the model, and then \n", "- use this holdout set to check the model performance.\n", "\n", "This splitting can be done using the ``train_test_split`` utility in Scikit-Learn:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:33:32.306074Z", "start_time": "2019-04-22T02:33:32.294050Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "0.9066666666666666" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.model_selection import train_test_split\n", "# split the data with 50% in each set\n", "X1, X2, y1, y2 = train_test_split(X, y, random_state=0,\n", " train_size=0.5, test_size = 0.5)\n", "\n", "# fit the model on one set of data\n", "model.fit(X1, y1)\n", "\n", "# evaluate the model on the second set of data\n", "y2_model = model.predict(X2)\n", "accuracy_score(y2, y2_model)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We see here a more reasonable result: \n", "- the nearest-neighbor classifier is about 90% accurate on this hold-out set.\n", "- The hold-out set is similar to unknown data, because the model has not \"seen\" it before." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Model validation via cross-validation\n", "\n", "One disadvantage of using a holdout set for model validation\n", "- we have lost a portion of our data to the model training.\n", " - In the above case, half the dataset does not contribute to the training of the model!\n", " - This is not optimal, and can cause problems\n", " - especially if the initial set of training data is small.\n", "\n", "*cross-validation* does a sequence of fits where each subset of the data is used both as a training set and as a validation set." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Model validation via cross-validation\n", "\n", "Visually, it might look something like this:\n", "\n", "![](./img/figures/05.03-2-fold-CV.png)\n", "[figure source in Appendix](06.00-Figure-Code.ipynb#2-Fold-Cross-Validation)\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:33:45.024043Z", "start_time": "2019-04-22T02:33:45.014154Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "(0.96, 0.9066666666666666)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Here we do two validation trials, \n", "# alternately using each half of the data as a holdout set.\n", "# Using the split data from before, we could implement it like this:\n", "y2_model = model.fit(X1, y1).predict(X2)\n", "y1_model = model.fit(X2, y2).predict(X1)\n", "accuracy_score(y1, y1_model), accuracy_score(y2, y2_model)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "What comes out are two accuracy scores, which\n", "- we could calculate the mean value to get a better measure of the global model performance.\n", "- This particular form of cross-validation is a *two-fold cross-validation*\n", " - that is, one in which we have split the data into two sets and used each in turn as a validation set." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We could expand on this idea to use even more trials, and more folds in the data—for example, here is a visual depiction of five-fold cross-validation:\n", "\n", "![](./img/figures/05.03-5-fold-CV.png)\n", "[figure source in Appendix](06.00-Figure-Code.ipynb#5-Fold-Cross-Validation)\n", "\n", "Here we split the data into five groups, and use each of them in turn to evaluate the model fit on the other 4/5 of the data." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:34:11.152087Z", "start_time": "2019-04-22T02:34:11.136256Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "array([0.96666667, 0.96666667, 0.93333333, 0.93333333, 1. ])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We can use Scikit-Learn's ``cross_val_score`` convenience routine to do it succinctly:\n", "from sklearn.model_selection import cross_val_score\n", "cross_val_score(model, X, y, cv=5)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Repeating the validation across different subsets of the data gives us an even better idea of the performance of the algorithm.\n", "\n", "Scikit-Learn implements a number of useful cross-validation schemes that are useful in particular situations; \n", "- these are implemented via iterators in the ``cross_validation`` module.\n", " - For example, we might wish to go to the extreme case in which our number of folds is equal to the number of data points:\n", " - we train on all points but one in each trial.\n", " - This type of cross-validation is known as *leave-one-out* cross validation" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:34:38.237166Z", "start_time": "2019-04-22T02:34:37.996391Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", " 1., 1., 0., 1., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 1.,\n", " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", " 1., 1., 1., 1., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", " 0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 1., 1.,\n", " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.model_selection import LeaveOneOut\n", "scores = cross_val_score(model, X, y, cv=LeaveOneOut())\n", "scores" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Because we have 150 samples, the leave one out cross-validation yields scores for 150 trials, and \n", "- the score indicates either successful (1.0) or unsuccessful (0.0) prediction.\n", "- Taking the mean of these gives an estimate of the error rate:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2019-04-22T02:34:45.946836Z", "start_time": "2019-04-22T02:34:45.942351Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "0.96" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scores.mean()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Other cross-validation schemes can be used similarly.\n", "\n", "- use IPython to explore the ``sklearn.cross_validation`` submodule, or \n", "- take a look at Scikit-Learn's online [cross-validation documentation](http://scikit-learn.org/stable/modules/cross_validation.html)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Selecting the Best Model\n", "\n", "> ### Question: *if our estimator is underperforming, how should we move forward?*\n", "\n", "- Use a more complicated/more flexible model\n", "- Use a less complicated/less flexible model\n", "- Gather more training samples\n", "- Gather more data to add features to each sample" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Selecting the Best Model\n", "\n", "The answer to this question is often counter-intuitive.\n", "\n", "In particular, sometimes \n", "- using a more complicated model will give worse results\n", "- adding more training samples may not improve your results!\n", "\n", "``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": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### The Bias-variance trade-off\n", "\n", "Fundamentally, the question of \"the best model\" is about finding a sweet spot in the tradeoff between *bias* and *variance*.\n", "\n", "Consider the following figure, which presents two regression fits to the same dataset:\n", "\n", "![](./img/figures/05.03-bias-variance.png)\n", "[figure source in Appendix](06.00-Figure-Code.ipynb#Bias-Variance-Tradeoff)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### The Bias-variance trade-off\n", "\n", "The model on the left \n", "- The data are intrinsically more complicated than a straight line, the straight-line model will never be able to describe this dataset well.\n", "- Such a model is said to *underfit* the data: \n", " - it does not have enough model flexibility to suitably account for all the features in the data; \n", " - the model has high *bias*." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### The Bias-variance trade-off\n", "\n", "The model on the right\n", "- Here the model fit has enough flexibility to nearly perfectly account for the fine features in the data, \n", "- but even though it very accurately describes the training data, its precise form seems to be more reflective of the particular noise properties of the data rather than the intrinsic properties of whatever process generated that data.\n", "- Such a model is said to *overfit* the data: \n", " - it has so much model flexibility that the model ends up accounting for random errors as well as the underlying data distribution;\n", " - the model has high *variance*." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "To look at this in another light, consider what happens if we use these two models to predict the y-value for some new data.\n", "In the following diagrams, the red/lighter points indicate data that is omitted from the training set:\n", "\n", "![](./img/figures/05.03-bias-variance-2.png)\n", "[figure source in Appendix](06.00-Figure-Code.ipynb#Bias-Variance-Tradeoff-Metrics)\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "$R^2$ score, or [coefficient of determination](https://en.wikipedia.org/wiki/Coefficient_of_determination)\n", "- which measures how well a model performs relative to a simple mean of the target values. \n", "- $R^2=1$ indicates a perfect match\n", "- $R^2=0$ indicates the model does no better ``than simply taking the mean of the data``\n", "- $R^2<0$ negative values mean even worse models.\n", "\n", "From the scores associated with these two models, we can make an observation that holds more generally:\n", "\n", "- For high-bias models, the performance of the model on the validation set is similar to the performance on the training set.\n", "- For high-variance models, the performance of the model on the validation set is far worse than the performance on the training set." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "If we imagine that we have some ability to tune the model complexity, we would expect the training score and validation score to behave as illustrated in the following figure:\n", "\n", "![](./img/figures/05.03-validation-curve.png)\n", "[figure source in Appendix](06.00-Figure-Code.ipynb#Validation-Curve)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The diagram is often called a *validation curve*:\n", "\n", "- The training score is everywhere higher than the validation score. This is generally the case: \n", " - the model will be a better fit to data it has seen than to data it has not seen.\n", "- For very low model complexity (**a high-bias model**), the training data is **under-fit**\n", " - the model is a poor predictor both for the training data and for any previously unseen data.\n", "- For very high model complexity (**a high-variance model**), the training data is **over-fit**\n", " - the model predicts the training data very well, but fails for any previously unseen data.\n", "- For some intermediate value, the validation curve has a maximum. \n", " - This level of complexity indicates a suitable trade-off between bias and variance.\n", "\n", "## Tuning the model complexity varies from model to model" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "### Validation curves in Scikit-Learn\n", "\n", "using cross-validation to compute the validation curve.\n", "\n", "a *polynomial regression* model: \n", "- a generalized linear model in which the degree of the polynomial is a tunable parameter.\n", "\n", "For example, a degree-1 polynomial fits a straight line to the data; for model parameters $a$ and $b$:\n", "\n", "$$\n", "y = ax + b\n", "$$\n", "\n", "A degree-3 polynomial fits a cubic curve to the data; for model parameters $a, b, c, d$:\n", "\n", "$$\n", "y = ax^3 + bx^2 + cx + d\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "In Scikit-Learn, we can implement this with a simple linear regression combined with the polynomial preprocessor.\n", "\n", "We will use a *pipeline* to string these operations together (we will discuss polynomial features and pipelines more fully in [Feature Engineering](05.04-Feature-Engineering.ipynb)):" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T06:45:59.774592Z", "start_time": "2018-05-22T06:45:59.769694Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from sklearn.preprocessing import PolynomialFeatures\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.pipeline import make_pipeline\n", "\n", "def PolynomialRegression(degree=2, **kwargs):\n", " return make_pipeline(PolynomialFeatures(degree),\n", " LinearRegression(**kwargs))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "Now let's create some data to which we will fit our model:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T06:46:38.957745Z", "start_time": "2018-05-22T06:46:38.947179Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import numpy as np\n", "\n", "def make_data(N, err=1.0, rseed=1):\n", " # randomly sample the data\n", " rng = np.random.RandomState(rseed)\n", " X = rng.rand(N, 1) ** 2\n", " y = 10 - 1. / (X.ravel() + 0.1)\n", " if err > 0:\n", " y += err * rng.randn(N)\n", " return X, y\n", "\n", "X, y = make_data(40)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We can now visualize our data, along with polynomial fits of several degrees:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T06:46:46.824036Z", "start_time": "2018-05-22T06:46:46.651131Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import seaborn; seaborn.set() # plot formatting\n", "\n", "X_test = np.linspace(-0.1, 1.1, 500)[:, None]\n", "\n", "plt.scatter(X.ravel(), y, color='black')\n", "axis = plt.axis()\n", "for degree in [1, 3, 5]:\n", " y_test = PolynomialRegression(degree).fit(X, y).predict(X_test)\n", " plt.plot(X_test.ravel(), y_test, label='degree={0}'.format(degree))\n", "plt.xlim(-0.1, 1.0)\n", "plt.ylim(-2, 12)\n", "plt.legend(loc='best');" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Question\n", "\n", "The knob controlling model complexity in this case is the degree of the polynomial \n", "\n", "what degree of polynomial provides a suitable trade-off between bias (under-fitting) and variance (over-fitting)?\n", "\n", "We can make progress in this by visualizing the validation curve for this particular data and model; \n", "- this can be done straightforwardly using the ``validation_curve`` convenience routine provided by Scikit-Learn.\n", "- Given a model, data, parameter name, and a range to explore, this function will automatically compute both the training score and validation score across the range:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T06:50:53.553334Z", "start_time": "2018-05-22T06:50:53.112463Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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hgsvvNDz3EB9Xvfccw9ZWa79kP/55x969uzJM88843muUooBAwZ44u7VqxcTJkzwajzVtQ1dunTx378v1YysXbtWTZo0SSml1LZt29T//d//eY5lZGSoYcOGqbKyMpWfn++57Q8rVqxQaWlpSimlDh8+rAYOHFjl+IQJE9SuXbv8EktlpaWl6uKLL672WCA/r8qmT5+u3nnnnSqPjR49WmVnZ/sthvnz56thw4apK6+8Uiml1Lhx49R3332nlFLq4YcfVp9++mmV57/++utq7ty5SimlVq1apWbOnOmXuK6++mr1448/KqWUWrp0qZo1a1aV59f29/ZlXMuXL1cLFiyo8fmB+rzccnNz1YgRI1R6enqVx//44w81btw4n8TiVl3b4M9/X81qCKiprD4+0gUXXMBdd93luW80Gqsc37NnD/Pnz2fMmDG88sorfokJ4KeffqKkpIQbbriBa6+9lu3bt3uOBfLzctu1axf79u1j1KhRnsd0XWf//v1MnTqV0aNHs2LFCp/HkZqayvPPP++5v2fPHk499VQABgwYwDfffFPl+ZX/HQ4YMIBvv/3WL3E9/fTTdO/eHQCn00lYWFiV59f29/ZlXLt372bDhg1cffXVTJky5ahFn4H6vNyef/55rrnmGpKTk6s8vmfPHtLT0xk7diw333wzv/32m9djqq5t8Oe/r2aVAGpafew+Vt/Vx94SFRWF1WqlsLCQO++8k7vvvrvK8Ysuuojp06ezaNEitmzZ4tPieJWFh4dz4403smDBAh555BHuu+++JvF5ub3yyivcfvvtVR4rLi7mmmuuYc6cObz22mu8/fbbPk9M559/vmcRI7iGBjTNVWIkKiqKgoKqm3VX/uyqO+6ruNwN2NatW1myZAnXX399lefX9vf2ZVw9evTg/vvv56233qJdu3a84Fqa7xGozwsgOzubb7/9lssuu+yo5yclJXHLLbewePFixo0bx8SJE70eU3Vtgz//fTWrBNCUVx8fPHiQa6+9losvvpjhw4d7HldKcd1115GQkIDFYmHgwIH8+OOPfompY8eOjBgxAk3T6NixI3FxcWRmZgKB/7zy8/P57bffOP3006s8HhERwbXXXktERARWq5XTTz/d7z2TyuOxRUVFnmsTbpU/u+qO+9Lq1auZNm0a8+fPP2pcuLa/ty8NHTqUk046yXP7yH/fgfy81qxZw7Bhw47qlQOcdNJJnmt1/fr1Iz09HeWDWfNHtg3+/PfVrBJAU119nJWVxQ033MDEiRO54oorqhwrLCxk2LBhFBUVoZRi8+bNnv8svrZixQpmz54NQHp6OoWFhSQlJQGBX6393//+lzPPPPOox//44w+uuuoqnE4ndrudrVu3cuKJJ/otLoATTjiBzZs3A7Bp0yb69etX5XifPn3YuHGj53jfvn39EtcHH3zAkiVLWLx4Me3atTvqeG1/b1+68cYb2blzJwDffvvtUX+vQH1e7ngGDBhQ7bF58+axaNEiwDV81rp1a8+ZubdU1zb4899Xs1oI1lRXH6elpfHJJ59Umdlz5ZVXUlJSwqhRo1i5ciWLFy/GYrFwxhlncOedd/olLpvNxgMPPMCBAwfQNI377ruPHTt2BPzzAnjttdcwmUyeYYyFCxd64nr11VdZs2YNZrOZiy++mDFjxvg8nr///pt7772X5cuX8/vvv/Pwww9jt9vp1KkTaWlpGI1GbrjhBl5++WWcTieTJk0iMzMTs9nMU0895bOG1h3X0qVLOeOMM2jVqpXnjPCUU07hzjvv5P777+fuu+8mMTHxqL93nz59fBrX8uXL2bNnDzNnzsRsNpOYmMjMmTOxWq0B/byWL18OuIZfly5dWuUs2h1XSUkJEydOpLi4GKPRyNSpU+ncubNX46mubXjwwQdJS0vzy7+vZpUAhBBCHLtmNQQkhBDi2EkCEEKIECUJQAghQpQkACGECFGSAIQQIkRJAhDiCJMnT+a9994LdBhC+JwkACGECFGyDkCEPKUUs2fPZsOGDSQnJ+N0OrniiiswGAwsWrQIXdc58cQTmTZtGmFhYaxevZq5c+cSGRlJ9+7dcTqdzJ49m8GDB9OjRw/27t3L22+/zZdfflnt6zdt2sTcuXNxOBy0bduWmTNnEh8fH+iPQYQg6QGIkLd27Vp+/PFHVq1axXPPPceff/5JSUmJZz+EDz74gBYtWrBgwQIOHz7MrFmzWLRoEStWrCAvL6/Kew0YMIC1a9dy+PDhGl//1FNPsWDBAlauXMnZZ5/Nk08+GaDfXIS6ZrUhjBAN8f3333PeeedhNptJSEhgwIABKKXYv38/I0eOBFwbd5xwwgn88MMP9O7dm5SUFMC1wcq6des879WzZ08ANm/eXO3rd+zY4Sn+Ba7yJbGxsf78dYXwkAQgQp6maVWqPJpMJpxOJ//617946KGHAFfVRafTyffff4+u6zW+l7sGf22v79OnDy+//DLg2vGsctVVIfxJhoBEyDvjjDP45JNPsNls5OXl8eWXXwLw2WefkZ2djVLKs19Dnz592LVrFxkZGSilWL16dbUVIk877bRqX9+zZ0+2b9/O77//Dri2s3ziiSf8+vsK4SY9ABHyzj33XHbt2sWwYcNITEykc+fOREdHM378eK677jp0Xad79+7ccssthIWF8dBDD3HDDTdgsVho27ZttfXYjz/++BpfP2vWLO6++250XSclJYU5c+YE4LcWQmYBCVEvOTk5LF68mPHjx2MwGEhLS6N9+/aMHTs20KEJUW/SAxCiHuLi4sjPz/fsInXiiSd6LvQKEWykByCEECFKLgILIUSIkgQghBAhShKAEEKEKEkAQggRoiQBCCFEiJIEIIQQIRL2wHIAAAAHSURBVOr/AVyu2VknUvd3AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.learning_curve import validation_curve\n", "degree = np.arange(0, 21)\n", "train_score, val_score = validation_curve(PolynomialRegression(), X, y,\n", " 'polynomialfeatures__degree', \n", " degree, cv=7)\n", "\n", "plt.plot(degree, np.median(train_score, 1), color='blue', label='training score')\n", "plt.plot(degree, np.median(val_score, 1), color='red', label='validation score')\n", "plt.legend(loc='best')\n", "plt.ylim(0, 1)\n", "plt.xlabel('degree')\n", "plt.ylabel('score');" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "This shows precisely the qualitative behavior we expect: \n", "\n", "- the training score is everywhere higher than the validation score; \n", "- the training score is monotonically improving with increased model complexity; \n", "- the validation score reaches a maximum before dropping off as the model becomes over-fit.\n", "\n", "The optimal trade-off between bias and variance is found for a third-order polynomial; \n", "- we can compute and display this fit over the original data as follows:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T06:52:46.996771Z", "start_time": "2018-05-22T06:52:46.877596Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(X.ravel(), y)\n", "lim = plt.axis()\n", "y_test = PolynomialRegression(3).fit(X, y).predict(X_test)\n", "plt.plot(X_test.ravel(), y_test);\n", "plt.axis(lim);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Notice that finding this optimal model did not actually require us to compute the training score, \n", "- but examining the relationship between the training score and validation score can give us useful insight into the performance of the model." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Learning Curves\n", "\n", "One important aspect of model complexity is that the optimal model will generally depend on the size of your training data.\n", "\n", "For example, let's generate a new dataset with a factor of five more points:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T06:55:07.626485Z", "start_time": "2018-05-22T06:55:07.509831Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X2, y2 = make_data(200)\n", "plt.scatter(X2.ravel(), y2);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We will duplicate the preceding code to plot the validation curve for this larger dataset; \n", "- for reference let's over-plot the previous results as well:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2018-05-20T05:13:08.616657Z", "start_time": "2018-05-20T05:13:08.148230Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "degree = np.arange(21)\n", "train_score2, val_score2 = validation_curve(PolynomialRegression(), X2, y2,\n", " 'polynomialfeatures__degree', degree, cv=7)\n", "\n", "plt.plot(degree, np.median(train_score2, 1), color='blue', label='training score')\n", "plt.plot(degree, np.median(val_score2, 1), color='red', label='validation score')\n", "plt.plot(degree, np.median(train_score, 1), color='blue', alpha=0.3, linestyle='dashed')\n", "plt.plot(degree, np.median(val_score, 1), color='red', alpha=0.3, linestyle='dashed')\n", "plt.legend(loc='lower center')\n", "plt.ylim(0, 1)\n", "plt.xlabel('degree')\n", "plt.ylabel('score');" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The solid lines show the new results, while the fainter dashed lines show the results of the previous smaller dataset.\n", "\n", "- It is clear from the validation curve that the larger dataset can support a much more complicated model: \n", " - the peak here is around a degree of 6, but a degree-20 model is not seriously over-fitting the data \n", " - the validation and training scores remain very close.\n", "\n", "Thus we see that the behavior of the validation curve has not one but two important inputs: \n", "\n", "- the model complexity \n", "- the number of training points.\n", "\n", "A plot of the training/validation score with respect to the size of the training set is known as a **learning curve**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The general behavior we would expect from a learning curve is this:\n", "\n", "- A model of a given complexity will *overfit* a small dataset: \n", " - the training score will be relatively high, while the validation score will be relatively low.\n", "- A model of a given complexity will *underfit* a large dataset: \n", " - the training score will decrease, but the validation score will increase.\n", "- A model will never, except by chance, give a better score to the validation set than the training set: \n", " - the curves should keep getting closer together but never cross.\n", "\n", "With these features in mind, we would expect a learning curve to look qualitatively like that shown in the following figure:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "![](./img/figures/05.03-learning-curve.png)\n", "[figure source in Appendix](06.00-Figure-Code.ipynb#Learning-Curve)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The notable feature of the learning curve\n", "- The convergence to a particular score as the number of training samples grows.\n", " - once you have enough points that a particular model has converged, *adding more training data will not help you!*\n", " - The only way to increase model performance in this case is to use another (often more complex) model." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Learning curves in Scikit-Learn\n", "\n", "Scikit-Learn offers a convenient utility for computing such learning curves from your models; \n", "\n", "here we will compute a learning curve for our original dataset with a second-order polynomial model and a ninth-order polynomial:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T07:11:32.982639Z", "start_time": "2018-05-22T07:11:31.914040Z" }, "code_folding": [ 6 ], "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABEEAAAGcCAYAAAA2+b6CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XmYFNW9//F39d6zMzAg++ogBBQRNxQXcImgRCGKgJgFFWPEJd5ck5tr4hO9ij+zGI1JXImiUVxQEcQFEUFcABXcAQEBWQeGYbae3qp+f9R0z9I9wwzM0A3zeT1PPV116nTXd7q64dS3zzllWJZlISIiIiIiIiJyhHOkOgARERERERERkUNBSRARERERERERaROUBBERERERERGRNkFJEBERERERERFpE5QEEREREREREZE2QUkQEREREREREWkTlAQRaaPuuece+vfvz29+85tUh9ImlZSU8Ne//pULL7yQ4447jiFDhjB27Fj+8Y9/UFlZmerwREREmk1ti9QqLi5mxowZnHPOOQwePJhRo0bx29/+lg0bNqQ6NJG04kp1ACIibc2WLVuYMmUK27dvx+Fw0KNHD6LRKOvWrWPNmjUsWLCAJ598knbt2qU6VBERETkMbNy4kZ/97GfxtkVhYSGVlZXMmTOH+fPn85e//IVzzjkn1WGKpAX1BBEROYQsy+KWW25h+/btHH/88SxcuJA33niDhQsX8sorr9C3b1/Wrl3LbbfdlupQRURE5DAQjUa54YYb2L59O3369GH+/Pm88sorvPXWWzz44IMYhsGNN97It99+m+pQRdKCkiAiIofQJ598wurVq8nIyOBvf/sbXbt2je8rLCzkvvvuA+Ctt95i69atqQpTREREDhMLFy5k7dq1eDweHnroIfr06RPfd84553D11VcTiUS45557UhilSPpQEkRE5BBavnw5AEOGDKFTp04J+wsLC+OJka+++uqQxiYiIiKHn2XLlgEwatQoevTokbB/0qRJALz33nsUFxcf0thE0pHmBBE5wn300Uc88sgjfPHFF4RCIY4//nhuvPHGRp8TCoX4z3/+w6uvvsqGDRuwLIvevXtz4YUXcsUVV+D1ehOeE41GmTNnDrNnz2bDhg24XC5OOukkbrzxRl5//XX+/ve/c/311zN9+nQA5syZw29/+1smT57MKaecwr333suOHTvo3Lkzd999NyeccAIAe/bs4dFHH2XRokVs374dr9fLwIEDmThxIj/84Q+Txm+aJi+//DIvvvgia9asIRQK0a1bN8477zymTp1KdnZ2k96777//nlGjRjWpLsCTTz7JySef3GidCy64gB49epCbm9tgnaqqKgAikUiTjy0iInKoqG2RXm2Lbdu2ATBw4MCk+/Pz88nJyaG0tJQvv/ySESNGNPn4IkciJUFEjmBPP/00d9xxB5Zl0bFjR7p06cLy5cuZNGlSg/9RlpSUcPXVV/PZZ5/hcDjo3r07Pp+PNWvW8NVXXzF//nwee+yxOpN2hsNhbrnlFt544w0A+vTpg8vlYuHChSxdujTe6Ehm9erVzJ49m7y8PHr16sX3339P//79Afjyyy+5+uqr2bNnDx6Ph969exMIBPjwww/58MMPGTduHHfddReGYcRfLxQKMX36dBYvXgxA165dyc3NZd26dfzzn/9k3rx5zJw5k+7du+/3/fN6vQwdOnS/9WKa0gDq1asXvXr1anD/p59+yp49ewDo169fk48tIiJyKKhtkX5ti5hoNNrgvtgPK7GEiUibZonIEWnt2rXWwIEDrf79+1tPPvmkZZqmZVmWtXv3bmvKlClWYWGhVVhYaN166611njdt2jSrsLDQmjBhgrVp06Z4+bZt26xJkyZZhYWF1i9+8Ys6z3n00UetwsJC6+STT7ZWrlwZL1+zZo11zjnnxI91//33x/e9+OKL8fLp06dboVDIsizL2rNnj2VZllVaWmqdeeaZVmFhofW73/3OKisriz935cqV1umnn24VFhZaM2fOrBPLHXfcYRUWFloXXHCB9eWXX8bLi4uLreuvv94qLCy0LrnkEisajR7I29qqIpGINWHCBKuwsNAaO3ZsqsMRERGpQ22L9Gxb/OEPf7AKCwutm266Ken+rVu3xt+Xhx566BBHJ5J+NCeIyBHq8ccfJxKJcPHFFzNlypT4Lxrt27fn/vvvJycnJ+E5n3/+Oe+88w55eXn84x//qDOutHPnztx///1kZmby9ttv88033wD2LwsPP/wwAP/3f/9X55eZwsJCHnjggTq/piRz880343a7AbvLJsDs2bPZvn07J510EnfccQdZWVnx+ieccAJ33nknAA8//DDhcBiAnTt38uyzz+J2u3nggQfq/CLVrl07/vSnP9GlSxe+/PJLFi1a1MR38tC56667+PTTTzEMg1tvvTXV4YiIiNShtkV6ti3OOusswJ5Uff369Qn7H3nkkfh67O8SacuUBBE5Qi1duhSAsWPHJuzLy8tLeq/4t99+G4Dhw4fHGwy1tW/fnlNOOQWAJUuWAPbwjZKSEgoKChg5cmTCc4455phGu6zm5eXRu3fvhPJYQ2L06NFJGzpnnHEGubm57Nmzhy+//DIeUzgcZuDAgfTt2zfhOV6vN/53x+JPF/fccw9PPfUUANdeey3Dhw9PcUQiIiJ1qW2Rnm2LM888k6FDhxIOh7n66qtZvHgxwWCQ3bt387e//Y1nnnmGvLw8gHhiSKQt05wgIkegQCBAUVERQNL/sIH42NjaYr8erFy5kokTJyZ93vfffw/Axo0b6zynsLCwwV9lBgwYwMqVK5PuKygoSFoee91Zs2Yxd+7cpHViv2Zs3LiRIUOGxJ+zadOmBuOPvS+x+BtTVFTEDTfcsN96MbfddluD46EbEolEuP3223n++ecBmDBhwn4nlxMRETnU1LZI37aFYRjcf//9XHXVVXzzzTdMmzatzr5p06axceNG3njjDTIzM5t8bJEjlZIgIkeg0tLS+HpGRkbSOsm6rJaXlwOwa9cudu3a1egxysrKAHuyMwC/399g3cb+w/V4PEnLY7Ek69bZUCyx55SUlPDJJ580+pxY3cYEg8H9vk6yOJoqEAhw0003xSdamzx5Mrfddtt+u/iKiIgcampbpHfboqCggOeff56XXnqJpUuXUlFRQc+ePRk3bhzHHnsskydPBqBjx45NPrbIkUpJEJEjUKzLI0BlZWXSmcVjt2GtLdbYuPXWW/n5z3/epGPFnlNRUdFgncb2Nfa6ZWVlvPjiiwwaNKhZsVxxxRXcdtttzT5mfd26dWPNmjUH/TrJlJaWcs011/Dpp58C1LnFn4iISLpR2yL92xYej4cJEyYwYcKEOuWmacaPefTRR7fKsUUOJ5oTROQI5PV66dy5MwBff/110jobNmxIKOvZsyfQ+C8kX331FV9//XX8147YbVzXrVuHZVlJn7Nu3bqmB9+MWD766CPWr19PKBQCiN96trHnrF+/ns8//5x9+/Y1O6aWEggE4gkQh8PB73//eyVAREQkraltkb5ti02bNjFr1ixee+21pPtXrlxJWVkZnTp1iv89Im2ZkiAiR6hRo0YBxOeaqK2yspLXX389oTw2u/ibb75JcXFxwv6ysjJ++tOfcvHFF7NgwQIAhg0bRl5eHrt37046IdjmzZtZsWJFs+OPxfLcc88lbQCtXLmSK6+8kjFjxsTveX/GGWfgcDhYvnx50oZYJBLhuuuu48c//jEzZ85sdkwt5fe//308AXL33XfHu6iKiIikM7Ut0rNtUVpayp133smMGTOIRCIJ+x999FEALr/88kMdmkhaUhJE5Ag1depUMjIyWLhwIffff3/8P8XS0lJ+9atfxSfxqu3kk0/mxBNPpLS0lGnTprFp06b4vp07d3Ldddexb98+CgoKuOiiiwD7l6GpU6cC8Lvf/Y7Vq1fHn7N582Z++ctfEo1Gmx3/pEmTaNeuHStXruR//ud/6oyJ/fzzz7n55psBu0EW+1Wje/fuXHTRRUSjUa699tr4zO6xv/vXv/413333HRkZGQ1Obtbali1bFp+Mbfr06Vx88cUpiUNERKS51LZIz7bFoEGD6NmzJzt37mTGjBnxyV2DwSAzZszg3XffpaCggCuvvDIl8YmkG8NqqI+ZiBz23nzzTW655RZCoRDt27enc+fObNiwgUAgwJlnnsnixYu55JJLmDFjRvw5O3fuZOrUqaxbtw7DMOjXrx8Oh4MNGzYQDofJysriqaeeYsCAAfHnxH4FeffddwF71ni32826devIyMggPz+fTZs2ceONN3LdddcBMGfOHH7729/ygx/8gDlz5iSNf8WKFVx33XWUlpbi9Xrp168f5eXl8QZU//79eeqpp+pMxFZeXs61114b/4WoV69eZGRksHHjRgKBAG63m3/+85+MGDGiZd/sJpo6dSrvvfceAMcff3yjk6Bee+21nHnmmYcqNBERkf1S2yL92hYAn332GZMnTyYUCtGuXTu6dOnC5s2bKSsrIy8vjyeffDLp3XtE2iLn7bfffnuqgxCR1tG3b1/OOussSkpK2L59Ozt37uSYY47hjjvuID8/n8WLFzNgwID4/e0BsrKyuOSSS8jOzmbfvn1s3ryZPXv20LFjR0aPHs2f/vSnhFvjORwOLrjgAnJzcykqKmLLli3xxtBf//pXVq1axebNmznrrLM4/vjjAXs88dtvv03Hjh0TJvCK6dq1K2PHjsU0TYqLi9m8eTPl5eX07duXSZMmceeddyZMzObxeLjooos4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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.learning_curve import learning_curve\n", "import warnings \n", "warnings.filterwarnings(\"ignore\") \n", "\n", "fig, ax = plt.subplots(1, 2, figsize=(16, 6))\n", "fig.subplots_adjust(left=0.0625, right=0.95, wspace=0.1)\n", "for i, degree in enumerate([2, 9]):\n", " N, train_lc, val_lc = learning_curve(PolynomialRegression(degree),\n", " X, y, cv=7,\n", " train_sizes=np.linspace(0.3, 1, 25))\n", "\n", " ax[i].plot(N, np.mean(train_lc, 1), color='blue', label='training score')\n", " ax[i].plot(N, np.mean(val_lc, 1), color='red', label='validation score')\n", " ax[i].hlines(np.mean([train_lc[-1], val_lc[-1]]), N[0], N[-1],\n", " color='gray', linestyle='dashed')\n", " ax[i].set_ylim(0, 1)\n", " ax[i].set_xlim(N[0], N[-1])\n", " ax[i].set_xlabel('training size', fontsize = 30)\n", " ax[i].set_ylabel('score', fontsize = 30)\n", " ax[i].set_title('degree = {0}'.format(degree), size=24)\n", " ax[i].legend(loc='best', fontsize = 30)\n", "#fig.savefig('figures/05.03-learning-curve2.png')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "This is a valuable diagnostic\n", "- it gives us a visual depiction of how our model responds to increasing training data.\n", "\n", "When your learning curve has already converged \n", "- *adding more training data will not significantly improve the fit!*\n", "- in the left panel, with the learning curve for the degree-2 model.\n", "\n", "The only way to increase the converged score is to use a different (usually more complicated) model.\n", "- in the right panel: by moving to a much more complicated model, we increase the score of convergence (indicated by the dashed line)\n", "- at the expense of higher model variance (indicated by the difference between the training and validation scores)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "If we were to add even more data points, the learning curve for the more complicated model would eventually converge.\n", "\n", "Plotting a learning curve for your particular choice of model and dataset can help you to make this type of decision about how to move forward in improving your analysis." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Validation in Practice: Grid Search\n", "\n", "The trade-off between bias and variance, and its dependence on model complexity and training set size.\n", "\n", "In practice, models generally have more than one knob to turn\n", "\n", "- plots of `validation and learning curves` change from lines to multi-dimensional surfaces.\n", " - such visualizations are difficult\n", " - we would rather simply find the particular model that maximizes the validation score.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Validation in Practice: Grid Search\n", "\n", "Scikit-Learn provides automated tools to do this in the `grid search module`.\n", "\n", "Here is an example of using grid search to find the optimal polynomial model.\n", "\n", "We will explore a three-dimensional grid of model features; \n", "- the polynomial degree, \n", "- the flag telling us whether to fit the intercept\n", "- the flag telling us whether to normalize the problem.\n", "\n", "This can be set up using Scikit-Learn's ``GridSearchCV`` meta-estimator:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T07:18:48.663397Z", "start_time": "2018-05-22T07:18:48.657721Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "from sklearn.grid_search import GridSearchCV\n", "\n", "param_grid = {'polynomialfeatures__degree': np.arange(21),\n", " 'linearregression__fit_intercept': [True, False],\n", " 'linearregression__normalize': [True, False]}\n", "\n", "grid = GridSearchCV(PolynomialRegression(), param_grid, cv=7)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Notice that like a normal estimator, this has not yet been applied to any data.\n", "\n", "Calling the ``fit()`` method will fit the model at each grid point, keeping track of the scores along the way:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T07:19:07.020489Z", "start_time": "2018-05-22T07:19:05.832285Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "grid.fit(X, y);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Now that this is fit, we can ask for the best parameters as follows:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T07:19:14.307285Z", "start_time": "2018-05-22T07:19:14.302610Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "{'linearregression__fit_intercept': False,\n", " 'linearregression__normalize': True,\n", " 'polynomialfeatures__degree': 4}" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid.best_params_" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Finally, if we wish, we can use the best model and show the fit to our data using code from before:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "ExecuteTime": { "end_time": "2018-05-22T07:20:47.907632Z", "start_time": "2018-05-22T07:20:47.788848Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = grid.best_estimator_\n", "\n", "plt.scatter(X.ravel(), y)\n", "lim = plt.axis()\n", "y_test = model.fit(X, y).predict(X_test)\n", "plt.plot(X_test.ravel(), y_test, hold=True);\n", "plt.axis(lim); " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The grid search provides many more options, including the ability \n", "- to specify a custom scoring function, \n", "- to parallelize the computations, \n", "- to do randomized searches, and more.\n", "\n", "For information, see the examples in [In-Depth: Kernel Density Estimation](05.13-Kernel-Density-Estimation.ipynb) and [Feature Engineering: Working with Images](05.14-Image-Features.ipynb), or refer to Scikit-Learn's [grid search documentation](http://Scikit-Learn.org/stable/modules/grid_search.html)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Summary\n", "\n", "In this section, we have begun to explore the concept of model validation and hyperparameter optimization, focusing on intuitive aspects of the bias–variance trade-off and how it comes into play when fitting models to data.\n", "\n", "In particular, we found that the use of a validation set or cross-validation approach is *vital* when tuning parameters in order to avoid over-fitting for more complex/flexible models." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "< [Introducing Scikit-Learn](05.02-Introducing-Scikit-Learn.ipynb) | [Contents](Index.ipynb) | [Feature Engineering](05.04-Feature-Engineering.ipynb) >" ] } ], "metadata": { "anaconda-cloud": {}, "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.4" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }