Skip to content

Instantly share code, notes, and snippets.

@lcaguilar
Created August 1, 2020 16:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lcaguilar/f662bfe7d2a613cd986c0b5e00f67289 to your computer and use it in GitHub Desktop.
Save lcaguilar/f662bfe7d2a613cd986c0b5e00f67289 to your computer and use it in GitHub Desktop.
Created on Skills Network Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n",
" <a href=\"https://cocl.us/corsera_da0101en_notebook_top\">\n",
" <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/Images/TopAd.png\" width=\"750\" align=\"center\">\n",
" </a>\n",
"</div>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"https://www.bigdatauniversity.com\"><img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/Images/CCLog.png\" width=300, align=\"center\"></a>\n",
"\n",
"<h1 align=center><font size=5>Data Analysis with Python</font></h1>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>Module 5: Model Evaluation and Refinement</h1>\n",
"\n",
"We have built models and made predictions of vehicle prices. Now we will determine how accurate these predictions are. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>Table of content</h1>\n",
"<ul>\n",
" <li><a href=\"#ref1\">Model Evaluation </a></li>\n",
" <li><a href=\"#ref2\">Over-fitting, Under-fitting and Model Selection </a></li>\n",
" <li><a href=\"#ref3\">Ridge Regression </a></li>\n",
" <li><a href=\"#ref4\">Grid Search</a></li>\n",
"</ul>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This dataset was hosted on IBM Cloud object click <a href=\"https://cocl.us/DA101EN_object_storage\">HERE</a> for free storage."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"# Import clean data \n",
"path = 'https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/module_5_auto.csv'\n",
"df = pd.read_csv(path)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"df.to_csv('module_5_auto.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" First lets only use numeric data "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>Unnamed: 0.1</th>\n",
" <th>symboling</th>\n",
" <th>normalized-losses</th>\n",
" <th>wheel-base</th>\n",
" <th>length</th>\n",
" <th>width</th>\n",
" <th>height</th>\n",
" <th>curb-weight</th>\n",
" <th>engine-size</th>\n",
" <th>...</th>\n",
" <th>stroke</th>\n",
" <th>compression-ratio</th>\n",
" <th>horsepower</th>\n",
" <th>peak-rpm</th>\n",
" <th>city-mpg</th>\n",
" <th>highway-mpg</th>\n",
" <th>price</th>\n",
" <th>city-L/100km</th>\n",
" <th>diesel</th>\n",
" <th>gas</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>122</td>\n",
" <td>88.6</td>\n",
" <td>0.811148</td>\n",
" <td>0.890278</td>\n",
" <td>48.8</td>\n",
" <td>2548</td>\n",
" <td>130</td>\n",
" <td>...</td>\n",
" <td>2.68</td>\n",
" <td>9.0</td>\n",
" <td>111.0</td>\n",
" <td>5000.0</td>\n",
" <td>21</td>\n",
" <td>27</td>\n",
" <td>13495.0</td>\n",
" <td>11.190476</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>122</td>\n",
" <td>88.6</td>\n",
" <td>0.811148</td>\n",
" <td>0.890278</td>\n",
" <td>48.8</td>\n",
" <td>2548</td>\n",
" <td>130</td>\n",
" <td>...</td>\n",
" <td>2.68</td>\n",
" <td>9.0</td>\n",
" <td>111.0</td>\n",
" <td>5000.0</td>\n",
" <td>21</td>\n",
" <td>27</td>\n",
" <td>16500.0</td>\n",
" <td>11.190476</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>122</td>\n",
" <td>94.5</td>\n",
" <td>0.822681</td>\n",
" <td>0.909722</td>\n",
" <td>52.4</td>\n",
" <td>2823</td>\n",
" <td>152</td>\n",
" <td>...</td>\n",
" <td>3.47</td>\n",
" <td>9.0</td>\n",
" <td>154.0</td>\n",
" <td>5000.0</td>\n",
" <td>19</td>\n",
" <td>26</td>\n",
" <td>16500.0</td>\n",
" <td>12.368421</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>164</td>\n",
" <td>99.8</td>\n",
" <td>0.848630</td>\n",
" <td>0.919444</td>\n",
" <td>54.3</td>\n",
" <td>2337</td>\n",
" <td>109</td>\n",
" <td>...</td>\n",
" <td>3.40</td>\n",
" <td>10.0</td>\n",
" <td>102.0</td>\n",
" <td>5500.0</td>\n",
" <td>24</td>\n",
" <td>30</td>\n",
" <td>13950.0</td>\n",
" <td>9.791667</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" <td>164</td>\n",
" <td>99.4</td>\n",
" <td>0.848630</td>\n",
" <td>0.922222</td>\n",
" <td>54.3</td>\n",
" <td>2824</td>\n",
" <td>136</td>\n",
" <td>...</td>\n",
" <td>3.40</td>\n",
" <td>8.0</td>\n",
" <td>115.0</td>\n",
" <td>5500.0</td>\n",
" <td>18</td>\n",
" <td>22</td>\n",
" <td>17450.0</td>\n",
" <td>13.055556</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 21 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 Unnamed: 0.1 symboling normalized-losses wheel-base \\\n",
"0 0 0 3 122 88.6 \n",
"1 1 1 3 122 88.6 \n",
"2 2 2 1 122 94.5 \n",
"3 3 3 2 164 99.8 \n",
"4 4 4 2 164 99.4 \n",
"\n",
" length width height curb-weight engine-size ... stroke \\\n",
"0 0.811148 0.890278 48.8 2548 130 ... 2.68 \n",
"1 0.811148 0.890278 48.8 2548 130 ... 2.68 \n",
"2 0.822681 0.909722 52.4 2823 152 ... 3.47 \n",
"3 0.848630 0.919444 54.3 2337 109 ... 3.40 \n",
"4 0.848630 0.922222 54.3 2824 136 ... 3.40 \n",
"\n",
" compression-ratio horsepower peak-rpm city-mpg highway-mpg price \\\n",
"0 9.0 111.0 5000.0 21 27 13495.0 \n",
"1 9.0 111.0 5000.0 21 27 16500.0 \n",
"2 9.0 154.0 5000.0 19 26 16500.0 \n",
"3 10.0 102.0 5500.0 24 30 13950.0 \n",
"4 8.0 115.0 5500.0 18 22 17450.0 \n",
"\n",
" city-L/100km diesel gas \n",
"0 11.190476 0 1 \n",
"1 11.190476 0 1 \n",
"2 12.368421 0 1 \n",
"3 9.791667 0 1 \n",
"4 13.055556 0 1 \n",
"\n",
"[5 rows x 21 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df=df._get_numeric_data()\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Libraries for plotting "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"%%capture\n",
"! pip install ipywidgets"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"from IPython.display import display\n",
"from IPython.html import widgets \n",
"from IPython.display import display\n",
"from ipywidgets import interact, interactive, fixed, interact_manual"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Functions for plotting</h2>"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"def DistributionPlot(RedFunction, BlueFunction, RedName, BlueName, Title):\n",
" width = 12\n",
" height = 10\n",
" plt.figure(figsize=(width, height))\n",
"\n",
" ax1 = sns.distplot(RedFunction, hist=False, color=\"r\", label=RedName)\n",
" ax2 = sns.distplot(BlueFunction, hist=False, color=\"b\", label=BlueName, ax=ax1)\n",
"\n",
" plt.title(Title)\n",
" plt.xlabel('Price (in dollars)')\n",
" plt.ylabel('Proportion of Cars')\n",
"\n",
" plt.show()\n",
" plt.close()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"def PollyPlot(xtrain, xtest, y_train, y_test, lr,poly_transform):\n",
" width = 12\n",
" height = 10\n",
" plt.figure(figsize=(width, height))\n",
" \n",
" \n",
" #training data \n",
" #testing data \n",
" # lr: linear regression object \n",
" #poly_transform: polynomial transformation object \n",
" \n",
" xmax=max([xtrain.values.max(), xtest.values.max()])\n",
"\n",
" xmin=min([xtrain.values.min(), xtest.values.min()])\n",
"\n",
" x=np.arange(xmin, xmax, 0.1)\n",
"\n",
"\n",
" plt.plot(xtrain, y_train, 'ro', label='Training Data')\n",
" plt.plot(xtest, y_test, 'go', label='Test Data')\n",
" plt.plot(x, lr.predict(poly_transform.fit_transform(x.reshape(-1, 1))), label='Predicted Function')\n",
" plt.ylim([-10000, 60000])\n",
" plt.ylabel('Price')\n",
" plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1 id=\"ref1\">Part 1: Training and Testing</h1>\n",
"\n",
"<p>An important step in testing your model is to split your data into training and testing data. We will place the target data <b>price</b> in a separate dataframe <b>y</b>:</p>"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"y_data = df['price']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"drop price data in x data"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"x_data=df.drop('price',axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we randomly split our data into training and testing data using the function <b>train_test_split</b>. "
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of test samples : 31\n",
"number of training samples: 170\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"\n",
"x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.15, random_state=1)\n",
"\n",
"\n",
"print(\"number of test samples :\", x_test.shape[0])\n",
"print(\"number of training samples:\",x_train.shape[0])\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The <b>test_size</b> parameter sets the proportion of data that is split into the testing set. In the above, the testing set is set to 10% of the total dataset. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #1):</h1>\n",
"\n",
"<b>Use the function \"train_test_split\" to split up the data set such that 40% of the data samples will be utilized for testing, set the parameter \"random_state\" equal to zero. The output of the function should be the following: \"x_train_1\" , \"x_test_1\", \"y_train_1\" and \"y_test_1\".</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of test samples : 81\n",
"number of training samples: 120\n"
]
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"x_train1,x_test1,y_train1,y_test1= train_test_split(x_data, y_data, test_size=0.4,random_state=0)\n",
"print(\"number of test samples :\", x_test1.shape[0])\n",
"print(\"number of training samples:\",x_train1.shape[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"x_train1, x_test1, y_train1, y_test1 = train_test_split(x_data, y_data, test_size=0.4, random_state=0) \n",
"print(\"number of test samples :\", x_test1.shape[0])\n",
"print(\"number of training samples:\",x_train1.shape[0])\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's import <b>LinearRegression</b> from the module <b>linear_model</b>."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"from sklearn.linear_model import LinearRegression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" We create a Linear Regression object:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"lre=LinearRegression()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"we fit the model using the feature horsepower "
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
" normalize=False)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lre.fit(x_train[['horsepower']], y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's Calculate the R^2 on the test data:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.707688374146705"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lre.score(x_test[['horsepower']], y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"we can see the R^2 is much smaller using the test data."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.6449517437659684"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lre.score(x_train[['horsepower']], y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #2): </h1>\n",
"<b> \n",
"Find the R^2 on the test data using 90% of the data for training data\n",
"</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.7340722810055448"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"x_train1, x_test1,y_train1,y_test1=train_test_split(x_data,y_data,test_size=0.1,random_state=0)\n",
"lre.fit(x_train1[['horsepower']],y_train1)\n",
"lre.score(x_test1[['horsepower']],y_test1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"x_train1, x_test1, y_train1, y_test1 = train_test_split(x_data, y_data, test_size=0.1, random_state=0)\n",
"lre.fit(x_train1[['horsepower']],y_train1)\n",
"lre.score(x_test1[['horsepower']],y_test1)\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Sometimes you do not have sufficient testing data; as a result, you may want to perform Cross-validation. Let's go over several methods that you can use for Cross-validation. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Cross-validation Score</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets import <b>model_selection</b> from the module <b>cross_val_score</b>."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"from sklearn.model_selection import cross_val_score"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We input the object, the feature in this case ' horsepower', the target data (y_data). The parameter 'cv' determines the number of folds; in this case 4. "
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"Rcross = cross_val_score(lre, x_data[['horsepower']], y_data, cv=4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The default scoring is R^2; each element in the array has the average R^2 value in the fold:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0.7746232 , 0.51716687, 0.74785353, 0.04839605])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Rcross"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" We can calculate the average and standard deviation of our estimate:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The mean of the folds are 0.522009915042119 and the standard deviation is 0.291183944475603\n"
]
}
],
"source": [
"print(\"The mean of the folds are\", Rcross.mean(), \"and the standard deviation is\" , Rcross.std())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use negative squared error as a score by setting the parameter 'scoring' metric to 'neg_mean_squared_error'. "
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([20254142.84026702, 43745493.2650517 , 12539630.34014931,\n",
" 17561927.72247591])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"-1 * cross_val_score(lre,x_data[['horsepower']], y_data,cv=4,scoring='neg_mean_squared_error')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #3): </h1>\n",
"<b> \n",
"Calculate the average R^2 using two folds, find the average R^2 for the second fold utilizing the horsepower as a feature : \n",
"</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.5166761697127429"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"Rc=cross_val_score(lre,x_data[['horsepower']],y_data,cv=2)\n",
"Rc.mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"Rc=cross_val_score(lre,x_data[['horsepower']], y_data,cv=2)\n",
"Rc.mean()\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can also use the function 'cross_val_predict' to predict the output. The function splits up the data into the specified number of folds, using one fold to get a prediction while the rest of the folds are used as test data. First import the function:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import cross_val_predict"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We input the object, the feature in this case <b>'horsepower'</b> , the target data <b>y_data</b>. The parameter 'cv' determines the number of folds; in this case 4. We can produce an output:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([14141.63807508, 14141.63807508, 20814.29423473, 12745.03562306,\n",
" 14762.35027598])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"yhat = cross_val_predict(lre,x_data[['horsepower']], y_data,cv=4)\n",
"yhat[0:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1 id=\"ref2\">Part 2: Overfitting, Underfitting and Model Selection</h1>\n",
"\n",
"<p>It turns out that the test data sometimes referred to as the out of sample data is a much better measure of how well your model performs in the real world. One reason for this is overfitting; let's go over some examples. It turns out these differences are more apparent in Multiple Linear Regression and Polynomial Regression so we will explore overfitting in that context.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's create Multiple linear regression objects and train the model using <b>'horsepower'</b>, <b>'curb-weight'</b>, <b>'engine-size'</b> and <b>'highway-mpg'</b> as features."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
" normalize=False)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lr = LinearRegression()\n",
"lr.fit(x_train[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']], y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Prediction using training data:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([11927.70699817, 11236.71672034, 6436.91775515, 21890.22064982,\n",
" 16667.18254832])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"yhat_train = lr.predict(x_train[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']])\n",
"yhat_train[0:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Prediction using test data: "
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([11349.16502418, 5914.48335385, 11243.76325987, 6662.03197043,\n",
" 15555.76936275])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"yhat_test = lr.predict(x_test[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']])\n",
"yhat_test[0:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's perform some model evaluation using our training and testing data separately. First we import the seaborn and matplotlibb library for plotting."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import seaborn as sns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's examine the distribution of the predicted values of the training data."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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rRs//vjjCY/NPRo9duxYZs6cCcC3337LqaeeSrdu3Tj//PNJS0sD4O6776Z9+/Z07tyZO+6444R9rl27looVK1K7du086924cSPt2rXjuuuuo1u3bqSkpHDttdfSo0cPOnTowAMPPJC97aBBg1i0aFH28/XnP/+ZLl260KdPn+znpVKlSjRv3jzfkfJwUjgWERGRcuvTTz9l5MiRtGnThpo1a/Lzzz8DMGXKFDZs2MCSJUtYvnw5l1xyCTfddBMNGzZkxowZzJgxo8D99u/fn/nz57NkyRIuuugiHnvssQK3v+CCC/j000/JyMgA4L333uOiiy6ibt26fPfdd/z888+899572aO1gdixYwcPP/ww06ZN4+eff6ZHjx488cQT7Nq1i08++YSVK1eyfPly/vKXv5zw2Llz59KtW7cC979mzRomTJjAkiVLaNasGY888giLFi1i+fLl/PDDDyxfvvyExxw4cIA+ffqwbNkyBg4cyEsvvZR9X48ePY4bPfeKFgERERER7z35pCeHfffdd7nFN8J80UUX8e6779KtWzemTZvGpEmTiIlxUalmzZpF2m9qaioXXnghW7Zs4ejRo4UuQlG/fn06dOjA999/T7169YiNjaVjx47s3buXG264gaVLlxIdHc3atWsDrmH+/PmsWrWKfv36AXD06FFOPfVUqlatSlxcHFdddRVjxoxh7NixJzx2y5Yt1KlTp8D9N2vWjD59+mR//v777zNlyhQyMjLYsmULq1atonPnzsc9pkKFCtnH6969O9999132fXXr1g2o7zvUFI5FRESkXNq5cyfTp09nxYoVGGPIzMzEGMNjjz2GtTagOXJzbpNzsYkbb7yR2267jTPPPJOZM2cyefLkQvflb62oV68e48ePB+Bf//oX9erVY9myZWRlZREXF3fC42JiYo7r+fXXYa1l2LBhvPvuuyc8ZsGCBXz//fdMnTqVZ599lunTpx93f3x8PHv37i2w3sqVK2d/vGHDBh5//HEWLlxIjRo1uPzyy/NcfCM2Njb7OYuOjs4eKffXHR8fX+Axw0FtFSIiIlIuffjhh0yYMIGkpCQ2btxISkoKLVq0YM6cOQwfPpwXXnghO7zt2rULgISEBPbv35+9j3r16pGYmEhWVhaffPJJ9u179+6lUaNGALzxxhsB1XPuuefy5ZdfZrdU+PfToEEDoqKiePPNN8nMzDzhcc2bN2fp0qVkZWWRkpKS3bfbp08f5s6dy2+//QbAwYMHWbt2LWlpaezdu5fRo0fz5JNPsnTp0hP22a5du+zHBWLfvn1UrlyZatWqsXXrVr766quAH+u3du3akM/AEQiFYxERESmX3n33Xc4555zjbjv33HN55513uOqqq2jatCmdO3emS5cuvPPOOwBMnDiRUaNGZZ+Q949//IOxY8cyePBgGjRokL2fyZMnc/755zNgwIB8T2rLrXr16vTp04d69eplt2Fcd911vPHGG/Tp04e1a9ceN1rr169fP1q0aEGnTp244447snuF69Spw+uvv8748ePp3Lkzffr0yZ4FY+zYsXTu3JnTTjuNf/3rXyfsc+DAgSxZsgRrbUC1d+nShVNOOYUOHTpw5ZVXZrdyFMXcuXMZOnRokR8XbCbQLzocevToYf1nM4qIiEjZlpiYSLt27bwuQ/Jx8803c8YZZ4QlsC5ZsoQnnniCN998M+j7zuvnzBiz2FrbI6/tNXIsIiIiIie49957gz6nc3527NjBX//617AcqzA6IU9ERERETlCvXj3OPPPMsBxr2LBhYTlOIDRyLCIiIiLio3AsIiIiIuKjcCwiIiIi4qNwLBJun3wCkydDHnNVioiIiLcUjkXCJSsL7rsPxo2DBx+ECRMgx8pAIiISftHR0XTt2pWOHTty/vnnl2h2hssvv5wPP/wQgKuuuopVq1blu+3MmTP58ccfi3yM5s2bs2PHjhOO++KLLx5326effsro0aMDqjUUrLUMHjyYpKQkunbtSteuXalfvz6NGjXK/vzo0aOF7mfRokXcdNNNBW5z9OhRBg4ceNxqeyWhcCwSDmlpcN558PDDcOWV7vqddxSQRUQ8Fh8fz9KlS1mxYgUVKlTghRdeOO7+vFakC8TLL79M+/bt872/uOE4L/5lp3OaOnVq9hLUXvjyyy/p0qULzZo1Y+nSpSxdupRJkyZx6623Zn9eoUIFgAJDbY8ePXj66acLPFaFChUYMmQI7733XlBq11RuIqG2cSOcdRasWAFPPgk33QTGQGws/OlPYC28+SbE6NdRRMqvW26BPFYxLpGuXd3LbqAGDBjA8uXLmTlzJg8++CANGjRg6dKl/PLLL9x9993MnDmTI0eOcP3113PNNddgreXGG29k+vTptGjR4rjV5AYNGsTjjz9Ojx49+Prrr7n33nvJzMykdu3avPLKK7zwwgtER0fz1ltv8cwzz3DyySczadIkkpOTAXjyySfp168fO3fuZPz48Wzfvp1evXrluWLd0KFDufzyy9myZQsNGjTg4MGDTJs2jZdeeomHHnqIzz//nEOHDtG3b19efPFFjDHHPb558+YsWrSI2rVrs2jRIu644w5mzpzJgQMHuPHGG/nll1/IyMhg8uTJnHXWWaxcuZIrrriCo0ePkpWVxUcffUTr1q2P2+fbb7/NxIkT832uL7/8cmrWrMmSJUvo1q0bF154IbfccguHDh0iPj6e1157jbZt2zJz5kwef/xx/ve//zF58mSSk5NZv349ycnJ3HLLLdmjymeffTb33HMPl1xySeDf8HyE7K+xMaYtkDPCnwTcb619MlTHFIk4s2e7Nor0dPjqKxg+/Nh9d93lQvJdd7mA/NZbCsgiIh7JyMjgq6++YuTIkQAsWLCAFStW0KJFC6ZMmUK1atVYuHAhR44coV+/fgwfPpwlS5awZs0afvnlF7Zu3Ur79u258sorj9vv9u3bufrqq5k1axYtWrRg165d1KxZk0mTJlGlShXuuOMOAC6++GJuvfVW+vfvT3JyMiNGjCAxMZEHH3yQ/v37c//99/PFF18wZcqUE2qPjo5m3LhxvP/++9x888189tlnnH766SQkJHDDDTdw//33A3DppZfyv//9jzPOOCOg5+SRRx5h8ODBvPrqq+zZs4devXoxdOhQXnjhBW6++WYuueQSjh49mufo+ty5c09o9cht7dq1TJs2jejoaPbt28esWbOIiYlh2rRp3HvvvXz00UcnPGb16tXMmDGD/fv307ZtW6699lpiY2Pp2LEjCxcuDOjrKkzI/hJba9cAXQGMMdHAJuCTUB1PJOL8+CMMGQItWsDnn0ObNiduc+edLiDfeacLyG+/rYAsIuVSUUZ4g+nQoUN07doVcCPHf/zjH/nxxx/p1asXLVq0AODbb79l+fLl2T26e/fu5ddff2XWrFmMHz+e6OhoGjZsyODBg0/Y//z58xk4cGD2vmrWrJlnHdOmTTuuR3nfvn3s37+fWbNm8fHHHwMwZswYatSokefjx48fz5133snNN9/M1KlTmTBhAgAzZszgscce4+DBg+zatYsOHToEHI6//fZbPvvsMx5//HEADh8+THJyMqeeeiqPPPIIqampjBs37oRRY4Bdu3aRkJBQ4P7PP/98oqOjAfecXnbZZfz6668YY0hPT8/zMWPGjKFixYpUrFiRunXrsnXrVho3bkx0dDQVKlRg//79hR63MOH6KzwEWGetTQrT8US899xzUKUK/PQTVK+e/3Z33OEC8h13QJ068OyzYStRRKS88/cc51a5cuXsj621PPPMM4wYMeK4bb788ssTWhRys9YWug1AVlYW8+bNIz4+/oT7Anl8v3792LJlC8uWLePHH39k6tSpHD58mOuuu45FixbRpEkTJk+ezOHDh094bExMDFlZWQDH3W+t5aOPPqJt27bHbd+uXTt69+7NF198wYgRI3j55ZdP+MfAv8+oqPxPb8v5HN93332cfvrpfPLJJ2zcuJFBgwbl+ZiKFStmfxwdHX1cv/KRI0eIi4vL93iBCtcJeRcB7+Z1hzFmojFmkTFm0fbt28NUjkiIpaXBp5/C+ecXHIz9br8drroKXn4Zdu0KdXUiIlIEI0aM4Pnnn88ezVy7di0HDhxg4MCBTJ06lczMTLZs2cKMGTNOeOypp57KDz/8wIYNGwA3ogqQkJDA/v37s7cbPnw4z+YYHPEH9oEDB/L2228D8NVXX7F79+48azTGcMEFF3DZZZcxevRo4uLisoNu7dq1SUtLy3d2iubNm7N48WKA41oZRowYwTPPPJPd57xkyRIA1q9fz0knncRNN93EmWeeyfLly0/YZ9u2bVm/fn2ex8vL3r17adSoEQCvv/56wI/z27lzJ3Xq1CE2NrbIj80t5OHYGFMBOBP4IK/7rbVTrLU9rLU96tSpE+pyRMLjv/+FgwehKCcG3HADHDkC//lP6OoSEZEiu+qqq2jfvj3dunWjY8eOXHPNNWRkZHDOOefQunVrOnXqxLXXXstpp512wmPr1KnDlClTGDduHF26dOHCCy8E4IwzzuCTTz6ha9euzJ49m6effppFixbRuXNn2rdvnz1rxgMPPMCsWbPo1q0b3377LU2bNs23zvHjx7Ns2TIuuugiAKpXr87VV19Np06dOPvss+nZs2eej3vggQe4+eabGTBgQHabA7jR3PT0dDp37kzHjh257777AHjvvffo2LEjXbt2ZfXq1dktHDmNGTOGmTNnBvYEA3fddRf33HMP/fr1K9YMITNmzChw6rqiMHmd9RhMxpizgOuttcML27ZHjx52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\n",
"text/plain": [
"<Figure size 864x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"Title = 'Distribution Plot of Predicted Value Using Training Data vs Training Data Distribution'\n",
"DistributionPlot(y_train, yhat_train, \"Actual Values (Train)\", \"Predicted Values (Train)\", Title)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Figure 1: Plot of predicted values using the training data compared to the training data. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So far the model seems to be doing well in learning from the training dataset. But what happens when the model encounters new data from the testing dataset? When the model generates new values from the test data, we see the distribution of the predicted values is much different from the actual target values. "
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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deqwcuVKMjMzmThx4rHL9+7dS4MGDQB48803Q4rn3HPP5csvv+T999/noosuOnacevXqUapUKd5++20yMjJOuV3Tpk1JTk4mMzOTX3755ViHjl69ejFr1izWrl0LwKFDh1i9ejUHDhxg7969nHnmmTz11FMnlFMEtW3b9tjtsjN8+HCef/550tLSAFcjffDgQTZu3Ejt2rW57rrruOaaa1i0aBEAcXFxx64L7o1LrVq1iIuLC+l34xclzyIiIiIB48eP5+yzzz7hsnPPPZf33nuPa6+9lsaNG9OpUyc6d+7Me++9B8D111/PGWecwaBBgwB4/PHHGTVqFIMHD6ZevXrHjvPQQw9x/vnn069fvzzro4OqVq1Kr169qFOnzrEyj9///ve8+eab9OrVi9WrV1OhQoVTbte3b1+aNWtGx44dueuuu47VKteqVYs33niDsWPH0qlTJ3r16nWsi8eoUaPo1KkTAwYM4N///vcpx+zfvz9JSUlYa7ON9dprr6Vdu3Z07dqVDh06cMMNN5Cens706dOJj4+nS5cufPzxx9x2223Hfm+dOnU6tkBw2rRpnHnmmSH9XvxkcvoF+CEhIcGGWvAuIiIixc/KlStp27at32FIDm677TZGjx7NkCFDwn7sc845h7///e+0bt06rMfN7jlljFlorU0oyPE08ywiIiIiIbn33nvD3tMa3MLFMWPGhD1x9oKSZxEREREJSZ06dTjrrLPCftzSpUvnuIgw2ih5FhEREREJkZJnEREREZEQKXkWEREREQmRNkkRiSZHjsDixTB/vjsfPhzOPdfvqERERCRAM88ifvvsM7jpJkhIgEqVoGdPGDcO3nkHzjsPnnvO7whFREqUmJgY4uPj6dChA+eff36huktceeWVx7arvvbaa1mxYkWO150+fTo//vhjvsdo2rQpO3bsOGXcF1988YTLPv3001z7KGeN1QvWWgYPHszGjRuJj48nPj6eunXr0qBBg2PfHz16NKRjnfy7evbZZ3n99de9Cv0ESp5F/DRxIvzud/Dee1ClCtx5J3z0EWzcCLt2uZ+NGwd//7vfkYqIlBjlypUjOTmZZcuWUbp0aV544YUTfp7djn6heOWVV2jXrl2OPy9o8pyd4LbeWU2YMOHYFt9++PLLL+ncuTNNmjQhOTmZ5ORkbrzxRu64445j35cuXTqkY538u7r66qt5+umnvQr9BCrbEPHL5s1w7bXQrRv8+CNk94Lx4Ydw1VVw772wbx/87W9gTORjFRHxwe23Qza7RBdKfDw89VTo1+/Xrx9Llixh+vTpPPzww9SrV4/k5GSWLl3K3XffzfTp0zly5Ag333wzN9xwA9ZabrnlFqZOnUqzZs1O2I1v4MCBPPnkkyQkJPD1119z7733kpGRQc2aNXn11Vd54YUXiImJ4Z133uGZZ56hTZs23Hjjjfz8888APPXUU/Tt25edO3cyduxYtm/fTo8ePbLd8W/IkCFceeWVbNmyhXr16nHo0CGmTJnCyy+/zCOPPMLnn3/O4cOH6dOnDy+++CLmpP8tTZs2ZcGCBdSsWZMFCxZw1113MX36dA4ePMgtt9zC0qVLSU9P56GHHuJ3v/sdy5cv56qrruLo0aNkZmby8ccf07JlyxOO+e6773L99dfn+LteuHAhd955JwcOHKBmzZq88cYb1KtXj6effpoXXniB2NhY2rVrx+OPP37K76pfv340bdqUefPm0aNHj9Af4AJQ8izih8xMuPxySE2Fd9/NPnEGiIuDt96CihXh8cddAv3MM1BKHxqJiHgtPT2dr776ihEjRgAwb948li1bRrNmzXjppZeoUqUK8+fP58iRI/Tt25dhw4aRlJTEqlWrWLp0Kdu2baNdu3ZcffXVJxx3+/btXHfddcyYMYNmzZqxa9cuqlevzo033kjFihW56667ALj44ou54447SExM5Oeff2b48OGsXLmShx9+mMTERB544AG++OILXnrppVNij4mJ4ZxzzuGDDz7gtttu47PPPmPQoEFUqlSJcePG8cADDwBw2WWXMWnSJEaPHh3S7+Sxxx5j8ODBvPbaa+zZs4cePXowZMgQXnjhBW677TYuueQSjh49mu3s/KxZs04pJQlKS0vjlltu4X//+x+1atXi/fff57777uO1117j8ccfZ/369ZQpU4Y9e/ZQtWrVU35XAAkJCfzwww9KnkWKpSefhKlT4ZVXIK/dlEqVguefd/XQTz4J+/fDa69BrP58RaR4y88McTgdPnyY+Ph4wM08X3PNNfz444/06NGDZs2aATB58mSWLFlyrEZ47969rFmzhhkzZjB27FhiYmKoX78+gwcPPuX4c+bMoX///seOVb169WzjmDJlygk10vv27WP//v3MmDGDTz75BICRI0dSrVq1bG8/duxY/vjHP3LbbbcxYcKEY5uQTJs2jSeeeIJDhw6xa9cu2rdvH3LyPHnyZD777DOefPJJAFJTU/n555/p3bs3jz32GJs2beKcc845ZdYZYNeuXVSqVCnb465atYply5YxdOhQwJXG1KtXD4BOnTpxySWXMGbMGMaMGZNjbLVr1yYlJSWk+1EY+u8rEmkLFsB997kuGifNRuTIGHjiCVcXff/9UKYMvPyyt3GKiJRQwZrnk1WoUOHY19ZannnmGYYPH37Cdb788stTSiBOZq3N8zoAmZmZzJ49m3Llyp3ys1Bu37dvX7Zs2cLixYv58ccfmTBhAqmpqfz+979nwYIFNGrUiIceeojU1NRTbhsbG0tmZibACT+31vLxxx+fso1227Zt6dmzJ1988QXDhw/nlVdeOeWNQ/CYpbL59NRaS/v27Zk9e/YpP/viiy+YMWMGn332GX/9619Zvnx5tvc3NTU1299VuOmzX5FIOnAALr4Y6taFl17KX/2yMfCXv7giwFdfhVxWbIuIiLeGDx/O888/T1paGgCrV6/m4MGD9O/fnwkTJpCRkcGWLVuYNm3aKbft3bs333//PevXrwfcjCxApUqV2L9//7HrDRs2jGefffbY98GEvn///rz77rsAfPXVV+zevTvbGI0xXHDBBVxxxRWceeaZlC1b9lgiXLNmTQ4cOJBjd42mTZuycOFCAD7++OMT7vczzzxzrM46KSkJgHXr1tG8eXNuvfVWzjrrLJYsWXLKMVu3bs26deuyHa9169Zs3779WPKclpbG8uXLyczM5JdffmHQoEE88cQT7NmzhwMHDpzyuwL3GHTo0CHb44eTkmeRSLr9dli7Ft5+G3L4mC5P990H5cvDX/8a1tBERCR01157Le3ataNr16506NCBG264gfT0dM4++2xatmxJx44duemmmxgwYMApt61VqxYvvfQS55xzDp07d+bCCy8EYPTo0UycOJH4+Hh++OEHnn76aRYsWECnTp1o167dsa4fDz74IDNmzKBr165MnjyZxo0b5xjn2LFjWbx4MRdddBEAVatW5brrrqNjx46MGTOG7t27Z3u7Bx98kNtuu41+/foRExNz7PL777+ftLQ0OnXqRIcOHbj//vsBeP/99+nQoQPx8fGkpKQcKxHJauTIkUyfPj3b8UqXLs1HH33En//8Zzp37kx8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RES8kZAAH37oJn6vuMJVV7Ru7UqUk5I8HrxhQ3jqKVe68ec/w1dfQefOcNZZMGeOx4NLUaHkOZrt2wcjRvDEqt/xavoV/OUv7pMkERGR4q5lS1eKvGGDa3H31VfQtatbYDhtmscdOmrXdm3tNm6Ehx+GWbPcluv9+7v9yDMzPRxcop2S52h1+DCMHs0ri7pyd8ZjXHwxPPKI30GJiIhEVr16bsftn39254sXw+DB0KuX280wI8PDwatVgwcecEn0U0+589GjXduQN96Ao0c9HFyilZLnaLRzJ3bUaO6fMZTrMl9k+HC3S5MxfgcmIiLijypVXCXFhg3wwguwaxecfz60auU6zh086OHgFSu63rBr17pWd7GxbqvE5s1dcfauXR4OLtFGyXO0SUriaLfeXDH9Sh7lL1xzDXz+OZQt63dgIiIi/itbFm64wbVq/uQTqFMHbrkFGjWCv/zF4w4dcXFwySWQnAxff+2Kse++29VKX3edFheWEEqeo8lbb7Gn9xmM2Po6b2deyl//6jroxMX5HZiIiEh0iYlxmwX++KMrSR44EP72N9fm7tJLYe5cDwc3xhVff/edS5gvuwzefdctLhw0yGX16ekeBiB+UvIcDY4ehXHj+PmKv5AYO5uZmX146y33DlqlGiIiIrnr08flq6tWudZ2n33maqJ79IC33/Z458KOHd3Kxk2b4IknYP16OPdct+PLAw9o05ViSMmz37ZsgcGD+fq5tfSqsJRfYpry9deGyy7zOzAREZGipWVLePppl8c+84xrWnX55W42+t57Pe4XXb26awvy008wcSJ06ACPPurqoocOhfffj8D+4xIJSp79kp4OL7zAjg4DuXTOOM7ga6o0qsKsWYbBg/0OTkREpOiqXNntdbJihdu5sGdPt66vZUtXVfHOO66plSdiYmDMGNdbb8MGeOghWLPGNaquXx9uvRVmz/a41554ydgoevASEhLsggUL/A7De999h73tdsYv78htcf9lr63CPfca7r3XbVUqIiIi4bV5M7z5ptuB+6efXPeOiy929dG9ekEpL6cTMzNdffSrr8Knn7oZ6CZN3A6GF10E8fGq04wwY8xCa21CgW6r5DmC1qyBu+7i58+SuKncG3x5eDA9e1peecXQoYPfwYmIiBR/mZnw/fcuj/34Y0hNdWUdwTy2SxeP89h9++B//4MJE2Dy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\n",
"text/plain": [
"<Figure size 864x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"Title='Distribution Plot of Predicted Value Using Test Data vs Data Distribution of Test Data'\n",
"DistributionPlot(y_test,yhat_test,\"Actual Values (Test)\",\"Predicted Values (Test)\",Title)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Figur 2: Plot of predicted value using the test data compared to the test data. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>Comparing Figure 1 and Figure 2; it is evident the distribution of the test data in Figure 1 is much better at fitting the data. This difference in Figure 2 is apparent where the ranges are from 5000 to 15 000. This is where the distribution shape is exceptionally different. Let's see if polynomial regression also exhibits a drop in the prediction accuracy when analysing the test dataset.</p>"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"from sklearn.preprocessing import PolynomialFeatures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>Overfitting</h4>\n",
"<p>Overfitting occurs when the model fits the noise, not the underlying process. Therefore when testing your model using the test-set, your model does not perform as well as it is modelling noise, not the underlying process that generated the relationship. Let's create a degree 5 polynomial model.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's use 55 percent of the data for testing and the rest for training:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.45, random_state=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will perform a degree 5 polynomial transformation on the feature <b>'horse power'</b>. "
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"PolynomialFeatures(degree=5, include_bias=True, interaction_only=False)"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pr = PolynomialFeatures(degree=5)\n",
"x_train_pr = pr.fit_transform(x_train[['horsepower']])\n",
"x_test_pr = pr.fit_transform(x_test[['horsepower']])\n",
"pr"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's create a linear regression model \"poly\" and train it."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
" normalize=False)"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"poly = LinearRegression()\n",
"poly.fit(x_train_pr, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see the output of our model using the method \"predict.\" then assign the values to \"yhat\"."
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 6728.65561887, 7307.98782321, 12213.78770965, 18893.24804015,\n",
" 19995.95195136])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"yhat = poly.predict(x_test_pr)\n",
"yhat[0:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's take the first five predicted values and compare it to the actual targets. "
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Predicted values: [ 6728.65561887 7307.98782321 12213.78770965 18893.24804015]\n",
"True values: [ 6295. 10698. 13860. 13499.]\n"
]
}
],
"source": [
"print(\"Predicted values:\", yhat[0:4])\n",
"print(\"True values:\", y_test[0:4].values)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will use the function \"PollyPlot\" that we defined at the beginning of the lab to display the training data, testing data, and the predicted function."
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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hYWSpBdffLFF53311Ve67777dMMNNxzQz2effbb+uN69e6usrKz+fqjjugpCOgAAgJt4vVJenpSeLhnjv83La/f56E3dfvvtuuuuu3T88cerpqam3a8fHx+vxx57TNOmTdOUKVM0cOBAJSYmBj32gw8+qC/BeMMNN+iRRx6pr+xyzz336KKLLtIJJ5ygfv361Z8zffp0vfrqq/ULR0Md11WYtnz00B1lZWXZ/Px8p7sBAAC6keXLl9dP14hk5eXlSkhIkLVWN9xwg0aPHq1bb73V6W51imCvAWPMQmtt0PqWjKQDAACgU/zlL3/RhAkTdNhhh6m0tFTXXnut011yLaq7AAAAoFPceuutETNy3laMpAMAAAAuQ0gHAAAAXIaQDgAAALgMIR0AAABwGUI6AABAN1dSUqIJEyZowoQJGjRokFJTU+vvV1ZWHvT8efPmacGCBUEfe+aZZ9S/f39NnDhRo0eP1plnnhny2Ib+/e9/a9myZWE/l0hBSAcAAHAZX4FPGTMzFHVvlDJmZshX4GvT9VJSUrR48WItXrxY1113nW699db6+z169Djo+c2FdEn6/ve/r0WLFmnVqlW68847dcEFF2j58uXNXpOQ3jxCOgAAgIv4CnzKnpOtotIiWVkVlRYpe052m4N6UwsXLtRJJ52ko446SmeeeaY2b94sSXrkkUc0btw4jR8/XpdccokKCwv1+OOP66GHHqrfzbM5p5xyirKzs5WXlyfJXxv96KOP1hFHHKHvfe97qqio0IIFCzR79mz9/Oc/14QJE7RmzZqgx0UyQjoAAICL5MzNUUVV44BaUVWhnLk57fYzrLW66aab9PLLL2vhwoW6+uqrlZPjv/7999+vRYsW6auvvtLjjz+ujIyMRqPvJ5xwwkGvf+SRR+rrr7+WJF1wwQX6/PPP9eWXX2rs2LF66qmnNHnyZH33u9/V7373Oy1evFgjR44MelwkYzMjAAAAFykuLQ6rvTX279+vJUuW6PTTT5ck1dTUaPDgwZKk8ePHy+v16rzzztN5553Xqutba+u/X7JkiX75y19q165dKi8v15lnnhn0nJYeFykI6QAAAC6SlpimotKioO3txVqrww47TB9//PEBj/33v//V/PnzNXv2bN13331aunRp2NdftGiRxo4dK0m68sor9e9//1tHHHGEnnnmGc2bNy/oOS09LlIw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\n",
"text/plain": [
"<Figure size 864x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"PollyPlot(x_train[['horsepower']], x_test[['horsepower']], y_train, y_test, poly,pr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Figur 4 A polynomial regression model, red dots represent training data, green dots represent test data, and the blue line represents the model prediction. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We see that the estimated function appears to track the data but around 200 horsepower, the function begins to diverge from the data points. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" R^2 of the training data:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.556771690212023"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"poly.score(x_train_pr, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" R^2 of the test data:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"-29.871340302044153"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"poly.score(x_test_pr, y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We see the R^2 for the training data is 0.5567 while the R^2 on the test data was -29.87. The lower the R^2, the worse the model, a Negative R^2 is a sign of overfitting."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's see how the R^2 changes on the test data for different order polynomials and plot the results:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"Text(3, 0.75, 'Maximum R^2 ')"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"Rsqu_test = []\n",
"\n",
"order = [1, 2, 3, 4]\n",
"for n in order:\n",
" pr = PolynomialFeatures(degree=n)\n",
" \n",
" x_train_pr = pr.fit_transform(x_train[['horsepower']])\n",
" \n",
" x_test_pr = pr.fit_transform(x_test[['horsepower']]) \n",
" \n",
" lr.fit(x_train_pr, y_train)\n",
" \n",
" Rsqu_test.append(lr.score(x_test_pr, y_test))\n",
"\n",
"plt.plot(order, Rsqu_test)\n",
"plt.xlabel('order')\n",
"plt.ylabel('R^2')\n",
"plt.title('R^2 Using Test Data')\n",
"plt.text(3, 0.75, 'Maximum R^2 ') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We see the R^2 gradually increases until an order three polynomial is used. Then the R^2 dramatically decreases at four."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following function will be used in the next section; please run the cell."
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"def f(order, test_data):\n",
" x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=test_data, random_state=0)\n",
" pr = PolynomialFeatures(degree=order)\n",
" x_train_pr = pr.fit_transform(x_train[['horsepower']])\n",
" x_test_pr = pr.fit_transform(x_test[['horsepower']])\n",
" poly = LinearRegression()\n",
" poly.fit(x_train_pr,y_train)\n",
" PollyPlot(x_train[['horsepower']], x_test[['horsepower']], y_train,y_test, poly, pr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following interface allows you to experiment with different polynomial orders and different amounts of data. "
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "38c2f2b12e374188b81a1fa743bf05f3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(IntSlider(value=3, description='order', max=6), FloatSlider(value=0.45, description='tes…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<function __main__.f(order, test_data)>"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"interact(f, order=(0, 6, 1), test_data=(0.05, 0.95, 0.05))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #4a):</h1>\n",
"\n",
"<b>We can perform polynomial transformations with more than one feature. Create a \"PolynomialFeatures\" object \"pr1\" of degree two?</b>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"pr1=PolynomialFeatures(degree=2)\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #4b): </h1>\n",
"\n",
"<b> \n",
" Transform the training and testing samples for the features 'horsepower', 'curb-weight', 'engine-size' and 'highway-mpg'. Hint: use the method \"fit_transform\" \n",
"?</b>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"x_train_pr1=pr.fit_transform(x_train[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']])\n",
"\n",
"x_test_pr1=pr.fit_transform(x_test[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']])\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- The answer is below:\n",
"\n",
"x_train_pr1=pr.fit_transform(x_train[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']])\n",
"x_test_pr1=pr.fit_transform(x_test[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']])\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #4c): </h1>\n",
"<b> \n",
"How many dimensions does the new feature have? Hint: use the attribute \"shape\"\n",
"</b>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"There are now 15 features: x_train_pr1.shape \n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #4d): </h1>\n",
"\n",
"<b> \n",
"Create a linear regression model \"poly1\" and train the object using the method \"fit\" using the polynomial features?</b>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"poly1=linear_model.LinearRegression().fit(x_train_pr1,y_train)\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" <div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #4e): </h1>\n",
"<b>Use the method \"predict\" to predict an output on the polynomial features, then use the function \"DistributionPlot\" to display the distribution of the predicted output vs the test data?</b>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"yhat_test1=poly1.predict(x_test_pr1)\n",
"Title='Distribution Plot of Predicted Value Using Test Data vs Data Distribution of Test Data'\n",
"DistributionPlot(y_test, yhat_test1, \"Actual Values (Test)\", \"Predicted Values (Test)\", Title)\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #4f): </h1>\n",
"\n",
"<b>Use the distribution plot to determine the two regions were the predicted prices are less accurate than the actual prices.</b>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"The predicted value is lower than actual value for cars where the price $ 10,000 range, conversely the predicted price is larger than the price cost in the $30, 000 to $40,000 range. As such the model is not as accurate in these ranges .\n",
" \n",
"-->\n",
"\n",
"<img src = \"https://ibm.box.com/shared/static/c35ipv9zeanu7ynsnppb8gjo2re5ugeg.png\" width = 700, align = \"center\">\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2 id=\"ref3\">Part 3: Ridge regression</h2> "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" In this section, we will review Ridge Regression we will see how the parameter Alfa changes the model. Just a note here our test data will be used as validation data."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Let's perform a degree two polynomial transformation on our data. "
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"pr=PolynomialFeatures(degree=2)\n",
"x_train_pr=pr.fit_transform(x_train[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg','normalized-losses','symboling']])\n",
"x_test_pr=pr.fit_transform(x_test[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg','normalized-losses','symboling']])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Let's import <b>Ridge</b> from the module <b>linear models</b>."
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import Ridge"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's create a Ridge regression object, setting the regularization parameter to 0.1 "
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"RigeModel=Ridge(alpha=0.1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Like regular regression, you can fit the model using the method <b>fit</b>."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/sklearn/linear_model/ridge.py:125: LinAlgWarning: Ill-conditioned matrix (rcond=1.02972e-16): result may not be accurate.\n",
" overwrite_a=True).T\n"
]
},
{
"data": {
"text/plain": [
"Ridge(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=None,\n",
" normalize=False, random_state=None, solver='auto', tol=0.001)"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RigeModel.fit(x_train_pr, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Similarly, you can obtain a prediction: "
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"yhat = RigeModel.predict(x_test_pr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's compare the first five predicted samples to our test set "
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"predicted: [ 6567.83081933 9597.97151399 20836.22326843 19347.69543463]\n",
"test set : [ 6295. 10698. 13860. 13499.]\n"
]
}
],
"source": [
"print('predicted:', yhat[0:4])\n",
"print('test set :', y_test[0:4].values)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We select the value of Alfa that minimizes the test error, for example, we can use a for loop. "
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"Rsqu_test = []\n",
"Rsqu_train = []\n",
"dummy1 = []\n",
"ALFA = 10 * np.array(range(0,1000))\n",
"for alfa in ALFA:\n",
" RigeModel = Ridge(alpha=alfa) \n",
" RigeModel.fit(x_train_pr, y_train)\n",
" Rsqu_test.append(RigeModel.score(x_test_pr, y_test))\n",
" Rsqu_train.append(RigeModel.score(x_train_pr, y_train))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can plot out the value of R^2 for different Alphas "
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f379a20eb38>"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAAJNCAYAAAD6c1l4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4eElEQVR4nO3de5hlZWHn+9/bdenqK91Agwi03RoUaEAuFaLBUYjRoBPjJSbBy0Q8E4lEJ5k8GQaSSWLUJ2dyToyjjhpDHGcyDonHoCjmMd4yGNTgSDeicvHCTWhJoAGBvndV13v+2HtX766uvu61u7qrP5/n2c9ee112vZul8nXVW3uVWmsAAIDezZnpAQAAwGwhrgEAoCHiGgAAGiKuAQCgIeIaAAAaIq4BAKAhgzM9gCYde+yxdcWKFTM9DAAAZrE1a9Y8UmtdNt22WRXXK1asyOrVq2d6GAAAzGKllB/ubptpIQAA0BBxDQAADRHXAADQkFk15xoAYCaNjY1l7dq12bJly0wPhQaMjIzkpJNOytDQ0D4fI64BABqydu3aLFq0KCtWrEgpZaaHQw9qrXn00Uezdu3arFy5cp+PMy0EAKAhW7ZsyTHHHCOsZ4FSSo455pj9/i2EuAYAaJCwnj0O5FyKawCAI9jChQuTJA8++GBe/epXT7vPhRdeuNd7ibznPe/Jpk2bJl+/9KUvzeOPP97YODs6492dxx9/PB/84Acb/7n7SlwDAJCnPvWpufbaaw/4+Klx/dnPfjZLlixpYGT7R1wDANCIK6+8cqew/KM/+qP82Z/9WTZs2JAXvvCFOffcc3PmmWfm05/+9C7H3nfffTnjjDOSJJs3b84ll1ySs846K7/yK7+SzZs3T+53+eWXZ3R0NKtWrcrb3va2JMn73ve+PPjgg7noooty0UUXJWndOfuRRx5Jkrz73e/OGWeckTPOOCPvec97Jn/eaaedlje96U1ZtWpVXvziF+/0czruvffePPe5z81P/uRP5g/+4A8m1+/uM1111VW5++67c/bZZ+eKK67Yp8/eqFrrrHmcd955FQBgptxxxx0z+vNvueWW+vznP3/y9WmnnVZ/+MMf1rGxsfrEE0/UWmtdt25dfcYznlEnJiZqrbUuWLCg1lrrvffeW1etWlVrrfXP/uzP6hvf+MZaa63f+ta36sDAQL355ptrrbU++uijtdZax8fH6wte8IL6rW99q9Za69Oe9rS6bt26yZ/deb169ep6xhln1A0bNtT169fX008/vd5yyy313nvvrQMDA/Wb3/xmrbXWX/qlX6of/ehHd/lML3vZy+pf/dVf1Vprff/73z853t19pu7Psaf99tV05zTJ6rqbHvVVfAAAffD2z9yeOx58stH3PP2pi/O2l63a7fZzzjknDz/8cB588MGsW7cuS5cuzfLlyzM2Npbf+73fy4033pg5c+bkRz/6UR566KE85SlPmfZ9brzxxvzmb/5mkuSss87KWWedNbnt4x//eK6++uqMj4/nn//5n3PHHXfstH2qr371q3nlK1+ZBQsWJEle9apX5Stf+Up+4Rd+IStXrszZZ5+dJDnvvPNy33337XL81772tXziE59Ikvybf/NvcuWVVyZpXSCe7jNNtbv9dvfZeyWuAQBmkVe/+tW59tpr8y//8i+55JJLkiTXXHNN1q1blzVr1mRoaCgrVqzY61fMTfdNGffee2/e9a535eabb87SpUtz6aWX7vV9Whd6pzd37tzJ5YGBgWmnhexuLPv6mQ7ks/dCXAMA9MGerjD30yWXXJI3velNeeSRR/KP//iPSZInnngixx13XIaGhnLDDTfkhz/84R7f4/nPf36uueaaXHTRRbntttvy7W9/O0ny5JNPZsGCBTnqqKPy0EMP5e///u9z4YUXJkkWLVqU9evX59hjj93lvS699NJcddVVqbXmuuuuy0c/+tF9/jwXXHBBPvaxj+X1r399rrnmmsn1u/tMnXHsbb9+EdcAALPIqlWrsn79+px44ok54YQTkiSve93r8rKXvSyjo6M5++yzc+qpp+7xPS6//PK88Y1vzFlnnZWzzz47559/fpLk2c9+ds4555ysWrUqT3/603PBBRdMHnPZZZflJS95SU444YTccMMNk+vPPffcXHrppZPv8Wu/9ms555xzpp0CMp33vve9ee1rX5v3vve9+cVf/MXJ9bv7TMccc0wuuOCCnHHGGXnJS16SK6+8cr8+e6/Kni7VH25GR0fr3r6DEQCgX+68886cdtppMz0MGjTdOS2lrKm1jk63v6/iAwCAhohrAABoiLgGAICGiGsAAGiIuAYAgIaIawAAaIi47tXmzcmLX5x89rMzPRIA4Aj3+OOP54Mf/OABHfvSl740jz/++B73+cM//MN86UtfOqD3n2rFihU588wzc+aZZ+b000/P7//+72fr1q17PKaXz3ewiOtePfBA8sUvJq98ZesZAGCG7Ck+t2/fvsdjP/vZz2bJkiV73Ocd73hHfvZnf/ZAh7eLG264Id/5znfyjW98I/fcc08uu+yyPe4vro8EnXvTDwwkL3950r7NKADAwXbVVVfl7rvvztlnn50rrrgiX/7yl3PRRRflta99bc4888wkySte8Yqcd955WbVqVa6++urJY1esWJFHHnkk9913X0477bS86U1vyqpVq/LiF784mzdvTpJceumlufbaayf3f9vb3pZzzz03Z555Zr773e8mSdatW5cXvehFOffcc/Prv/7redrTnpZHHnlkj+NeuHBhPvShD+VTn/pUHnvssWzYsCEvfOELJ9/705/+9LSfb3f7zSRx3avOry8+8IFk5crkX//r5J/+aWbHBAAckf7kT/4kz3jGM3LrrbfmT//0T5Mk3/jGN/LHf/zHueOOO5IkH/nIR7JmzZqsXr0673vf+/Loo4/u8j4/+MEP8pa3vCW33357lixZkk984hPT/rxjjz02t9xySy6//PK8613vSpK8/e1vz8/8zM/klltuyStf+crcf//9+zT2xYsXZ+XKlfnBD36QkZGRXHfddbnllltyww035Hd+53dSa93l8+1uv5k0OKM/fTboxPVJJyVf+lLyghckP/dzyX/9r8kb3pCUMrPjAwBmxr//98mttzb7nmefnbznPft1yPnnn5+VK1dOvn7f+96X6667LknywAMP5Ac/+EGOOeaYnY5ZuXJlzj777CTJeeedl/vuu2/a937Vq141uc8nP/nJJMlXv/rVyfe/+OKLs3Tp0n0eayeMa635vd/7vdx4442ZM2dOfvSjH+Whhx6adv/p9nvKU56yzz+zaa5c96ozLWRkJDnhhOTLX07OOy954xtb00TavyIBAJgJCxYsmFz+8pe/nC996Uu56aab8q1vfSvnnHNOtnRapsvcuXMnlwcGBjI+Pj7te3f2697nQK8cr1+/Pvfdd1+e+cxn5pprrsm6deuyZs2a3HrrrTn++OOnHee+7ncwuXLdq86V685/CJ/61OQf/iF597uTd7wjWbUqueSS5M1vTp73PFeyAeBIsZ9XmJuwaNGirF+/frfbn3jiiSxdujTz58/Pd7/73Xz9619vfAzPe97z8vGPfzxXXnllvvCFL+THP/7xXo/ZsGFDfuM3fiOveMUrsnTp0jzxxBM57rjjMjQ0lBtuuCE//OEPk+z6+Xa330xy5bpX3VeuOwYGkiuuSO6+O/mt30r+7u+S5z8/Oe205Hd/N7nppmQvf7ELALC/jjnmmFxwwQU544wzcsUVV+yy/eKLL874+HjOOuus/MEf/EGe85znND6Gt73tbfnCF76Qc889N3//93+fE044IYsWLZp234suuihnnHFGzj///Cxfvjx/8Rd/kSR53etel9WrV2d0dDTXXHNNTj311Gk/3+72m0llpid9N2l0dLSuXr364P7Qv/7r5HWva03/eNazpt9n48bk4x9PPvrR5MYbW2G9cGHynOckF1zQmkZy+umtP4ic4//vAMDh6s4778xpp50208OYUVu3bs3AwEAGBwdz00035fLLL8+tTc89P4imO6ellDW11tHp9jctpFdTp4VMZ8GC1hzsN74xefzx5POfb0X2176WvPOdycREa79581pXt5/1rORpT0uWL9/xvHx5smiRaSUAwCHt/vvvzy//8i9nYmIiw8PD+cu//MuZHtJBJa57Nd20kD1ZsiT5lV9pPZJk/frkttuS229P7rij9fz1ryd/+7fJ1D8eGBlJjjsuWbZs58exxyZHHZUsXtx67l7uPA861QBA/51yyin55je/OdPDmDGKq1f7cuV6TxYtSp773Naj2/btyb/8S3L//TseDz/ceqxb13rceWfredOmvf+cefOS+fN3PLpf727bvHnJ8HDrMXfujuXpXu9tn8HB1lx0V94BgFlMXPdqf69c76uBgeTEE1uPqeE91ebNyZNPJk88seO5e7nzvHlzK8Q3bdqxvHFj8sgju65v34mpcQMDrdDuPKa+nvrY2/ap+wwM7HjMmdN6dJanPu/run5s6zxKmf55T9v6+dx5AHDAaq0p/rd0VjiQv00U173q9cp1E+bNaz2OP76595yYaH22bdt2fuzLuuleb9/emuayu8f+bN+yZffbx8ZaY+88tm+f/rl7eRb9UW9j+hHv+xr2u3sk+7bfwX6vQ/39ZmJsnX26993TOsc45mAdcxCMjIzk0UcfzTHHHBOBfXirtebRRx/NyH5eQBXXvdq6tXXFdLZ9y8ecOTuifbardffhvacoP9D9u6N+uuc9bTvcn/e2z+4enfO0P4/dveeBvFfTYztY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\n",
"text/plain": [
"<Figure size 864x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"width = 12\n",
"height = 10\n",
"plt.figure(figsize=(width, height))\n",
"\n",
"plt.plot(ALFA,Rsqu_test, label='validation data ')\n",
"plt.plot(ALFA,Rsqu_train, 'r', label='training Data ')\n",
"plt.xlabel('alpha')\n",
"plt.ylabel('R^2')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Figure 6:The blue line represents the R^2 of the test data, and the red line represents the R^2 of the training data. The x-axis represents the different values of Alfa "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The red line in figure 6 represents the R^2 of the test data, as Alpha increases the R^2 decreases; therefore as Alfa increases the model performs worse on the test data. The blue line represents the R^2 on the validation data, as the value for Alfa increases the R^2 decreases. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #5): </h1>\n",
"\n",
"Perform Ridge regression and calculate the R^2 using the polynomial features, use the training data to train the model and test data to test the model. The parameter alpha should be set to 10.\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"RigeModel=Ridge(alpha=0)\n",
"RigeModel.fit(x_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"RigeModel = Ridge(alpha=0) \n",
"RigeModel.fit(x_train_pr, y_train)\n",
"RigeModel.score(x_test_pr, y_test)\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2 id=\"ref4\">Part 4: Grid Search</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The term Alfa is a hyperparameter, sklearn has the class <b>GridSearchCV</b> to make the process of finding the best hyperparameter simpler."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's import <b>GridSearchCV</b> from the module <b>model_selection</b>."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"from sklearn.model_selection import GridSearchCV"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We create a dictionary of parameter values:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"parameters1= [{'alpha': [0.001,0.1,1, 10, 100, 1000, 10000, 100000, 100000]}]\n",
"parameters1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a ridge regions object:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"RR=Ridge()\n",
"RR"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a ridge grid search object "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"Grid1 = GridSearchCV(RR, parameters1,cv=4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fit the model "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"Grid1.fit(x_data[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']], y_data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The object finds the best parameter values on the validation data. We can obtain the estimator with the best parameters and assign it to the variable BestRR as follows:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"BestRR=Grid1.best_estimator_\n",
"BestRR"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" We now test our model on the test data "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"BestRR.score(x_test[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']], y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #6): </h1>\n",
"Perform a grid search for the alpha parameter and the normalization parameter, then find the best values of the parameters\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"# Write your code below and press Shift+Enter to execute \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"parameters2= [{'alpha': [0.001,0.1,1, 10, 100, 1000,10000,100000,100000],'normalize':[True,False]} ]\n",
"Grid2 = GridSearchCV(Ridge(), parameters2,cv=4)\n",
"Grid2.fit(x_data[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']],y_data)\n",
"Grid2.best_estimator_\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>Thank you for completing this notebook!</h1>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n",
"\n",
" <p><a href=\"https://cocl.us/corsera_da0101en_notebook_bottom\"><img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/Images/BottomAd.png\" width=\"750\" align=\"center\"></a></p>\n",
"</div>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>About the Authors:</h3>\n",
"\n",
"This notebook was written by <a href=\"https://www.linkedin.com/in/mahdi-noorian-58219234/\" target=\"_blank\">Mahdi Noorian PhD</a>, <a href=\"https://www.linkedin.com/in/joseph-s-50398b136/\" target=\"_blank\">Joseph Santarcangelo</a>, Bahare Talayian, Eric Xiao, Steven Dong, Parizad, Hima Vsudevan and <a href=\"https://www.linkedin.com/in/fiorellawever/\" target=\"_blank\">Fiorella Wenver</a> and <a href=\" https://www.linkedin.com/in/yi-leng-yao-84451275/ \" target=\"_blank\" >Yi Yao</a>.\n",
"\n",
"<p><a href=\"https://www.linkedin.com/in/joseph-s-50398b136/\" target=\"_blank\">Joseph Santarcangelo</a> is a Data Scientist at IBM, and holds a PhD in Electrical Engineering. His research focused on using Machine Learning, Signal Processing, and Computer Vision to determine how videos impact human cognition. Joseph has been working for IBM since he completed his PhD.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr>\n",
"<p>Copyright &copy; 2018 IBM Developer Skills Network. This notebook and its source code are released under the terms of the <a href=\"https://cognitiveclass.ai/mit-license/\">MIT License</a>.</p>"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python",
"language": "python",
"name": "conda-env-python-py"
},
"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.6.11"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment