Skip to content

Instantly share code, notes, and snippets.

@Hamid264
Created July 9, 2020 08:44
Show Gist options
  • Save Hamid264/e7714a7cca3db1b7997f40b26d78f47e to your computer and use it in GitHub Desktop.
Save Hamid264/e7714a7cca3db1b7997f40b26d78f47e 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": 4,
"metadata": {},
"outputs": [],
"source": [
"%%capture\n",
"! pip install ipywidgets"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/IPython/html.py:14: ShimWarning: The `IPython.html` package has been deprecated since IPython 4.0. You should import from `notebook` instead. `IPython.html.widgets` has moved to `ipywidgets`.\n",
" \"`IPython.html.widgets` has moved to `ipywidgets`.\", ShimWarning)\n"
]
}
],
"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": 7,
"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": 8,
"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": 9,
"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": 10,
"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": 11,
"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": 12,
"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])\n"
]
},
{
"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": 13,
"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": 14,
"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": 15,
"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": 15,
"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": 16,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.707688374146705"
]
},
"execution_count": 16,
"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": 17,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.6449517437659684"
]
},
"execution_count": 17,
"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": 26,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.5166761697127429"
]
},
"execution_count": 26,
"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": 27,
"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": 28,
"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": 28,
"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": 29,
"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": 29,
"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": 30,
"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": 30,
"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": 31,
"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": 31,
"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": 32,
"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": 33,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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ZGVlkZSUxL/+9S/atGmTZztGjhzJmDFjcoL6+PHjGThwIDVr1izUuh588EFq167NnXfeCUCHDh346KOPaNmyJW+88QZ/+9vfOHToEN26deO5554D4IYbbmDu3LmYGddffz3/9V//lWudU6dOpXPnznkG75BevXpxwQUXMGPGDK644gpatWrFo48+yqFDh2jYsCFvvPEGjRo14p///CeLFi3imWee4Wc/+xn169cnLS2NTZs28fTTT+cE+csvv5w333xTQV1ERESkIpswYQIDBw7k7LPPpl69esyfP5/OnTvz6aefMmHCBGbPnk3NmjXZsWMH9erV4+9//ztPPfUUKSkp+a63bdu2TJ8+nSpVqjB58mTuu+8+3nvvvTznHzhwIDfeeCPbt2+nfv36jBs3jt/85jfFWle4xYsX8+9//5uZM2dStWpVbrnlFt58803OOecc1q9fz6JFiwDYtWvXccvOnDmTLl26FGo7e/bsYfr06QDs3LmToUOHYmY8//zzPP300/z5z38+bpktW7Ywc+ZMvvvuO66++uqcoJ6SksLDDz9cqO2WJAV1ERERESiw57ukjB07ljvuuAOAESNGMHbsWDp37szkyZP5xS9+Qc2aNQGoV69ekda7e/duRo8ezfLlyzEzDh8+nO/81apVY+jQobz77rsMHz6c9PR0+vfvX6x1hZsyZQrz5s2ja9euAGRlZdGoUSN+8pOfsHLlSn7zm98wZMiQnG2F27hxI+3atSvUdkaMGJHz+9q1a7n66qvZtGkTBw8e5Oyzz466zOWXX46Z0bFjR9avX58zvVGjRid0HkCsKKiLiIiIxMn27duZOnUqixYtwsw4cuQIZsYTTzyBc65QY29XqVKFo0ePAuS6oM4f/vAH+vXrx/jx41m9ejV9+/YtcF0jR47k4YcfxjnHZZddlnO5+8KsK7wd4W1xzjF69Ggee+yx45ZZuHAhn332Gc8++yxvv/02L7/8cq77k5KSCn2RoFq1auX8fuutt3LfffcxePBgJk+ezOOPPx51merVq+f87pzL1fakpKRCbbckadQXERERkTh59913GTVqFGvWrGH16tVkZGTQqlUrvvrqK/r378/LL7/M/v37AdixYwcAderUITMzM2cdLVu2ZN68eQC5ylF2795N06ZNAX8CamH069eP5cuX8+yzzzJy5Mgiratly5bMnz8fgPnz57Nq1SoALrroIt599122bNmSsx9r1qxh27ZtHD16lOHDh/PQQw/lLBuuXbt2rFixolBtDxdqr3OOV199tcjLL1u2jA4dOhR5uVhTUBcRERGJk7Fjxx43Esnw4cN56623GDhwIEOHDiUlJYXk5GSeeuopAK677jpuvvlmkpOTycrK4oEHHuD222+nd+/eVK5cOWc9d999N/feey89e/bkyJEjhWpPpUqVGD58ONu3b6dPnz5FWtfw4cPZsWMHycnJjBkzJqfcpH379jz88MP079+fjh07cskll7Bx40bWr19P3759SU5O5rrrrova4z5o0KCcuvOiePDBBxk2bBgXXHABjRs3LvLyX3zxRUIM0Wjh3fxyTEpKips7d268myEiIiIlaPHixYWugZb4GDZsGE888QStW7cule055+jduzcff/wxdevWjem6o73ezGyecy7qmcHqURcRERGRhPX444+zcePGUtveli1buPvuu2Me0otDJ5OKiIiISMJq06ZNvuO/x1rjxo0ZOnRoqW0vP+pRFxERERFJQArqIiIiIiIJSEFdRERERCQBKaiLVGRffgl33gnBGL0iIiKSOBTURSqqMWPg4ovh6afh0kth3754t0hEpEKqXLkyycnJdOjQgauuuirnAkfFMW3aNC699FIAPvjggzyvyAmwa9cunnvuuSJv48EHH8wZ0z18u927d881LTs7m8aNG+c7Yku0dcXalVdeycqVK+nWrRvJycmcfvrpNGzYkOTkZJKTk1m9enWh1/X73/+eL774It95JkyYwEMPPXSCrfYU1EUqmsOH4dZb4ZZboH9/eOEF37OusC4iEhdJSUmkp6ezaNEiqlWrxvPPP5/rfuccR48eLfJ6hw4dyj333JPn/cUN6tH06dOHdevW5Qq9kydPpkOHDjRp0iQm2yiO77//niNHjnDGGWcwe/Zs0tPT+dOf/sQ111xDeno66enptGzZMtcy+V0c6pFHHqFfv375bvOyyy7jvffe48CBAyfcfgV1kYpk+3YYMACeew7uvhs++AB+9St4/XWYPh2GDFFYF5EK6447oG/f2P7ccUfR2tC7d29WrFjB6tWradeuHbfccgudO3cmIyODSZMm0b17dzp37sxVV13F3r17AZg4cSJt27alV69evP/++znreuWVV7jtttsA2Lx5M8OGDaNTp0506tSJr7/+mnvuuYcff/yR5ORk7rrrLgCefPJJunbtSseOHXnggQdy1vXII4/Qpk0bLr74YpYuXXpcuytVqsRVV13Fv//975xp48aNY+TIkQC8+OKLdO3alU6dOjF8+PCoRw369u1L6GKT27ZtywnQR44c4a677spp1wsvvADAxo0b6dOnT87RiBkzZhy3zjfffJPLLrss38c8Ozubk08+mfvvv5/zzz+fOXPm8MADD9C1a1c6dOjAzTffTOgCoT/72c+YMGECAM2aNePBBx/kvPPOo2PHjixbtgwAM6N379588skn+W63MEo0qJvZQDNbamYrzOy4r3Tm/S24/1sz61zQsmZWz8w+N7Plwe0pYffdG8y/1MwGBNPqmFl62M82M3umJPdbJCH98AOcfz7MnAmvvQZ//jOELjX905/CG2/AjBkweDAEH/4iIlJ6srOz+fTTTzn33HMBWLp0KaNGjWLBggXUqlWLhx9+mMmTJzN//nxSUlL4y1/+woEDB/jlL3/Jhx9+yIwZM9i0aVPUdf/2t7/lggsuYOHChcyfP59zzjmHxx9/nDPPPJP09HSefPJJJk2axPLly5kzZw7p6enMmzeP6dOnM2/ePMaNG8eCBQt4//33SUtLi7qNkSNHMm7cOAAOHjzIJ598wvDhwwG44oorSEtLY+HChbRr146XXnqp0I/LSy+9RN26dUlLSyMtLY0XX3yRVatW8dZbbzFgwADS09NZuHAhycnJxy07c+ZMunTpUuA2du/eTefOnZkzZw7du3fn9ttvJy0tje+++47du3czceLEqMs1btyYBQsWcOONN/KXv/wlZ3pKSkrULw5FVWIXPDKzysCzwCXAOiDNzD5wzv0QNtsgoHXw0w0YA3QrYNl7gCnOuceDAH8P8Dszaw+MAM4BTgMmm9nZzrlMIOeZM7N5wLGvmyIVwY8/Qmoq1Krly1xSU4+fZ+RIMINrr/Vh/ZNPoHbt0m+riEicPBOnbrysrKyckNm7d29uuOEGNmzYQIsWLUgNPq9nzZrFDz/8QM+ePQE4dOgQ3bt3Z8mSJbRq1YrWrVsDvsf3H//4x3HbmDp1Kq+99hrga+Lr1q3Lzp07c80zadIkJk2axHnnnQfA3r17Wb58OZmZmQwbNoyaNWsC5HkxoK5du7J3716WLl3K4sWLSU1N5ZRTfH/qokWLuP/++9m1axd79+5lwIABhX58Jk2axLfffsu7774L+FC9fPlyunbtyvXXX8/hw4e5/PLLowb1jRs30rBhwwK3Ua1aNYYNG5bz95QpU3jyySc5cOAA27Zto0uXLgwaNOi45a644goAunTpkqsHvVGjRmzYsKHQ+5iXkrwy6fnACufcSgAzGwdcBoQH9cuA15w/njDLzE42syZAy3yWvQzoGyz/KjAN+F0wfZxz7iCwysxWBG34JrQxM2sNNAJO/CuOSFny8su+pCU9Hc44I+/5Row4FtZHjICPPiq9NoqIVFChGvVItWrVyvndOccll1zC2LFjc82Tnp6OmeChVUcAACAASURBVMWkHc457r33Xm666aZc05955plCb2PEiBGMGzeOxYsX55S9AFx33XVMmDCBTp068corrzBt2rTjlq1SpUpOLX54fbdzjv/7v/+LGu6nT5/Oxx9/zM9//nPuuusuRo0alev+pKSkQtWKJyUl5ezj/v37ue2225g/fz5Nmzbl/vvvz3Md1atXB/yXn+zs7JzpBw4cICkpqcDtFqQkS1+aAhlhf68LphVmnvyWbeyc2wgQ3DYqwvZGAv92oUKjCGb2KzOba2Zzt27dms+uiZQhzsFbb/kRXvIL6SHXXAN//CN8/LEvlxERkbhLTU1l5syZrFixAvBhctmyZbRt25ZVq1bx448/AhwX5EMuuugixowZA/ia7z179lCnTh0yMzNz5hkwYAAvv/xyTu37+vXr2bJlC3369GH8+PFkZWWRmZnJhx9+mGc7R44cyRtvvMHUqVNz9bxnZmbSpEkTDh8+zJtvvhl12ZYtWzJv3jyAnN7zULvGjBnD4cOHAVi2bBn79u1jzZo1NGrUiF/+8pfccMMNzJ8//7h1tmvXLucxK6ysrCwqVapEgwYNyMzM5L333ivS8qE2dujQocjLRSrJoB7tq1dkQM5rnsIsW5ztjQCiv4IB59w/nHMpzrmUwhwmESkTvv4aVq/2veSF9ctfQtWqEOXwqYiIlL6GDRvyyiuvMHLkSDp27EhqaipLliyhRo0a/OMf/2DIkCH06tWLFi1aRF3+r3/9K1988QXnnnsuXbp04fvvv6d+/fr07NmTDh06cNddd9G/f39++tOf0r17d84991yuvPJKMjMz6dy5M9dccw3JyckMHz6c3r1759nO9u3bU7NmTS688MJcRwQeeughunXrxiWX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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": 34,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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fTb69Tt16sSsWbNYtmwZZ5xxBl27duXbb79l9OjRLFiwgAceeIBdu3bRuHFjXn31VQ455BA+/fRTbr31Vg477DBat269r6whQ4Ywffp0/v3vf/Pzzz9z/fXXs2TJEgAGDRrEc889xw8//EBaWhrdunXjySef5Mknn2TEiBHs2rWLCy64gAcffBCARx55hKFDh3LUUUdRp04dTj755P3iLlOmDBdffDFvv/02d9xxB+DvttqnTx8AXnrpJV588UV2797Nsccey+uvv06VKlX2K6NLly489dRTpKens379etLT01m2bBk5OTnceeedjB8/nl27dnHDDTfQv39/1qxZQ+/evdm8eTPZ2dkMGjSITp067Vfmm2++yXnnnVfgcf/kk0/4+9//zq5du2jSpAmDBw+matWq3H777Xz00UeUK1eOM844g7PPPpuPP/6YiRMnMmDAAEaPHk3jxo1Zs2YN69ato06dOtG/2EWgFnkRgZtvhqVL4Y03Iifx4FvpBw6ERx/16118Mezaldg4RURKkezsbD755BNatmwJwIIFC+jbty/fffcdVatW5eGHH2bs2LHMnDmT9PR0nn76aXbu3Mm1117LBx98wNdff81PP/0Useybb76Z3//+92RlZTFz5kxOOOEEBg4cSOPGjcnMzOTJJ59kzJgxLFq0iKlTp5KZmcmMGTOYMGECM2bMYPjw4Xz33Xe89957TJs2LWIdffr0Yfjw4QDs2rWLjz/+mF69egFw4YUXMm3aNLKysmjWrBmvvPJK1MfllVdeoUaNGkybNo1p06bx0ksvsXTpUt566y169OhBZmYmWVlZpKWlHbDtxIkTD/jQkdvatWsZOHAg48aNY+bMmZx44on885//5Oeff+bjjz9mzpw5zJo1i7vuuotOnTpx5pln8swzz+zXmn/SSScxadKkqPepqNScJlLajRgBQ4bAvfdC584Fr3/XXXDIIT75P+ccGDUKqlaNe5giIolWmJbzWNqxY8e+JLRTp05cffXVrF69mqOPPpp27doBMHnyZObOnUuHDh0A2L17N6eccgrz58+nUaNGNGnSBIDLL7+cF1988YA6vvjiC4YOHQr4Pvk1atTg119/3W+dMWPGMGbMGE466SQAtm7dyqJFi9iyZQsXXHDBvhb0c889N+J+ZGRksHXrVhYsWMC8efNo164dNYPGotmzZ3PvvfeyceNGtm7dSo8ePaI+PmPGjGHWrFmMHDkSgE2bNrFo0SIyMjK46qqr2LNnD+eff37ERH7NmjUFtpJPmjSJuXPn0r59e8Af244dO1KrVi3KlCnDtddey1lnnbVv7EEkdevWZfXq1VHvU1EpkRcpzZYvh+uug7Zt4f77o9/uppt8N5urr4bzz4cxYzSbjYhIjIT6yOdWNazRxDlHt27dGDZs2H7rZGZmYjG6HjvnuOuuu+jfv/9+y5999tmo67j00ksZPnw48+bN29etBqBfv36MHj2aVq1aMWTIEMaPH3/AtuXKlds3FmDnzp37xZ/6fDgAACAASURBVPWvf/0rYvI/YcIEPvroI6644gpuv/12+vbtu9/zlStX3q+sSJxz9OzZk9dff/2A56ZPn87nn3/O8OHDGTRoEGPGjIlYxs6dO6lcuXK+9cSCutaIlFY5OXDFFf7xzTehfPnCbd+vHzz9NIwd6xN5ERFJmHbt2jFx4kQWL14MwPbt21m4cCHHH388S5cu5YcffgA4INEPOe200xg0aBAAOTk5bN68mWrVqrFly5Z96/To0YPBgwezdetWAFatWsXatWvp3Lkzo0aNYseOHWzZsoUPPvggzzj79OnDG2+8wRdffLFfy/2WLVuoV68ee/bs4c0334y4bcOGDZkxYwbAvtb3UFyDBg1iz549ACxcuJBt27axfPly6taty7XXXsvVV1/NzJkzDyizWbNm+45ZXtq3b89XX321b/zAtm3b9n0TsXnzZs4++2yeeeYZvvvuO4ADjlsophYtWuRbTywokRcprR57DL7+Gp5/Hho3LloZf/oTHHUUDBigaSlFRBKoTp06DBkyhD59+nDiiSfSrl075s+fT6VKlXjxxRc566yz6NixI0cffXTE7f/5z3/y5Zdf0rJlS04++WTmzJlD7dq16dChAy1atOD222+ne/fu/OEPf+CUU06hZcuWXHTRRWzZsoXWrVvTu3dv0tLS6NWr1wEDSsM1b96cKlWqcOqpp+73jcJDDz1E27Zt6datG8cff3zEbf/6178yaNAg2rdvz/r16/ctv+aaa2jevDmtW7emRYsW9O/fn+zsbMaPH09aWhonnXQS7777LrfccssBZZ511lkRW//DHX744bzyyiv07t2bVq1a0b59exYuXMimTZs466yzaNWqFaeeeipPP/004D+sPPro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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": 35,
"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": 36,
"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": 37,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"PolynomialFeatures(degree=5, include_bias=True, interaction_only=False)"
]
},
"execution_count": 37,
"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": 38,
"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": 38,
"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": 39,
"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": 39,
"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": 40,
"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": 41,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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6Ne//rV+8YtfaOXKlerXr59uuOGGSo997733asKECVq8eLGKi4t1+PBhzZkzRxs2bFB6erokadmyZcrMzNSaNWtkrdXVV1+tjz/+WG3bttXChQv11VdfqaioSHFxcRo1alSlrzN37ly99tprkqRHH31Ul112WbXvecuWLfrggw906NAhDRw4UHfeeae+/vprJSUl6bPPPlOXLl20f/9+derUSVdffbWuuuoqTZkypdwxjh49qltvvVUpKSkaMGCApk+frmeffVb333+/JKlLly768ssv9cwzz+jxxx/XCy+8UKO/j+owkg4AANDMHTlyRLGxsfJ4PIqMjNSMGTMkSVFRURozZowk6YsvvtCmTZs0btw4xcbGav78+crOztaWLVvUp08f9e/fX8YY3XTTTZW+xsqVK3XnnXdK8s+Bj4iIOGmbZcuWadmyZRo5cqTi4uK0ZcsWZWZm6pNPPtF1112n8PBwtW/fXldffXWV76XsdJdTBXRJuvLKK9WmTRt16dJF3bp10+7du7Vy5UpNmTJFXbp0kSR16tSp2mNs3bpVffr00YABAyRJt9xyiz7++OMTz19//fWSpFGjRikrK+uUPdUEI+kAAACNpKYj3vWtdE56RW3btj1x31qrSy65RK+//nq5bdLT02WMqZc+rLV66KGHdMcdd5Srz5s377Reo1WrVifm1B89erTcc23atDlxPzg4WEVFRbLW1ur1rLXVPl/6GqXHrw+MpAMAAEBjxozRZ599pm3btkmSCgoK9PXXX2vQoEH69ttvtX37dkk6KcSXio+P17PPPitJKi4u1sGDB9WuXTsdOnToxDaXXXaZXnrppRNz3b/77jvt2bNHF1xwgRYvXqwjR47o0KFDWrp0aa16j46OVlpamiTprbfeOuX28fHxWrRokfLy8iRJ+/fvl6ST+i01aNAgZWVlnfizefXVVzVhwoRa9VhbhHQAAACoa9eueuWVV3TjjTdq+PDhGjNmjLZs2aLQ0FAlJyfryiuv1Pjx4xUVFVXp/k8++aQ++OADxcTEaNSoUdq4caM6d+6scePGadiwYXrwwQd16aWX6mc/+5nGjh2rmJgYTZkyRYcOHVJcXJxuuOEGxcbG6ic/+YnOP//8WvU+e/Zs3XfffTr//PMVHBx8yu2HDh2qxMRETZgwQSNGjNCvfvUrSdK0adP02GOPaeTIkSc+lEhSaGioXn75ZU2dOlUxMTEKCgrSzJkza9VjbZlTDd+3NB6Px6ampjrdBgAAaCY2b96swYMHO90GHFbZ74ExJs1a66lse0bSAQAAAJchpAMAAAAuQ0gHAABoYEwvbtnq8vdPSAcAAGhAoaGhysvLI6i3UNZa5eXlKTQ0tFb7sU46AABAA+rdu7dyc3O1d+9ep1uBQ0JDQ9W7d+9a7UNIBwAAaEAhISHq06eP022giWG6CwAAAOAyhHQAAADAZQjpAAAAgMsQ0gEAAACXIaQDAAAALkNIBwAAAFyGkA4AAAC4DCEdAAAAcBlCOgAAAOAyhHQAAADAZQjpAAAAgMsQ0gEAAACXIaQDAAAALkNIBwAAAFyGkA4AAAC4DCEdAAAAcBlCOgAAAOAyhHQAAADAZQjpAAAAgMsQ0gEAAACXcTSkG2OyjDEZxph0Y0xqoNbJGLPcGJMZuO1YZvuHjDHbjDFbjTGXlamPChxnmzHmKWOMCdTbGGPeCNRXG2OiG/s9AgAAALXlhpH0i6y1sdZaT+DxLEkp1tr+klICj2WMGSJpmqShkiZJesYYExzY51lJXkn9Az+TAvUZkn6w1vaTNFfSo43wfgAAAIDT4oaQXtE1kuYH7s+XdG2Z+kJr7TFr7beStkkabYzpIam9tfZza62VtKDCPqXHelNSfOkoOwAAAOBWTod0K2mZMSbNGOMN1M601u6SpMBtt0C9l6QdZfbNDdR6Be5XrJfbx1pbJClfUueKTRhjvMaYVGNM6t69e+vljQEAAAB11crh1x9nrd1pjOkmabkxZks121Y2Am6rqVe3T/mCtcmSkiXJ4/Gc9DwAAADQmBwdSbfW7gzc7pG0WNJoSbsDU1gUuN0T2DxX0llldu8taWeg3ruSerl9jDGtJEVI2t8Q7wUAAACoL46FdGNMW2NMu9L7ki6VtEHSEkm3BDa7RdI/A/eXSJoWWLGlj/wniK4JTIk5ZIwZE5hvPr3CPqXHmiJpZWDeOgAAAOBaTk53OVPS4sB5nK0k/c1a+54xZq2kRcaYGZJyJE2VJGvtRmPMIkmbJBVJuttaWxw41p2SXpEUJundwI8kvSjpVWPMNvlH0Kc1xhsDAAAATodhYLk8j8djU1NTnW4DAAAAzZwxJq3MMuTlOL26CwAAAIAKCOkAAACAyxDSAQAAAJchpAMAAAAuQ0gHAAAAXIaQDgAAALgMIR0AAABwGUI6AAAA4DKEdAAAAMBlCOkAAACAyxDSAQAAAJchpAMAAAAuQ0gHAAAAXIaQDgAAALgMIR0AAABwGUI6AAAA4DKEdAAAAMBlCOkAAACAyxDSAQAAAJchpAMAAAAuQ0gHAAAAXIaQDgAAALgMIR0AAABwGUI6AAAA4DKEdAAAAMBlCOkAAACAyxDSAQAAAJchpAMA4AK+DJ+i50Ur6OEgRc+Lli/D53RLABzUyukGAABo6XwZPnmXelVQWCBJys7PlnepV5KUEJPgZGsAHMJIOgAADktMSTwR0EsVFBYoMSXRoY4AOI2QDgCAw3Lyc2pVB9D8EdIBAHBYZERkreoAmj9COgAADkuKT1J4SHi5WnhIuJLikxzqCIDTCOkAADgsISZByZOTFRURJSOjqIgoJU9O5qRRoAUz1lqne3AVj8djU1NTnW4DAAAAzZwxJs1a66nsOUbSAQAAAJchpAMAAAAuQ0gHAAAAXIaQDgAAALgMIR0AAABwGUI6AAAA4DKEdAAAAMBlCOkAAACAyxDSAQAAAJchpAMAAAAuQ0gHAAAAXIaQDgAAALgMIR0AAABwGUI6AAAA4DKEdAAAAMBlCOkAAACAyxDSAQAAAJchpAMAAAAuQ0gHAAAAXIaQDgAAALgMIR0AAABwGUI6AAAA4DKEdAAAAMBlCOkAADQmn0+KjpaCgvy3Pp/THQFwoVZONwAAQIvh80ler1RQ4H+cne1/LEkJCc71BcB1GEkHAKCxJCb+O6CXKijw1wGgDEI6AACNJSen6jrTYACUQUgHAKCxREZWXu/UyT/tJTtbsvbf02AI6kCLRUgHAKCxJCVJ4eHla6WPmQYDoAxCOgAAjSUhQUpOlqKiJGP8t8nJ0v79lW9f1fQYAM0eIR0AgMaUkCBlZUklJf7bhISqp8FUVQfQ7BHSAQBwWlXTYJKSnOkHgOMI6QAAOK2qaTCsnQ60WFzMCAAAN0hIIJQDOMHxkXRjTLAx5itjzL8CjzsZY5YbYzIDtx3LbPuQMWabMWarMeayMvVRxpiMwHNPGWNMoN7GGPNGoL7aGBPd2O8PAAAAqC3HQ7qk+yRtLvN4lqQUa21/SSmBxzLGDJE0TdJQSZMkPWOMCQ7s86wkr6T+gZ9JgfoMST9Ya/tJmivp0YZ9KwAAAMDpczSkG2N6S7pS0gtlytdImh+4P1/StWXqC621x6y130raJmm0MaaHpPbW2s+ttVbSggr7lB7rTUnxpaPsAAAAgFs5PZI+T9KvJZWUqZ1prd0lSYHbboF6L0k7ymyXG6j1CtyvWC+3j7W2SFK+pM4VmzDGeI0xqcaY1L17957uewIAAABOi2Mh3RhzlaQ91tq0mu5SSc1WU69un/IFa5OttR5rradr1641bAcAAABoGE6u7jJO0tXGmCskhUpqb4x5TdJuY0wPa+2uwFSWPYHtcyWdVWb/3pJ2Buq9K6mX3SfXGNNKUoSkKi7rBgAAALiDYyPp1tqHrLW9rbXR8p8QutJae5OkJZJuCWx2i6R/Bu4vkTQtsGJLH/lPEF0TmBJzyBgzJjDffHqFfUqPNSXwGieNpAMAAABu4sZ10udIWmSMmSEpR9JUSbLWbjTGLJK0SVKRpLuttcWBfe6U9IqkMEnvBn4k6UVJrxpjtsk/gj6tsd4EAAAAUFeGgeXyPB6PTU1NdboNAAAANHPGmDRrraey55xe3QUAAABABYR0AAAAwGUI6QAAAIDLENIBAAAAlyGkAwAAAC5DSAcAAABchpAOAAAAuAwhHQAAAHAZQjoAAADgMoR0AAAAwGUI6QAAAIDLENIBAAAAlyGkAwAAAC5DSAcAAABchpAOAABcwZfhU/S8aAU9HKToedHyZficbglwDCEdAIBGRBCtnC/DJ+9Sr7Lzs2VllZ2fLe9SL38+aLEI6QAANBKCaNUSUxJVUFhQrlZQWKDElESHOgKcRUgHAKCREESrlpOfU6s60NwR0gEAaCQE0apFRkTWqg40d4R0AAAaCUG0aknxSQoPCS9XCw8JV1J8kkMdAc4ipAMA0EgIolVLiElQ8uRkRUVEycgoKiJKyZOTlRCT4HRrgCOMtdbpHlzF4/HY1NRUp9sAADRTvgyfElMSlZOfo8iISCXFJxFEgRbKGJNmrfVU+hwhvTxCOgAAQMvg9Ifm6kJ6q0brAgAAAHCJ0iVRS1dcKl0SVZIrvt1iTjoAAABaHLcviUpIBwCghrhaKNB8uH1JVEI6AAA1wNVCgebF7UuiEtIBAKgBt381DqB23L4kKiEdAIAacPtX4wBqx+1r8xPSAQB15/NJ0dFSUJD/1td8p364/atxALWXEJOgrPuzVDK7RFn3Z7kmoEuEdABAXfl8ktcrZWdL1vpvvd5mG9Td/tU4gOaFkA4AqJvERKmg/BxtFRT4682Q278aB9C8cMXRCrjiKADUUFCQfwS9ImOkkpLG7wcAmpjqrjjKSDoAoG4iq5iLXVUdAFBjhHQAQN0kJUnh5edoKzzcXwcAnBZCOgCgbhISpORkKSrKP8UlKsr/OIE52gBwugjpAAAAgMsQ0gEAddPClmBEw/Nl+BQ9L1pBDwcpel60fBn8LqHlIqQDAOqmhS3BiIbly/DJu9Sr7PxsWVll52fLu9RLUEeLRUgHANRNTk7t6kA1ElMSVVBY/kNfQWGBElP40IeWiZAOAKgblmBEPcrJr/zDXVV1oLkjpAMA6oYlGFGPIiMq/3BXVR1o7gjpAIC6YQlG1KOk+CSFh5T/0BceEq6keD70oWVq5XQDAIAmLCGBUI56kRDj/z1KTElUTn6OIiMilRSfdKIOtDTGWut0D67i8Xhsamqq020AAACgmTPGpFlrPZU9x3QXAAAAwGUI6QAAAIDLENIBAAAAlyGkAwAAAC5DSAcAAK7gy/Apel60gh4OUvS8aPkyfE63BDiGJRgBAIDjfBk+eZd6VVBYIEnKzs+Wd6lXkliGES0SI+kAANQQI70NJzEl8URAL1VQWKDElESHOgKcxUg6AAA1wEhvw8rJz6lVHWjuGEkHAKAGGOltWJERkbWqA80dIR0AgBpgpLdhJcUnKTwkvFwtPCRcSfFJDnUEOIuQDgBADTDS27ASYhKUPDlZURFRMjKKiohS8uRkphKhxSKkA2h+fD4pOloKCvLf+ji5D6ePkd6GlxCToKz7s1Qyu0RZ92cR0NGiEdIBNC8+n+T1StnZkrX+W6+XoI7TxkgvgMZkrLVO9+AqHo/HpqamOt0GgLqKjvYH84qioqSsrMbuBgCAKhlj0qy1nsqeYyQdQPOSU8VJfFXVAQBwIUI6gOYlsoqT+KqqAwDgQoR0AM1LUpIUXv7kPoWH++sAADQRhHQAzUtCgpSc7J+Dboz/NjnZXwdcwJfhU/S8aAU9HKToedHyZXBSM4CTtXK6AQCodwkJhHK4ki/DJ+9S74krl2bnZ8u71CtJrBIDoBxG0gEAaCSJKYknAnqpgsICJaYkOtQRALcipAMA0Ehy8itfZaiqOoCWi5AOAEAjiYyofJWhquoAWi5COgAAjSQpPknhIeVXHwoPCVdSPKsPASjPsZBujAk1xqwxxqwzxmw0xjwcqHcyxiw3xmQGbjuW2echY8w2Y8xWY8xlZeqjjDEZgeeeMsaYQL2NMeaNQH21MSa6sd8nAAClEmISlDw5WVERUTIyioqIUvLkZE4aBXASY6115oX9QbqttfawMSZE0qeS7pN0vaT91to5xphZkjpaa39jjBki6XVJoyX1lLRC0gBrbbExZk1g3y8kvSPpKWvtu8aYuyQNt9bONMZMk3SdtfaG6vryeDw2NTW1gd41AAAA4GeMSbPWeip7zrGRdOt3OPAwJPBjJV0jaX6gPl/StYH710haaK09Zq39VtI2SaONMT0ktbfWfm79nzgWVNin9BvvODkAACAASURBVFhvSoovHWUHAAAA3MrROenGmGBjTLqkPZKWW2tXSzrTWrtLkgK33QKb95K0o8zuuYFar8D9ivVy+1hriyTlS+pcSR9eY0yqMSZ179699fX2AAAAgDpxNKRba4uttbGSess/Kj6sms0rGwG31dSr26diH8nWWo+11tO1a9dTtQ0AAAA0KFes7mKtPSDpQ0mTJO0OTGFR4HZPYLNcSWeV2a23pJ2Beu9K6uX2Mca0khQhaX+DvAkAAACgnji5uktXY0yHwP0wSRMlbZG0RNItgc1ukfTPwP0lkqYFVmzpI6m/pDWBKTGHjDFjAvPNp1fYp/RYUySttE6dKQsAAADUUCsHX7uHpPnGmGD5Pywsstb+yxjzuaRFxpgZknIkTZUka+1GY8wiSZskFUm621pbHDjWnZJekRQm6d3AjyS9KOlVY8w2+UfQpzXKOwMAAABOg2NLMLoVSzACAACgMVS3BKOTI+kAAKAOikusfig4rv0/HtfBI4UyRgoyRp3btlG39m0UGhLsdIsAThMhHQAAF7PWavvew/o0c5/SdxzQlu8P6Zu9P+p4cUmV+/SICNXQnu01MrKjLhrYTYN7tBOXCQGaFkI6AAAuU1JilZbzg5ak79SyTd9r98FjkqTu7UM1qEc7TRjQVT07hKnzGa3VPjREklRUUqK8w8e159Axfb37kDbuPKgVm/fosfe3qleHME0Z1Vs/Pecs9eoQ5uRbA1BDhHQAAFwi7/AxLVy7Q39bnaPvDhxRaEiQLhrYTRcM6KpxZ3dRZOfwWh1vz8Gj+nDrXv0rY5eeWpmpp1dm6uoRPXXfxAHq06VtA70LAPWBE0cr4MRRAEBj2773sJ7/aLv+kb5Tx4tKNK5fZ00Z1VuXDOmuM9rUz3jajv0FevWLbC34PEuFxVbTzjlLv540SBFhIfVyfAC1V92Jo4T0CgjpQNPne/YuJX6TrJy2xYr8MVhJfb1KuPMZp9sCTrJjf4GeTMnU21/mqnWrIF0f11u3nRet/me2a7DX3HvomP7ywTYt+DxLnc9oo0euHqrLY3o02OsBqBohvRYI6UDT5nv2Lnm/e1YFZQYHwwul5F53EtThGj/8eFxzV3ytv63OUVCQ0fQxUZp54dnqckabRushIzdfDy1erw3fHVTCuZH6f1cNYVUYoJER0muBkA40bdEPtlL2GcUn1aMOByvrsSIHOgL+rbjEauHaHD32/lYdOlqkG0efpXsu6q/uEaGO9FNYXKLHl23V8x99oyE92uuvt3g4sRRoRKyTDqDFyGl7ckCvrg40lg3f5WvW2/6R63P7dNLD1wzVoO7tHe0pJDhID10+WKOjO+n+N9J1/TOf6eVbR2tIT2f7AiAFOd0AANSnyB8r/7q+qjrQ0I4VFetPy7bqmr98pt0Hj+mpG0dqoXeM4wG9rPjBZ+rvM8fKyOinz3+uz7fnOd0S0OIR0gE0K0l9vQovLF8LL/TXgcaWkZuvq5/+TE+v3KZrYntqxQMTdPWInq68sNCg7u21+O7z1CMiVLe/slZrvt3vdEtAi0ZIB9CsJNz5jJJ73amow8Ey1j8XnZNG0dhKSqye+2i7rnvmMx04clwv3erREz+NVUS4u5c77BERpr/9Yox6dgjVrS+vUVo2QR1wCieOVsCJowCA07H30DH9alG6PsncpytiuuuP1w13fTivaM/Bo7oh+QvlHT6mt+8ap37dznC6JaBZqu7EUUbSAQCoJ59k7tXlT36iNd/u1/9cF6O//CyuyQV0SerWPlQLbh+tkOAg3f7KWuUdPuZ0S0CLQ0gHAOA0lZRYPbkiUze/uEYdw0O05J7x+tm5ka6ce15TZ3UK119v8Wj3waPyvpqm40UlTrcEtCiEdAAATsOho4W647U0zV3xta4f2UtL7hmvgd0b7oqhjSkusqOe+Gms0rJ/0P+8s9npdoAWhXXSAQCoo217Dsv7aqqy8wo0e/IQ3XpedJMePa/MlcN76MucPnrx0291TnQnXTm8h9MtAS0CIR0AgDpYvmm3HngjXa1bBem1Gedq7NmdnW6pwcy6fJC+yvlBv3lrvYb2bK/oLm2dbglo9pjuAgBALVhr9fxH2+V9NVXRXcK19Jfjm3VAl/xXJv3zz+IUHGT0H39fp+ISVoYDGhohHQCAGioqLlHiPzboj+9u0RXDeujNmeepV4cwp9tqFD07hOmRa4YqLfsH/fWTb5xuB2j2COkAANTAoaOFun1+qv62Okd3Xni2nr5xpEJDgp1uq1FdPaKnLh/WXU8s+1pbvz/kdDtAs0ZIBwDgFHYeOKKpz32uz7bt05zrY/SbSYMUFNS8ThCtCWOM/nDtMLULbaXfvLVeJUx7ARoMIR0AgGps+C5f1/7lM333wxG9cts5mjY60umWHNX5jDb63VWDlb7jgBau3eF0O0CzVauQbozhdG4AQIvxxTd5uuH5zxUSHKS37jpP5/fv6nRLrnBtbC+N6dtJj763Rfu4GinQIGoU0o0x5xljNknaHHg8whjzTIN2BgCAgz7Yske3vLRGPTqE6a07z9OAM5vHBYrqQ+m0l4LjRfrjO1ucbgdolmo6kj5X0mWS8iTJWrtO0gUN1RQAAE761/qd+sWCVA04s50W3TFW3SNCnW7Jdfp1a6cZ4/vqrS9zlZGb73Q7QLNT4+ku1tqKE8+K67kXAKgfPp8UHS0FBflvfT6nO0ITsmjtDt37+lcaGdlBvl+cq05tWzvdkmvdfdHZ6ty2tZLe2SRrOYkUqE81Dek7jDHnSbLGmNbGmP9UYOoLALiKzyd5vVJ2tmSt/9brJaijRl789Fv9+q31Gt+/qxbcfq7ah4Y43ZKrtQsN0f0T++uLb/YrZfMep9sBmpWahvSZku6W1EtSrqTYwGMAcJfERKmgoHytoMBfB6pgrdVTKZn6/b826fJh3fXX6aMU1rplrYFeV9NGR6pv17b6n3c3q7C4xOl2gGajRiHdWrvPWptgrT3TWtvNWnuTtTavoZsDgFrLyaldHS2etVb/885mPbH8a/0krreevnGk2rQioNdUSHCQfjNpkL7Z+6MWf/Wd0+0AzUZNV3eZb4zpUOZxR2PMSw3XFgDUUWQVa1hXVUeLVlxi9dvFGfrrJ9/q1vOi9diU4WoVzCVEauvSIWdqWK/2enplJqPpQD2p6f+JhltrD5Q+sNb+IGlkw7QEAKchKUkKDy9fCw/314EyCotLdP8b6Xp9zQ7dc1E/zZ48pEVeRbQ+GGN0f/wA7dh/RIu/ZDQdqA81DelBxpiOpQ+MMZ0ktWqYlgDgNCQkSMnJUlSUZIz/NjnZXwcCjhYWa+araVq6bqdmXT5I/3nZQBlDQD8d8YO7aXjvCD39AaPpQH2oaUj/k6RVxpjfG2N+L2mVpP9tuLYAoIYqW24xIUHKypJKSvy3BHSUcfhYkW57ea1Wbt2j3187TDMnnO10S82CMUb3T+yvHfuP6K20XKfbAZq8mp44ukDSTyTtlrRH0vXW2lcbsjEAOCWWW0QtHSg4rpteWK01Wfs196exunlMlNMtNSsXDfSPpj/30XYVl7BuOnA6qg3pxpj2gdtOkr6X9DdJPknfB2oA4ByWW0Qt7D10TNOSv9CmnQf1bEKcrh3Zy+mWmh1jjO644Gxl5RVo+abvnW4HaNJONa/8b5KukpQmqexHYhN43LeB+gKAU2O5RdTQdweO6KYXVuv7/KN66dZzNL5/F6dbarYmDeuuszqFKfnjbzRpWA+n2wGarGpH0q21Vxn/mTQTrLV9y/z0sdYS0AE4i+UWUQPf7D2sqc+u0r7Dx/Taz0cT0BtYcJDRz8f31Zc5B5SWvd/pdoAm65Rz0q21VtLiRugFAGqH5RZxCpt3HdRPn/9cx4pKtNA7RqOimKnZGKZ6eqtDeIiSP/7G6VaAJqumq7t8YYw5p0E7AYDaasbLLfoyfIqeF62gh4MUPS9avgxOhq2tL3N+0A3Pf66Q4CC9ccdYDe0Z4XRLLUZ461a6eUyUlm3arW/3/eh0O0CTVNOQfpH8QX27MWa9MSbDGLO+IRsDgBpphsst+jJ88i71Kjs/W1ZW2fnZ8i71EtRrYdW2fbrphdXq2La1Ft0xVv26neF0Sy3OzWOj1CrI6LUvsp1uBWiSahrSL5f/JNGLJU2W/2TSyQ3VFAC0ZIkpiSooLL9qTUFhgRJTWLWmJlZs2q1bX1mr3h3D9Pc7xuqsTuGn3gn1rlu7UF02tLv+nrpDR44XO90O0OScagnGUGPM/ZIelDRJ0nfW2uzSn0bpEABamJz8ylenqaqOf1uybqdmvpamwd3b6Q3vWHVrH+p0Sy3azWOidPBokZau2+l0K0CTc6qR9PmSPJIy5B9N/1ODdwQALVxkROWr01RVh9/fVufovoVfKS6qo177+bnq2La10y21eKP7dNKAM8/Qa6sZ1wNq61QhfYi19iZr7fOSpkg6vxF6AoAWLSk+SeEh5adohIeEKymeVWuq8tePv9FvF2dowoCumn/baLULDXG6Jch/caObx0RpfW6+1u044HQ7QJNyqpBeWHrHWlvUwL0AACQlxCQoeXKyoiKiZGQUFRGl5MnJSohp+ifF1jdrrZ5Y/rWS3tmsK2N6KPlmj8JaBzvdFsq4dmQvtW0drAWfM5oO1IbxL4NexZPGFEsqXTvJSAqTVBC4b6217Ru8w0bm8Xhsamqq020AAE7BWqvf/2uzXvrsW/3U01t/vH64goOM022hEr9dnKG3v8zV2sSJfMsBlGGMSbPWeip77lRXHA221rYP/LSz1rYqc7/ZBXQAQNNQXGL1m7fW66XPvtVt46I1h4DualNH9dbRwhL93/pdTrcCNBk1XYIRAOqHzydFR0tBQf5bH2t/o3aOF5Xo3te/0qLUXN0b31//ddUQBRHQXS32rA7q1+0MvZmW63QrQJNBSAfQeHw+yeuVsrMla/23Xi9BHTV25HixvK+m6v8ydum3VwzSry4ZIGMI6G5njNGUUb2Vmv2Dvtl72Ol2gCaBkA7gZA012p2YKBWUv0iPCgr8deAU8o8U6uYXV+ujr/dqzvUx8l5wttMtoRauH9lLQUZ660tG04GaIKQDKK8hR7tzqrgYT1V1IGDf4WO6MfkLrcs9oD/fGKdpo1kzvqnp1j5UEwZ01Vtp36m4pOpFKwD4EdIBlNeQo92RVQSrquqApO8OHNFPn/tc3+w7rL9O9+jK4T2cbgl1NNVzlr4/eFSfbtvndCuA6xHSAZTXkKPdSUlSePmL9Cg83F9HrfgyfIqeF62gh4MUPS9avozmOa9/+97DmvrsKu09fEyvzThXFw7s5nRLOA3xg7upfWgr/TP9O6dbAVyPkA6gvIYc7U5IkJKTpagoyRj/bXKyv44a82X45F3qVXZ+tqyssvOz5V3qbXZBfcN3+frpc5/reHGJFnrHyBPdyemWcJratArWpGHdtWzjbh0tLHa6HcDVCOkAymvo0e6EBCkrSyop8d8S0GstMSVRBYXlpyQVFBYoMaX5nIC75tv9ujH5C4WGBGvRHWM1tGeE0y2hnkwe0VOHjxXpw617nG4FcDVCOoDyGO12vZz8yqceVVVvaj7Yskc3v7ha3dq30d9njlXfrmc43RLq0di+ndXljNZasm6n060ArkZIB3AyRrtPS0PPF4+MqHzqUVX1pmRR6g79fEGq+p95hhbdMVY9O4Q53RLqWavgIF0Z00Mpm/fo8LEip9sBXIuQDgD1qDHmiyfFJyk8pPyUpPCQcCXFN90TcK21+vPKTP36zfU67+zOWugdq85ntHG6LTSQySN66lhRiZZv+t7pVgDXIqQDQD1qjPniCTEJSp6crKiIKBkZRUVEKXlyshJimuY3HsUlVv/1z416fNnXum5kL714yzk6o00rp9tCA4qL7KheHcK0JJ0pL0BV+L8ggCbNl+FTYkqicvJzFBkRqaT4JEfDamPNF0+ISWiyobyso4XFun9hut7b+L3umNBXv7lskIKCjNNtoYEFBRldNbyHXvz0W+UXFCoiPMTplgDXYSQdQJPly/DJu/j28lNLFt/u6FKEzXm+eH3LLyjUzS+u1vubvtfsyUP00OWDCegtyKRh3VVUYrVy626nWwFciZAOoMlKXHKfCuzxcrUCe1yJS+5zqKPmOV+8Iew8cERTnluldTvy9fSNI3XbuD5Ot4RGNqJ3B53Zvo3e30BIBypDSAfQZOUU5tWq3hia23zxhpCRm69r//KZvs8/qvm3j9ZVw3s63RIcEBRkdNnQ7vrw6z06cpwLGwEVMScdQJMVmS9ld6i87qTmMl+8Iby/8XvdvzBdndq21qt3nquB3ds53RIcNGlody34PFsffb1Xk4Z1d7odwFUYSQfQZCWld1Z4+dkuCj/ur8NdrLX668ffaOZraRrYvZ3+cfc4Ajo0uk8ndQgP0bKNLMUIVERIB9BkJfz8SSW/H6KoA5KxUtQBKfn9ECX8/EmnW0MZhcUl+u3iDUp6Z7OuGNZDC71j1LUda6DDf2GjiYPP1IrNu3W8qMTpdgBXYboLgKYrIUEJkhISE6WcHCkyUkpK4gqpLpJ/pFB3+77Up9v26e6LztZ/XDKQFVxQzqSh3fVmWq6++CZPFwzo6nQ7gGsQ0gE0bQkJhHKX+nbfj/rFglRl5/2ox6YM11TPWU63BBca37+LwkKCtXzTbkI6UIZj012MMWcZYz4wxmw2xmw0xtwXqHcyxiw3xmQGbjuW2echY8w2Y8xWY8xlZeqjjDEZgeeeMsaYQL2NMeaNQH21MSa6sd8nALREH2zdo6v//KnyDh/TgtvPJaCjSqEhwRrXr4tWbtkja63T7QCu4eSc9CJJ/2GtHSxpjKS7jTFDJM2SlGKt7S8pJfBYgeemSRoqaZKkZ4wxwYFjPSvJK6l/4GdSoD5D0g/W2n6S5kp6tDHeGAC0VNZaPfPhNt3+ylqd1TFcS+4Zr7FncyIvqnfxoG767sARZe457HQrgGs4FtKttbustV8G7h+StFlSL0nXSJof2Gy+pGsD96+RtNBae8xa+62kbZJGG2N6SGpvrf3c+j+CL6iwT+mx3pQUXzrKDgCoXwXHi3TP61/pf9/bqquG99Rbd56nszqFn3pHNF0+nxQdLQUF+W99dbva70WD/NNcVm7ZU3+9AU2cK1Z3CUxDGSlptaQzrbW7JH+Ql9QtsFkvSTvK7JYbqPUK3K9YL7ePtbZIUr6kk4Z0jDFeY0yqMSZ179699fOmAKAF2bG/QNc/s0rvZuzSQ5cP0lPTYhXWOvjUO6Lp8vkkr1fKzpas9d96vXUK6j0iwjS4R3tCOlCG4yHdGHOGpLck3W+tPVjdppXUbDX16vYpX7A22VrrsdZ6unblpBUAqI2VW3Zr8p8/1c4DR/TybaN1x4SzxZeWLUBiolRQUL5WUOCv18HFg7oqLfsH5RcU1kNzQNPnaEg3xoTIH9B91tq3A+XdgSksCtyWfqzOlVT2zKPeknYG6r0rqZfbxxjTSlKEpP31/04AoOUpKi7Ro+9t0e2vpKpnRJiW3DNeE1ido+XIyald/RQuHtRNxSVWH2fyjTYgObu6i5H0oqTN1tonyjy1RNItgfu3SPpnmfq0wIotfeQ/QXRNYErMIWPMmMAxp1fYp/RYUySttJw6DgCnbffBo/rZC6v17IfbdePoSL1913mK7tLW6bbQmCIja1c/hdizOqpjeIg+YMoLIMnZkfRxkm6WdLExJj3wc4WkOZIuMcZkSrok8FjW2o2SFknaJOk9SXdba4sDx7pT0gvyn0y6XdK7gfqLkjobY7ZJ+pUCK8UAAOru08x9uuLJT5SRm6+5N4zQH6+PUWhILeef19MJh3BQUpIUXuHE4PBwf70OgoOMLhzYTR9+vVfFJYynAY5dzMha+6kqnzMuSfFV7JMk6aT/+q21qZKGVVI/KmnqabQJ4BR8GT4lpiQqJz9HkRGRSopPUkIMFxdqjoqKS/RUSqae/mCb+nU9Qwu9cep/ZrvaH6j0hMPS+cylJxyW4gqyTUPp30s9/n1dNKibFn/1ndblHlBcZMdT7wA0Y4bZH+V5PB6bmprqdBtAk+DL8Mm71KuCwn+fPBYeEq7kyckE9WYmO+9H3bcwXek7Dugncb31+2uHKrx1Hcd5oqP9wbyizp2lI0fKn4wYHi4lJxPUW4gDBcc18vfLdV98f90/cYDT7QANzhiTZq31VPac46u7AGi6ElMSywV0SSooLFBiSt1Wd4D7WGv199QduuLJT/TN3sN6+saR+tNPR9Q9oEtVn1iYl1evq4Wg6ekQ3lrDe0Xo08x9TrcCOI6QDqDOcvIrD1tV1dG0HCg4rrv/9qUefHO9YnpH6L37L9DkET1P/8C1PbGwjquFoGka37+LvtpxQIeOshQjWjZCOoA6i4yoPGxVVUfT8cGWPZo07xMt37Rbsy4fJN/Px6hnh7D6OfgVV1ReP+OMyut1XC0ETdP4fl1VXGL1xTesmIyWjZAO1/Fl+BQ9L1pBDwcpel60fBms+uBWSfFJCg8pv7pDeEi4kuLrtrpDTfE70nAOFBzXrxal67ZX1ioiLESL7xqnmRPOVnBQPV6caNGiyuvHj1deryrUo1mKi+qgsJBgfcp66WjhCOlwldITEbPzs2VllZ2fLe9SLyHMpRJiEpQ8OVlREVEyMoqKiGrwk0Zb9O9IAy9buGzj97pk7sdakr5T917cT0t+OU7DekXU62tI8s89r0xVIf2dd+q/B7hWm1bBOrdvJ32yjXnpaNlY3aUCVndxVvS8aGXnn7zqQ1RElLLuz2r8huA6LfZ3pOKyhVK9rXySd/iYHl66SUvW7dTgHu312JThDRPOS5lajsobI5WUNEwvcKUXPvlGf/i/zVo16+L6m2YFuBCru6DJ4ETEf2NKR+Va7O9IYmK9r3xSUmL1t9U5uvhPH+ndDbv0q0sGaMk9DTR6XlZQLf/pYU56izO+fxdJYpUXtGiEdLgKJyL6tegpHafQYn9HqlrhpI4rn2z4Ll/XPbtKv12cocE92umde8/XvfH9FRLcCP8sVDcqXo9XsETTNfDMdurarg1TXtCiEdLhKk6diOg2TWr98XqYJ12bbw1a7O9IVaPJtRxlPni0UP+9ZKOu/vOn+u6HAs29YYRe/8WYul05tK6ioqquJyf7b43592MuZNTiGGM0vl8XfbZtn0pKmJaLlomQDldx4kREN2oyUzpK50lnZ0vW/vvy7rUI6rX91qDF/o4kJZ3WKHNRcYl8q7N18eMfav7nWbppTJRS/uNCXTeyt0xt54ifrureS0KClJXlH23PyiKgt2Dj+3XR/h+Pa/P3B51uBXAEJ45WwImjcIMmc3JkVZd3j4ryB6xq+DJ8SkxJrPR9Si58r27g8/nnoOfk+EfQS0PtKXz09V4l/d8mfb37sM6J7qj/d9UQDe/doREarkYd3wtajp0Hjui8OSv1/64aohnj+zjdDtAgqjtxlJBeASEdblA6ulx2ykt4SLj7RoyDgvwj6BWdYjWOyt7fSYeQUclsVvQ4HVu/P6Skdzbr46/3KqpzuGZNGqRJw7o3/sg5UEcX/O8HGtS9nZKnV5phgCaP1V2AJqbJTOmo4zzpyubcn3SI5n4iaAP6dt+Pun/hV5r05MdKz/lBv7tysJY9cIEuj+nhmoDO6kWoiXP7dNKarP3MS0eL1MrpBgA0YUlJla/dfYp50qeaW98iTgRtADv2F+jplZl668vvFBJs5D2/r2ZOOFsd27Z2urVyKn6TUnoegiT3fRCFo8b07ay/p+Vq6+5DGtyjvdPtAI2KkXTAhXwZPt32j9vKnUx52z9uq/1oYwNfoVIJCbVejcOX4VOQqfp/Pa791sDFduwv0O/+kaGL//Sh/vHVTt08Jkof//oiPXTFYNcFdKmJrV4ER53bt5Mk6YtvqrhKLdCMMSe9Auakww26/G8X5R05+R+lzmGdte/XNVw3uAGvUFlX1c1Fd+Wce5fb8v1BPffhdi1dv0tBRpoy6iz98uJ+rr9CY9DDQbI6+d8ezkNAZcY/ulLDekbouZtHOd0KUO+Ykw40MZUFdEnKK8ir+ch4A1yh8nRVNRc92AQT0GthbdZ+3f7KWk2a94mWbdqt286L1se/vkh/vD7G9QFdasEXpEKdnNuns1Z/m8e8dLQ4hHTAjar7t6ima5LX8xUqa+QU02uqmoteYksI6KdwtLBYb6bl6po/f6qpz32u9B0H9B+XDNCqWRfrd1cNUY+Ixgvnp3vSZ6UXpCoySnopu2GmZZ2uhp42hmqN6dtJPxQUKnPPYadbARoVJ44CLtS5QMprW3m9nNKR8cqmr0RGVr6GeS2vUFljFafXlH6IkE70F9mqk7KLTv6WILJVp//f3p3Hx13V+x9/ncnWTNLsTZc0SzeWQspWAcEFLAjUH+LKD++oKGqurXpBLy7c3HsB/UWBnwjcn7bXXAS5OIIrAlcUsRRRUKSsLUtLlyTdl6RNk6ZZ5/z++E7aSfKdZCaZ5DvJvJ+PRx9pTmamJ8mX4T1nPudzxmdOU8COgx385G9N/Oz5Jg529LCwNJdvXXEKHzmrnOzMtAmfTyI2ffbfrnZNLU2tjVS0Gur+aAmsBxh63Xgqhutaxte584sBpy79xFkTeDKuiMdUkz6IatIlGQQvLOGadzTTHfEyOrMX7nmYcJCJEK0n+cqVsHr10PEVK2DVqoTOF4jpYKPghSXUnNdMR8ReRn831D9bTGBtjLX2KaC7N8STb+7jly9s58k39wFw8eKZXP32Kt6+oNjTNooJP2hrDAdiTYhkn18KsNbyjlvXclp5PqsCqkuXqWW4mnStpIskocBn74I7Pk3tO3toyoeKVqhb4xLQIfrK+GOPxTc+VjGU1wT+1ALNULuMgd/XhpbxmdMk8/quw/zihe08/PIuWo50M2N6Fp9/9wIC51ZSliS15tFKlkZqqxn9AT0oy4pHss8vBRhjOGdeEU9tskJzvAAAIABJREFU2o+1Nml6/YuMN4V0kWQUCBAAApHHpi9fDlvui70n+USHi1jKayoqCKxvHPpiozJ1Nwxub+ngt+t388jLu3h992Ey03xctLiUj55VzjsXlZCellxbhyryK1xX0ke96XOiy7LilezzSxFnzyvi1y/tZMv+IywszfV6OiITIrme/UXkuEDAeTs9FHI+rloVX0/yUZ4GOmp1dc6LhkiDX0QsX+5+32jjU9SOgx3UP72FK77/F95521pu+d2bZKQZbn7/KTz3L8tYFTiLC08qTbqADlE2fY7l8KlkvyZiua5l3C2tKgTgxcaDHs9EZOJoJV1kMgkEYt+sNsrTQMc0N3A2svav/tfVDZzvRJfgJIlQyPLarsM8+eY+nnxzL6/saAVgydx8brjsJJZXz6a8yD/CoySHgZs+m6jIr6BuWR2B6gDB1Sup3VpPU04fFUfSqJtfQ2DFCPsfkv2aiOW6lnE3vySXAn8G6xpbuPJt5V5PR2RCaOPoINo4KskiuD7oGoTie5BgcoULn89pHzlYtM2vk1h7Vy/fXvNrfvr8y/QePYl0ijFYTisv5JJTZvG+6tlUFE+OYB6L4OqV1OxcTUfG8TF/D9SXrRg+qKfQNSFj85kfP8+25iM8+c8XeD0VkYTRxlGRSSYRbe6cG8ex8j5Kcb2YmML1vZ09fbzYdJC/bmnmr1uaebGphZDNIcTpdKW9yCHf85D1Oh9913cJVJ/v9XQTrnZrPR2DSoU7MpzxAMOE9Cl8TUhinVVVyJo399FypJuinMyR7yAyySmkiyQht5M5O3o6qF1Tm1SH/sT9YmKiS3DG0ZGuXl7ZfogXGg/y163NrGs8SHdvCJ+B6rkFhPxPsKdnLV2+18H0OXfqI+l+h4nSlNMX1/gxU+iakPF1VsXxuvSLFs/0eDYi408hXSQJJbzN3TiJ+8XEJK3vtday7cARXmo6xItNB3mx6RAb9xym/5Tyk2fn8YlzKzlvQTFvm1dE3rQMfDe/E5s2tIwj2X6HiVJxJI3G3KGBvOLICAcuTdJrQibeaeUFZKQZ1imkS4pQSBdJQglvczdO3OY43DgwISU4Y9EXcgL5a7taeX33YV7fdZgNO1s52NEDwPSsdE6vKODiCxdyRmUhZ5QXUOAf+tb7ZPkdJkrd/BrXmvS6+TUj3znJrwlJDtMy0jhlTj4vNOpcBUkNCukiSahuWd2AMhIYY5u7ceIzPkJ26OY+n0m+1oFuDnf2sHlfOxv3tDmhfNdh3tjdxtEeZ0U4M83HCbNyuXjxTM6oKOTMikIWluaS5hv5MJXJ8jtMlMCKVbCa+Lu7iMRhaWUh//23Rrp7Q2SmT47nGZHRUkgXSULDtblLJm4Bfbhxrxzq6Oatfe28tbedt/a1sTn89z2HO4/dZnpWOifPyeOqs8tZPDuPU+bks7A0d9RBwKvfYUK6Ao1SYMWq4TeJiozRWZWF3P2XbWzY1cqZ4Rp1kalKIV0kSQWqA0kXypOZtZZ9bV1s2d/O5n3tx4L4W/vaOdDedex2/sw0Fpbmct7CYhaVTmdhaS4nzMylvNCPL4YV8nhM9O8wYV2BRJLUWeFDjV5oOKiQLlOeQrqIjFpxdjHNR5tdx8dLV28fjc0dbNnXzpb97WzZf4St4Y/tXb3Hbjc9K52FM3N5z0kznDA+M5dFpbnMyc9OeBhPFpOlK5DIaJVOn0ZFkZ91jS18jvleT0dkXCmki8io3XXZXVzz8DV093UfG8tMy+Suy+4a0+Naa2k50h0RwJ0QvmV/O9tbOo51VQGYkz+NBaW5fPjMMhaU5rJghvNnZl4WxkzNMB7NuHQFSrYDsSTlLa0s5Om3DmCtTbn/xiW1KKSLyKglou76UEc3G/e0sWlvGxv3trFpTzub9rVxKNxNBSAr3ce8khxOLcvnitPLWDAjhwUzcplXkkNOlp7G+lWkF9HYO/SdjYr0otE9YDA4sId5Y6PzOSioi2dOryjg1y/tZFdrJ2UF2V5PR2TcGOt2HHMKW7p0qV23bp3X0xCZcrp7Q2za28bruw+zaU84kO9tY+/h4/Xi06elc+LM6Sya6dSK94fxsoKpW6KSSMELS6g5r5mOiI6Q/m6of7aYwNoD8T9gVZX7aaCVldDQMNppiozJK9sPccUPnmFV4EyWV8/2ejoiY2KMecFau9Tta1qCEpGE6+4NsXFPG+t3trJ+Zyuv7Wrlzd1tdPc5XV+y0n0smpnL+QtLOGnWdE6YOZ0TZ01nVt40vX09BoE/tUAz1C6DpnyoaIW6NRDYMMq+0k1RymSijYtMgJNmTyczzccr2w8ppMuUppAukgrGua5456GjvNB4kBcaWnix6RBv7jlMT5/zLt30aemcOiefT51fxall+Zw6J4/K4pyYeo1LnCoqCKxvJLB+0HjlKA9QqqhwX0mvmJoHMsnkkJWexuI5eby0/ZDXUxEZVwrpMjG0+SxuCet3neC64r6Q5Y3dh3m+ocUJ5o0H2d3q9Bv3Z6Zx2twCrnnHPKrL8qkuy6eiyK/V8YlSVzfwdw3g9zvjyfB4IglyenkBP3t+O719IdLTdKiRTE0K6TL+tPksbonqdx1cH6T25atp+mrf8dKH9Ti/i9ramH7+1lq2HTjCM1uaeXbzAZ7d0kzrUWdT5+z8aZxVWcjSykKWVhVx0qzp+h+ml/p/n4l6QZzoxxNJkNPK8/nxsw1s3t/OSbPyvJ6OyLjQxtFBtHF0HGjzWdyq7qyisXXoz6wyv5KG6xpieozBQR/CmwgfDQd1YyDkfjJo69Eent60nz9t2s+zmw+wK7xSPid/GucvLOH8hSWcPa+IOYM7K+gdkyknuHoltVvracrpo+JIGnXzawis0Kmi4q1tB45w4Xef4pYPVXPV2Sq/kslLG0fFW9p8FrdE9Lt2Pdgm09lUGFjPkLribQeOsOaNvax5Yx/PN7TQG7IU+DM4b0ExKxc4wbyqeJjSlVjfMVGQnzSCq1dSs3M1HbnO5425fdTsXA2rUVAXT1UV+8nPzuCVHYcU0mXKUkiX8afNZ3GryK9wXUmvyI/9ZxY16OcDfj/2/9Sxfschfvvqbp54fS9bDxwB4MSZ06l513yWnTyT08sLRtzgeax2/lAjFTURJTUwtKxGpU+TSu3W+mMBvV9HhjMeQCFdvGOM4bTyAl7e3ur1VETGjUK6jD9tPotb3bI6ah66hg57/CRPv8mkblnsPzPXoG+h4sgibvnmd/jtrkK2f/8Z0n2Gty8o5urzqnjPSaWUF/lj/jcGlNQYaCyAmsudrx0L6pHvmNTWDrwOIK76eJlYTTl9cY2LTKTT5+bz/bWb6ejuxZ+pOCNTj3Z4yfgLBKC+3qlBN8b5WF+vUDaMwKtQ/4il8hAYC5WHnM8Dr8b+GHXL6vBnOIE7PTSb/J6PU9b9X5B2B//VnM28klxu+8gS1v3rRdz/mXO4+ryquAI6DF9Sc0zkOyYqfRp/waCzD8Tncz4Gg6N+qIojaXGNi0yk08oLCFnYsPOw11MRGRd66SkTIxBQKI9HbS2Bxh4CL0QO9sS14nzFCf+bB2c2sW5LGlmhU7D0UVLQwlffU80lp8yiMCdz5AcZwbAlNTD0HROVPo2vBJcT1c2vcWrSM46P+XuccRGvnVZeADgnkJ49r8jj2YgknlbSRZLRKFecrbX8bWszX/nZy5zxzd+z/q0l+GweB9N/zM5p1/Bm6Av0Zf85IQEdotfIV7Ti/o7J8uXuDxRtXOIzXDnRKARWrKK+bAWV7WnOOzrtadSXrdCmUUkKJblZzC3M5mUdaiRTlFowDqIWjJIU4mxb2d7Vy0Mv7uD+vzWyaW8707PSafM9xe7QQ3SbjRCx9zOeNo4jcW3zmOGn/vJ6937uasc5voY7NErP9TIFrQy+wIadh3n6axd6PRWRUVELRpHJJsbNtpv2tnH/Xxv59Ys7ONLdR3VZPrd9ZAmXL5lDzncuw/qGBrN42jiOpD+Ix3wyqmrSx5cx7mFcJ77KFHVqWT6Prd9Da0cP+f6Mke8gMokopIskoygnPQaXQO0dVew7WEIpH4Puk8hM9/G/lszmk2+v4vRwjSYkpo1jTFOtDsR+Cqpq0sdXtNVyraLLFHXqHGcDzGu7WjlvYYnHsxFJLNWkiyRIcH2Qqjur8N3so+rOKoLrR99VA3CCekODcypoQwP3nQJf+tVP6N53PaXdN9PbXUJ7VpDrrzjI9648fUBAh4HdXfr5M/xxtXFMuLo65x2BSGrHKSKjVF3mhPT1O9UvXaYehXSRBOivzW5sbcRiaWxtpObRmrEHdaCts4f/enorN/7cktf5RcBwION77Jz2WZp9D/DtZ/7F9X6B6gD1l9dTmV+JwVCZXxm9VnwM4npxonac46u4OL5xkUmuMCeTsoJsNuxSG0aZerRxdBBtHJXRqLqzyrW0ZCybNA939vDjZxq4+89bOdzZS6fvVVrTf0Wn74UBG0ENhtCNoVHOfGzi3jgq4ysYhGuuge7jh2CRmQn33KMXQjJl/eP969i0t52111/g9VRE4jbcxlGtpIskQNR+4aPYpHm4s4f/WPMW77jlSb73xCbOnlfEw184n2mlP6QzbWBAhxFqzBN4sI0b18OMejqoXTO6ln8yRoGAE8gj36lQQJcprrosn20HjtDW2eP1VEQSSiFdJAGi9guPY5Pm0HBezKNffAd3X/02TisvoC5rOf5B/w/y90BdVpQe4/0H2zQ2OhsH+w+2SWBQb3J59wCgsbUxMXX5Er9BexkU0GWqO6Wsf/OoSl5kalFIF0mAaJs0ly9aPmK9dmdPH/VPb+Gdt67le09s4pz5xfzPl97B3VcvpXpu/rHbBW59jPpHoPIQzsEyh6D+EWfcVYIPtnFT0R79ePi46vLHecVfRKau/g4vG7R5VKYY1aQPopp0Ga3g+uCAfuHLFy3nvlfui1qv3Rey/PrFHdzxxCZ2tXZywYkzuP69J3JqWb77P+DzRe+BHXKpSY/39qMQXGKouRw6hjnAdMS6/MFH2YPT8UUbSkUkRud+ew3nzi/izqvO8HoqInEZriZdIX0QhXRJlKibSfMqueey57j1dxvZuLeN0+bm8/XLTuK8BSP0+I33tM6JON2zqopgXiO1y6AxnyH18hDDxladQioiY/TZ+9ax7UA7a/75Aq+nIhIXbRwVGYWx9j132zSaGVpE5/4VXPPjdXRt3sIPHr6F33z345z3t8dHfsB4e4xPRE/yujoCW/w03AmVUd5pHrEuX6eQisgYnVqWx9YDRzjS1ev1VEQSRiFdxEUi+p5HhlOfLaC4+1pmd93BNFvOt566myf+83O8782/YGLd0Blvj/GJ6Eke8W8s3wi4vDG3fFGUja39ioriGxcRGaS6LB9r4fXd2jwqU4dCuoiLRLQWXL5oOdh08no+TFlnPTl9F9Ca/gsu3nYtn3juN2SE+iIePMYNncnYuSM8p8feW+la7vLYW1E2toqIJEj/yaPaPCpTiUK6jMpYS0GS3Vj7nltreWz9duZ0raKw99N0+l5lV9ZKDmXcxxOzD0T5RxNc3jEBLRgjjfpn1tIS37iIyCCledOYMT2LDTu1ki5Th0K6xC0RpSDx/FtevBgYS9/zzfva+eQ9f4dDn8fSy97Mf2N/1v+h17cbgKYozVsSXt4xAS0YI436Z1YR5evRxkVEXJw8O483VO4iU4hCusRtok6ZnMgXA4PVLavDbwb2FfSbTOqWRd902dnTx3cf38hldz3NK9sPwfRfsDvrS3SmvTTgdhVtE/Sf3QRvyIzWK364n5lzxwnY4CoiU97Js6ezeV87PX2JaTEr4jWFdInbWEtBYuXlkfOBV6H+ETvo4CBL4FX326/duI/33vE031+7mcuXzOHJ6y+g7v0X48/MGnA7f4afuiei/A8k0eUdE7xCHagOUH95PZX5lRgMlfmVx3rCD3/HCdjgKiJT3uLZeXT3hdiyv93rqYgkRLrXE5DJpyK/wrX/dyylIPGYqBcDrmprCTT2EHghcrDneKlIbS00NbHnxGq++YmbeOxwJgtm5PDTz51zrN95fziNPOCoblkdgfpawKUveKLCczDozK+x0Qm9kWchjPMKdaA6MHIod71jQKFcRMbk5Nl5ALyx+zAnzcrzeDYiY6eVdInbqMsa4jSWuvAxa2oiWA1V14HvRudjsJpjmy97m7bzo7MuZ9ml/8qaFvjqzKP87tp3DTmQKFAdoOG6BkI3hmi4rsEJsMOUd4y5Bj9ysyg4Ad2EW65ohVpEprD5JTlkpvt4Y3eb11MRSQhPQ7ox5h5jzD5jzIaIsSJjzBPGmLfCHwsjvnaDMWazMWajMeaSiPGzjDHrw1/7D2OcVGKMyTLG/Cw8/pwxpmoiv794TZbTX0dd1hCniXox4Cb47iJqLofGArDG+VhzOQSXGF7Nm8P7r76Dby2r4W07XueJu1fwhbuuJzM9xv+copR3BJcw9hp8t82i1h4/vVMBXUSmqPQ0HyfMzNXmUZkyvF5J/zFw6aCxbwBrrLWLgDXhzzHGLAauAk4J32eVMSYtfJ/VQA2wKPyn/zE/Axy01i4E7gBuHbfvZAy6e0Os+MkL/GDtZq+nEjPXFeJx+Dcm4sWAm9qLoGPgvlGOZmRRe/Gn+MAnbqfZX8Dqh77Nvb+8iYrWvdE3YwaDzrH3Pp/zcZj2hwmpwY/2DsBwm0XjmOO4WbkS0tOdFy3p6c7nIiJxOnmWOrzI1OFpTbq19mmX1e0rgAvCf78PeAr4enj8QWttF7DNGLMZONsY0wDkWWv/CmCM+W/gA8Dvwve5KfxYvwS+b4wxNsmWrDPTffSFLP/5p6187OwKinOzRr5Tihh1jfMYNfUO3MSZ1XcqxT3/BOlz+N8v/54b1t5DXndEoHarJ+8vPelf2e7vU/7MM3DffUPGG7/WMfQxwLX+P5rgu4uoOa/52AuM/ncAKC7C9acYbY4wcavuK1fC6tXHP+/rO/75qlUTMwcRmRJOnp3HL17Ywb62TkqnT/N6OiJj4vVKupuZ1trdAOGPpeHxMmB7xO12hMfKwn8fPD7gPtbaXqAVKB78Dxpjaowx64wx6/bv35/AbyV2X7v0RDq6e/n+JFpNn8r6696NzaaoeyWzum8BDGTfwnf+PCigR9uMGa1PeX2963halKYvacfeMBqZ2zsAHZnOuPsdJraXuqv6+vjGRUSiOL55VHXpMvklY0iPxuXAceww48PdZ+CAtfXW2qXW2qUzZswYwxRHb2HpdK5cWs5P/tbI9hb3FdXJbLKdUFq3rI4CzmdO1ypy+y6hNf3XHMr9KnUf+nzs7QKjlZj09bkPu12tQJ89fvuRfo6D3wEYaXxce6nHWkYT5ecRdVxEJIrFER1eRCa7ZAzpe40xswHCH/eFx3cA5RG3mwvsCo/PdRkfcB9jTDqQDyTtWePXXXQCaT7D7X/Y6PVUEsrLQ4lGo7m9i7+/tpj8ozeQntbN3qyvkl+yhvr3f98pvQkEnE2YodDwmzGjtVRMc18ZrzwSZTy/Eojt5xh3R5zx6qUe2WXG2uNlNF7Uu4tIysj3ZzAnfxqv71JIl8kvGUP6I8DV4b9fDTwcMX5VuGPLPJwNon8Pl8S0GWPODXd1+eSg+/Q/1keAJ5OtHj3SrPxpXHP+PH7z8i5e3XHI6+kkTNQNkY9c6/2GxX7BILaqikcWv5uL//UhHntlJ9ddtIhNN32Wzps3jm5zbLRWizU1ruN182uG7WYTy8bSuDvi1NVB5qD6mMzMsfdST4YyGhFJSSfP1uZRmRq8bsH4APBX4ERjzA5jzGeAW4CLjTFvAReHP8da+xrwc+B14PfAF6w9VgewArgb2Axswdk0CvAjoDi8yfQrhDvFJLPPX7CAktws/v3h1wiFkvb1RFyiHkrU05wcK63BIHu+/HU+d9Yn+af3f43yll38z0+u57q9z8feVtFNtJM0V61yHQ+sWDVsN5tYDncaVUecwa9bE/E6tjHKZle38Zwc99tGGxcRGcbJs/PYeuAInT0qmZPJzSTxwrInli5datetW+fpHH71wg7++RevcNuHl3Dl28pHvkOSq7qzyrVDSeUhaLhz8GC4n/cEsdby4LIA3z7tA/T40rj+6fv59AuPkmZDUecSXB8ceoroBHSgifpzzK+k4bqh84ztQavcg/NYfw/p6e415Wlp0Ns7dCzksmvW51NduojE7bH1u1kZfJFHv/gOqufmez0dkWEZY16w1i51+1oylrukvA+dWcbSykJu+f2btHb0eD2dMXMtweiGujUuN07EhsUYNTV3ELj7OW44O8Cpezbz+D1f5LPrHnYCOhDMaxyySTO4PkjNQ9cMrAt/6Brna6tXUvXVdHw3Gaq+mk5w9TC9vkfRm7xuWR0ZvowBYxm+jLEd7jReG0fj2QzqFtCHGxcRGcbJ2jwqU4RCehIyxnDzFadwqKOb7ybDJtIxHnbjWoLxbDGB9S43HuuGxRiEQpZ7n9nGJXc+zas7WvnO34P89MFaKg/tOXabYDXUXGGGbNK89qF/pMN2D3i8DtvNtb/8DDU7V9OY2+ecUJrbR83O1e5BfQybKsOH6Ub9PG7jtXG0sjL28SgbaaOOi4gMo6LIz7QMHxv3qg2jTG4K6UnqlDn5fPLtVdz/t0b+vs3DhjQJ6tIx5ITSz97lvqlyrBsWR7BlfztX/vCv3Pzo65wzv4g/fPldfOwz78MMmkvtRYaO9IGlYB09HTSHjrg+brPpomPgIjcdGVC71aXX9yg3VdauqaW7b+ALhO6+7vhOJB0s2ubWsf4e4nnc/sOTYh0XERlGms+wqHQ6mxTSZZJTSE9iX7v0RMqLsvnaL1/haLdHtbnj1aUj2qbKcTrlsrcvxOqntnDZXX/mrX3tfO/K07j3U29jTkG261ya8hOzV6Mpx+X3NsoSk1g2jkYTtb/6eP0e4nncVatgxYrjK+dpac7nOm1UREZp0cxchXSZ9BTSk5g/M51bP7yEhuYO78pexvOwmwny5p7DfHDVs9z6+ze58MQZPPGVd/GhM+cOLBUZ1Pu8In3IwbQOl+oSfzcURzl/qqLN5T+xUZaYxN0DPWzE/uqx9n2PVxyPG1xxPlXfnevU8393LsEV5ydmDiKSkk6cOZ29h7umxL4uSV0K6UnuvAUlfPzcCu55Zps3ZS/jUbMcDEJJCcFbP07VBxvx/bul6oONBO/4dEJbMHb3hrjzj5u4/P/9hV2HjvKDfziT//z4WZROnzbifev+6ITvYVmnQ0394xnc9WTmkNv7u6Hu2WyXBx9diUncPdDDYumv7qXJdtiViCS/E2ZNB2DTPq2my+SlkD4JfOOyk6ks8nPtgy9x8MhIyTHBEl2zHK5xD85ppuZyaCzA2WhZADWX9BC8+9qxzxlYv6OV93//L9z5x7d4X/VsnvjKu3nfktkxb7QM/KmF+kedEE6UyhcDNDxUSeDL9xJ4sYerX4K0Puf2aX1w9UsQeM5liX2UJSaj6oHO2MpkJkKyv4gQkcnnhJlOSN+4RyFdJi/1SR8kGfqku9mws5UPrXqWebO62Nh7HU2HJ7BHdzDo1KA3NTkr6HV1oy+JCPflrrrOCeaDVR6ChjtGf012dPdy1x/f4u6/bKMkN5O6D1Rz0eKZI95vSO/zh9sJPNUMQMlXodnlXJ3i7GIOfO2Ac/8LS6g5r5mOiMM7/d04XWzWHhj195MI49JfPYF8N/uwLq+EDIbQjWrDKCLxs9ZSfdMf+NCZZXzzilO9no5IVOqTPgWcWpbPxae3s3FnBi0tp8dcFhB1w2Acgkug6jrw3eh8DC4ZwzcSPjinMcr5EtHGY/HUxn28946n+eHTW/noWXP5w5ffHXNAH1JucWEbwbOcdi1d6e736zrUfKwlZe1FDAjo4Hxee9Hov59EWR5aOPTdABseTwKjrbUXEYnGGMMJM3O1ki6TmkL6JPLbHV+lw/dXCnuuYVqfk5SHKwsY7uCdWCW8XjgtjWD1MF828V+S+9u6+NIDL/Gpe58nK93Hz2rO5ZYPLyE/O2PkOxOl3MJ2U/vBPKispD3T/X7tmRxrSdnU2+x6m6ZeD9tnhj22+6mhG15NeDwJjLbWXkRkOCfMdNowqmJAJiuF9Emk6XAjBzK/R4/ZQUn3DaSHZjvjLqUMALWPXOt68E7tI7HXfSesXnjlSkhPJ7i4j5rLce2SAtDHwPKG4d4JCIUsD/y9iWW3P8XjG/bw5YtO4LFr38k586N0ZonCrRQEoLG32elKMlIZe0cHFe3uB+8kw2qwaxvIYcYn2mhr7UVEhnPCzOkc7OjhQPsE7+USSZAob+RLMqpoT6Mx9yj7M7/JrK7vUdr97+zOup6KI52ut2/qaXYNmE097qu+ro+RiE2HK1fC6tUA1C4bWhYSqTIi7Pav4ve/SOhfxQc4u/T9/MtD63m+4SDnzi+i7oPVLJiRG/ucIqSZNPrs0MCaZpy5FGcX03x06M8ssu1i3eN91FzlH/CCJllWgyta3ev/K1onfi7RBKoDCuUiklAn9nd42dvGjOlZHs9GJH5aSZ9E6h7vw98Nvb697M/8Dul2FrM6/40bn3B/rRUthMUTzhJSL1xfT7DaqWcfrubc3+18j/3cVvGPdkPtQy9yafhQots+soQHXr6fBbMLnE4p6enOi4I4uAX0yPG7LruLDN/A0pmMXrjr98c/DxyuTNrV4Lo1Q9tJ+rudcRGRqUodXmSyU0ifRAKHK4+1Bez2bcD03E6WPZknT/sWXb1Dg2bdy8Xu4ezl2MtBElEv3F/i0lhA9NIRG25ZeLjy2NCA1XpryOm9iLLOH2I7LuDKpeU8+c8XcOU938GsXg194e+/r89ZtY8jqFdGKVXpHw9UB7j3A/eGAzhUthrufRgC68M3DLekDFQHaLiugdCNIRqua0iKgA4DrxvT39v90YE/axGRqaYkN5NCfwZvqVe6TFIK6ZNJXR2BLX4a7oTQzdDEkMwjAAAWRUlEQVTwvb9w65p6/jx7Mf/0wEt094bruYNBqKoi8FTz0HD2eAaBz94V8z+ZiHrhkUpcADBw35kQ/PryY0P9q/WZoUXM6vq/lPRcR49vN6b4Nr7zoWqKcjIHrNIf6z5TjdN3PEZ1j/eR2TtwLLN34Kr+8QBuaTjrfifgxtHj3FODr5s7IbBlDL3uRUQmAafDy3StpMukpZA+mbgcgnPllz/GTZcv5vHX9vKZ+56n437nsKD+VoeB9dBwl3HCWfjgnYkOlE0xtlXsyIDarseOfX592oeZ2fkVZnXdTpot5UDG7bSZr1GXe7w9TOQq/bFDkS53xmNWXOzWoRCKo7zjEO24+/CLI3y+Y60Zk8IoD08SEZnsTpw1nbf2tqvDi0xK2jg62QQCQ8LVpwB/Zjrf+PWrBPa3cE8ojcLIG1jrBLOGhrj/ueE2b8a6ml5RUBm1g8pgja2NHDzSzffXbub+pneSS4he+yt25/yc8sNHqVsDgcOPwQrn9m6r9B2ZznigqiqmA5hqL4KeQSvpPenOeMwxNnySKh3hGvpwa0YgOcKwy3UjIjLVLZo5nbauXna3djKnINvr6YjERSvpU8SVbytnVeAsXiso5wOfvJ03SwbVGzeN7gj4RLRgrMtaji+GgyONnUZB75W867a13PvMNj7w2lr+/MMaGm6/j75vHnXKNNYz4HsZ9lCkxkbnBUp/YI6ysh2tl3lcPc5ra48H9H4dHc64iIh44sT+zaN7VfIik49C+hRy6amzeGDtXRxNz+KDn7id/znpHce/WDG6ft2JaMF47/P1hIbpNW6sn7yeKynr/BH5PZ/knPlF/O7ad3Hb6w8zu82lXWTE95Lmc9/0mTb4RcEwgTkhHWyivQga5YsjEREZuxNmOq15VZcuk5FC+hRz1lc+y//8/AYW79vKF6/4Btcvv5bWgpKBmwTjqJ1ORIBdU9Hn2tXFZ/PI7/kHyjrvobD3k3T5NtGR903uvvptTn/bujqnc0ok/8ANj1HbJ7pd2VECc0JOvIz2ImiUL45ERGTsCvyZzJiexeZ97V5PRSRuCulTTSBA6Z238cCz/8mXnn2Qh055D5d84R6eOOMiZ+NMMGJjaQylIHVZy93bOGYtd719LDJCVRR1f4myznsp6P0Hunzr2Z11LfuzbiaUvmXA9zLShseo7RPdesFHCcwJOfEyhhcUIiIy8RbOyFVIl0nJaMfzQEuXLrXr1q3zehoJ8+qOQ1z/i1fYtLedt88vpnbV9Zz6yjNDbxhtY2lJCcE5zdQuc7q0VLQ6h+AEdhXDgQMxzcHcZDBkkd13DtP7LmVaaAkhOjmStpa29Efp8Q1c4bY3xn5NBpcYai4fuHnU3x3uA74+4oZ+//h3NAkGnZKaGDariojIxPi332zgNy/v5NUb34sxw9ReinjAGPOCtXap69cU0geaaiEdoKcvxE+fa+LOP27iYEcPF731HJ99/iHO2b7heBWKMU5LwcGGe0Ib4drp7QvxfMNBPvGDb9Kd+Q58+Ok1e2lLe4z2tMcJ+YaubKSZNHr/vdfl0aKoqiKY1+j+IiI3V4FZRCTF/fiZbdz06Ov8/V+WUZo3zevpiAwwXEhXC8YUkJHm4+rzqvjAGWX86KPX8ZP553PVols4ad82rnj9KS5/42nmFvpHfqAYHDzSzbNbmlnzxl6e3LiPQx09kPEOOtKeoT3tSbp8G5yTlaKIVmMeVV0dgZoaAusjOqv4/VB/l0K5iIiwsNTp8LJ5X7tCukwqCukpJD87g6987DxWrljJr+a/nV9WX8StF3yaWy/4NIuy+nj7wxtYWlXECTNzmVeSQ1Z6mnOgT/PQDiu2uJgDbV1s2d/O5n3tbNjZyrrGg8fq/gr9GbznxFLec3IpV/xqPiFfV0xzrMyP86j6/iCuMhMREXGxsNTp8LJlfzvnLSzxeDYisVO5yyBTsdxliIja6aaTz+Cxz93As3kVrGtooaPbWcn2GSjKyaK4p4PpWzdhwqUwnemZtOTk05w/g057vBQmb1o6S6uKOKuykHPmFXFGRSFpPufrVV82NBYMnYaxzimh/fwZ/vg3bIqIiAzDWkv1TX/gw2eWcfMVp3o9HZEBVO4iA0WcPlkBfD78p6cvxFt729kcXh3f39ZJy5Fu2tJDsHUrdHaSY2FRRQFFp85nTkE2C0tzWViay6y8afh87vXrdX/OpOaS7gGbO40Fi1OD3mf7qMyvpG5ZnQK6iIgklDGGBTNy2LxfHV5kclFIl2MyHnyAxbW1LI4sG/lEAHB9gRezQME74dE11C5zTgI1HF9B77N9x3qSK6CLiMh4WDAjl2e3uByOJ5LE1CddHMP0Tw+uD1J1ZxW+m31U3VlFcH30w49crV1LYD003On0L7eDFtw7ejqoXeN+GqiIiMhYLSjNZc/hTto6e7yeikjMFNKTQRwngI6b2lro6Bg41tFB8O5rqXm0hsbWRiyWxtZGah6tiS+oR7R2bMp3v0lTq/tpoCIiImPVv3l06/4jHs9EJHYK6V6L8wTQcdPkHpJrT2+mo2dgeB/LyndRR5Tx7KJRPZ6IiMhIFsxwQrpOHpXJRCHda1FWsKmd4PKPigrX4YSsfOuENxER8VBlsZ90n9HmUZlUFNK9FmUFO+r4eKmrcw4BiuT3U5FR7Hrzinz3UO8qos1nS5Qzk1qOtsT+eCIiInHISPNRVZLDFq2kyySikO61KCvYUcfHSyAA9fVQWemsfFdWQn09de+/C3/GwGTd340lZpXHDyiqaHW/SVyhX0REJE5qwyiTjUK616KsYFMXRwhOlEAAGhqcjZ4NDRAIEKgOUH95PZX5lRgMlfmV8R84FPE91q0Bf/fAL8cd+kVEROK0sDSXxuYOuntDI99YJAmoT7rXJsGx9oHqwNh6mEd8j4ENTVBcRO1F0NTbQkV+hXqki4jIuFtYmktfyNLUcoSFpdO9no7IiBTSk0HECaBTVsT3GAj/ERERmSiRHV4U0mUyULmLiIiITHlqwyiTjUK6iIiITHk5WenMzp+mkC6ThkK6iIiIpIQFM3LZ1hzlVD2RJKOQLiIiIimhqsTPtv3t2IjzO0SSlUK6iIiIpIR5Jbkc7uyl5Uj3yDcW8ZhCuoiIiKSE+SU5AGw7cMTjmYiMTCFdREREUsI8hXSZRBTSRUREJCXMLcwm3WcU0mVSUEgXERGRlJCe5qOiyK+QLpOCQrqIiIikjHklOQrpMikopIuIiEjK6A/poZDaMEpyU0gXERGRlDFvRg5dvSH2HO70eioiw1JIFxERkZShDi8yWSiki4iISMqYX5ILwFaFdElyCukiIiKSMmbmZZGdkca2/QrpktwU0kVERCRlGGOoKslh24F2r6ciMiyFdBEREUkp80tyaGju8HoaIsNSSBcREZGUMq8kh6aWDnr6Ql5PRSQqhXQRERFJKfNKcugLWba3aDVdkpdCuoiIiKSUKrVhlElAIV1ERERSynyFdJkEFNJFREQkpRTmZFLgz1BIl6SmkC4iIiIpZ15JDlvVK12SmEK6iIiIpJyqYqfDi0iyUkgXERGRlFNZ7GdX61G6evu8noqIK4V0ERERSTmVxX6she0tR72eiogrhXQRERFJORVFToeXphbVpUtyUkgXERGRlFNZ7AegsVl16ZKcFNJFREQk5RTnZJKbla6QLklLIV1ERERSjjGGiiI/jc0qd5HkpJAuIiIiKamy2E+j2jBKklJIFxERkZRUUexnR8tR+kLW66mIDJESId0Yc6kxZqMxZrMx5htez0dERES8V1WcQ3dfiN2tasMoyWfKh3RjTBrwA+AyYDHwMWPMYm9nJSIiIl6rLHI6vDRp86gkoSkf0oGzgc3W2q3W2m7gQeAKj+ckIiIiHqvob8OounRJQqkQ0suA7RGf7wiPHWOMqTHGrDPGrNu/f/+ETk5ERES8MTs/m4w0ozaMkpRSIaQbl7EBO0SstfXW2qXW2qUzZsyYoGmJiIiIl9J8hnK1YZQklQohfQdQHvH5XGCXR3MRERGRJFJZ5NdKuiSlVAjpzwOLjDHzjDGZwFXAIx7PSURERJJAZXEOTS0dWKs2jJJcpnxIt9b2Al8EHgfeAH5urX3N21mJiIhIMqgo8tPe1UvLkW6vpyIyQLrXE5gI1trHgMe8noeIiIgkl6oSp8NLQ3MHxblZHs9G5Lgpv5IuIiIiEk1FUQ4ATS3aPCrJRSFdREREUlZ5UTbGoM2jknQU0kVERCRlZaWnMTtvmk4dlaSjkC4iIiIprbI4R6eOStJRSBcREZGUVlmsA40k+Siki4iISEorL/JzoL2bju5er6cicoxCuoiIiKS0uYXZAOw4eNTjmYgcp5AuIiIiKa28yOmVvl116ZJEFNJFREQkpZUXKqRL8lFIFxERkZRWkptJdkYa21XuIklEIV1ERERSmjGGuYXZWkmXpKKQLiIiIimvvMivjaOSVBTSRUREJOWVF2az/aBW0iV5KKSLiIhIyisv8tPW2UtrR4/XUxEBFNJFREREmNvf4UWr6ZIkFNJFREQk5fUfaKTNo5IsFNJFREQk5R070Egr6ZIkFNJFREQk5eVnZ5A3LZ3tLerwIslBIV1EREQEZzVdK+mSLBTSRURERIDyQr9q0iVpKKSLiIiIAOVF2ew4eBRrrddTEVFIFxEREQGn3KWrN8T+ti6vpyKikC4iIiICTrkLqMOLJAeFdBERERGccheAHQfV4UW8p5AuIiIiQsSpo9o8KklAIV1EREQEmJaRRklulnqlS1JQSBcREREJKy/KVk26JAWFdBEREZGw8kIdaCTJQSFdREREJKy8KJtdhzrp7Qt5PRVJcQrpIiIiImFzC/30hSx7Dnd6PRVJcQrpIiIiImFlBU4bxp1qwygeU0gXERERCSsrdEL6rlaFdPGWQrqIiIhImFbSJVkopIuIiIiEOb3SM9l5SCFdvKWQLiIiIhJhTkE2O7SSLh5TSBcRERGJUFaQrZV08ZxCuoiIiEiEsoJsdh06irXW66lIClNIFxEREYlQVphNZ0+I5iPdXk9FUphCuoiIiEiE/g4vu1TyIh5SSBcRERGJMEdtGCUJKKSLiIiIRJgbPtBIm0fFSwrpIiIiIhHyszPIyUxTG0bxlEK6iIiISARjDGWFasMo3lJIFxERERmkrCBbNeniKYV0ERERkUHKCrPZ1aqQLt5RSBcREREZZE5BNoc6ejjS1ev1VCRFKaSLiIiIDNLfK1116eIVhXQRERGRQY61YVRdunhEIV1ERERkkLICPwA7tJIuHlFIFxERERmkdHoWGWlGK+niGYV0ERERkUF8PsPsfPVKF+8opIuIiIi4mFMwjV0K6eIRhXQRERERF2UFfpW7iGcU0kVERERclBVms7etk+7ekNdTkRSkkC4iIiLiYm5BNtbCntZOr6ciKUghXURERMTFHB1oJB5SSBcRERFxMbtgGgB7Diuky8RTSBcRERFxMTvfCem7DqncRSaeQrqIiIiIC39mOvnZGexu1Uq6TDyFdBEREZEoZudPY7dW0sUDCukiIiIiUcwpyGaXuruIBxTSRURERKKYnT9N5S7iCYV0ERERkSjmFGRzqKOHo919Xk9FUoxCuoiIiEgUxzq8aDVdJphCuoiIiEgUs/OdA4106qhMNIV0ERERkSiO90rXSrpMLIV0ERERkShmhUP6bq2kywRTSBcRERGJYlpGGsU5merwIhNOIV1ERERkGLMLprFLBxrJBPMkpBtjPmqMec0YEzLGLB30tRuMMZuNMRuNMZdEjJ9ljFkf/tp/GGNMeDzLGPOz8PhzxpiqiPtcbYx5K/zn6on6/kRERGTqmJ2frZV0mXBeraRvAD4EPB05aIxZDFwFnAJcCqwyxqSFv7waqAEWhf9cGh7/DHDQWrsQuAO4NfxYRcCNwDnA2cCNxpjCcfyeREREZAqakz+N3VpJlwnmSUi31r5hrd3o8qUrgAettV3W2m3AZuBsY8xsIM9a+1drrQX+G/hAxH3uC//9l8Cy8Cr7JcAT1toWa+1B4AmOB3sRERGRmMwuyKatq5e2zh6vpyIpJN3rCQxSBvwt4vMd4bGe8N8Hj/ffZzuAtbbXGNMKFEeOu9xnAGNMDc4qPUC7McbtBYSXSoADXk9CJh1dNzIaum5kNFLiusm71esZTDkpcd2MoDLaF8YtpBtj/gjMcvlSrbX24Wh3cxmzw4yP9j4DB62tB+qjzMlzxph11tqlI99S5DhdNzIaum5kNHTdyGjouhneuIV0a+1Fo7jbDqA84vO5wK7w+FyX8cj77DDGpAP5QEt4/IJB93lqFHMSEREREZlQydaC8RHgqnDHlnk4G0T/bq3dDbQZY84N15t/Eng44j79nVs+AjwZrlt/HHivMaYwvGH0veExEREREZGk5klNujHmg8D/A2YAvzXGvGytvcRa+5ox5ufA60Av8AVrbV/4biuAHwPZwO/CfwB+BNxvjNmMs4J+FYC1tsUY8y3g+fDtvmmtbRn/725cJG0pjiQ1XTcyGrpuZDR03cho6LoZhnEWnUVEREREJFkkW7mLiIiIiEjKU0gXEREREUkyCulJxhjTYIxZb4x52RizLjxWZIx5whjzVvijTk5NccaYe4wx+4wxGyLGol4nxpgbjDGbjTEbjTGXeDNrSQZRrp2bjDE7w887Lxtjlkd8TddOijPGlBtj1hpj3jDGvGaMuTY8ruccGdYw146ec2KgmvQkY4xpAJZaaw9EjN0GtFhrbzHGfAMotNZ+3as5iveMMe8C2oH/ttaeGh5zvU6MMYuBB4CzgTnAH4ETIjZlSwqJcu3cBLRba7876La6doTwqd+zrbUvGmOmAy/gnPr9KfScI8MY5tq5Ej3njEgr6ZPDFcB94b/fh3OBSwqz1j6N080oUrTr5ArgQWttl7V2G7AZ5wlQUlCUaycaXTuCtXa3tfbF8N/bgDdwTvDWc44Ma5hrJxpdOxEU0pOPBf5gjHnBGFMTHpsZ7hVP+GOpZ7OTZBbtOikDtkfcbgfDP0lKavqiMebVcDlMf9mCrh0ZwBhTBZwBPIeecyQOg64d0HPOiBTSk8/51tozgcuAL4TfmhYZC+Mypjo3ibQaWACcDuwGbg+P69qRY4wxucCvgOustYeHu6nLmK6bFOZy7eg5JwYK6UnGWrsr/HEf8BDO2zx7w3Vd/fVd+7yboSSxaNfJDqA84nZzgV0TPDdJYtbavdbaPmttCPgvjr+9rGtHADDGZOCErKC19tfhYT3nyIjcrh0958RGIT2JGGNywhsrMMbkAO8FNgCPAFeHb3Y18LA3M5QkF+06eQS4yhiTZYyZBywC/u7B/CRJ9QetsA/iPO+Arh0BjDEG53TvN6y134v4kp5zZFjRrh0958Qm3esJyAAzgYeca5p04KfW2t8bY54Hfm6M+QzQBHzUwzlKEjDGPABcAJQYY3YANwK34HKdWGtfM8b8HHgd6AW+kKo75SXqtXOBMeZ0nLeVG4B/BF07csz5wCeA9caYl8Nj/4Kec2Rk0a6dj+k5Z2RqwSgiIiIikmRU7iIiIiIikmQU0kVEREREkoxCuoiIiIhIklFIFxERERFJMgrpIiIiIiJJRiFdRERERCTJKKSLiIiIiCSZ/w8qxLPezGOV9AAAAABJRU5ErkJggg==\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": 42,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.556771690212023"
]
},
"execution_count": 42,
"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": 43,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"-29.871340302044153"
]
},
"execution_count": 43,
"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": 44,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"Text(3, 0.75, 'Maximum R^2 ')"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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94/KysqkyzDr8ubNm8eAAQPo2bMnBxxwACtWrKBHjx5s2bKFkSNHUl9fz6pVq9i9ezdFRUVUVlbSvXt33nrrLbZt20ZlZSXbtm1j+fLlHHnkkWzYsIGtW7dy2GGHUVtbiyS2b9/Ozp07qaysZP369dTX11NeXs6e/8fnzZvHcccdB8DGjRupq6ujsrKy1f0zLVq0iMGDB1NeXs727dtZtmwZY8aMAWD9+vXU1dUxbNiwd993xYoVjBgxgrKy911kmK1bt/Laa69xxBFH5PTfvyPNnTv37YioyDozIrrMY9y4cWFmuVdeXh4vv/xyfOxjH4tt27bFscceG08++WScf/75ERFRV1cXu3btioiIGTNmxEc/+tGIiGhsbIzTTjstHnzwwRg3blw888wzERFx7733xnXXXRcREVdddVVceumlsXv37nj44Yejd+/e8corr0RjY2Mcf/zxMW/evHdr2OPXv/51XHXVVW3qn+mMM86IOXPmRETEHXfcEbfeemu7/l2uu+66+OpXv9quvkkBaqKZz9SSXCZT+uJedwHFpE7C+UaT+V8kdWEzgBLgSKAiIjZIqiV1HHkj0BAR1bms1cza5phjjqG2tpZf/vKXfPCDH3zfvLq6Oq666iqWLFmCJHbtSl3RpKioiPvuu49jjjmGa6+9lgkTsl+A94ILLkASRx99NAMHDuToo48GYMyYMdTW1jJ27N7Pq2xP/yuvvJL6+noaGxt58cUX2/zv8fOf/5yamhpmzZrV5r75Kme/QSh1B667SV2tczRwuTIuVwwQEf8ZEWMjYiypewLMiogNGU3OTM93OJjloQsvvJAvfOELXH755e+b/uUvf5kzzzyT+fPn8/vf/57t298753DJkiX06tWLNWvWNPu+3bp1A1KBsuf5ntcNDal7FWWeLJ75/q3t39QvfvELVqxYwRVXXMF111231/VuaubMmXz961/nkUceed/yCl0uf6QeDyyN1JUmd5I6w/OivbS/HPhlDusxsw529dVX85WvfOXdb+h71NXVMWhQ6krn99133/um33DDDcyePZv169fzm9/8pt3LHjhwIAsXLmT37t089NBD7X6fTKWlpXzta1/jueeeY+HCha3qM2/ePK699loeeeQRBgwY0CF15ItcBsQgMq5sCaymmWvjS+pJ6lIHmafnB6nLAcyVNKW5hUiaotSNXmrW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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": 45,
"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": 46,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1b0a2cfa906f4bfcb6d4854dea2ca012",
"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": 46,
"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": 47,
"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": 48,
"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": 49,
"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": 50,
"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": 50,
"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": 51,
"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": 52,
"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": 53,
"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": 54,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f67d002f080>"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAAJNCAYAAAD6c1l4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde5RlZWHn/d/TdenqK91Agwi03Too0IBcKkSDoxCVoBPjJSbByyT6TiQSnWSyMgwkk8SoK++bd0UdddQY4jiTcUh8DYpilvcMihoc6UZULl64CS0KDQj0vau6nvePc0716aL6evbp6q7+fNY66+yzL6eew1b5uuups0utNQAAQO/mzPQAAABgthDXAADQEHENAAANEdcAANAQcQ0AAA0R1wAA0JDBmR5Ak44++ui6YsWKmR4GAACz2Jo1ax6qtS6bbtusiusVK1Zk9erVMz0MAABmsVLKj3a1zbQQAABoiLgGAICGiGsAAGjIrJpzDQAwk8bGxrJ27dps2bJlpodCA0ZGRnLCCSdkaGhor48R1wAADVm7dm0WLVqUFStWpJQy08OhB7XWPPzww1m7dm1Wrly518eZFgIA0JAtW7bkqKOOEtazQCklRx111D7/FkJcAwA0SFjPHvtzLsU1AMBhbOHChUmS+++/P6985Sun3ef888/f471E3v3ud2fTpk2Tr1/84hfn0UcfbW6gbZ3x7sqjjz6aD3zgA43/3L0lrgEAyJOf/ORcffXV+3381Lj+zGc+kyVLljQxtH0irgEAaMTll1++U1j++Z//ed75zndmw4YNef7zn5+zzz47p59+ej71qU894dh77rknp512WpJk8+bNufjii3PGGWfkN37jN7J58+bJ/S699NKMjo5m1apVectb3pIkee9735v7778/F1xwQS644IIkrTtnP/TQQ0mSd73rXTnttNNy2mmn5d3vfvfkzzvllFPyhje8IatWrcqFF16408/puPvuu/PsZz87P/dzP5c//dM/nVy/q890xRVX5M4778yZZ56Zyy67bK8+e6NqrbPmcc4551QAgJly2223zejPv+mmm+pzn/vcydennHJK/dGPflTHxsbqY489Vmutdd26dfVpT3tanZiYqLXWumDBglprrXfffXddtWpVrbXWd77znfX1r399rbXWb3/723VgYKDeeOONtdZaH3744VprrePj4/V5z3te/fa3v11rrfUpT3lKXbdu3eTP7rxevXp1Pe200+qGDRvq+vXr66mnnlpvuummevfdd9eBgYH6rW99q9Za66/92q/Vj3zkI0/4TC95yUvq3/3d39Vaa33f+943Od5dfabuz7G7/fbWdOc0yeq6ix71VXwAAH3w1k/fmtvuf7zR9zz1yYvzlpes2uX2s846Kw8++GDuv//+rFu3LkuXLs3y5cszNjaWP/7jP87111+fOXPm5Mc//nEeeOCBPOlJT5r2fa6//vr83u/9XpLkjDPOyBlnnDG57WMf+1iuvPLKjI+P5yc/+Uluu+22nbZP9bWvfS0vf/nLs2DBgiTJK17xinz1q1/Nr/zKr2TlypU588wzkyTnnHNO7rnnnicc//Wvfz0f//jHkyT/9t/+21x++eVJWheIp/tMU+1qv1199l6JawCAWeSVr3xlrr766vz0pz/NxRdfnCS56qqrsm7duqxZsyZDQ0NZsWLFHr9ibrpvyrj77rvzjne8IzfeeGOWLl2a173udXt8n9aF3unNnTt3cnlgYGDaaSG7Gsvefqb9+ey9ENcAAH2wuyvM/XTxxRfnDW94Qx566KF85StfSZI89thjOeaYYzI0NJTrrrsuP/rRj3b7Hs997nNz1VVX5YILLsgtt9yS73znO0mSxx9/PAsWLMgRRxyRBx54IJ/97Gdz/vnnJ0kWLVqU9evX5+ijj37Ce73uda/LFVdckVprrrnmmnzkIx/Z689z3nnn5aMf/Whe+9rX5qqrrppcv6vP1BnHnvbrF3ENADCLrFq1KuvXr8/xxx+f4447Lknymte8Ji95yUsyOjqaM888MyeffPJu3+PSSy/N61//+pxxxhk588wzc+655yZJnvnMZ+ass87KqlWr8tSnPjXnnXfe5DGXXHJJXvSiF+W4447LddddN7n+7LPPzute97rJ9/jt3/7tnHXWWdNOAZnOe97znrz61a/Oe97znvzqr/7q5Ppdfaajjjoq5513Xk477bS86EUvyuWXX75Pn71XZXeX6g81o6OjdU/fwQgA0C+33357TjnllJkeBg2a7pyWUtbUWken299X8QEAQEPENQAANERcAwBAQ8Q1AAA0RFwDAEBDxDUAADREXPdq8+bkwguTz3xmpkcCABzmHn300XzgAx/Yr2Nf/OIX59FHH93tPn/2Z3+WL33pS/v1/lOtWLEip59+ek4//fSceuqp+ZM/+ZNs3bp1t8f08vkOFHHdq/vuS774xeTlL289AwDMkN3F5/bt23d77Gc+85ksWbJkt/u87W1vywte8IL9Ht9U1113Xb773e/mm9/8Zu66665ccsklu91fXB8OOvemHxhIXvrSpH2bUQCAA+2KK67InXfemTPPPDOXXXZZvvzlL+eCCy7Iq1/96px++ulJkpe97GU555xzsmrVqlx55ZWTx65YsSIPPfRQ7rnnnpxyyil5wxvekFWrVuXCCy/M5s2bkySve93rcvXVV0/u/5a3vCVnn312Tj/99Hzve99Lkqxbty4vfOELc/bZZ+d3fud38pSnPCUPPfTQbse9cOHCfPCDH8wnP/nJPPLII9mwYUOe//znT773pz71qWk/3672m0niuledX1+8//3JypXJv/k3yb/8y8yOCQA4LP3lX/5lnva0p+Xmm2/OX/3VXyVJvvnNb+Yv/uIvcttttyVJPvzhD2fNmjVZvXp13vve9+bhhx9+wvv88Ic/zJve9KbceuutWbJkST7+8Y9P+/OOPvro3HTTTbn00kvzjne8I0ny1re+Nb/4i7+Ym266KS9/+ctz77337tXYFy9enJUrV+aHP/xhRkZGcs011+Smm27Kddddlz/8wz9MrfUJn29X+82kwRn96bNBJ65POCH50peS5z0v+aVfSv7rf01+67eSUmZ2fADAzPgP/yG5+eZm3/PMM5N3v3ufDjn33HOzcuXKydfvfe97c8011yRJ7rvvvvzwhz/MUUcdtdMxK1euzJlnnpkkOeecc3LPPfdM+96veMUrJvf5xCc+kST52te+Nvn+F110UZYuXbrXY+2Eca01f/zHf5zrr78+c+bMyY9//OM88MAD0+4/3X5PetKT9vpnNs2V6151poWMjCTHHZd8+cvJOeckr399a5pI+1ckAAAzYcGCBZPLX/7yl/OlL30pN9xwQ7797W/nrLPOypZOy3SZO3fu5PLAwEDGx8enfe/Oft377O+V4/Xr1+eee+7J05/+9Fx11VVZt25d1qxZk5tvvjnHHnvstOPc2/0OJFeue9W5ct35D+GTn5z88z8n73pX8ra3JatWJRdfnLzxjclznuNKNgAcLvbxCnMTFi1alPXr1+9y+2OPPZalS5dm/vz5+d73vpdvfOMb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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": 55,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.47098333063511094"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"RigeModel = Ridge(alpha=0) \n",
"RigeModel.fit(x_train_pr, y_train)\n",
"RigeModel.score(x_test_pr, y_test)"
]
},
{
"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": 56,
"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": 57,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"[{'alpha': [0.001, 0.1, 1, 10, 100, 1000, 10000, 100000, 100000]}]"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"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": 58,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,\n",
" normalize=False, random_state=None, solver='auto', tol=0.001)"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RR=Ridge()\n",
"RR"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a ridge grid search object "
]
},
{
"cell_type": "code",
"execution_count": 59,
"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": 60,
"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/model_selection/_search.py:841: DeprecationWarning: The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. This will change numeric results when test-set sizes are unequal.\n",
" DeprecationWarning)\n"
]
},
{
"data": {
"text/plain": [
"GridSearchCV(cv=4, error_score='raise-deprecating',\n",
" estimator=Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,\n",
" normalize=False, random_state=None, solver='auto', tol=0.001),\n",
" fit_params=None, iid='warn', n_jobs=None,\n",
" param_grid=[{'alpha': [0.001, 0.1, 1, 10, 100, 1000, 10000, 100000, 100000]}],\n",
" pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
" scoring=None, verbose=0)"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"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": 61,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"Ridge(alpha=10000, copy_X=True, fit_intercept=True, max_iter=None,\n",
" normalize=False, random_state=None, solver='auto', tol=0.001)"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"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": 62,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.8411649831036152"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"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": 63,
"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/model_selection/_search.py:841: DeprecationWarning: The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. This will change numeric results when test-set sizes are unequal.\n",
" DeprecationWarning)\n"
]
},
{
"data": {
"text/plain": [
"Ridge(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=None,\n",
" normalize=True, random_state=None, solver='auto', tol=0.001)"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \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_"
]
},
{
"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.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment