{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 04 - Data Preparation and Advanced Model Evaluation\n", "\n", "by [Alejandro Correa Bahnsen](albahnsen.com/)\n", "\n", "version 0.4, Feb 2017\n", "\n", "## Part of the Tutorial [Practical Machine Learning](https://github.com/albahnsen/Tutorial_PracticalMachineLearning_Pycon)\n", "\n", "\n", "\n", "This notebook is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/deed.en_US). Special thanks goes to [Kevin Markham](https://github.com/justmarkham)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Handling missing values\n", "\n", "scikit-learn models expect that all values are **numeric** and **hold meaning**. Thus, missing values are not allowed by scikit-learn." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(891, 11)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# read the Titanic data\n", "import pandas as pd\n", "titanic = pd.read_csv('data/titanic.csv', index_col='PassengerId')\n", "titanic.shape" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Survived 0\n", "Pclass 0\n", "Name 0\n", "Sex 0\n", "Age 177\n", "SibSp 0\n", "Parch 0\n", "Ticket 0\n", "Fare 0\n", "Cabin 687\n", "Embarked 2\n", "dtype: int64" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check for missing values\n", "titanic.isnull().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One possible strategy is to **drop missing values**:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(183, 11)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# drop rows with any missing values\n", "titanic.dropna().shape" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(714, 11)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# drop rows where Age is missing\n", "titanic[titanic.Age.notnull()].shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sometimes a better strategy is to **impute missing values**:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "29.69911764705882" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# mean Age\n", "titanic.Age.mean()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "28.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# median Age\n", "titanic.Age.median()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0 24.0\n", "dtype: float64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# most frequent Age\n", "titanic.Age.mode()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# fill missing values for Age with the median age\n", "titanic.Age.fillna(titanic.Age.median(), inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another strategy would be to build a **KNN model** just to impute missing values. How would we do that?\n", "\n", "If values are missing from a categorical feature, we could treat the missing values as **another category**. Why might that make sense?\n", "\n", "How do we **choose** between all of these strategies?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Handling categorical features\n", "\n", "How do we include a categorical feature in our model?\n", "\n", "- **Ordered categories:** transform them to sensible numeric values (example: small=1, medium=2, large=3)\n", "- **Unordered categories:** use dummy encoding (0/1)" ] }, { "cell_type": "code", "execution_count": 9, "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", " \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", "
SurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
PassengerId
103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
503Allen, Mr. William Henrymale35.0003734508.0500NaNS
603Moran, Mr. Jamesmale28.0003308778.4583NaNQ
701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
1012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
\n", "
" ], "text/plain": [ " Survived Pclass \\\n", "PassengerId \n", "1 0 3 \n", "2 1 1 \n", "3 1 3 \n", "4 1 1 \n", "5 0 3 \n", "6 0 3 \n", "7 0 1 \n", "8 0 3 \n", "9 1 3 \n", "10 1 2 \n", "\n", " Name Sex Age \\\n", "PassengerId \n", "1 Braund, Mr. Owen Harris male 22.0 \n", "2 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 \n", "3 Heikkinen, Miss. Laina female 26.0 \n", "4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 \n", "5 Allen, Mr. William Henry male 35.0 \n", "6 Moran, Mr. James male 28.0 \n", "7 McCarthy, Mr. Timothy J male 54.0 \n", "8 Palsson, Master. Gosta Leonard male 2.0 \n", "9 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 \n", "10 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 \n", "\n", " SibSp Parch Ticket Fare Cabin Embarked \n", "PassengerId \n", "1 1 0 A/5 21171 7.2500 NaN S \n", "2 1 0 PC 17599 71.2833 C85 C \n", "3 0 0 STON/O2. 3101282 7.9250 NaN S \n", "4 1 0 113803 53.1000 C123 S \n", "5 0 0 373450 8.0500 NaN S \n", "6 0 0 330877 8.4583 NaN Q \n", "7 0 0 17463 51.8625 E46 S \n", "8 3 1 349909 21.0750 NaN S \n", "9 0 2 347742 11.1333 NaN S \n", "10 1 0 237736 30.0708 NaN C " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.head(10)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# encode Sex_Female feature\n", "titanic['Sex_Female'] = titanic.Sex.map({'male':0, 'female':1})" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create a DataFrame of dummy variables for Embarked\n", "embarked_dummies = pd.get_dummies(titanic.Embarked, prefix='Embarked')\n", "embarked_dummies.drop(embarked_dummies.columns[0], axis=1, inplace=True)\n", "\n", "# concatenate the original DataFrame and the dummy DataFrame\n", "titanic = pd.concat([titanic, embarked_dummies], axis=1)" ] }, { "cell_type": "code", "execution_count": 12, "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", "
SurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkedSex_FemaleEmbarked_QEmbarked_S
PassengerId
103Braund, Mr. Owen Harrismale22.010A/5 211717.25NaNS00.01.0
\n", "
" ], "text/plain": [ " Survived Pclass Name Sex Age SibSp \\\n", "PassengerId \n", "1 0 3 Braund, Mr. Owen Harris male 22.0 1 \n", "\n", " Parch Ticket Fare Cabin Embarked Sex_Female Embarked_Q \\\n", "PassengerId \n", "1 0 A/5 21171 7.25 NaN S 0 0.0 \n", "\n", " Embarked_S \n", "PassengerId \n", "1 1.0 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.head(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- How do we **interpret** the encoding for Embarked?\n", "- Why didn't we just encode Embarked using a **single feature** (C=0, Q=1, S=2)?\n", "- Does it matter which category we choose to define as the **baseline**?\n", "- Why do we only need **two dummy variables** for Embarked?" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.793721973094\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/al/anaconda3/lib/python3.5/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n", " \"This module will be removed in 0.20.\", DeprecationWarning)\n" ] } ], "source": [ "# define X and y\n", "feature_cols = ['Pclass', 'Parch', 'Age', 'Sex_Female', 'Embarked_Q', 'Embarked_S']\n", "X = titanic[feature_cols]\n", "y = titanic.Survived\n", "\n", "# train/test split\n", "from sklearn.cross_validation import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n", "\n", "# train a logistic regression model\n", "from sklearn.linear_model import LogisticRegression\n", "logreg = LogisticRegression(C=1e9)\n", "logreg.fit(X_train, y_train)\n", "\n", "# make predictions for testing set\n", "y_pred_class = logreg.predict(X_test)\n", "\n", "# calculate testing accuracy\n", "from sklearn import metrics\n", "print(metrics.accuracy_score(y_test, y_pred_class))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Cross-validation\n", "\n", "## Review of model evaluation procedures\n", "\n", "**Motivation:** Need a way to choose between machine learning models\n", "\n", "- Goal is to estimate likely performance of a model on **out-of-sample data**\n", "\n", "**Initial idea:** Train and test on the same data\n", "\n", "- But, maximizing **training accuracy** rewards overly complex models which **overfit** the training data\n", "\n", "**Alternative idea:** Train/test split\n", "\n", "- Split the dataset into two pieces, so that the model can be trained and tested on **different data**\n", "- **Testing accuracy** is a better estimate than training accuracy of out-of-sample performance\n", "- But, it provides a **high variance** estimate since changing which observations happen to be in the testing set can significantly change testing accuracy" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.linear_model import LogisticRegression\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn import metrics\n", "\n", "# define X and y\n", "feature_cols = ['Pclass', 'Parch', 'Age', 'Sex_Female', 'Embarked_Q', 'Embarked_S']\n", "X = titanic[feature_cols]\n", "y = titanic.Survived" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.793721973094\n" ] } ], "source": [ "# train/test split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n", "\n", "# train a logistic regression model\n", "logreg = LogisticRegression(C=1e9)\n", "logreg.fit(X_train, y_train)\n", "\n", "# make predictions for testing set\n", "y_pred_class = logreg.predict(X_test)\n", "\n", "# calculate testing accuracy\n", "print(metrics.accuracy_score(y_test, y_pred_class))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.780269058296\n" ] } ], "source": [ "# train/test split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2)\n", "\n", "# train a logistic regression model\n", "logreg = LogisticRegression(C=1e9)\n", "logreg.fit(X_train, y_train)\n", "\n", "# make predictions for testing set\n", "y_pred_class = logreg.predict(X_test)\n", "\n", "# calculate testing accuracy\n", "print(metrics.accuracy_score(y_test, y_pred_class))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.784753363229\n" ] } ], "source": [ "# train/test split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=3)\n", "\n", "# train a logistic regression model\n", "logreg = LogisticRegression(C=1e9)\n", "logreg.fit(X_train, y_train)\n", "\n", "# make predictions for testing set\n", "y_pred_class = logreg.predict(X_test)\n", "\n", "# calculate testing accuracy\n", "print(metrics.accuracy_score(y_test, y_pred_class))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "train test spliting create bias due to the intrinsic randomness in the sets selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# K-fold cross-validation\n", "\n", "1. Split the dataset into K **equal** partitions (or \"folds\").\n", "2. Use fold 1 as the **testing set** and the union of the other folds as the **training set**.\n", "3. Calculate **testing accuracy**.\n", "4. Repeat steps 2 and 3 K times, using a **different fold** as the testing set each time.\n", "5. Use the **average testing accuracy** as the estimate of out-of-sample accuracy.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Diagram of **5-fold cross-validation:**\n", "\n", "![5-fold cross-validation](https://raw.githubusercontent.com/justmarkham/DAT8/master/notebooks/images/cross_validation_diagram.png)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration Training set observations Testing set observations\n", " 1 [ 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24] [0 1 2 3 4] \n", " 2 [ 0 1 2 3 4 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24] [5 6 7 8 9] \n", " 3 [ 0 1 2 3 4 5 6 7 8 9 15 16 17 18 19 20 21 22 23 24] [10 11 12 13 14] \n", " 4 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 20 21 22 23 24] [15 16 17 18 19] \n", " 5 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] [20 21 22 23 24] \n" ] } ], "source": [ "# simulate splitting a dataset of 25 observations into 5 folds\n", "from sklearn.cross_validation import KFold\n", "kf = KFold(25, n_folds=5, shuffle=False)\n", "\n", "# print the contents of each training and testing set\n", "print('{} {:^61} {}'.format('Iteration', 'Training set observations', 'Testing set observations'))\n", "for iteration, data in enumerate(kf, start=1):\n", " print('{:^9} {} {:^25}'.format(str(iteration), str(data[0]), str(data[1])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Dataset contains **25 observations** (numbered 0 through 24)\n", "- 5-fold cross-validation, thus it runs for **5 iterations**\n", "- For each iteration, every observation is either in the training set or the testing set, **but not both**\n", "- Every observation is in the testing set **exactly once**" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create k-folds\n", "kf = KFold(X.shape[0], n_folds=10, random_state=0)\n", "\n", "results = []\n", "\n", "for train_index, test_index in kf:\n", " X_train, X_test = X.iloc[train_index], X.iloc[test_index]\n", " y_train, y_test = y.iloc[train_index], y.iloc[test_index]\n", "\n", " # train a logistic regression model\n", " logreg = LogisticRegression(C=1e9)\n", " logreg.fit(X_train, y_train)\n", "\n", " # make predictions for testing set\n", " y_pred_class = logreg.predict(X_test)\n", "\n", " # calculate testing accuracy\n", " results.append(metrics.accuracy_score(y_test, y_pred_class))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "count 10.000000\n", "mean 0.794644\n", "std 0.030631\n", "min 0.764045\n", "25% 0.768820\n", "50% 0.780899\n", "75% 0.820225\n", "max 0.842697\n", "dtype: float64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.Series(results).describe()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.cross_validation import cross_val_score\n", "\n", "logreg = LogisticRegression(C=1e9)\n", "\n", "results = cross_val_score(logreg, X, y, cv=10, scoring='accuracy')" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "count 10.000000\n", "mean 0.794665\n", "std 0.019263\n", "min 0.775281\n", "25% 0.779963\n", "50% 0.786517\n", "75% 0.806742\n", "max 0.829545\n", "dtype: float64" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.Series(results).describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Comparing cross-validation to train/test split\n", "\n", "Advantages of **cross-validation:**\n", "\n", "- More accurate estimate of out-of-sample accuracy\n", "- More \"efficient\" use of data (every observation is used for both training and testing)\n", "\n", "Advantages of **train/test split:**\n", "\n", "- Runs K times faster than K-fold cross-validation\n", "- Simpler to examine the detailed results of the testing process\n", "\n", "## Cross-validation recommendations\n", "\n", "1. K can be any number, but **K=10** is generally recommended\n", "2. For classification problems, **stratified sampling** is recommended for creating the folds\n", " - Each response class should be represented with equal proportions in each of the K folds\n", " - scikit-learn's `cross_val_score` function does this by default" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Improvements to cross-validation\n", "\n", "**Repeated cross-validation**\n", "\n", "- Repeat cross-validation multiple times (with **different random splits** of the data) and average the results\n", "- More reliable estimate of out-of-sample performance by **reducing the variance** associated with a single trial of cross-validation\n", "\n", "**Creating a hold-out set**\n", "\n", "- \"Hold out\" a portion of the data **before** beginning the model building process\n", "- Locate the best model using cross-validation on the remaining data, and test it **using the hold-out set**\n", "- More reliable estimate of out-of-sample performance since hold-out set is **truly out-of-sample**\n", "\n", "**Feature engineering and selection within cross-validation iterations**\n", "\n", "- Normally, feature engineering and selection occurs **before** cross-validation\n", "- Instead, perform all feature engineering and selection **within each cross-validation iteration**\n", "- More reliable estimate of out-of-sample performance since it **better mimics** the application of the model to out-of-sample data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Overfitting, Underfitting and Model Selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we've gone over the basics of 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": "markdown", "metadata": {}, "source": [ "### Illustration of the Bias-Variance Tradeoff\n", "\n", "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", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "plt.style.use('fivethirtyeight')\n", "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" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's create a realization of this dataset:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "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" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n1+Q9KwAAWmP5dB8AAFbx67rw7777Tn/605/Uu3dvde3aVdnZ2frss89a/JlVq1bphhtu0MUXX6we\nPXroxhtv1LvvvuunHjdt2bJl6t+/v7p06aKsrCwVFxe3+Pr//ve/+vWvf63ExET17dtXc+fO9VNP\nveNNXdu2bdNtt92mPn366KKLLtLgwYP13HPP+bG3beft+ap34MABJSUlqVu3bjb30Hu+1LRo0SJl\nZmYqISFBaWlpmjlzph966h1v6/r3v/+t66+/Xt26dVPv3r1122236cCBA37qbeuKioqUnZ2tSy+9\nVLGxsVqzZk2rPxMM1wtv62rP9cKvIfXQQw9p06ZNWrFihTZv3qyqqirdcsstqqtrfjC3bds2jR49\nWhs3btSbb76plJQUjR49WocOHfJjz3+0YcMGTZs2Tbm5uSosLFRmZqbGjh2ro0ePNvn6qqoqjRo1\nSl26dNFbb72l/Px8LVy4UE899ZSfe94yb+vasWOH+vbtq1WrVqm4uFjjx4/XlClTtH79ej/3vGXe\n1lWvpqZG48ePN3KK2peapk+frmeffVYzZ87Ujh079NJLL2nQoEF+7HXrvK3ryJEj+u1vf6vBgwer\nsLBQr776qr799lvdfPPNfu5586qrq9W3b18VFBS0aRFZsFwvvK2rPdcLv033nThxQsnJyVq8eLFG\njx4tSTp69Kj69eun9evX67rrrmvze6Wmpio3N1cTJkywq7vN+tWvfqV+/frp8ccfbziWkZGhm266\nSQ8//PBZr1++fLlmzJihjz/+uOG7YvPnz9ezzz6rDz/80G/9bo23dTVl3Lhx8ng8WrlypV3d9Jqv\ndU2bNk1VVVUaNGiQ8vLy9Omnn/qju23ibU1Op1ODBg1ScXGxkpOT/dlVr3hb16uvvqrx48fr+PHj\ncjgckqTCwkKNHDlSBw4cUGxsrN/63hZJSUmaN2+esrOzm31NsFwvTteWuprS1uuF30ZSe/bsUW1t\nbaMw6tq1q1JTU7V9+/Y2v8+3336rU6dOqXPnznZ0s0U1NTXas2ePsrKyGh0fMmRIszW89957uuqq\nqxp9mfmXv/yljh07pk8++cTO7raZL3U1paqqKiDnpTm+1vX666/rX//6l5HTLL7UtHnzZvXs2VNv\nvPGG0tPT9fOf/1wTJ07UF1984Ycet40vdQ0YMEDR0dFatWqVPB6PqqqqtHr1amVkZBgXUG0VDNcL\nq7T1euG3kHK5XIqMjNQFF1zQ6HhcXJxcLleb32f27Nn66U9/qhtuuMHqLrbqyy+/lNvtVnx8fKPj\nLdXgcrmafH1dXZ1XddvJl7rOtGXLFr399tsaN26cHV30iS91HTt2TFOmTNEzzzxj5Hf8fKnp8OHD\n+uSTT/Tyyy/r6aef1tKlS+V0Or3+5GsnX+rq1q2bNmzYoDlz5ig+Pl49evTQ3r179cILL/ijy7YI\nhuuFFby5XrQ7pGbPnq3Y2Nhmf11wwQV655132tuMJGnx4sVauXKlnnvuOXZUN8i7776re++9V3Pn\nzlV6enqgu9Mu9913n8aPH6/LL79cklq8XxosPB6PvvvuOy1dulQDBw7UwIEDtWTJEu3cuVO7du0K\ndPd85nK59MADDyg7O1tbt27Vpk2bdN555+muu+4KdNfQAm+vF+3+ntTkyZN16623tviapKQk7dix\nQ263W//73/8ajaaOHz/ephu4ixYtUkFBgdatWxewC+GFF16oyMjIsz7RHD9+/KxPP/Xi4+ObfL3D\n4Wj2Z/zNl7rqFRcX65ZbbtGf//xn3X333Tb20nu+1FVYWKji4mIVFBRI+j6kPB6P4uLitGDBAt15\n552297slvtSUkJCgqKgo9ezZs+FY7969FRkZqU8//VQDBgywtc9t4UtdzzzzjDp16qS//vWvDceW\nLFmivn37avv27bryyivt7LItguF60R6+XC/aPZKKjY1VcnJyi786dOig9PR0RUVFaevWrQ0/e/To\nUe3bt08DBw5ssY2///3vKigo0EsvvaTMzMz2dtln0dHRSk9P11tvvdXo+NatW5utITMzU8XFxfru\nu+8ajr355ptKTExU9+7d7exum/lSlyS98847uvnmmzVt2jTdd999NvfSe77UVVxcrMLCQm3btk3b\ntm3T9OnT1bFjR23btk0jR470Q69b5ktNAwcOVG1trQ4fPtxw7NChQ3K73UH9d/Cbb75RZGRko2P1\nT1vweDy29NNuwXC98JWv1wu/3ZOKiYnRHXfcoUceeUT/+c9/VFJSot/97nfq16+frr322obX/eY3\nv9GsWbMafv+3v/1NM2fO1MKFC9WrVy+5XC65XC6dOHHCX11vZPLkyVq9erVWrVql/fv3Ky8vT+Xl\n5Q1zqzNmzGh0MRszZow6duyoSZMm6aOPPtI//vEPPfnkk5o8eXJA+t8cb+sqLCzUzTffrJycHI0e\nPbrhvLS2EbG/eVtXnz59Gv1KTExURESEUlNTdf755weqjEa8rSkrK0v9+/fX/fffrw8++EAlJSW6\n//77lZmZ2TCtaQJv67r++utVUlKiuXPn6uDBg9qzZ48mT56spKQkY6adq6urVVpaqg8++EAej0dl\nZWUqLS1VWVmZpOC9XnhbV3uuF5Zui9SagoICRUVFKScnR6dOndK1116rJUuWNCwflb7/7sPpnxiW\nLVum2tras26wZWdnB+S7A6NGjVJFRYUWLFig8vJypaWlae3aterataskqby8XEeOHGl4fUxMjF5+\n+WXl5uZqyJAh6ty5sx544AFNmjTJ731vibd1rVmzRt98840WLlyohQsXNhzv1q2bSkpK/N7/5nhb\nVzDwtiaHw6EXX3xReXl5GjFihDp06KDrrrtOjz76aKBKaJK3dV1zzTVatmyZnnzySS1cuFDnnnuu\nrrjiCq1fv17nnntuoMpoZPfu3brxxhsbrnH5+fnKz89vuH4F6/XC27rac71gWyQAgLF4XC4AwFiE\nFADAWIQUAMBYhBQAwFiEFADAWIQUAMBYhBQAwFiEFADAWIQUAMBY/w/5axY4xY4IngAAAABJRU5E\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X, y = make_data(40, error=1)\n", "plt.scatter(X.ravel(), y);" ] }, { "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", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n6a9Hycv5lYGIqBIGqXqSlqbAkCFuKCuTwdlZwPbtRYiIMNR3tYiIJIXf3evJpUsylJXJAABlZTJc\nviyr5xoREUkPg1Q9adtWgLOzAABwdhbQtq1QzzUiIpIe0YPU559/jkGDBiEoKAihoaF44YUXcObM\nGbGLcXjh4QZs316EFSuK8OuvRQgP51AfEdH9RA9SBw8exOuvv44dO3Zg8+bNcHJywogRI6DRaMQu\nyqHJ5UBEhAGjR+vRvTsXTRARmSP6wokNGzZU+nn58uUICgpCamoqhgwZInZxksdVfEREtWf31X0F\nBQUwGo3w9PS0d1GSxFV8RES1Z/fv9O+99x66du2KHj162LsoSeIqPiKi2rNrT2rWrFk4fPgwtm/f\nDpmscV6cK1bxVfSkuIqPiKjmZBqNxi5Xzffffx8///wztmzZgnbt2lW7f3p6uj2qUe/kcidcv94a\nmZnOCA4ug4/PVRiN+vquFhGRXYWFhYlyHLsEqZkzZyIhIQFbtmxBaGio2Id3COnp6aKdJKloiG0C\n2C5H0hDbBDTcdolB9OG+6dOn48cff8T3338PDw8P5ObmAgDc3Nzg5uYmdnFERNSAiR6kVq5cCZlM\nhuHDh1faPnPmTMycOVPs4oiIqAETPUjdvn1b7EMSEVEjxdtKiYhIshikiIhIshikiIhIshikiIhI\nshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshik\niIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhI\nsuwWpFasWIGuXbvC19cXAwYMQEpKir2KIiKiBsouQWrTpk14//33MX36dCQlJaFHjx549tlncfXq\nVXsUR0REDZRdgtTSpUvx0ksv4eWXX0ZYWBjmzZsHHx8frFq1yh7FERFRAyV6kCorK8Px48cxYMCA\nStsHDRqE1NRUsYsjIqIGTPQgdfPmTRgMBnh7e1fa3qpVK+Tm5opdHBERNWBc3UdERJLlJPYBW7Ro\nAYVCUaXXlJeXV6V3da/09HSxq1IvZDIn5Oa2RkZGKPLySuHjcxVGo76+qyWahnKe7sd2OY6G2Cag\n4bUrLCxMlOOIHqScnZ0RHh6OvXv3Yvjw4abte/bswYgRIyy+T6wG1bdjxxQYPtwNZWUyODsL2L5d\nhYgIQ31XSxTp6ekN5jzdi+1yHA2xTUDDbZcY7DLcN3XqVPzwww9YvXo1zp8/j5kzZyInJwfjx4+3\nR3GScumSDGVlMgBAWZkMly/L6rlGRESOS/SeFACMHDkSt2/fxoIFC5CTk4OOHTti/fr1CAgIsEdx\nktK2rQBnZ8HUk2rbVqjvKhEROSy7BCkAmDBhAiZMmGCvw0tWeLgB27cX4fx5Pdq3d0J4eMMY6iMi\nqg92C1KNlVwOREQY4OFxgWPMREQPiEvQiYhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhI\nshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshik\niIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIshikiIhIskQNUhqNBjNmzECPHj3g5+eH\nLl264N1338Xt27fFLIaIiBoJUYNUdnY2rl+/jjlz5iAlJQVff/01Dh48iNdee03MYoiIqJFwEvNg\nHTt2xOrVq00/h4SEYPbs2XjhhRdQWFgId3d3MYsjIqIGzu5zUvn5+XB1dUWTJk3sXRQRETUwdg1S\nGo0Gn332GcaNGwe5nGs0iIjINjKNRiNUt9PcuXOxYMECyweRybB582b07dvXtK2oqAijR4+Gs7Mz\nNmzYABcXF3FqTEREjUaNgtTt27dx8+ZNq/sEBARAqVQC+CtAyeVyrF+/nkN9RERUKzUKUrYoLCzE\ns88+CwDYuHEjAxQREdWaqKv7CgsLMXLkSBQVFeH7779HYWEhCgsLAQBeXl5wdnYWszgiImrgRA1S\nx48fx9GjRwEAERERAABBEMzOWREREVVH9OE+IiIisdTpuvDS0lL84x//QLt27dC6dWuMGTMG165d\ns/qe1atXY+jQoQgJCUFwcDBiYmJw6NChOqqxeStWrEDXrl3h6+uLAQMGICUlxer+f/75J4YNGwY/\nPz907twZ8+bNq6Oa2saWdiUnJ2Ps2LHo0KED/P390bdvX3z33Xd1WNuas/V8Vbh48SICAgIQGBho\n5xrarjZtWrp0KXr06AEfHx907NgRs2fProOa2sbWdu3atQuDBw9GYGAg2rVrh7Fjx+LixYt1VNvq\nHTx4EGPGjEGnTp3g5eWFNWvWVPseR7he2NquB7le1GmQeu+997B161asWrUKv/zyCwoKCvD8889D\n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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X_test = np.linspace(-0.1, 1.1, 500)[:, None]\n", "\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.metrics import mean_squared_error\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", "plt.title(\"mean squared error: {0:.3g}\".format(mean_squared_error(model.predict(X), y)));" ] }, { "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. Scikit-learn makes this easy with the ``PolynomialFeatures`` preprocessor, which can be pipelined with a linear regression.\n", "\n", "Let's make a convenience routine to do this:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.preprocessing import PolynomialFeatures\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we'll use this to fit a quadratic curve to the data." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "X_poly = PolynomialFeatures(degree=2).fit_transform(X)\n", "X_test_poly = PolynomialFeatures(degree=2).fit_transform(X_test)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nIrJb/w93eES4+XcIaAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = LinearRegression()\n", "model.fit(X_poly, y)\n", "y_test = model.predict(X_test_poly)\n", "\n", "plt.scatter(X.ravel(), y)\n", "plt.plot(X_test.ravel(), y_test)\n", "plt.title(\"mean squared error: {0:.3g}\".format(mean_squared_error(model.predict(X_poly), y)));" ] }, { "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", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X_poly = PolynomialFeatures(degree=30).fit_transform(X)\n", "X_test_poly = PolynomialFeatures(degree=30).fit_transform(X_test)\n", "\n", "model = LinearRegression()\n", "model.fit(X_poly, y)\n", "y_test = model.predict(X_test_poly)\n", "\n", "plt.scatter(X.ravel(), y)\n", "plt.plot(X_test.ravel(), y_test)\n", "plt.title(\"mean squared error: {0:.3g}\".format(mean_squared_error(model.predict(X_poly), y)))\n", "plt.ylim(-4, 14);" ] }, { "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": [ "Just for fun, let's use IPython's interact capability (only in IPython 2.0+) to explore this interactively:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nH5v7iIhIthikiIhIthikiIhIthikiIhIthikiIhIthikiIhIthikiIhIthikiIhIthikiIhIthik\niIhIthikiIhIthikiIhItjjBbD3iarxERNaR/Bb57rvvom/fvggNDUXbtm0xcuRInDp1SupkHFLl\narwTJnigXz8PHDumsneWiIhkTfIgdeDAAUycOBG7d+/Gjh074OLigqFDhyI/P1/qpByOpdV4iYio\nepI3923evNns99WrVyM0NBSpqano16+f1Mk5lMrVePV6BVfjJSISwebvpAoLC2E0GuHj42PrpGSP\nq/ESEVnH5kHqtddeQ9euXREdHW3rpGSPq/ESEVlHkZ+fb7M2p7lz52Lbtm34/vvvERoaWuOxWq3W\nVtkgIqJ6Fh4eLsl1bBak5syZg23btuHbb79FmzZtbJGErGm1Wsm+JLlwxjIBLJcjccYyAc5bLinY\npLlv9uzZ2L59e4MNUEREJA3Jg9TMmTPx5Zdf4vPPP4eXlxeys7MBAB4eHvDw8JA6OSIicmKSB6m1\na9dCoVBgyJAhZttnz56N2bNnS50cERE5McmDVF5entSXJCKiBoozxxERkWwxSBERkWwxSBERkWwx\nSBERkWwxSBERkWwxSBERkWwxSBERkWwxSBERkWwxSBERkWwxSBERkWwxSBERkWwxSBERkWwxSBER\nkWwxSBERkWwxSBERkWzZLEitWbMGXbt2RVBQEHr37o3k5GRbJUVERE7KJkFq69atmDNnDmbOnImk\npCRER0djxIgRuHLlii2SIyIiJ2WTILVy5Uo8++yzGDNmDMLDw7F48WIEBgbik08+sUVysmYwAEeP\nqrB5swuOHlXBaLR3joiIHIfky8fr9XocP34cL7/8stn2vn37IjU1VerkZC8tTYV+/Tyg1yugVgv4\n/vtiREUZ7J0tIiKHIHlN6ubNmzAYDAgICDDb3rRpU2RnZ0udnOydP6+AXq8AAOj1Cly4oLBzjoiI\nHAd799lY69YC1GoBAKBWC2jdWrBzjoiIHIfkzX1+fn5QqVRVak05OTlValf30mq1UmfF7rRaLby9\nXbBtWwguXVIjLEwPb+8r0GrL7Z21WnPG7wlguRyJM5YJcL5yhYeHS3IdyYOUWq1GZGQkfvnlFwwZ\nMsS0/eeff8bQoUOrPU+qAsmFVqs1lalNG6BnTwDQAGhlz2zVyb1lciYsl+NwxjIBzlsuKUgepABg\n6tSpeOmll9CtWzfExMRg7dq1yMrKwvPPP2+L5IiIyEnZJEgNGzYMeXl5WLp0KbKyshAREYGvvvoK\nzZs3t0VyRETkpGwSpABg3LhxGDdunK0uT0REDQB79xERkWzZrCbVUBkMFQN4z5xpi8JCFSIjDVDy\nUYCIqFYYpCTGGSaIiKTDZ3yJcYYJIiLpMEhJjDNMEBFJh819EouMNOD774vxxx/laNfOBZGRbOoj\nIqotBimJKZVAVJQBXl5nOYKciKiO2NxHRESyxSBFRESyxSBFRESyxSBFRESyxSBFRESyxSBFRESy\nxSBFRESyxSBFRESyxSBFRESyJWmQys/Px6xZsxAdHY3g4GB06tQJM2bMQF5enpTJEBFRAyFpkLp2\n7RquX7+OBQsWIDk5GR999BEOHDiACRMmSJkMERE1EJLO3RcREYF169aZfm/ZsiXmz5+PkSNHoqio\nCJ6enlImR0RETs7m76QKCgrg6uoKd3d3WydFREROxqZBKj8/H4sWLcLYsWOh5BrqRERkJUV+fv59\nV+VbuHAhli5dWv1FFArs2LEDPXv2NG0rLi7Gk08+CbVajc2bN0Oj0dSYhlartSLbREQkZ1ItVSQq\nSOXl5eHmzZs1HtO8eXO4ubkBuBuglEolvvrqqwbZ1KfVap1uPSlnLBPAcjkSZywT4LzlkoKojhO+\nvr7w9fUVdcGioiKMGDECABpsgCIiImlI2ruvqKgIw4YNQ3FxMT7//HMUFRWhqKgIQEWgU6vVUiZH\nREROTtIgdfz4cRw5cgQAEBUVBQAQBMHiOysiIqL7kTRI9erVC7m5uVJekoiIGjD2CyciItlikCIi\nItlikCIiItlikCIiItlikCIiItlikCIiItlikCIiItlikCIiItlikCIiItlikCIiItlikCIiItli\nkCIiItlikCIiItlikCIiItlikCIiItmyaZB68skn4evri2+++caWyRARkZOyWZBasWIFVCoVFAqF\nrZIgIiInJ+nKvJWOHj2K1atXY+/evWjbtq0tkiAiogZA8ppUYWEhJk6ciPfffx9+fn5SX56IiBoQ\nyYPUjBkzEBcXh759+0p9aSIiamBENfctXLgQS5curXa/QqHAjh07cPnyZZw8eRK//PKLVPlzWOHh\n4fbOguScsUwAy+VInLFMgPOWSwqK/Px84X4H5eXl4ebNmzUeExISghkzZmDTpk1mnSUMBgOUSiWi\n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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.html.widgets import interact\n", "\n", "def plot_fit(degree=1, Npts=50):\n", " X, y = make_data(Npts, error=1)\n", " X_test = np.linspace(-0.1, 1.1, 500)[:, None]\n", " \n", " X_poly = PolynomialFeatures(degree=degree).fit_transform(X)\n", " X_test_poly = PolynomialFeatures(degree=degree).fit_transform(X_test)\n", "\n", " model = LinearRegression()\n", " model.fit(X_poly, y)\n", " y_test = model.predict(X_test_poly)\n", "\n", " plt.scatter(X.ravel(), y)\n", " plt.plot(X_test.ravel(), y_test)\n", " plt.title(\"mean squared error: {0:.3g}\".format(mean_squared_error(model.predict(X_poly), y)))\n", " plt.ylim(-4, 14)\n", "\n", " \n", "interact(plot_fit, degree=[1, 40], Npts=[2, 100]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Detecting Over-fitting with Validation Curves\n", "\n", "Clearly, computing the error on the training data is not enough (we saw this previously). As above, we can use **cross-validation** to get a better handle on how the model fit is working.\n", "\n", "Let's do this here, again using the ``validation_curve`` utility. To make things more clear, we'll use a slightly larger dataset:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X, y = make_data(120, error=1.0)\n", "plt.scatter(X, y);" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/al/anaconda3/lib/python3.5/site-packages/sklearn/learning_curve.py:23: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the functions are moved. This module will be removed in 0.20\n", " DeprecationWarning)\n" ] } ], "source": [ "from sklearn.learning_curve import validation_curve" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def rms_error(model, X, y):\n", " y_pred = model.predict(X)\n", " return np.sqrt(np.mean((y - y_pred) ** 2))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.pipeline import make_pipeline\n", "\n", "def PolynomialRegression(degree=2, **kwargs):\n", " return make_pipeline(PolynomialFeatures(degree),\n", " LinearRegression(**kwargs))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [], "source": [ "degree = np.arange(0, 18)\n", "val_train, val_test = validation_curve(PolynomialRegression(), X, y,\n", " 'polynomialfeatures__degree', degree, cv=7,\n", " scoring=rms_error)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's plot the validation curves:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nJf75z3/ywgsvMGPGjFYps7faTQD885//zPfff8+nn37aKpNMs6N60zWt7ptSedpRqAmAis2K7Awo\nRMuYMWMGb731lmtwhtPpZPr06a7zxcXFfP311/z5z39m0aJFrnSr1dpsLciT2vl4hw4dcg1UASgs\nLGx0vzVr1nDeeefx3HPPuaUvW7bM7fhEPoN69OiBruukpKQwfvx4t3MpKSlNfik/Wf3796d///7c\nfffd/Pbbb1xwwQU8//zz/L//9/9ITEwEYN++fQwfPrzZ8tavNeu6zuHDhxk2bFizZah9n4ODg7ng\ngguazR8VFcXs2bOZPXs2paWlXHTRRSxbtkwCIMCf/vQnPvroI9atW9fsP5bo6OhGQ37z8vJQFKVR\ns0J9RRHdoV7NXkn7nbT0uoms1ZV2dD9/D1eePikpKW36+t6Scp66+Ph4goKC2roYreK8884jKiqK\nDz74gOzsbPr168eQIUNc500mE0Cjmt7KlStPqvY3fvx4/Pz8WLVqFRdddJEr/YUXXmiU12QyNZpu\n8N133/H999+7TWyvrfV4E5BHjBhBdHQ0r776KrNnz3Y1F27bto3du3dz1113nfDv5ElZWRlBQUGu\n9w+gb9++BAYGUlJSAsDUqVN56KGHePLJJ3nrrbc81jYnTJiA2WzmxRdf5OKLL3YF+3fffZfc3Fym\nTJnSbFmGDx9OUlISK1eu5JprriEkJMTtfEFBAV27dkXTNMrLywkLC3OdCwsLo1evXl71uVZWVnLs\n2DGP5/r27dvs9c1p8wC4ePFi1qxZw7p16+jTp0+z+UeOHMlDDz2EzWZz/UPbtGkT3bt3P27wjOw3\nAPZ84jruXpBGdL1/8Fp0HASHnsJvcmpSUlJa5A/a2qScojmqqjJt2jT+85//UF1dzeLFi93Oh4aG\ncu655/LPf/4Tm81Gjx492L59O9u2baNr166N7tfc/LiuXbvyf/7P/2HFihVce+21TJo0iV9++YUv\nvvjC1QxX65JLLmH58uUsWLCAsWPH8vvvv/P6668zYMAAKioqXPksFgsDBw7kgw8+oE+fPkRGRtKr\nVy+3fsxafn5+PPLII9x+++1MmTKFa665hvz8fF566SXi4+NbLAB+8803LFq0iGnTptG3b190XWf1\n6tWUl5e7BhglJiZy//3388QTTzBlyhSmTp1KYGAge/bswWKx8NRTTxEZGcmiRYv429/+xvTp07ns\nsss4cuQIq1atYujQodx4443NlkVRFJ599lmuvvpqRo8ezQ033EB8fDxZWVmuuZ4ff/wxZWVlDBo0\niKlTpzJkyBDCwsLYvn07X375JbfeemuzrxMUFNSq/4/bNADed999vPfee7z99tuEhYW5anbBwcEE\nBwcD8PDDD7Nr1y7WrFkDwMyZM3nyySe54447uPfee0lJSeGZZ57hgQceOO5rxSQmuB33KMmgsKqa\n4EBjNJpis6K3YQAUojOZMWMGL7/8MoqiuI3+rPXyyy/zwAMP8Nprr2G32xk3bhxr167liiuu8Lj2\nZ0MN05YsWYLFYuHVV19l69atnH322axevZprrrnGLe8f//hHqquref/99/n4448ZOHAgr776Kv/7\n3//Ytm2b2z2fe+45Fi9ezJIlS7BarcyaNctjAAS49tprCQoKYsWKFTz88MMEBgYyefJkli5d2mjS\nflPNq801uw4ZMoRJkybxxRdf8OabbxIQEMCAAQP4z3/+41ZrW7x4MYmJibz44ossW7bMla9+IL7v\nvvvo1q0bL730EkuWLKFLly784Q9/4MEHH3QbKXu8co0dO5bPP/+cp556ildeeYWysjKio6M588wz\nXaNcg4KCmD9/Pl999RWffvopDoeDnj178thjj3kcpXu6KcXFxW3W/RUREeHxzV28eLHrW+Mdd9zB\ntm3b3KrL+/bt47777mPXrl2Eh4czd+5ct74ET9QjByj++0PEldUNxf352vtJHmjUOvWgYPSYhKYu\nb3UdpcYi5RRCdBZtWgOsP3y3KZ7m9w0cOJBPPvnEQ+7jy41OcguAVelHoSYAKjabDIQRQggf0q7m\nAbY2W1yi23FAVmrdgcMOmhMhhBC+wacCYGgv90Ey3XNlRRghhPBVPhUAY3vG41DqhhDHVORRVlLu\nOpYVYYQQwnf4VAAMMPuTFuFeC8xJrTc50Cq7wwshhK/wqQAIUBDd2+3Yln607sBuQwghhG/wuQDo\njE90Ow7KOuJ6rtis4MWmlEIIITo+nwuAXXr1cjuOzz9cF/R0XWqBQgjhI3wuAMbFRVNpqtuzq4u1\njOL8wroMNukHFKeHVUYdC9GmfC4A+vupHO3qvm9YQWpdP6AiWyOJ0yQzM7Oti+CVpjZfbW+knC2r\no5TzVPhcAAQoinUfCOPIqDcQRgKgOE0cDkdbF8ErTa3G395IOVtWRynnqfDJAKg0GAgTmt1gIIwQ\nQohOzycDYESi+1zAhPxUdGfNMmhOJ3SQb+ZCCCFOnk8GwLiocAoDuriOLU4rxdnZdRlkIIwQQnR6\nPhkA/VSFtG7uA2GK6q0II82gQgjR+flkAAQobTAQRs9IrTuQACiEEJ2e7wRAP/ddjv0SEt2Ow3Nk\nIIwQQvgSnwmAuiXQ7bhbYg+347iidHRbzSowdhto2ukqmhBCiDbgswEwLjyIY8ExrmOTrlGUkVGX\nQbZGEkKITs1nAiAB7gFQVSAjyn0gTMnRehPiZZkqIYTo1HwnAJoDwOTnllTZ3X0gjHqs3pJoUgMU\nQohOzXcCII2bQc0J7hPiI3MO1x3I5rhCCNGp+VQApEEAjOmZgEOpewtiynLQKisAUGRbJCGE6NR8\nKgDqliC34+4h/qR2cR8NWnS0ZkK8psnegEII0Yl5FQCrqqpYuHAha9asae3ytC5zAKh1v7KiQFaD\ngTDlabIzhBBC+AKvAmBgYCAfffQRJSUlrV2eVtewH9DaPdHt2O9Yquu5TIgXQojOy+sm0BEjRrB3\n797WLMvp0aAZ1NKzl9txdO5h0HXjQBbFFkKITsvrALhs2TI+/vhj/v3vf2Ozddy+sYY1wPiEGKpN\nZtdxl+oStJIiAJQO/HsKIYQ4Pr/msxjmzZsHwOLFi/nLX/5CbGwsgYHuwURRFHbs2NGyJWxpZovR\nD1iz1Fl0gMrvEb0Zkn/AlaUw9SjdhkeCww5OR6P5g0IIITo+rz/Zu3XrRlRUFH379m3N8rQ+RUEP\nCESpqqg9JDc6CeoFwKr0ozB8hHFgs0GgBEAhhOhsvP5k/+STT1qzHKeXJRBqAiCAPS4Rfqs7HZCZ\n6nqu2KrRA937DYUQQnR8PjUPsJbeYF3Q4AYDYWLyU+t2g5CRoEII0SmdUNue3W7n9ddfZ+PGjaSl\nGRPGe/bsyZQpU7jxxhvx9/dv5g7tRIDFaPusGe3ZMzaCYnMI4bZyAALtVZTnZ6NGx0kAFEKITsrr\nGmBxcTEXXnghixYtYs+ePURERBAREcGePXu49957ueiiiyguLm7NsrYcVUUPsLgOu5khJbKPW5bC\nVCPAK3Zb3bQIIYQQnYbXAfDhhx9m3759rFy5kn379rFhwwY2bNjA/v37eeGFF9i3bx+PPPJIa5a1\nZTVoBi2IdV8RxppesyKMrsuSaEII0Ql5HQDXr1/P/Pnzuf7661HdlhNTuO6665g3b16HGijTcGCL\nFpfodhyUdaTuQCbECyFEp+N1ACwpKaF3795Nnu/du3fHWiqtth+wRlhP90WxYwrTjHmAyJJoQgjR\nGXkdAJO5o4e7AAAgAElEQVSSkli/fj26h/4wXdf55JNPSEpK8nBlO6Wa0M0BrsOkbiFkBkW5jv00\nJ46sDONAAqAQQnQ6XgfAefPmsXnzZmbMmMHGjRs5fPgwhw8f5rPPPmPGjBl888033Hrrra1Z1pZX\nrx8w3E/ncFf3AF5cszWS1ACFEKLz8XoaxNy5cykoKODpp59m8+bNrnRd1zGbzfz5z39mzpw5rVDE\n1qNbAlFKi1zHxTG9If0717EjPRW4AJxOoznUr4NM8xBCCNGsE5oHuGjRIubOncvmzZtJT08HoEeP\nHkyYMIHIyMhWKWCrarAwtp6QCD/UHYdmp9Yd2KwSAIUQohPxKgBWVVXxz3/+k3POOYeJEycyY8aM\n1i7X6WHyA3+za5pD154JaCioGP2cUSWZVFZXgSUQxWZFDwppy9IKIYRoQV5viLtixQoyMjJauzyn\nXf3pEH26mDkSluB23pGRajyRfkAhhOhUvB4EM2TIEA4fPtyaZWkT9dcFDTXpHGkwEKbENRBG5gIK\nIURn4nUAXLJkCa+//jqfffZZa5bn9GuwQ3xZrPtcR+1YzYowdnvdAtlCCCE6PK8HwTz33HNEREQw\na9Ys4uLiSExM9Lgh7nvvvdfihWxVfn7g728EOMCUkOh2Ojy7Xq3Xbm20hJoQQoiOyesAuH//fhRF\nISHB6COr3Q2iPqXeyiodiR4QiFITAKN6dMeq+hOgGcddKouoKi1GDwsHqwRAIYToLLwOgHv37m3N\ncrQp3RKIUl4KQN9gOBCeyNDCFNd5W0Yq/oOGo9ityL4QQgjROXjVB1hVVcUTTzzBpk2bWrs8baNe\nP2CQCTK6uQ+EKa0ZCINVBsIIIURn4fPTIABjLqCprjJc3t19IIx6LBWo2RtQCCFEp+Dz0yBq6fVW\nhTE3GAgTmXvEGAGqaTIfUAghOgmZBlFDr9cMGh8XSZl/3XGgrRKlMM84kFqgEEJ0CjINola9GmBy\noM5vEX0YlVs38MeWnop/txhjSbTg0LYooRBCiBYk0yBqmQPAZAKnkwAVMqOSoF4ALEs7SuSIUbI7\nvBBCdBIyDaIePSAQpbIcgOruifBr3Tn/zFQAFJtNpkIIIUQn4HUfoE+o1wwa2KOX26nI/DRwOIx9\nAZ2O010yIYQQLeyEAqDNZuONN95g/vz5XHnllezZsweA4uJi3nnnHY4dO9YqhTxd6o8E7RUdRk5g\n3R6H/k47Sm7N72eTgTBCCNHReR0ACwsLmTBhAnfddRfffPMN33zzDcXFxQCEhYXx+OOP89JLL51w\nAbZt28asWbMYNGgQERERvPPOO8fNn5aWRkREhNsjMjKyZSbpmy2gGm9J7wAn+yL6uJ2uTjcWxlbK\nS079tYQQQrQprwPg0qVLSU9P59NPP2Xbtm3oel1PmKqqTJs2jc8///yEC1BRUcHgwYNZvnw5QUFB\nzV+AMdjmww8/5ODBgxw8eJADBw5w/vnnn/Bre7ixa3skswo50e4rwlSlpRrZKsqM5lAhhBAdltcB\n8NNPP+W2225j1KhRHkd79unT56RWipk0aRJ//etfmTZtmtejSHVdJzw8nKioKNfDz8/r8TzHV68Z\n1BbnviJMQM1AGHQdpbSoZV5PCCFEm/A6AJaVlbmmQHhitVpxOp0tUihv3HjjjfTt25cpU6awZs2a\nFrtv/X7AkB493M5FFGW61gNVyoplf0AhhOjAvA6ASUlJ7N69u8nzmzZtYuDAgS1SqOMJCQnhscce\n47XXXuP999/n/PPPZ+7cubz//vst8wIBgVBTE00ODyA1JM51SkVHzaqZ/6hp0hcohBAdmNfthrNn\nz2bJkiWMHTuWiRMnAkZfXGVlJU8++SSbNm3i2WefbbWC1oqMjGThwoWu4+HDh1NUVMQzzzzD1Vdf\n3eR1KSkpTZ5rKKAgB9VmRdVhX2QfEsszXeeyf/mZapNRS9QzM6mOincFzFN1ImVsS1LOltMRyghS\nzpYm5Tx1ffv2PeV7eB0Ab7vtNvbv389tt91GaKixFNjcuXMpLi7G6XQyb948brjhhlMu0Mk488wz\nefvtt4+b50TeLKVbBEpxAQC7YpIgbYvrnKWkiOh6TaNaVCyEhJ1giRtLSUlpkT9oa5NytpyOUEaQ\ncrY0KWf7cUIjR1asWMF1113Hhx9+yOHDh9E0jd69ezN9+nTGjh3bWmVs1s8//0xMTEyL3U+3BFJb\np9PiE2Fn3bmgrFS3vEppEXoLBEAhhBCn1wkPnRw1ahSjRo1qsQJUVFRw+PBhdF1H0zQyMjLYu3cv\nERERJCQk8PDDD7Nr1y7XQJd33nkHf39/hg4diqqqbNiwgVdeeYWHH364xcrk6gfUdcLj47ErJvx1\nY4BPWHk+leWlrlqfYq1Gr6qEQO+mcAghhGgfWmjuwMnbvXs3U6dOdU2BWLZsGcuWLWPWrFmsXLmS\nnJwcjh496nbN008/TUZGBqqqkpyczMqVK5k5c2bLFUpV0c0BKNZq+oYqHAxPZHDRobrTx1LR+g91\nHSulhegSAIUQokNp8wB47rnnUlTU9Jy6559/3u141qxZzJo1q7WLZcwHtFbTI0Dj88g+bgGwMv0o\nlvoBsLIC3WY1dpQQQgjRIchi2E2oXRHGpEBxTKLbOUdGaqP8SknhaSiVEEKIliIBsCn1JsST4L4i\nTGjWEdDdN0WS5dGEEKJjkQDYFJMfek2TZlRsFOV+9bZKslagFOW755fl0YQQokM55QCYnZ3NgQMH\nWqIs7U9NLbB/sM7+CPeFsZVjqY2yy/JoQgjRcXgdAF977TXuuOMOt7RFixYxaNAgxowZw/nnn09B\nQUGLF7At6RZjZGe8WeNgpHsArKzZGcKNLI8mhBAdhtcB8OWXX3bbrmjLli2sWrWKmTNn8uCDD3L4\n8GGefvrpVilkm6kZCKMoUBrrHgB1DzVAAKWkqFH/oBBCdAiaZiz4X1XZ1iU5LbyeBnH06FFmz57t\nOv7www+Jj4/nX//6F6qqUlJSwocffsiyZctapaBtws8P/P3BbscvoZfbqbDcNOxOJ5hM7tc47FBR\n1iLLowkhRKvQNLDbwG5DsVnBbkWx28Bud2XxLyk2vsy30FrH7ZHXAdDpdOLv7+86/uqrr7joootQ\na3ZQT0pKIjs7u+VL2MZ0SxCKvYS4qC7kB3Shm9Vo4vR32HDkHkPv3rPRNbI8mhCiXdB1I9DZagKc\nzYpitxoj1ptpqfKrLEPJPYYe1R1U03HzdlReN4H26tWLr7/+GjBWb0lNTXXtCgGQm5vrWiS7M6nd\nH3BAkMZvkclu50x7dni8RvGhJgQhRDug62CzQkUZSlE+Sm4masYR1KMpqMdSUfOyUIoLUCrLjVqe\nl900SmUFSla60bLVCXldA5w7dy6LFi1i//79ZGZmEh8fz8UXX+w6v2PHDgYMGNAqhWxTNf2AMf4a\n/0s4h/OzfnSdMu3ehmPCNAiwNLpMKZHl0YQQrchuM+YfV5YbzZitNPZAsVlRMo+iRceBpXN9pnld\nA5w3bx7PPPMMSUlJXHrppXzwwQdYLMYHf1FREXl5ecfdj6/D8jeDnz+KAsf6j6IwoK5p02Stwu+n\nbR4vU6oqjG9kQgjRUmxWoyZ3LBU144hR27NWt/7AO6cTNTsDOtko9xNaC/Smm27ipptuapQeERHB\n5s2bW6pM7Y5uCUQptzM6Av6XdDG37vuf65xpxyYc54wHtfF3CaWk0Gg/F0KIk2WzolSUGbU9u63t\nyqHrqHnZ6DYbemRU25WjBclKMF6oXRd0coSNjckXYVfqOoRNRXmYUvZ6vE6WRxNCnBRrNUpRvtGP\ndyzV2KC7LYNfPUpJIUrOsU6x6McJ1QC3bNnCW2+9xdGjRykuLkZvuB6morBjh+eBIR1azUAYiwrj\nEwLZ2GMcl6V94zpt2rEJZ/9hja+rWR6ts3xbEkK0Imu1UdOrLHObjtAeKZXlkJ2OHh0Hfv7NX9BO\neR0An332WZYuXYrFYiE5OZlu3bq1ZrnaF3OAMd/P6eSqrlb+0vcStwDod2Q/9pxj6DHxjS5VyorR\nwyM77TBiIcQpsFbVBL3ydh/0GlKs1SiZaWgxca7Bgh3NCQXAUaNG8d///pcuXbq0ZpnaJT0gEKWy\nnHA/nd5J8ezaM5Az8/e5zvvt2IT9ihsbX6hpKGUl6F0iT2NphRDtlWqrRinMRako7/jTC5wO1OwM\ntG6xENzxpsF53QdYXV3NNddc45PBD4B6Uxqu7Wblv8mXuJ02/bzDWAHGA6W0WJZHE8KXaRpKaRFq\nxmECCnKMJRM7evCrpWmouZlGP2UH43UAPO+88/jll19asyztml6vit8jQMPZfxiZQXV9e6rTgd+P\nWzxfXLs8mhDCtzjsKIV5qOmHUApyO1wz54lQivJR8rI61OAYrwPgU089xbfffsuKFSvIy8trzTK1\nT+YAt6kO18XYea/PZLcsyvdfNznqU/YKFMKHWKtQ8rKMuXolhR0qKJwKpbwUJTu9w4x+9zoAxsXF\nccMNN/DYY4/Rv39/YmJi6N69u9sjLi6uNcvathTFrRY4OMjJwYHnU2kKcKX5lxdj+m2X58tleTQh\nOr+KMpSsNNTMNJTyUp/s+lCs1ahZaR1iIRCvB8E8+uijrFixgri4OIYPH05YmA8u9mwJhKoK1+GV\nCX6s6zWeaw5/Vpdn+5dwxjkeV1CX5dGE6IQ0p1HzKS3q1E2cJ8RhR81Ka/eDY7wOgK+99hqTJ0/m\n7bffdu0A4Wt0SyD1w9rYUDuLB17sFgADslKpzjiM1qNPo+uVqgp0m9VoThVCdGwOO0ppEUpZic80\ncZ6QmsExekQ39PCubV0aj7yOZHa7nYsvvthngx9gzHWp9/urClzQJ5KtsSPc823f1OQtlJLC1iqd\nEOJ0sFa5dltQSook+DXDNTimHTYHex3NpkyZwrffftuaZWn/FAW9wc4Pk8JtrOs3xS3NvG9Xk4FO\nlkcTogPSdaN/L/Oo0b9XUdYuP9DbK6W8tF0upO11ALzvvvs4cOAAd911Fz/88APZ2dnk5eU1enR6\nDVY8CFCh9+D+HA6tWwVG1TWU7zZ7vr5meTQhRAegOVFKCo01OXMzjcFs4uS0w+8LXvcBjho1CoBf\nfvmFN998s8l8hYWdu4lPtwSh4D7h88puNl7veyn37/q3K039cSva+Ms89vfJ8mhCtDFNA80JTqfx\nU9PA6URxS3OiVFdJE2cn5nUAvP/++1E8jGz0OQEWY4RnveaPUJOOMnwkxb+8Q7itHACztQJtz3do\n55zf+B6yPJoQJ0fXax6aUaPQNVeaaqs2FpzQnChOp8cgp9Q+l+ZLwQkEwD/96U+tWY6OQ1XRzQGN\nmkJmxMJHvS9kzoE1rjTn9k0oZ5/neUpEaTF6WITHc0J0Gk6HEYBqfipOh/Fc044bzBTXuZrz0GxN\nLKAgBzXI3Pq/k+g0vAqAlZWVjB07lgULFrBgwYLWLlP7FxIGDQJgrFnj2LAJOA6uxa/mP2xwYRbV\nh/ahJQ9qfI/a5dFCfHA+pejYNKcxkKumNqU4HTXHDleNS3E4pKYl2j2vAmBQUBAlJSWYzfLtCkAP\nCUMpym/0jfSy3iFsih/NxRnbXGnWbV/i7ykAYiyPpksAFG1F1+v6v+r1g6FpRl9YTZq5MBcl01zX\nfCh9YqKT8LoJdNKkSWzcuJG5c+e2Znk6BtWEHhxqTICtp1+gkw1nXOwWALsc/oWqvGz0qNhGt1Gs\n1ehVFRAY3OpFFp2cphmtCrVBqnZAR/3g1rAfzMtAZrJWyehH0Sl5HQDvuece5s6dy5w5c7j55pvp\n3bs3gYGNN0GMivKN3c/1sIhGARBg9KAe/LIjmSFFv7vSrNu/wjxtlsf7KCVF6BIARXNqmx0ddhSH\n3Qh29Y+dzrYuoRAdjtcBcOzYsQDs37+fjz/+uMl8nX0ahIs5wFgarbrKLXlkiIN/D5zCkG3PudKC\nft6GY9I0jzU91/JowrfV9qO5ApyjJsjVHEuzoxAtTqZBnAI9NLxRAFQU6HXmMHJ3RRBdbUx4Nzts\nVP2wDf/zJnm8jyyP5kN0HWzVKFWVmAtzUTP86kZFCiFOK5kGcSqCQ6Ewz/gAq2dipMYHfS/m5r3v\nutLU776CsRPB1Hjyu1JRZoyaE52PrhtrR1ZXQXUVirVuYrXJWgV2WxsXUAjf5cMrW7cARUEP7dIo\n2V8F/3POpVr1d6WFlheg7fvJ8310HUt+Vs3IUunL6dB0HaorUYoLULLTUdN+R81KNxYErqqQmp4Q\n7YgEwFOkh4Z7nMw+Od7M573Oc0ur/Par49xIRykuQM04AqXFMn+qozhuwKuUgCdEO+Z1E6hogp8f\nelCIsTp8PcEmKDj7QjhStzVSdFYKFcdSUeITm76f04lakAOlRWgR3dr1ZpI+SdPAWo1SXWk0bVqr\nJcgJ0UFJAGwBemh4owAIMKFfFN9Hn8HI3L2utOItm4m4bk7zN7XbjM0kLYHokVGNdqEQTdD1mpVI\n7FA7ulbXgdpltaj3XPd4XvF0Xq8JfNZqqZ0L0UlIAGwJgUHG+qANpjNE+et8PWwSIz+vC4AxB7/H\nVjodwhr3HXqiVFehZKahB4eiR3QDfx9djaepNSWdTle6UnsMWPIyUS2y24YQomkSAFuIHhqOUpDT\nKP3MM/uTti2WnhXZAPhpTrK3f0Pk5KkndH+logylshw9LNzYRcLUSf50DjvY7fUCWMOgJqv3CyFa\nRyf5FG0HQsKgKK9Rf1BSIKwbfDE9v3/DldZl9zcwcQr4+ze8y/HpOkpJkbGVUnjXjrmbhNNhTAeo\nqjD60ez2ti6REMJHySjQlqKq6CGemzV7jB5JuV9dH15odSklP/1w8q+laSiFecaI0fLSk7/P6aA5\noaIMpSAX5VgqatohY2ftshIJfkKINiUBsAV5mhMIMDTCn6+TJ7ilKdu/PPVmPYcdNS8LJfMoVFWe\n2r1aiqZBVQVKYS5K5lHUo78bAa+0qFEfqRBCtCUJgC3JHIAeGNQoWVEgYMwFOKlrrowtTKfiUEqL\nvKxirUbNTkfJyagb+Xi66DpUVRrz3rLSjHlw2RlGU63sICCEaMckALYwPTTcY/rInuF8l3C2W1rp\n1uNMjD8JSmUFauZRYzBOay2tVru0V/2J39npxnF1lQxWEUJ0GDIIpqUFhYCfvzG6sR4/BcrOmQgZ\nO11pvVN3U5yXh6Ult5DSdZTSYpTyUnS3uYN6o3zHPfZwX4DAnHRUfwlyQoiOT2qALa2J9UEBzh7S\nm5TwRNexik721m9apxyaZoy0dD0q3R/VVe6PmkneTT5sVqMPT2p4QohOQmqArUAP7YJSXNAoWASa\nFA6PmETfr/7tSkv8dQuOSy493UUUQvgqTTOmIlWUoVSU1vw0HtSm2axEBYahaueh9UgCtXPWlSQA\ntgaTH3pwKIqHKQqDRw6ncFsXIq3GbvJBjip+2f4dfsl9TncphRCdhd3WOIiVNxHgKstQvFi/tivA\nLzvQg0Nx9h+GY8BwtN4DTnz+cjsmAbCV6KFdPAbAyEA/vhs0gQm7P3KldftxE0W9e5/O4gkhOiJd\nRynMRT12FDUzFTXzKGpORquOuFYqyvDbtRW/XVvR/QNw9h2Mc8BwnH3PAA+j3jsSCYCtxRKEHmDx\n+A8z4dxzsf+0Fn/dWLcytjyHw0fT6ZXY63SXUgjRXtUMaFMzU1GP1QS7zKPGCkptRLFb8fttF36/\n7UJXVbTE/kYw7D8MvUtEm5XrZEkAbEV6aBePATC+ayi7ksYw6tBWV1qXX3eiXzAOhQ62tJkQomVU\nltcFumOpmDJTPbYitQTdbDEW2A8ORQ8JQw8Ohdrj4FDQdKr37CAs41CTtUtF0zAd3ofp8D5Y/w7O\nuEScA4bhHDAcPap7h1imUQJgawoOg8LG64MCBI2bAPUC4ODc/Xx38Bi9k+IJ9kMCoRCdmbUaNSut\nJuClGk2axfknfTtdNTUIYmF1Aa42qLnSQ7zaVSYrojv+3bujph7EtP8nTAf2oJYVN5nflGkEbTat\nQYuMNmqGA4ajJfRut4NoJAC2JlU1aoElRY1O9UlKYH90fwbkHqjLvu0LcqJnYfH3o0uAKoFQiM6g\nohw1J8N4ZGfQ+2gK5uICY9/Jk6AHWNDieqHFJaLFJ6LFJRrNj61R4/LzQ0sehJY8CPul16FmHjWC\n4f6fUPOzm7xMLcxF3bYR/20b0YPDcAwYhuOc8ThHT2xXNcM2D4Dbtm3j2WefZc+ePWRlZfH8888z\na9as417z22+/sWjRInbt2kVkZCSzZ8/m/vvvP00lPjF6aLjHAAhQNfIiWFcXAM9J3U7+i/tJGXwB\ntrNHUxIaRniASrBf+/kHI4RogtOJUpCDmp3hCnhKzrFGtaYT+dDV/fzRYnvUBLpeaPGJ6JHRbVOj\nUlW0hN5oCb2xXzQdJS8b0wEjGJoyjjR5mVJRiv+PW1BzMqgac+FpLHDz2jwAVlRUMHjwYGbNmsXt\nt9/ebP6ysjKmT5/Oueeey+bNmzlw4AALFy4kODiYhQsXnoYSnyB/M3pQMEplRaNTySOGkPNVN2Iq\n6po+ulUV0e2Hj7DtWkdK0jkUjDyP4vhECYRCtCcVZa4anZpzzAh2eVnGnpYnSVdU9Jh4tLheOGtr\ndtFxYGqfGzvrUbE4oqbgOHcKSmkxpoM/Y9q3G/XIARTN2Si/44xRbVDK42vzADhp0iQmTZoEwB13\n3NFs/vfee4+qqipeeOEFzGYz/fv35+DBgzz//PPtMwBSUwv0EABNJpXciVfTdd2L+Onu/YRmzcHg\n37fD79s5FpVE2dkXUDJoBF0CzRIIhThdnE6U/Gy3Jkwl5xhqeckp31rrFluvKbMXWmwPr/rm2iM9\nLBzH2efjOPt8qK7ClPKLUTNM+QXFZgyicQ6VAHjKdu7cyZgxYzCb6/6hXHjhhfztb38jLS2Nnj17\ntmHpmhAUYkwe9bD/XZ+zhnMoail5X3/BmanfE+RsvJtDfN5h2HCYss0fUDJsHBVnnkdwZIQEQiGO\nR9eNNXlrlvMzflYZH8j10xoeW6vAVm0sEViUf0q1OgDd5Ice1R0tJgEtJp5sUwDdhp0DlsDmL+6I\nLIE4zzgH5xnnGFu2HTmAKfUAWnxiW5eskQ4XAHNzc4mPj3dLi4qKQtd1cnNz22cApKYWWJjn8Vxc\nzxiyxozn14uvoODHHxny6yYSKnIa5QutKiF0x3qc331GYb8RFJ49HktiH4L82+cIKyGa5HSC3QYO\nO0rNT+x2FIfN+Gm3Qe1zh/24eWvTe5aXYUFzD2Z68yuetCQtNNxoxoyJR4vpgRYTj94t1q0ZszI9\nvfMGv4b8/NH6DkHrO6RdDX6p1eECYEelh4QZ64N6mBJhQiHKrNMlPJjQ888lc+w4tv76O71//opR\nOXsa59edRB34AQ78QFl0T8rPHo9p6DkEWjpm84noIDTNWHLLWlUvyFTVqzk1PK6qS7NZ3c+dYq3K\nk9O5JomrVhebUFOzM2p3BIeexlKIU9XhAmB0dDS5ubluaXl5eSiKQnR0dJPXpaS0zOazp8JcnI+p\nqnFfIIBJgfLcY+g6qBrExYRScNGVPFN4OT0O7mTy0W8IdjSekBqam0bo+jeo/nI1eX1HUD7wTJSw\nsFb9PdLS01v1/i2lI5Sz1cqoaagOG6rdhlpTW1LtNlSHveZnE+k155R6x31q0+1Wn5yUYw8KxRoZ\njTUyhuqan7YukaA2GJxSWGw8vNAR/m1Cy5bTXlKBowW/IPTt2/eU79HhAuDIkSN56KGHsNlsrn7A\nTZs20b179+M2f7bEm3XKrD1QM496PJWWnk7PHj1cxzo65XboG6dRPjCO1wquQP/5e6ambKRXeVaj\n6y3WCnr8shXt121U9huONnoCfol9W7zZoWE526t2V05dh8pylNIi1NIilNJiSjPT6RIcbDQHak5j\nwEXNT+r9VBocN5UPp9OoWdmsrVLD6oh0kx8EWNADLGCu+RlgMfbKNAegBwSiBwRAQCC62VKXN8Bi\nrJYSFg5BIahAYM3jVLW7f5tNaOlyal1jIMzzhuFtpc0DYEVFBYcPH0bXdTRNIyMjg7179xIREUFC\nQgIPP/wwu3btYs2aNQDMnDmTJ598kjvuuIN7772XlJQUnnnmGR544IE2/k28UPOfy5uFaxUUQv0h\n1N9EhUPnEn+Nsq4jWXv2uWQdOMSUgxsZl70btcFkWlXXCDmwCw7swhqVQNXgs3EOHIFfVAz+qi9+\nfz8NNM0YFl9ahOL2KHZ/3iAodWuj4rYHuqIYIx79zOj+/sYm0v5mdD9/Y8CYK72Z8/XukVNUTHSP\nnvWCWYBxnRBNUIqLi9t0h9OtW7cydepUlAY1lVmzZrFy5UruuOMOtm3bxk8//eQ6t2/fPu677z52\n7dpFeHg4c+fOZdGiRae76CenvAQ1r/EKCt5826p26pTaNcrsOtvKA/ghvZTxB7/kitRNhDiqjnut\ntWssFX2HYes/AiW+FwF+CuaTCIgd/turrhsPzWkELk2rV6vSGqdrmlHbcjhQyks8B7iyYq+2l+kM\ndP8A91pUQEDNz9qaU2DdT3OA69g9j8UITNI60a75Qg2wzQOgz9F11PRDRrNVPSfyj82m6ZTZjGD4\nXUUAG/NUhh3axrWHNpBUdqz560MjKE8eSnnf4WiJyQT4+WMxgdnU/NJrp/U/r1Yzoq+60tjAs9rY\nyZ7qygbP637W5nXarfih1AtoNc2JvhKoUMAcAGazURsyBxgByRyA7h/gftzgp/G85hp/M8cKColL\nTDICVztd0xF8N7C0Fl8IgG3eBOpzFAU9pAtKSeFJ38KsKnS1KIQHKISb7YwO1tgVPYrFA8bT7dgB\nrv19A+dn/dioedR1fVkRkbu/JnL319gtwVT0OYOyvkOp7DUQsyUAi0khwKQQ4EVAPCmVFaj5WSh5\n2agF2SgV5Y0CmFJdaQS/k1wvsT1+TBt9ShHoYeHoYREU6wphXbsZgylMJtdPvcExqgm9wfFx85kt\nRq+Yw4oAABzSSURBVDNhC9WwHFZnh9/3TQhPJAC2AT0sHKW0yGiKOwUmRSEiQCEsQCEiwMnI4FJ2\nR/bgpR738ERxGeMzv2f8sZ2clf9ro5VmavlXVxD+6w7Cf92Bw89MZe9BlPUdRl7SEHRLEGaTYgRE\nVSHghBYx1FHKSlDysuqCXX4Wal6WsTN1J6MHBruCmxYW4Rbo9LAI9NDwRnO/8tPTCeoANQEhOisJ\ngG3Bzx89MBilsrxFbmdCoYsZwswq4RaNs0JKONDVxO7u5/H0wAspKLdybtYuxmd+z9icn7A4bZ6L\n5bARlvITYSk/oakmyhL6UtV3GGV9h1ISYjRd5FoV1HJnXeVC0/AvKcBcmI25IBtzQRbmgmz8C7Ix\n2Vpvl+pToSuKUVtSVQ8/VVDqnusmEygmUFWcwaE4Q8NxhkYYj7Da5+HoDZaw8vjdptr9S0iJAwqt\nGiYFVEVBVah5XvdTdgMRovVIAGwjelh4iwXAWgoKIX4Q4mci3KwzKKiKGc5KSpwKP8cNZ/WgkSwr\n0xmatZcJmd9zXtaPdLF7npeoak66pO2nS9p+Yr98l+KY3lj7DcWJHxGHd2EuzCagIBtzUS6qo/ES\nby3FabagBQTiDAhEswTiDAgyngcE4rQEodUeNziXU1hEVExsTdOhaiw0rJpqokorNJDaT7xvsdKp\nUNbMdQpGTV+tCYiqoqACJtV4blJq8+DKUz9mKjR+LkFVCIMEwLYSGGwM4bZ7ro2dqiA/hSA/E050\nujogxmzjvFArzij4Pb4vP1YO4fWKeXTLTGF85k4uyNxJbFVBk/cLzzkCOUeIaYGyOVU/SsNjKI2I\npSwijqrQCOwBQdhrApjdHITDEojTbEFRTSg1H/J1D72mdmQ8VIwnqjH0AwXIr1TQzF3cX1gHGi9S\n7zEcNJWmKrrb6xrlqJemGOkKLdMFpwMOXaeuK7T1xqw1Vdwcq4JSfvx5hScaVE/mvWl4TcNb5NsU\n/Csb/4Gbei1vi2BSFNffs/ZvrNSkqfXTGuUBVb5stGsSANuQHhaOUpDbfMZTYKpXK3SiU+WAYD8n\n/S0VXBMJhd3j+HnQ1TxUcT2OzHTGHtvJhMyd9PZiNGlzKvwspIbGcyQ0niNhCRwJTeBIaDyZwdE4\nG66iUcsJVNU8TklXyDjVe5y62qDsHrB144NSiyA0HUJMOmEmjRBVI9SkE2rSCK19rmrGsUknUNFb\ndTnFpkKrVvM4uatbJrs319h1Y4R0yzu1e9Z9OVJQFO8CtTd/5tr8tV8+PNb2G9yz7pq61IZptUG8\n2mlMverMTfISANuQHhKGUpTvcX3Q1uApGFrsGpF+1YwPrcYRE07KwEt5tepKCrLzGJC2mwnHvmdI\n0e/HvW+RObQmwMUbQS4sntTQeHICu7bLBXBPJ63mA8Pp9hmq1HymqlQ4AC8XbTFRGxx1QkxaTdA0\n0mqfB6s1fYo113iqoR6vJq3Uy197XKz7YXaorny1AaH+B2fDD9+GH8B1za+6W56WrjG3R3rNQ6up\nybd8oG6dVoEih0JAlXugNv5dKKhqXZO7Sv3+a8X1N61rtjdq0e2RBMC2pJqMIFjq3fqBLalhMKy0\nQ6VDY2CgnYGBdogMIr/feXxdeSFv5JcTc3gPZ+buxey0czQ0jtTQeA7XBL2SgNZde1QYnCgUO00U\nO4HW63b1oCucpqUrG9aYXc3a9QJl/aCu1junOcPwSzeB0iAI1/tZ10zpHohd+Ro0t/srOoFqvYei\nEajqWNzSap9rRrqi4690zoBu9CLoOLWGqc3rEqrR3j4pJAC2MT00vE0CYH2mesuuOXWdSocRDLuh\nMTGsGsL8sPc+i9+rR5NWWEJolwi66RCBwjAdnHo5ToxajlNXcAIOXTGOqUnTjQ/w+mmOmjRNr/uW\nrFOzWAsKmttxvW/SKG5pWr1rjG/a4NScmJpqZq3H03/d4zUF6rri9rpag9d1laeTNRWdLo1rzDXv\no1efsSava9OtzYTnwBmo6thsfgTnWerVuGsDuW7UnGgY8Bv3Ozf8YmBSdEyAn6JjUsBUm6aAHzU/\nFaNcJqVxfr96+U3o+MpWoxIA25o5AL0d7Q1mUjwHQ5w6AwPtRJhKiQ1p/5Ois7OziY2NbbPXbxS0\n9brAWHucmZtHcNcYypwqZZpS81OlzFn3vNypUFrz3Kb7yKdSJ+BEoVxTKPfYu2GBlh0A3ir86Epw\nGm7BO6im9hukam414CC1rhZcmy9Q1bEoRjN7eyUBsB3QwyLauggeeQqGZSadEL+6NWY0dNecN7fa\nWm2abuxsURsIfEXtN/u6hNonde9CmOLg/7d390FR3Hccx997d8ijhFMQQcQnVB7MaKSNYp4Mk9bY\nxAgapyVJY+IUW7TJmPEBJXbUahQ1oplETX1qzFTRWI0mpKFNGxIhMNFORmva6ohOYogNYhCVBwVu\nt3/cA3fcISQR9uC+rxlk73fL8cW73c/+fvvUv5cFj4emenBTxRaK1pC8Zp+2h6fFQL3auufs3pN2\nDuK2etKq03PNFhWD0f6e2/YCOh2Y6vy+Or/Pzp8LnH6nYz7pMXu1ZgxctcDVH3hdpQBbgM5A5Qkv\nuwK8BKA3CApBM3n3W2EPw1AT9A34YQuEagtEWoWlrcmFpxPKPQ5btlrZ3jRpRAS0DIHervB1CXfH\ntOby2DkAXFb4ThsLAH4KmBQFi6Z1qD5/A/gbVMJNXXs9067qTTsPhXvqMTuHtOoU4PaAv1R1mfDw\nCNcQbj2ttYStp+ec2zWgUVO4oSo0qAoNqsH63aXN9qUZXB5bJNAdbmgGblig2Qu3gL17resrFIUb\nEQNQoweiNNRZ7xvXgVsmdVeOc6NaH6VwGwUYredCdo3v93tu9tIYEGwNaQ3Nun9Ute3DxD5ta9c0\nayjYpr1wXfKDuQyVeegxu3Jv1wyNth61vjTNeqRnS1A6haOmUF1zjd533OES3vZ9yfZTTlp6x4rb\nfKqHjQL7fvZmT/vZbfvlLZpCM9b9q81Obfb989Z5W6Zvd688qP1d8l1OAtCb2G8XE9YXrbkZGmpR\n6mutdzvwkbsY+CoFBZMCJreVhOeVkGo7Ek+1r7S0lrB01tblZj32oh3fW57VNAgwQICx/ZVhR3rv\nredvPU9LL8w15LtT4CsK9FKgFxp3GO0R1eKb2iv07+2vT3EdpGlw4ZtLhEb0p96lp2sN9PpWPeB6\n1cANTXFrv6G1jBZJAIqOM5mgdxha7zA0VYWGOpSGOpT6OpC7ffs8+7lYrjqnx3vTTyMy0LvWXs4B\n6RhO76URE2xsNV+rn7vFcLvb79Cce122HpdtI8PaZh3StmjYvvecnrmigL+iYjap/JAjFFQNR3BG\nm/vdtvpuFwnA7sBggODeaMG9rQvYzQZrEDbU9eihUiHaorS+JklHT7j+wdsIt34BjZahascX9mnr\nc9eNGr39DLfe901LT/xW+8Hd90d714FnBgWCjRrBaAR2YBShq0kAdkf+gdY7bJvD0ZqboL7ONlRa\n3/64kxCi0ygotvPsPD8LcN0Effy79o6VGpp1INa2erDvPwTXg7Wc2xtMGmZ/I5otuJ0P8rLY1jP2\nkLdOax24ZJ53kQDs7kx+EBpmvfecfai0vtZ6MI1F/wMChBD6U1AwWieAtgLaVZARQv1aX+iufc5h\nax8e1gCDF55dLwHYk7QeKq29iqG6SoJQCNFlnMPWOWhVLzwjvmv74aJrhdyBOmAwWoi3XYFPCCH0\nJwHY0xlNaBFRqP1jwM9P72qEEMJrSAD6isBg1OjBaHeYe+Zl6oUQ4juSAPQlBgNan36oUbHWE+6F\nEMKHSQD6Iv8AtKhYtD4ReDibWgghfIIcBeqrFAXtjj5oQSEo316ynjYhhBC3m18v64iTF446SQD6\nOr9eaP1j0GqvYai+JKdMCCG+P6PJEXaafyD4+0MHbkytFwlAYRUSihoYhFJdhVJ7Te9qhBDezmCw\nhl2vgJYenql7HWkuASha2E6Z0EJCMXxbCU1NelckhPAGioLWyx96+dvCLhB6efcdLTpCAlC4s50y\nodRcRrlWI9cXFcKbtT6Qrc3TnDy0e5pXsf5jCQhC6xPh6OX1xAPmJACFZ7ZTJrTgUJRvKzv/rhOK\n4vRlAAU0xWB9bDAAitO0tb6Wea3PabafQzHQeL0BtV+062tbH7R8c25zXhHYp12ex3ZRQ+cv1XaF\nYLWlDevVgRW0lns4qrbbmWqubRb/QDT/ABSLBVSL3POxo5zee83Q8hmx+AeiBYU4Pa94/owYbNe3\ndP5sGWzzuby+Yrvas8W6b9z2XWn1GNWC0txsfXw7NhYVxToaYzRa958ZbV8GI5rJ5NRmm+6kYGps\naEa7o0+nvLa3kAAUt2Y7ZYJrV1Bqvm17PoPBugIxGGwLrqFl4bR91xzT9naDdUG2r6BuI0tgMAT3\nvq2v+V10ZDXYeK0eLXpQy7yq2rJStVhXqIrF9bHrCriTA9N5Y8NoctowsP6jKR42HBSniyfb5qOt\n+RTF+llwDibFacPGKdxc2trQeP0GWuSA2/f3g+1EMdfV5K1uJtw6LF3eQ1ubJSAILdQMRmOrkDM5\ngk50DQlA0T6nUyYar9ahRg5oCS77witXl/nh7BsFTgcS3Hplq7Za4TajqCqavcfqvGHh1LN2TDva\nFdfwahVYDY2gxg67/X9vT2RwD7DW72HjtXq0vt53c1hfJAEoOs6vl7VnFRSidyUCOhyYQgjPet5e\nTSGEEKIDJACFEEL4JAlAIYQQPkkCUAghhE+SABRCCOGTJACFEEL4JAlAIYQQPkkCUAghhE+SABRC\nCOGTJACFEEL4JAlAIYQQPkkCUAghhE+SABRCCOGTJACFEEL4JKWmpkbuoCKEEMLnSA9QCCGET5IA\nFEII4ZMkAIUQQvgkCUAhhBA+SQJQCCGET+rRAbhjxw5Gjx5N//79mThxImVlZXqX5CIvL4/U1FRi\nY2OJi4vjF7/4Bf/973/1LuuW8vLyMJvNLFq0SO9S3FRWVpKVlUVcXBz9+/cnJSWF0tJSvctyoaoq\nq1atcnwuR48ezapVq1BVVde6SktLycjIIDExEbPZTH5+vts8a9asISEhgaioKB599FFOnz7tVXU2\nNzezbNky7rnnHgYMGEB8fDyZmZlUVFR4TY2tzZs3D7PZzGuvvdaFFVp1pM7y8nJ++ctfMmjQIKKj\no5k4cSJnz571qjrr6upYuHAhSUlJREVF8eMf/5gtW7Z06LV7bAAeOnSIJUuWsGDBAoqLi7n77ruZ\nMWMGX3/9td6lOZSWlpKZmcnf/vY33n33XUwmE2lpadTU1OhdmkfHjx9n9+7djBo1Su9S3Fy9epVJ\nkyahKAp//vOfOXbsGGvXriUiIkLv0lxs3LiRXbt2sX79eo4fP87atWvZuXMneXl5utZVV1dHUlIS\nubm5BAUFuT2/adMmtm7dyvr16ykqKiIiIoL09HTq6uq8ps76+npOnTrFokWLOHr0KPn5+VRUVDBj\nxowu3cBo7//S7siRI3z22WdER0d3WW3O2qvzyy+/5OGHH2bIkCEUFBRQVlbG0qVLCQ4O9qo6c3Jy\n+Pvf/862bds4duwYCxYsYMWKFbz11lvtvnaPPQ/woYce4s4772Tjxo2OtuTkZNLS0vjd736nY2Vt\nq6urIzY2lr179zJp0iS9y3Fx9epVJk6cyKuvvkpubi6JiYmsW7dO77Icfv/731NWVsb777+vdym3\n9POf/5y+ffu6bKFmZWVx5coV9u3bp2NlLWJiYli/fj0ZGRmOtvj4eH7961/zwgsvAHDjxg2GDx/O\nqlWrmDlzptfU2dqZM2cYP348paWlJCQkdGF1Vm3VeOHCBSZPnszhw4eZPn06s2fP5re//W2X12fn\nqc7MzEwURWHbtm261dWapzonTJjAY489xuLFix1tjzzyCElJSe2uo3pkD7CpqYkTJ04wceJEl/bU\n1FQ+/fRTfYrqgOvXr6OqKmFhYXqX4mbevHmkp6dz77336l2KR3/5y19ITk5m1qxZDB8+nPvuu4/t\n27frXZablJQUiouLHcNIp0+fpri42Os2eJx98cUXVFZW8uCDDzraAgICmDBhglcvTwDXrl1DURSv\nWqYsFguZmZksXLiQ4cOH612OR5qmUVhYSHx8PI8//jhxcXGkpqby9ttv612am/Hjx1NYWOgY3fv0\n00/5/PPP+clPftLuz5o6uzg9fPvtt1gsFvr16+fSHhERwccff6xTVe1bvHgxo0eP5u6779a7FBe7\nd+/miy++YOfOnXqX0iZ7fXPmzOGFF15wDIUpisKvfvUrvctzmDdvHrW1tYwbNw6j0YjFYmH+/Pk8\n++yzepfWpkuXLqEoittwckREBN98841OVbWvqamJpUuXMnnyZKKiovQux2H16tWEh4fzzDPP6F1K\nm6qqqqitrSUvL48XX3yR5cuX8/HHH5OZmUlISEiHwqWrrF27lnnz5jFq1ChMJhOKorBu3TrfDcDu\nKCcnh2PHjlFYWIiiKHqX41BeXs7KlSv561//isHgvQMGqqqSnJzsGN6+8847OXfuHDt27PCqADx4\n8CD79u1j165djBw5klOnTpGdnc2gQYN46qmn9C6vx7D3sq5fv87+/fv1LsehuLiY/Px8SkpK9C7l\nluz7TH/2s5+RlZUFwKhRozhx4gTbt2/3qgB8/fXXOX78OPv37ycmJobS0lKWLl1KbGwsqampt/zZ\nHhmAffv2xWg0cunSJZf2qqoqt16hN1iyZAmHDx+moKCA2NhYvctxcezYMaqrqxk3bpyjzWKxUFpa\nyh//+EcuXryIn5+fjhVaRUZGMmLECJe2ESNG8Ic//EGnijxbtmwZzz//PGlpaQAkJCRw4cIFNm7c\n6LUB2K9fPzRNo6qqigEDBjjavXV5slgszJo1i9OnT/Pee+951fDnJ598QmVlpctn1WKxsGzZMl5/\n/XU+//xzHatr0bdvX0wmEyNHjnRpHzFihFcNg964cYOVK1fy5ptv8tOf/hSAxMRE/vWvf/Hqq6/6\nZgD6+fkxZswYPvroI6ZOnepoLyoqcqx4vEV2djZHjhyhoKCAYcOG6V2Om0cffZSxY8e6tM2ZM4e4\nuDjmz5/vFeEH1v0ArQ/PPnv2LAMHDtSpIs/q6+vdetIGg0H30yBuZfDgwURGRlJUVMSYMWMA64qn\nrKyMVatW6Vydq+bmZp599lnOnDnDe++9R3h4uN4lucjMzHRbB02bNo3HH39ct4OJPPHz82Ps2LFu\ny1R5eblXLVNNTU00NTW5LVNGo7FDy1SPDECAuXPn8pvf/Ia77rqL8ePHs3PnTiorK71q3H3BggW8\n9dZb7Nmzh9DQUEePNTg4uMsPNW5LaGgooaGhLm1BQUGEhYW5bR3qac6cOUyaNIkNGzYwbdo0Tp48\nybZt21i+fLnepbl4+OGH2bRpE7GxscTHx3Py5Em2bNnCE088oWtddXV1nD9/Hk3TUFWViooKTp06\nhdlsJiYmhqysLPLy8oiLi2PYsGG8/PLLhISEMH36dK+pMyoqiqeffpqTJ0+Sn5+PpmmOZSo0NJSA\ngADda4yJiaFv374u85tMJvr169flG8Dt1fn8888za9YsUlJSuP/++zl69Chvv/02e/fu9ao677nn\nHpYvX05QUBADBw6kpKSEffv2sXLlynZfu8eeBgGwa9cuXnnlFSorK0lISGDNmjWMHz9e77IczGaz\nx/192dnZZGdn61BRx0yZMoWEhASvOg0C4IMPPmDFihWcO3eOmJgYZs+eTWZmpt5luairq+Oll16i\noKCAy5cvExkZyfTp01m0aBG9evXSra6SkhKmTJni9nnMyMhg8+bNgPVggzfeeIOamhqSk5N5+eWX\niY+P95o6s7OzGT16tMdlavPmzbc8XaKrarT/XzobPXo0mZmZXX4aREfqzM/PZ8OGDVy8eJGhQ4cy\nf/580tPTvarOqqoqVqxYQVFREVeuXGHgwIE8/fTTzJ07t93X7tEBKIQQQrTFew/rE0IIITqRBKAQ\nQgifJAEohBDCJ0kACiGE8EkSgEIIIXySBKAQQgifJAEohBDCJ0kACqGTNWvWYDab9S5DCJ8lASiE\nThRF8ao7fwjhayQAhRBC+CQJQCF8SFNTExaLRe8yhPAKEoBCdIGysjIefPBB+vfvz9ixY3njjTc8\nznfgwAFSU1OJiopi8ODBPPPMM3z55Zdu823fvp0xY8YQFRXFQw89RGlpKY888ghTpkxxzFNSUoLZ\nbObAgQOsWbOGUaNGERUVxcWLFwFobGwkNzeX5ORkIiMjSUxMJCcnh4aGhu9dlxDdSY+9HZIQ3uI/\n//kP06dPJzw8nJycHJqbm1m3bh19+vRxmW/jxo2sXLmS9PR0nnrqKWpqati+fTuTJ0+mpKTEMf/O\nnTtZtGgREyZMYO7cuXz11Vc8+eSTmM1mlxvW2uXl5WEwGMjKykLTNEJCQgB48sknKSsrY+bMmYwc\nOZIzZ86wY8cOzpw5w8GDB79zXUJ0NxKAQnSyl156CU3TKCwsJDo6GoC0tDTGjRvnmOerr75i9erV\n5OTksGDBAkf7tGnTGD9+PFu2bGHp0qU0NTWxevVqxowZwzvvvIPRaASsd8HOysryGIC1tbUcP37c\n5X54Bw4c4MMPP6SgoICUlBRH+1133cXs2bP56KOPmDhxIhUVFR2qS4juSIZAhehEqqpSVFTE5MmT\nHeEHMHToUFJTUx2P3333XSwWC+np6VRXVzu+evfuTWJiIsXFxQB89tlnVFdXM3PmTEf4AcyYMYOw\nsDCPNWRkZLjdDPbw4cPExcUxcuRIl99nD0P773vnnXc6VJcQ3ZH0AIXoRJcvX6ahoYGhQ4e6PRcX\nF8cHH3wA4Ljj9Y9+9CO3+RRFYciQIQBUVFS4PLYzGo3ExsZ6rGHw4MFubefOnePs2bMe70KuKApV\nVVUdqsvTawvRXUgACuEFVFVFURQOHjyIweA+MBMYGPi9X9vTz6qqSnx8PLm5uWia+z2xo6KiOr0u\nIfQmAShEJwoPDycwMJDz58+7PVdeXu6YtvfoBgwYwIgRI9p8vYEDB6JpGufPn+eBBx5wtFssFi5c\nuMCoUaM6VNeQIUM4efIk999/f7vzdaQuIboj2QcoRCcyGAykpqZSWFjI119/7WgvLy/nww8/dDye\nMmUKBoOBdevWeXyd6upqwHqQSp8+fdi9e7fL+Xz79++npqamw3Wlp6dTWVnJzp073Z5rbGyktrb2\nO9UlRHdkXLx48XK9ixCiJxs5ciRvvvkmhw4dorGxkU8++YSFCxcSGxtLVVUV2dnZhIWFERgYyNat\nW/nHP/5BdXU1p0+f5siRI2RnZ9PQ0MC9996L0WgkKCiIPXv2cPToUerr6zl8+DCvvPIK0dHRhIaG\nkpGRAcCFCxfIz89n6tSpJCQkuNSUlJTEyZMn2bp1K2fOnKGyspJ//vOf7Nu3j+eee46UlBRiY2M7\nXJcQ3ZEMgQrRyZKSkjh06BAvvvgiubm5REdHs3jxYv73v//x73//2zHfc889R1xcHJs3b2bDhg2o\nqkp0dDQPPPAAaWlpjvkyMzMBeO2111i2bBmJiYns3buXJUuWuB3t2da1RhVFYc+ePWzZsoX8/Hze\nf/99AgICGDx4MJmZmSQlJX3nuoTobpSamhr3PeBCiG5F0zSGDRvGY489xqZNm/QuR4huQfYBCtHN\n3Lx5061t7969XLlyhfvuu0+HioTonmQIVIhu5vjx4+Tk5JCWlkafPn04ceIEf/rTn0hKSmLq1Kl6\nlydEtyEBKEQ3ExsbS0xMDNu2bePKlSuYzWaeeOIJli1bhskki7QQHSX7AIUQQvgk2QcohBDCJ0kA\nCiGE8EkSgEIIIXySBKAQQgifJAEohBDCJ0kACiGE8En/B/xZUJXhkLAVAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_with_err(x, data, **kwargs):\n", " mu, std = data.mean(1), data.std(1)\n", " lines = plt.plot(x, mu, '-', **kwargs)\n", " plt.fill_between(x, mu - std, mu + std, edgecolor='none',\n", " facecolor=lines[0].get_color(), alpha=0.2)\n", "\n", "plot_with_err(degree, val_train, label='training scores')\n", "plot_with_err(degree, val_test, label='validation scores')\n", "plt.xlabel('degree'); plt.ylabel('rms error')\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice the trend here, which is common for this type of plot.\n", "\n", "1. For a small model complexity, the training error and validation error are very similar. This indicates that the model is **under-fitting** the data: it doesn't have enough complexity to represent the data. Another way of putting it is that this is a **high-bias** model.\n", "\n", "2. As the model complexity grows, the training and validation scores diverge. This indicates that the model is **over-fitting** the data: it has so much flexibility, that it fits the noise rather than the underlying trend. Another way of putting it is that this is a **high-variance** model.\n", "\n", "3. Note that the training score (nearly) always improves with model complexity. This is because a more complicated model can fit the noise better, so the model improves. The validation data generally has a sweet spot, which here is around 5 terms.\n", "\n", "Here's our best-fit model according to the cross-validation:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nrFixAlOnTgUAFBQUYOjQodiwYQMmTJjg8GelpaVh9uzZmDFjhquy26Zf/vKXGDp0KP761782HMvI\nyMCvfvUr/OUvf2lx/urVq/HCCy/g+PHjCAgIAAAsWbIEf/vb31S1wNnZcrXmgQcegCRJeP/9912V\nTad1tlzz5s1DZWUlxowZg7lz56pqCYWzZTIajRgzZgx2796NlJQUd2bVKc6W67PPPsODDz6IkpIS\nCIIAANixYwduu+02nDhxwqEZye6UmJiIV155BdOmTWvzHG+pL5pypFytcbS+cFtL6uDBg7DZbHbB\nKCEhAWlpadizZ4/Dn1NTUwOLxYLIyEhXZLNdVqsVBw8exPjx4+2OT5w4sc0y/Pjjjxg9enTDFw4A\nrrvuOly4cAFnz551ZXYd1plytaaystIj16UtnS3X1q1b8a9//UuV3SydKdOWLVvQt29ffP3110hP\nT8ewYcMwc+ZMXLx40Q05dkxnyjVy5Ejo9XqsWbMGkiShsrISH374ITIyMlQXoBzlDfWFUhytL9wW\npIqLi6HVatGtWze749HR0SguLnb4cxYtWoSwsDDceOONSmexQ5cuXYIoioiJibE73l4ZiouLWz1f\nlmWnyu1KnSlXc1999RW+++47PPDAA67IYqd0plwXLlzAk08+iXfffdehbgx360yZTp8+jbNnz2LT\npk14++238c4778BoNDp95+tKnSlXr169sHHjRrz00kuIiYlBUlISjhw5go8++sgdWXYJb6gvlOBM\nfdHlILVo0aKGxb6t/evWrRu+//77riYDAFixYgXef/99/OMf/0BoaKgin0ld98MPP+Dhhx/Gyy+/\njPT0dE9np0t+//vf48EHH8SIESMAoN3xUm8hSRJqa2vxzjvvICsrC1lZWVi5ciX27duHnJwcT2ev\n04qLi/HEE09g2rRp2LZtG7788kuEhobid7/7naezRu1wtr7o8jopR7dM2rt3L0RRxOXLl+1aUyUl\nJQ4N4C5fvhzZ2dlYv369xyrC7t27Q6vVtrijKSkpaXH3Uy8mJqbV8wVBaPM97taZctXbvXs3fvOb\n3+DPf/4z7r//fhfm0nmdKdeOHTuwe/duZGdnA6gLUpIkITo6GkuXLsV9993n8ny3pzNlio2NhU6n\nQ9++fRuOJScnQ6vV4ty5cxg5cqRL8+yIzpTr3XffRUhICJ5//vmGYytXrsTgwYOxZ88ejBo1ypVZ\ndglvqC+6ojP1RZdbUlFRUUhJSWn3X1BQENLT06HT6bBt27aG9xYUFODo0aPIyspqN40333wT2dnZ\n+OSTT5CZmdnVLHeaXq9Heno6tm/fbnd827ZtbZYhMzMTu3fvRm1tbcOxb775BvHx8ejdu7crs+uw\nzpQLAL7//nvceeedmDdvHn7/+9+7OJfO60y5du/ejR07dmDnzp3YuXMnnnnmGQQHB2Pnzp247bbb\n3JDr9nWmTFlZWbDZbA1PKQCAU6dOQRRFr/4OVldXQ6vV2h3TaOqqNEmSXJJPV/OG+qKzOltfuG1M\nKjw8HPfeey+ee+45fPvtt8jNzcUjjzyCoUOH4tprr20479Zbb8XChQsbfn7jjTewYMECLFu2DP36\n9UNxcTGKi4tRUVHhrqzbeeyxx/Dhhx9izZo1OHbsGObOnYuioqKGvtUXXnjBrjK7/fbbERwcjEcf\nfRQ///wzPv/8c7z++ut47LHHPJL/tjhbrh07duDOO+/E9OnTMXXq1IbrcunSJU8VoVXOlmvAgAF2\n/+Lj46HRaJCWloaIiAhPFcOOs2UaP348hg8fjscffxyHDh1Cbm4uHn/8cWRmZjZ0a6qBs+W64YYb\nkJubi5dffhknT57EwYMH8dhjjyExMVE13c5msxl5eXk4dOgQJElCfn4+8vLykJ+fD8B76wtny9WV\n+sKtz3TPzs6GTqfD9OnTYbFYcO2112LlypUN00eBurUPTe8YVq1aBZvN1mKAbdq0aR5ZOzBlyhSU\nlpZi6dKlKCoqwsCBA7Fu3TokJCQAAIqKinDmzJmG88PDw7Fp0ybMnj0bEydORGRkJJ544gk8+uij\nbs97e5wt19q1a1FdXY1ly5Zh2bJlDcd79eqF3Nxct+e/Lc6Wyxs4WyZBEPDxxx9j7ty5uPnmmxEU\nFIQJEybgxRdf9FQRWuVsua655hqsWrUKr7/+OpYtWwaDwYCrrroKGzZsgMFg8FQx7Bw4cAC33HJL\nQx23ePFiLF68uKH+8tb6wtlydaW+4LZIRESkWm7dcYKIiMgZDFJERKRaDFJERKRaDFJERKRaDFJE\nRKRaDFJERKRaDFJERKRaDFJERKRaDFJERKRa/x96vuZQ7Ji06wAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = PolynomialRegression(4).fit(X, y)\n", "plt.scatter(X, y)\n", "plt.plot(X_test, model.predict(X_test));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Detecting Data Sufficiency with Learning Curves\n", "\n", "As you might guess, 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", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.learning_curve import learning_curve\n", "\n", "def plot_learning_curve(degree=3):\n", " train_sizes = np.linspace(0.05, 1, 20)\n", " N_train, val_train, val_test = learning_curve(PolynomialRegression(degree),\n", " X, y, train_sizes, cv=5,\n", " scoring=rms_error)\n", " plot_with_err(N_train, val_train, label='training scores')\n", " plot_with_err(N_train, val_test, label='validation scores')\n", " plt.xlabel('Training Set Size'); plt.ylabel('rms error')\n", " plt.ylim(0, 3)\n", " plt.xlim(5, 80)\n", " plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what the learning curves look like for a linear model:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\ny5Yt+eCDD7jppptYvHgxV111lc95n332WRRF4Y477sAwDKKjowG44YYb2L59O5MmTaJr16788ssv\nLF68mF9++YUVK1YA8Msvv3DttdfSs2dPHnzwQSIjI9m/fz8bN26s8nobClIAg4RwOJyh0SKs4TZF\n0sgYujorpMfPGJsYlOP06NGD3r17s2LFCi6//HLatWtXrs7+/ftZtmwZI0eO9ClfvHgxVmvpf2fS\npEmkpaXx5JNP8thjj9GmTZtKz71v3z7WrVvHwIEDAfjTn/5Ez549eeedd3jssccq3ddut3PVVVdx\n3333ATB58mQuuugi3nrrLY8Arlmzhu+++44nn3ySO++8E4Bbb72VK6+8sopPxcmGDRvo3r07S5cu\nrbDOI488wvHjx/n888/p16+fp3zWrFme5WeffZasrCzWrl3L4MGDPfYOHTqUv/3tb1x55ZWoammy\n7vz8fL777jufz3b58uVs2rSJtWvXMmjQIE95v379uO2228jIyGDo0KF8+eWXlJSUsGLFClq0aOGp\n527lNwZkF2gQkXMCJZLKadOmTTnxAzw3aMMwyM3N5fTp0wwYMABd19m5c2eVx01PT/eIH0DLli1J\nT09n//79Adl18803+6wPGjTIZ99NmzZhMpk8rTU3U6dOLddV6o/Y2FiOHDnCjz/+6He7YRh88skn\njBgxwkf8yvL555/Tp08fj/iB87O79dZbOX78eLnPauLEiT7iB/Dxxx+Tnp5O165dOX36tOflFsMt\nW7Z4bAZYvXp1QNfYEJECGEREQZ4MjSaRVEKHDh38lu/evZurr76alJQU2rdvT6dOnbjiiisQQgQ0\npcLdlepNixYtyM7OrnJfs9lMYqJvK7jsvgcPHiQxMbFcFoW0tLQqjw9w9913Ex0dzbBhw+jXrx/3\n3nuvR2gATp48SV5eHt27d6/0OAcPHqRz587lyrt06YJhGGRmZvqU+/u89+3bx969e+nUqZPPq1ev\nXgCcOHECgKuuuoqBAwdy9913k56ezi233MKHH37YqBxpZBdoMNEcztBoUdHhtkQiqZdERkaWK8vN\nzeWKK64gOjqahx9+mI4dO2K1Wjl69Ch33HEHuq5XeVzvbj9vAmm51GZeYaB06dKFf//732zYsIFN\nmzaxYcMGXn/9daZOncqCBQtCdl5/n7eu63Tr1o158+b5/Xxat24NOFuW69at4+uvv+bzzz9n48aN\n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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_learning_curve(1)" ] }, { "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", "As you add more data points, the training error will never increase, and the testing error will never decrease (why do you think this is?)\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=1$, the two curves have converged and cannot move lower. What about for a larger value of $d$?" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n8ssvmDx5Mlq3bo3du3djxowZbo0r/vvf/8acOXMwfPhwTJs2DQaDASdOnMBPP/2ECRMmAAByc3PR\nt29fFBQUYMKECWjbti2ys7Oxc+dO5OfnIywsDFevXsWAAQNQVlaGadOmoVGjRvj8888xduxYrF69\nGvfff7/dcd944w0IgoAZM2aAc47w8HAAwMMPP4wjR45g/PjxaNOmDU6ePInVq1fj5MmT2LRpEwDg\n5MmTePDBB9GhQwc899xzCAkJwblz57B///5qz7e+QALoCQQBuug4hFy1dn0KeZchORFAsgCJmtJn\ne65X958xNMEj+2nfvj06deqETZs24Z577kHTpk0d6pw7dw4bNmzAwIED7cpXr16N4GDrdKLx48cj\nLS0Nr776KhYuXIjk5OTKu7Lj9OnT2LVrF2699VYAwH333YcOHTrg448/xsKFC6vc1mAw4P7778fs\n2bMBABMmTMAdd9yB9evXKwK4Y8cOHD16FK+++ipmzpwJAJg8eTKGDRtWzVWR2bt3L9q1a4e1a9e6\nrDN//nzk5ORg37596Nq1q1I+d+5c5fcbb7yB3Nxc7Ny5Ez179lTa26dPH7zwwgsYNmwYRFFU6peU\nlODo0aN213bjxo04cOAAdu7ciR49eijlXbt2xSOPPIKMjAz06dMH33zzDfR6PTZt2oTo6GilnsXK\nbwhQF6iH0EfH2S27dIShMUDiOiY5OdlB/AAoD2jOOYqKipCfn4/u3btDkiT89ttv1e43PT1dET8A\naNSoEdLT03Hu3Dm32jVu3Di75R49ethte+DAAahUKsVaszBlyhSHrlJnREZG4vLly/j111+druec\n48svv0T//v3txK8y+/btQ+fOnRXxA+RrN3nyZOTk5DhcqzFjxtiJHwBs3boV6enpaNOmDfLz85WP\nRQwPHjyotBkAtm/f7tY51kdIAD2ELjrebpnluhBA8gIlrmOaN2/utPz48eMYNWoUUlJS0KxZM7Rs\n2RL33nsvGGNuTamwdKXaEh0dDa3WRVAKG9RqNRIS7K3gytteuHABCQkJDlkU0tLSqt0/ADzxxBMI\nDw9H37590bVrVzz11FOK0ADA1atXUVxcjHbt2lW5nwsXLqBVq1YO5a1btwbnHFlZWXblzq736dOn\nkZmZiZYtW9p9OnbsCADIy8sDANx///249dZb8cQTTyA9PR0TJ07EF1980aAcaagL1EPoYuwF0NVc\n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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_learning_curve(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we see that by adding more model complexity, we've managed to lower the level of convergence to an rms error of 1.0!\n", "\n", "What if we get even more complex?" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nblwmQFUlJSUFRqPR7qUNADNmzChzrLVkAwB6vR45OTkwmUzo2rVrte9rdeLECajVakydOtVuZfg+\nffogISEBe/bsKXPOxIkT7bZ79uyJy5cvV3qfRo0aAQD27t2LoqLymxK2b98OzjnmzJlTYU9V689r\nxowZdseMHz8eYWFhZfIrl8sxadIku7TTp08jNTXV9vu2fuXm5mLAgAH4/fffodPpAACBgYH4448/\nkJGRUenzeQKVAIn76bWAouF2IqjPBg4ciMaNG2Pjxo1ITEwEIFV/xsTE4I477rAdp9Fo8Prrr2Pb\ntm12vcEZY8jLy6vWPa1tcbGxsXbpISEhZSbW55zjP//5D7766qsyw6tatmxZrfuWvD9jDHFxcWX2\ntW3bFtu3b7dLUygUtupKq6CgoDLtb6W1aNECTz/9NJYvX45169ahe/fuGDp0KMaNG2erYrUG0fbt\n21eaXwBl8isIAmJjY5GWlmaXHhERUabTz8WLFwGgTCneijGGW7duoVmzZnjzzTcxc+ZMdOrUCZ07\nd8bAgQMxfvz4cn9e7kYBkLhA5WOkqB2wepzVRucOcrkcw4cPx7Zt27B06VLk5eVh//79+L//+z+7\n4yZPnoxjx47h6aefxm233WYr3UydOhWiKLosfx988AHefvttPPLII5g3bx5CQkIgCAI+/PDDKktg\nzuLoGMbyvPnmm3j00Uexa9cuJCcn49///jfef/997Ny5E23btnViLov5+vqWSbP+jt544w107ty5\n3POaNm0KAHjggQfQq1cv7Ny5E8nJyfjss8/w0Ucf4ZNPPsGoUaNckmdHUQAkbkftgPXbqFGj8M03\n39g6Z5jNZowcOdK2X6PR4Ndff8Wrr76KOXPm2NL1en2VpaDyREdHA5BKJdaOKgBw69atMtfbunUr\n+vbti48//tgufeHChXbb1RnoHh0dDc45UlNTMWDAALt9qampNZrfuDLt2rVDu3bt8Nxzz+HMmTPo\n378/VqxYgf/85z+2UuzZs2eRkJBQZX5Llpo557h06RK6dOlSZR6sP2d/f3/079+/yuNDQ0MxadIk\nTJo0CXl5ebjnnnuwcOFCjwdAagMkrlc62lE7YL3Wt29fhIaGYtOmTdi8eTPatm2LTp062fbLZDIA\nKFPSW758eY1KfwMGDIBcLkdSUpJd+ieffFLmWJlMVma4wW+//YajR4/apVlLPY4E5K5duyIsLAxf\n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\n0qWLMfkBuLu74+3tbXLvnj17CAsLMyY/AEdHR4YPH17j86G06/aLL77gkUce4fjx48THxxMZh0ge\nDgAABWRJREFUGUmnTp1MJhN9/fXX3Lx5kxEjRnD16lXjl8FgICQkhH379tXq/ary/PPPs3btWkJD\nQ0lPTycmJoZhw4bRrVs3k9O8a3L27FkmTJhASEgIixcvNl7funUrDz74IK1atTKp+8MPP4xOp+O7\n776767qLe5e0AEWzUdalWNHnn39ObGwsx48fR6fTGa8risKNGzeM3WzV8fDwMPm+TZs2QOmYVE3K\nDoyteH/ZvQaDgYsXLzJgwIBK5e6///4an18mLCyMsLAwdDodJ06c4KuvviI+Pp4pU6bQvn17QkJC\nOHPmDAaDgSFDhlS6X1GUOh+W+vjjj/P4449TWFjI0aNH2bZtG//+978ZPXo03333XbWfT5lbt24x\natQoWrRowZo1a0xm4545c4aff/6Zjh07Vln3msZJRfMkCVA0G+W7Ocvs3buXcePG8fDDD7NixQrc\n3NywsrJix44dJCYmotfra3xudcsiajP5oi733g21Wk23bt3o1q0bQUFBPPPMM2zcuJGQkBD0ej2K\nopCUlISjo2Ot63qnbGxs6NWrF7169aJ9+/a88sorbN++nenTp9/2vmnTpnHmzBl27NhhMnGm7Gf1\nyCOPMG3atCrvrSoxCiEJUDRrW7duxcHBgc2bN5uMRe3evduMtfqLoijcd999/PLLL5VeO3PmTJ2e\nHRwcDGBcy9ehQwegdFbmQw89VGO96kNwcDAGg6HG9YRxcXFs3bqVuLg4Y73L18XLy4u8vLwax1yF\nKE/GAEWzplarURSFkpIS47Xs7Gw2bNhgxlqZGjhwIGlpaSZLEbKzs02WANzO3r17q7y+a9cuAOPM\n0EGDBmFnZ0dMTIxJV3CZK1euGP+7ZcuWFBYWUlBQUKs6pKSkVFsHRVHw8/Or9t49e/bw1ltvMXbs\nWP7+979XWWb48OGkpaVVGev169dNPl8hykgLUDRrgwcPJjExkfDwcCIiIrhy5QoffvghHh4eXL16\n1dzVA2DWrFls2bKFp556ismTJ2NjY8OHH36It7c3x44dq7E1NmvWLAwGA0OHDsXPz4+SkhIOHz7M\nZ599hqurK5MmTQJKxx6jo6N56aWX6Nu3LyNGjMDJyYnffvuNr7/+ml69ehm3TiubuDN79mz69++P\nWq1m2LBhJrNKy4uIiMDPz48hQ4bg7e1Nfn4+aWlpbNu2DV9fX0aOHFnlfTqdjgkTJmBvb0/Pnj35\n9NNPTV4PCwvD09OT2bNns3v3biIjI/nb3/5GYGAgeXl5HD9+nC+++ILDhw/j7Ox8Rz93ce+TBCju\nGbdLBNXt4zlw4EDeffdd4uPjWbBgAe3atWPmzJmo1eoqN2Suai1fVc+tbt1fbe6tWNbb25tt27bx\n2muvERMTg5OTE5MnT0ZRFI4dO4aNjU21cQMsWbKE7du38/XXX7NmzRqKiopwd3dn1KhRzJkzx2SB\n/rPPPouHhwdxcXG8++67xrJhYWGMGTPGWG7EiBF8//33bN26lQ0bNmAwGDh16lS1Seb9999n165d\nbN26lT/++AO9Xo+npycvvfQSs2bNokWLFlX+XEpKSrh+/ToAM2bMqPTcpKQkPD09sbOz46uvvmL5\n8uV8/vnnfPLJJ7Rq1QofHx9effXVKmf/CiF7gQphoWbNmsWmTZvuai9PIYSMAQphESqOtWVlZbFp\n0yb69OljphoJYfmkC1QIC9C/f38GDhyIr68vly5dYs2aNRQWFvLKK6+Yu2pCWCxJgEJYgEcffZQd\nO3awatUq1Go1PXr0ICkpyWQXGSHEnZExQCGEEM2SjAEKIYRoliQBCiGEaJYkAQohhGiWJAEKIYRo\nliQBCiGEaJYkAQohhGiW/j8oExBedLmP+QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_learning_curve(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For an even more complex model, we still converge, but the convergence only happens for *large* amounts of training data.\n", "\n", "So we see the following:\n", "\n", "- you can **cause the lines to converge** by adding more points or by simplifying the model.\n", "- you can **bring the convergence error down** only by increasing the complexity of the model.\n", "\n", "Thus these curves can give you hints about how you might improve a sub-optimal model. If the curves are already close together, you need more model complexity. If the curves are far apart, you might also improve the model by adding more data.\n", "\n", "To make this more concrete, imagine some telescope data 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 has real consequences, and can be addressed using these metrics." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Recall, Precision and F1-Score\n", "\n", "Intuitively, [precision](http://en.wikipedia.org/wiki/Precision_and_recall#Precision) is the ability\n", "of the classifier not to label as positive a sample that is negative, and\n", "[recall](http://en.wikipedia.org/wiki/Precision_and_recall#Recall) is the\n", "ability of the classifier to find all the positive samples.\n", "\n", "The [F-measure](http://en.wikipedia.org/wiki/F1_score>)\n", "($F_\\beta$ and $F_1$ measures) can be interpreted as a weighted\n", "harmonic mean of the precision and recall. A\n", "$F_\\beta$ measure reaches its best value at 1 and its worst score at 0.\n", "With $\\beta = 1$, $F_\\beta$ and\n", "$F_1$ are equivalent, and the recall and the precision are equally important." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [], "source": [ "titanic = pd.read_csv('data/titanic.csv', index_col='PassengerId')\n", "\n", "# fill missing values for Age with the median age\n", "titanic.Age.fillna(titanic.Age.median(), inplace=True)\n", "\n", "# define X and y\n", "feature_cols = ['Pclass', 'Parch', 'Age']\n", "X = titanic[feature_cols]\n", "y = titanic.Survived\n", "\n", "# train/test split\n", "from sklearn.cross_validation import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n", "\n", "# train a logistic regression model\n", "from sklearn.linear_model import LogisticRegression\n", "logreg = LogisticRegression(C=1e9)\n", "logreg.fit(X_train, y_train)\n", "\n", "# make predictions for testing set\n", "y_pred_class = logreg.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[107, 21],\n", " [ 52, 43]])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import confusion_matrix\n", "confusion_matrix(y_test, y_pred_class)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![f1score](https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Precisionrecall.svg/2000px-Precisionrecall.svg.png)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "precision_score 0.671875\n", "recall_score 0.452631578947\n" ] } ], "source": [ "from sklearn.metrics import precision_score, recall_score, f1_score\n", "print('precision_score ', precision_score(y_test, y_pred_class))\n", "print('recall_score ', recall_score(y_test, y_pred_class))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### F1Score\n", "\n", "The traditional F-measure or balanced F-score (F1 score) is the harmonic mean of precision and recall:\n", "\n", "$$F_1 = 2 \\cdot \\frac{\\mathrm{precision} \\cdot \\mathrm{recall}}{\\mathrm{precision} + \\mathrm{recall}}.$$" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "f1_score 0.540880503145\n" ] } ], "source": [ "print('f1_score ', f1_score(y_test, y_pred_class))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "We've gone over several useful tools for model validation\n", "\n", "- The **Training Score** shows how well a model fits the data it was trained on. This is not a good indication of model effectiveness\n", "- The **Validation Score** shows how well a model fits hold-out data. The most effective method is some form of cross-validation, where multiple hold-out sets are used.\n", "- **Validation Curves** are a plot of validation score and training score as a function of **model complexity**:\n", " + when the two curves are close, it indicates *underfitting*\n", " + when the two curves are separated, it indicates *overfitting*\n", " + the \"sweet spot\" is in the middle\n", "- **Learning Curves** are a plot of the validation score and training score as a function of **Number of training samples**\n", " + when the curves are close, it indicates *underfitting*, and adding more data will not generally improve the estimator.\n", " + when the curves are far apart, it indicates *overfitting*, and adding more data may increase the effectiveness of the model.\n", " \n", "These tools are powerful means of evaluating your model on your data." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" }, "name": "_merged" }, "nbformat": 4, "nbformat_minor": 0 }