Skip to content

Instantly share code, notes, and snippets.

@tejas-2232
Created November 14, 2019 06:01
Show Gist options
  • Save tejas-2232/07dc7849a934b6ebd8486f3426ecc061 to your computer and use it in GitHub Desktop.
Save tejas-2232/07dc7849a934b6ebd8486f3426ecc061 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"<h1 align=center><font size=15>Data Analysis with Python</font></h1>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>Module 4: Model Development</h1>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>In this section, we will develop several models that will predict the price of the car using the variables or features. This is just an estimate but should give us an objective idea of how much the car should cost.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Some questions we want to ask in this module\n",
"<ul>\n",
" <li>do I know if the dealer is offering fair value for my trade-in?</li>\n",
" <li>do I know if I put a fair value on my car?</li>\n",
"</ul>\n",
"<p>Data Analytics, we often use <b>Model Development</b> to help us predict future observations from the data we have.</p>\n",
"\n",
"<p>A Model will help us understand the exact relationship between different variables and how these variables are used to predict the result.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>Setup</h4>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Import libraries"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"load data and store in dataframe df:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This dataset was hosted on IBM Cloud object click <a href=\"https://cocl.us/da0101en_object_storage_skills_network\">HERE</a> for free storage."
]
},
{
"cell_type": "code",
"execution_count": 2,
"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>symboling</th>\n",
" <th>normalized-losses</th>\n",
" <th>make</th>\n",
" <th>aspiration</th>\n",
" <th>num-of-doors</th>\n",
" <th>body-style</th>\n",
" <th>drive-wheels</th>\n",
" <th>engine-location</th>\n",
" <th>wheel-base</th>\n",
" <th>length</th>\n",
" <th>...</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>horsepower-binned</th>\n",
" <th>diesel</th>\n",
" <th>gas</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>3</td>\n",
" <td>122</td>\n",
" <td>alfa-romero</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>convertible</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>88.6</td>\n",
" <td>0.811148</td>\n",
" <td>...</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>Medium</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>3</td>\n",
" <td>122</td>\n",
" <td>alfa-romero</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>convertible</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>88.6</td>\n",
" <td>0.811148</td>\n",
" <td>...</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>Medium</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>122</td>\n",
" <td>alfa-romero</td>\n",
" <td>std</td>\n",
" <td>two</td>\n",
" <td>hatchback</td>\n",
" <td>rwd</td>\n",
" <td>front</td>\n",
" <td>94.5</td>\n",
" <td>0.822681</td>\n",
" <td>...</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>Medium</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2</td>\n",
" <td>164</td>\n",
" <td>audi</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>fwd</td>\n",
" <td>front</td>\n",
" <td>99.8</td>\n",
" <td>0.848630</td>\n",
" <td>...</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>Medium</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>164</td>\n",
" <td>audi</td>\n",
" <td>std</td>\n",
" <td>four</td>\n",
" <td>sedan</td>\n",
" <td>4wd</td>\n",
" <td>front</td>\n",
" <td>99.4</td>\n",
" <td>0.848630</td>\n",
" <td>...</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>Medium</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 29 columns</p>\n",
"</div>"
],
"text/plain": [
" symboling normalized-losses make aspiration num-of-doors \\\n",
"0 3 122 alfa-romero std two \n",
"1 3 122 alfa-romero std two \n",
"2 1 122 alfa-romero std two \n",
"3 2 164 audi std four \n",
"4 2 164 audi std four \n",
"\n",
" body-style drive-wheels engine-location wheel-base length ... \\\n",
"0 convertible rwd front 88.6 0.811148 ... \n",
"1 convertible rwd front 88.6 0.811148 ... \n",
"2 hatchback rwd front 94.5 0.822681 ... \n",
"3 sedan fwd front 99.8 0.848630 ... \n",
"4 sedan 4wd front 99.4 0.848630 ... \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 horsepower-binned diesel gas \n",
"0 11.190476 Medium 0 1 \n",
"1 11.190476 Medium 0 1 \n",
"2 12.368421 Medium 0 1 \n",
"3 9.791667 Medium 0 1 \n",
"4 13.055556 Medium 0 1 \n",
"\n",
"[5 rows x 29 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# path of data \n",
"path = 'https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/automobileEDA.csv'\n",
"df = pd.read_csv(path)\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>1. Linear Regression and Multiple Linear Regression</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>Linear Regression</h4>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"<p>One example of a Data Model that we will be using is</p>\n",
"<b>Simple Linear Regression</b>.\n",
"\n",
"<br>\n",
"<p>Simple Linear Regression is a method to help us understand the relationship between two variables:</p>\n",
"<ul>\n",
" <li>The predictor/independent variable (X)</li>\n",
" <li>The response/dependent variable (that we want to predict)(Y)</li>\n",
"</ul>\n",
"\n",
"<p>The result of Linear Regression is a <b>linear function</b> that predicts the response (dependent) variable as a function of the predictor (independent) variable.</p>\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
" Y: Response \\ Variable\\\\\n",
" X: Predictor \\ Variables\n",
"$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" <b>Linear function:</b>\n",
"$$\n",
"Yhat = a + b X\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<ul>\n",
" <li>a refers to the <b>intercept</b> of the regression line0, in other words: the value of Y when X is 0</li>\n",
" <li>b refers to the <b>slope</b> of the regression line, in other words: the value with which Y changes when X increases by 1 unit</li>\n",
"</ul>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>Lets load the modules for linear regression</h4>"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"from sklearn.linear_model import LinearRegression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>Create the linear regression object</h4>"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm = LinearRegression()\n",
"lm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>How could Highway-mpg help us predict car price?</h4>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For this example, we want to look at how highway-mpg can help us predict car price.\n",
"Using simple linear regression, we will create a linear function with \"highway-mpg\" as the predictor variable and the \"price\" as the response variable."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"X = df[['highway-mpg']]\n",
"Y = df['price']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fit the linear model using highway-mpg."
]
},
{
"cell_type": "code",
"execution_count": 6,
"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": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm.fit(X,Y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" We can output a prediction "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([16236.50464347, 16236.50464347, 17058.23802179, 13771.3045085 ,\n",
" 20345.17153508])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Yhat=lm.predict(X)\n",
"Yhat[0:5] "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>What is the value of the intercept (a)?</h4>"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"38423.3058581574"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm.intercept_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>What is the value of the Slope (b)?</h4>"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([-821.73337832])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>What is the final estimated linear model we get?</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we saw above, we should get a final linear model with the structure:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"Yhat = a + b X\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plugging in the actual values we get:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<b>price</b> = 38423.31 - 821.73 x <b>highway-mpg</b>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1>Question #1 a): </h1>\n",
"\n",
"<b>Create a linear regression object?</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"lr=LinearRegression()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"lm1 = LinearRegression()\n",
"lm1 \n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #1 b): </h1>\n",
"\n",
"<b>Train the model using 'engine-size' as the independent variable and 'price' as the dependent variable?</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"X=df[['engine-size']]\n",
"Y=df['price']"
]
},
{
"cell_type": "code",
"execution_count": 12,
"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": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lr.fit(X,Y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"lm1.fit(df[['engine-size']], df[['price']])\n",
"lm1\n",
"\n",
"-->\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1>Question #1 c):</h1>\n",
"\n",
"<b>Find the slope and intercept of the model?</b>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>Slope</h4>"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([166.86001569])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"lr.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>Intercept</h4>"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"-7963.338906281042"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"lr.intercept_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"# Slope \n",
"lm1.coef_\n",
"# Intercept\n",
"lm1.intercept_\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1>Question #1 d): </h1>\n",
"\n",
"<b>What is the equation of the predicted line. You can use x and yhat or 'engine-size' or 'price'?</b>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# You can type you answer here\n"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"Price=38423.31-821.733*engine-size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"# using X and Y \n",
"Yhat=38423.31-821.733*X\n",
"\n",
"Price=38423.31-821.733*engine-size\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h4>Multiple Linear Regression</h4>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>What if we want to predict car price using more than one variable?</p>\n",
"\n",
"<p>If we want to use more variables in our model to predict car price, we can use <b>Multiple Linear Regression</b>.\n",
"Multiple Linear Regression is very similar to Simple Linear Regression, but this method is used to explain the relationship between one continuous response (dependent) variable and <b>two or more</b> predictor (independent) variables.\n",
"Most of the real-world regression models involve multiple predictors. We will illustrate the structure by using four predictor variables, but these results can generalize to any integer:</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"Y: Response \\ Variable\\\\\n",
"X_1 :Predictor\\ Variable \\ 1\\\\\n",
"X_2: Predictor\\ Variable \\ 2\\\\\n",
"X_3: Predictor\\ Variable \\ 3\\\\\n",
"X_4: Predictor\\ Variable \\ 4\\\\\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"a: intercept\\\\\n",
"b_1 :coefficients \\ of\\ Variable \\ 1\\\\\n",
"b_2: coefficients \\ of\\ Variable \\ 2\\\\\n",
"b_3: coefficients \\ of\\ Variable \\ 3\\\\\n",
"b_4: coefficients \\ of\\ Variable \\ 4\\\\\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The equation is given by"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"Yhat = a + b_1 X_1 + b_2 X_2 + b_3 X_3 + b_4 X_4\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>From the previous section we know that other good predictors of price could be:</p>\n",
"<ul>\n",
" <li>Horsepower</li>\n",
" <li>Curb-weight</li>\n",
" <li>Engine-size</li>\n",
" <li>Highway-mpg</li>\n",
"</ul>\n",
"Let's develop a model using these variables as the predictor variables."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"Z = df[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fit the linear model using the four above-mentioned variables."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
" normalize=False)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm.fit(Z, df['price'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What is the value of the intercept(a)?"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"-15806.62462632922"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm.intercept_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What are the values of the coefficients (b1, b2, b3, b4)?"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([53.49574423, 4.70770099, 81.53026382, 36.05748882])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" What is the final estimated linear model that we get?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we saw above, we should get a final linear function with the structure:\n",
"\n",
"$$\n",
"Yhat = a + b_1 X_1 + b_2 X_2 + b_3 X_3 + b_4 X_4\n",
"$$\n",
"\n",
"What is the linear function we get in this example?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<b>Price</b> = -15678.742628061467 + 52.65851272 x <b>horsepower</b> + 4.69878948 x <b>curb-weight</b> + 81.95906216 x <b>engine-size</b> + 33.58258185 x <b>highway-mpg</b>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1> Question #2 a): </h1>\n",
"Create and train a Multiple Linear Regression model \"lm2\" where the response variable is price, and the predictor variable is 'normalized-losses' and 'highway-mpg'.\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"lm2=LinearRegression()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"z=df[['normalized-losses','highway-mpg']]\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
" normalize=False)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm2.fit(z,df['price'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"lm2 = LinearRegression()\n",
"lm2.fit(df[['normalized-losses' , 'highway-mpg']],df['price'])\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1>Question #2 b): </h1>\n",
"<b>Find the coefficient of the model?</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.49789586, -820.45434016])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"lm2.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"lm2.coef_\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>2) Model Evaluation using Visualization</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we've developed some models, how do we evaluate our models and how do we choose the best one? One way to do this is by using visualization."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"import the visualization package: seaborn"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"# import the visualization package: seaborn\n",
"import seaborn as sns\n",
"%matplotlib inline "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Regression Plot</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>When it comes to simple linear regression, an excellent way to visualize the fit of our model is by using <b>regression plots</b>.</p>\n",
"\n",
"<p>This plot will show a combination of a scattered data points (a <b>scatter plot</b>), as well as the fitted <b>linear regression</b> line going through the data. This will give us a reasonable estimate of the relationship between the two variables, the strength of the correlation, as well as the direction (positive or negative correlation).</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Let's visualize Horsepower as potential predictor variable of price:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"(0, 48265.00607333809)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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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",
"sns.regplot(x=\"highway-mpg\", y=\"price\", data=df)\n",
"plt.ylim(0,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>We can see from this plot that price is negatively correlated to highway-mpg, since the regression slope is negative.\n",
"One thing to keep in mind when looking at a regression plot is to pay attention to how scattered the data points are around the regression line. This will give you a good indication of the variance of the data, and whether a linear model would be the best fit or not. If the data is too far off from the line, this linear model might not be the best model for this data. Let's compare this plot to the regression plot of \"peak-rpm\".</p>"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"(0, 47422.919330307624)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(width, height))\n",
"sns.regplot(x=\"peak-rpm\", y=\"price\", data=df)\n",
"plt.ylim(0,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>Comparing the regression plot of \"peak-rpm\" and \"highway-mpg\" we see that the points for \"highway-mpg\" are much closer to the generated line and on the average decrease. The points for \"peak-rpm\" have more spread around the predicted line, and it is much harder to determine if the points are decreasing or increasing as the \"highway-mpg\" increases.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1>Question #3:</h1>\n",
"<b>Given the regression plots above is \"peak-rpm\" or \"highway-mpg\" more strongly correlated with \"price\". Use the method \".corr()\" to verify your answer.</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"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>peak-rpm</th>\n",
" <th>highway-mpg</th>\n",
" <th>price</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>peak-rpm</th>\n",
" <td>1.000000</td>\n",
" <td>-0.058598</td>\n",
" <td>-0.101616</td>\n",
" </tr>\n",
" <tr>\n",
" <th>highway-mpg</th>\n",
" <td>-0.058598</td>\n",
" <td>1.000000</td>\n",
" <td>-0.704692</td>\n",
" </tr>\n",
" <tr>\n",
" <th>price</th>\n",
" <td>-0.101616</td>\n",
" <td>-0.704692</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" peak-rpm highway-mpg price\n",
"peak-rpm 1.000000 -0.058598 -0.101616\n",
"highway-mpg -0.058598 1.000000 -0.704692\n",
"price -0.101616 -0.704692 1.000000"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"df[['peak-rpm','highway-mpg','price']].corr()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"The variable \"peak-rpm\" has a stronger correlation with \"price\", it is approximate -0.704692 compared to \"highway-mpg\" which is approximate -0.101616. You can verify it using the following command:\n",
"df[[\"peak-rpm\",\"highway-mpg\",\"price\"]].corr()\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Residual Plot</h3>\n",
"\n",
"<p>A good way to visualize the variance of the data is to use a residual plot.</p>\n",
"\n",
"<p>What is a <b>residual</b>?</p>\n",
"\n",
"<p>The difference between the observed value (y) and the predicted value (Yhat) is called the residual (e). When we look at a regression plot, the residual is the distance from the data point to the fitted regression line.</p>\n",
"\n",
"<p>So what is a <b>residual plot</b>?</p>\n",
"\n",
"<p>A residual plot is a graph that shows the residuals on the vertical y-axis and the independent variable on the horizontal x-axis.</p>\n",
"\n",
"<p>What do we pay attention to when looking at a residual plot?</p>\n",
"\n",
"<p>We look at the spread of the residuals:</p>\n",
"\n",
"<p>- If the points in a residual plot are <b>randomly spread out around the x-axis</b>, then a <b>linear model is appropriate</b> for the data. Why is that? Randomly spread out residuals means that the variance is constant, and thus the linear model is a good fit for this data.</p>"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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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",
"sns.residplot(df['highway-mpg'], df['price'])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<i>What is this plot telling us?</i>\n",
"\n",
"<p>We can see from this residual plot that the residuals are not randomly spread around the x-axis, which leads us to believe that maybe a non-linear model is more appropriate for this data.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Multiple Linear Regression</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>How do we visualize a model for Multiple Linear Regression? This gets a bit more complicated because you can't visualize it with regression or residual plot.</p>\n",
"\n",
"<p>One way to look at the fit of the model is by looking at the <b>distribution plot</b>: We can look at the distribution of the fitted values that result from the model and compare it to the distribution of the actual values.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First lets make a prediction "
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"Y_hat = lm.predict(Z)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(width, height))\n",
"\n",
"\n",
"ax1 = sns.distplot(df['price'], hist=False, color=\"r\", label=\"Actual Value\")\n",
"sns.distplot(Yhat, hist=False, color=\"b\", label=\"Fitted Values\" , ax=ax1)\n",
"\n",
"\n",
"plt.title('Actual vs Fitted Values for Price')\n",
"plt.xlabel('Price (in dollars)')\n",
"plt.ylabel('Proportion of Cars')\n",
"\n",
"plt.show()\n",
"plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>We can see that the fitted values are reasonably close to the actual values, since the two distributions overlap a bit. However, there is definitely some room for improvement.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Part 3: Polynomial Regression and Pipelines</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p><b>Polynomial regression</b> is a particular case of the general linear regression model or multiple linear regression models.</p> \n",
"<p>We get non-linear relationships by squaring or setting higher-order terms of the predictor variables.</p>\n",
"\n",
"<p>There are different orders of polynomial regression:</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<center><b>Quadratic - 2nd order</b></center>\n",
"$$\n",
"Yhat = a + b_1 X^2 +b_2 X^2 \n",
"$$\n",
"\n",
"\n",
"<center><b>Cubic - 3rd order</b></center>\n",
"$$\n",
"Yhat = a + b_1 X^2 +b_2 X^2 +b_3 X^3\\\\\n",
"$$\n",
"\n",
"\n",
"<center><b>Higher order</b>:</center>\n",
"$$\n",
"Y = a + b_1 X^2 +b_2 X^2 +b_3 X^3 ....\\\\\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>We saw earlier that a linear model did not provide the best fit while using highway-mpg as the predictor variable. Let's see if we can try fitting a polynomial model to the data instead.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>We will use the following function to plot the data:</p>"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"def PlotPolly(model, independent_variable, dependent_variabble, Name):\n",
" x_new = np.linspace(15, 55, 100)\n",
" y_new = model(x_new)\n",
"\n",
" plt.plot(independent_variable, dependent_variabble, '.', x_new, y_new, '-')\n",
" plt.title('Polynomial Fit with Matplotlib for Price ~ Length')\n",
" ax = plt.gca()\n",
" ax.set_facecolor((0.898, 0.898, 0.898))\n",
" fig = plt.gcf()\n",
" plt.xlabel(Name)\n",
" plt.ylabel('Price of Cars')\n",
"\n",
" plt.show()\n",
" plt.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lets get the variables"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"x = df['highway-mpg']\n",
"y = df['price']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's fit the polynomial using the function <b>polyfit</b>, then use the function <b>poly1d</b> to display the polynomial function."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 3 2\n",
"-1.557 x + 204.8 x - 8965 x + 1.379e+05\n"
]
}
],
"source": [
"# Here we use a polynomial of the 3rd order (cubic) \n",
"f = np.polyfit(x, y, 3)\n",
"p = np.poly1d(f)\n",
"print(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Let's plot the function "
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"PlotPolly(p, x, y, 'highway-mpg')"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([-1.55663829e+00, 2.04754306e+02, -8.96543312e+03, 1.37923594e+05])"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.polyfit(x, y, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>We can already see from plotting that this polynomial model performs better than the linear model. This is because the generated polynomial function \"hits\" more of the data points.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1>Question #4:</h1>\n",
"<b>Create 11 order polynomial model with the variables x and y from above?</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 11 10 9 8 7\n",
"-1.243e-08 x + 4.722e-06 x - 0.0008028 x + 0.08056 x - 5.297 x\n",
" 6 5 4 3 2\n",
" + 239.5 x - 7588 x + 1.684e+05 x - 2.565e+06 x + 2.551e+07 x - 1.491e+08 x + 3.879e+08\n"
]
}
],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"f2=np.polyfit(x,y,11)\n",
"p2=np.poly1d(f2)\n",
"\n",
"print(p2)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAEWCAYAAABfdFHAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeXxU1d348c83kz1kFyEkICigIggIUqpVccenVqjVSqvVtvZHa7XaPl3to9XW+lRt69ZWn9raita1WpWqqLSKVkRZRGVTiYAQ9iUJ2UgyM9/fH/cEJpPJJCSZJcn3/XrNK3PPvefOmTuT+52z3HNFVTHGGGNiJSXRBTDGGNO3WaAxxhgTUxZojDHGxJQFGmOMMTFlgcYYY0xMWaAxxhgTUxZoegERuVFE/pbocoQSkYtF5OVObtul8ovIT0Xkzwdfug73+38icn2U9Ul3vCMRkQ0ickYX8+5/jyIyTERqRcTnlheIyDcOYl9XiMh2t4/irpSnO0RknohcFu/XTWYH+xnGmgWaOHInhgb3D7ldRP4qIgMSXa6uUNWHVfWs7u5HRKaJSNAdk5bHP91r/K+qfsNtN1xEVERSe6Ds31LVm0Jev6Kb70Hd55kakpYqIjtEpFMXqvVEObq6b1XdqKoDVDXQhX2nAbcDZ7l97O5OWd0+D+r/RFXPUdU53X3dnpCIE3xv+GFkgSb+PqeqA4DjgOOB6xJcnmSwxZ2kWh6fS3SBuqAKOCdk+b+AygSVJZ4GAZnAqoPNKJ72zkEd/p90kN8kEfuQEkRVNwPzgLEAIjJEROaKyB4RKReR/xcpn4g8LyLfCUt7X0RmuucqIt8SkbUiUikifxARcetSROQ6EfnE/dp+UETy3bqWGsPXRGSTy/stETne7b9KRH4f8ppfFZE3Qpbvcvn2isgyETmpu8co7Jfa6+5vlful++mwbTPdr+BD3PJ1IuIXkTy3/EsRudM9f8At5+B9BkNCalND3C7T3fGpEZFVIjK5g+I+BFwasnwp8GBYGb8mImvcPteJyDddesRyuPf/pIg87vK8IyLj2zlWGSJyp4hscY87XVq099iSN1Jt8QgRWSwi1SLyrIgURXjN0cCHbrFKRF5x6SeIyBKXd4mInBCSZ4GI3CwiC4F64PBoBzXC/0mb/OG1CBH5fyHHebWIHOfSh4jIUyKyU0TWi8jV0V67p4nIVBF50/0vvSci00LWLRCRm0RkoSv3yy3fZbf+Uvd/u1tErhfXbCoi04GfAhe5z/a9kJc8rL39xZsFmgQRkaF4v3qXu6RHgQpgCHAB8L8icnqErHOAS0L2Mx4oBV4I2eZcvF+B44EvAme79K+6x6l4/+ADgN/T2qeAUcBFwJ3A/wBnAMcAXxSRU9p5S0uACUAR8AjwdxHJbGfbrjjZ/S1wtZ5FoStVdZ8rwykh238CnBiy/FpYnjq8WkhojWqLW30e8BhQAMyl7XEK9wxwsogUiEgBcBLwbNg2O/A+mzzga8AdInJcB+WYAfydA8f1GfGaq8L9DzAV7zMYD0wBrutg39FcCnwd7/voB+4O30BVP8L7XoD3uZzmAtLzbvtivGa156V1381XgNlALt5n1K4I/ydR84vIhcCNrvx5eJ/jbvFqPv8E3sP7fzkd+K6InM1BEvF+uB1knlK84/JLvM/yB8BTIjIwZLMv430vDgXS3TaIyBjgHuBioATId+8BVX0R+F/gcffZju9of4lggSb+nhGRKuANvBPf/7p/ps8AP1bVfar6LvBnvH+ocM8Co0RklFv+Ct6XrClkm1tUtUpVNwKv4p18wPui3q6q61S1FrgWmBX2S/YmV4aXgTrgUVXd4X5Z/geYGOlNqerfVHW3qvpV9bdABnBkJ4/JEPcrr+XxxU7mC/cacIp7P8finexOcQHveFf+znpDVV9w/RYP4Z28o9mHdyK7CJiFF5z2hW6gqs+r6sfqeQ14GS8gRbNMVZ9U1Wa8k3YmXkAJdzHwC/dZ7QR+TuTvT2c9pKorXaC6Hu9Hhq8T+T4LrFXVh9x34VHgAyC0OfQBVV3l1je3s582/yedzP8N4DZVXeKOc7mqfoL3+Q9U1V+oapOqrgP+hPdZtSEipSLymKsdLheR77q08Xg/Kg7WJcAL7jsVVNX5wFK8INrir6r6kao2AE9w4P/2AuCfqvqG+z//GdCZvr/29hd33e5YNQdtpqr+KzTBNWXsUdWakORPgDbNNaraKCJPAJeIyM+BL+F9EUNtC3lej1dzAe/XaegvwE/wvgODQtK2hzxviLAcsVNWRL6P908+BO+fIA/obFV9i6qWdXLbaF7DOxkfB6wA5gP3452Yy1V110HsK/wYZopIqqr6o+R5EPgVIMCPw1eKyDnADcBovB952a6c0WxqeaKqQfE69YdE2C7SZxtpu87aFPL8EyAN7/PcHnnzdsvRkr+0nX23p83/SSfzDwU+jpB+GO4HTUiaj/Z/fFyIV5O8GO8EfSVeE9VmvM/4YB0GXCgioQE3De+HYIto/7eh34N6EenMoIv29hd3FmiSwxagSERyQ4LNMLwvdSRz8H5lvwHUhzcjdfA6h4UsD8NrFtkOdPlEL15/zI/xmiNWuRNiJd4Jt6d05hfcm3i1qM8Dr6nqahEZhvcr+7V28vTk9OX/wWvaULzP5oiWFSKSATyF16TzrKo2i8gzHDhG7ZVjaMg+UvA+p0hNXy2fbUun/LCQ7bryHoeGPB8GNAOdCdTh37GW/C+GLHf3mEfLv4mQ4x6Wvl5VR0VYF8ndqhp0z5fhNSN2xya8WmLEvtcObCWkdUBEsvCaJVsk/RT81nSWBFR1E95J8lfidWofC1wOPNzO9ouAIPBbvIDTWY8C3xOREeINF21p2432K70zcvEC1k4gVUR+hlej6Uk78d5zu53HqlqPd1K4kgOB5U3gm7QfaLYDxeIGRXSHevfc+Bxwnra9/0Y6XnPiTsDvajehw8PbK8ckETnfNQd+F2gE3orw8o8C14nIQNfp+zOgZSBFV97jJSIyRkSygV8AT3Zy+PMLwGgR+bJ4Q7wvAsYAzx3Ea3fHn4EfiMgk8YwUkcOAxcBeEfmxiGSJiE9ExorI8ZF2EhJkuiLV/R+3PNLwPovPicjZ7rUzxRt23pkfeE+6vCeISDpes2joj7jtwHBJ4hF4SVuwfuhLwHC8X4RPAze4dtz2PAiM48DJpDP+gheYXgfW4/UhfCdqjs55CW9k0Ed4zST76FzzSKe5IHIzsND140TqpwAvoKThnVhalnM5MGotfL8f4J2k17n9dqe5Cdd30Gaor6upXo3XVl6J11E7txPleBav36cSr8/l/Hb6NX6J1+b/Pl5z3Dsuravv8SHgAbzml0xX9g6pdx3NucD3gd3Aj4BzD7LZsstU9e9435NHgBq8/pQiFyQ/h9cMth6vdvZnvI71nnYvXjNzy+Ov7sfkDLzmt514/x8/pBPnYPd9+g7e4JSteO9rB96PDvCa+MAb9PBOz72NniNtf3iZ3kBELgVmq+pnEl0WExsiciMwUlUv6Whb03+41ogqYJSqrk90eTrDajS9kGvO+DZwX6LLYoyJPRH5nIhki3dd1G/waq0bEluqzrNA08u4cf878dplH0lwcYwx8TEDr1l9C951brMi9AMmLWs6M8YYE1NWozHGGBNTdh1NmKKiIh06dGjHGxpjjNnv/fff36WqAyOts0ATZujQocybNy/RxTDGmF6ltLS03XnrrOnMGGNMTFmgMcYYE1MWaIwxxsSUBRpjjDExZYHGGGNMTFmgMcYYE1MWaIwxxsSUBZoeIo3VDFj2B9J2tpkh3hhj+jW7YLOnSAp5y37P3pQ0mgcek+jSGGNM0rAaTQ/R9Fz8uaWk7vkw0UUxxpikYoGmBzUXHUmaBRpjjGnFAk0P8heNIrVqA/gbO9zWGGP6Cws0Pai56EhEA6RWfZzoohhjTNKwQNOD/MVHApC256MEl8QYY5JHQgONiGwQkRUi8q6ILHVpRSIyX0TWur+FIdtfKyLlIvKhu6VxS/okt59yEblbRMSlZ4jI4y79bREZHsv3488bhvoyLNAYY0yIZKjRnKqqE1R1slv+CfBvVR0F/NstIyJjgFnAMcB04B4R8bk89wKz8e6lPcqtB7gcqFTVkcAdwK0xfScpqTQXjiR1tw0IMMaYFskQaMLNAOa453OAmSHpj6lqo6quB8qBKSJSAuSp6iJVVeDBsDwt+3oSOL2lthMr/qIjrUZjjDEhEh1oFHhZRJaJyGyXNkhVtwK4v4e69FJgU0jeCpdW6p6Hp7fKo6p+oBooDi+EiMwWkaUisnT37t3dekPNRaPwNewipX5Xt/ZjjDF9RaJnBjhRVbeIyKHAfBH5IMq2kWoiGiU9Wp7WCar3AfcBjB8/vs36g9HsBgSk7vmIpuxDurMrY4zpExJao1HVLe7vDuBpYAqw3TWH4f7ucJtXAENDspcBW1x6WYT0VnlEJBXIB/bE4r208BfZyDNjjAmVsEAjIjkiktvyHDgLWAnMBS5zm10GPOuezwVmuZFkI/A6/Re75rUaEZnq+l8uDcvTsq8LgFdcP07MBLOKCGQdYoHGGGOcRDadDQKedn3zqcAjqvqiiCwBnhCRy4GNwIUAqrpKRJ4AVgN+4EpVDbh9XQE8AGQB89wD4H7gIREpx6vJzIrHG2suPtLmPDPGGCdhgUZV1wHjI6TvBk5vJ8/NwM0R0pcCYyOk78MFqnjyF40mZ9XDEPRDSqK7wYwxJrESPeqsT2ouGo0Emkit/iTRRTHGmISzQBMDzUUtI8+s+cwYYyzQxIC/8Ag0JY307e8muijGGJNwFmhiwZdOY9kJZG74N8R2kJsxxiQ9CzQx0jDiLFJrt5C2a3Wii2KMMQllgSZG9h12Kio+MtfPB2DF1joeXLKNFVvrElwyY4yJLxt7GyOaWUjTkOPJXP8yb5Z9g6ufKac5oKT5tnH350cxriQn0UU0xpi4sBpNDDUMP5O06vVsLF9Jc0AJKjQHlOUVNYkumjHGxI0FmhjaN+IMFGGavk2aT0gRSPMJE8tyE100Y4yJG2s6i6Fg9qE0D5rA8F2vcffnv8HyihomluVas5kxpl+xQBNjDSPOJP+t25iQs4dxxw/tOIMxxvQx1nQWY/uGnwlA1roXE1wSY4xJDAs0MRbIK6OxdCoD3rsf2VeZ6OIYY0zcWaCJg+pPX4s01ZK39HeJLooxxsSdBZo48BeNpm7Ml8he8zipu6PdrdoYY/oeCzRxUjP5KoIZ+eS/eXOvmv/MZjQwxnSXBZo4eX9PKi8P/DoZW5eSVf5coovTKSu21nH102u5762tXP30Wgs2xpgusUATBy0n7O+UT2S5jiLvtetJ37I40cXq0PKKGpvRwBjTbQkPNCLiE5HlIvKcWy4Skfkistb9LQzZ9loRKReRD0Xk7JD0SSKywq27W0TEpWeIyOMu/W0RGR7v9wcHTth+TeH/NX2fPemDKXrxCtK2L09EcTptYlmuzWhgjOm2hAca4BpgTcjyT4B/q+oo4N9uGREZA8wCjgGmA/eIiM/luReYDYxyj+ku/XKgUlVHAncAt8b2rUQWesKu8eWz8qQ/Esw+hOJ53yRt56pEFKlTxpXkcPfnRzF7aolNBGqM6bKEBhoRKQM+C/w5JHkGMMc9nwPMDEl/TFUbVXU9UA5MEZESIE9VF6mqAg+G5WnZ15PA6S21nXgKP2EfOeIwdp/7V4LpuRQ/dykZG1+Ld5E6bVxJDpceP9iCjDGmyxJdo7kT+BEQDEkbpKpbAdzfQ116KbApZLsKl1bqnoent8qjqn6gGigOL4SIzBaRpSKydPfu3d19TxGFn7ADA4aw67yH8ecdRtFL3yZnxYO9ajSaMcZ0VsICjYicC+xQ1WWdzRIhTaOkR8vTOkH1PlWdrKqTi4vbxKGYCQ4YzO7z/sa+w04lf9GvyF94EwQDcXt9Y4yJh0TWaE4EzhORDcBjwGki8jdgu2sOw/3d4bavAEJnpSwDtrj0sgjprfKISCqQD+yJxZvpKk3LpvLMu6k99uvkrH6Uwn9/HwJNiS6WMcb0mIQFGlW9VlXLVHU4Xif/K6p6CTAXuMxtdhnwrHs+F5jlRpKNwOv0X+ya12pEZKrrf7k0LE/Lvi5wr5F87VOSwt6pP6R66o/JWv8SxfO+iTTVJrpUxhjTIxLdRxPJLcCZIrIWONMto6qrgCeA1cCLwJWq2tLOdAXegIJy4GNgnku/HygWkXLgv3Ej2JJV3bFfpfLUW0nfupTi57+ONNkFksaY3k+S8Qd+Io0fP17nzZvX8YYxlLHhFYrmX01j6VT2nH0P+NITWh5jjOlIaWnpMlWdHGldMtZo+r3G4adRdfIvyKxYSMFr14EGO84URbLOV5as5TLG9Cy7w2aSajjyfHz1O8lbcifB7IHsnfrDLu2nZfqb5oCS5tuWNBdeJmu5jDE9z2o0Sax2wmzqxnyZAe//hcx1L3VpH8k6X1mylssY0/Ms0CSJiM1IIlSf8BOaDh1PwWvX4du78aD3m6zzlSVruYwxPc8GA4RJxGCA1s1I0qYZyVezmYH/+AL+3DJ2zXikzeCAFVvrWF5Rw8Sy3IjNTx2tT5RkLZcx5uBFGwxgfTRJIFIzUuiJ993aAmqH/IAvrL+evLd/w94Tfrp/XWf6OsaV5CTliTxZy2WM6VnWdJYEojUjtQSSH35wBHOC0xmw8iHSNy/av976Oowxyc4CTRKINh1/aCC5pXkWezLKKHj9BqS5HrC+DmNM8rOmsyTRXjPSxLJcfCnb0IDiT8mgfNLPmPLmbHKX3s3eT/9kf5DqjX0d1kdjTP9ggaZX0P1/K4uPo+7oi8hZ8SANh0+nedCEXtnXYdfRGNN/WNNZklteUUMg6IWaQNBb3vupHxDMGUTB69f32pmerW/JmP7DAk2Si9QHo+kDqPrMz0irLCdn5UOJLmKXWN+SMf2HNZ0lufb6YBoPO5V9w6aR+849NIw8l2DOoASX9OCMK8nhmpPLWFBexbSRBdZsZkwfZjWaXiD8NtAtqk+4Fgn6CS64pddNTrliax13vV7B0k013PV6Ra8quzHm4Fig6cUCecNYd/ilDNn8IsvffoWrn17ba07Y1kdjTP9hgaaXezr7C2zWQ7gx9QGCAX+vOWF7w7YFAXwp1kdjTF9mgaaXGzdsIL8KfoWjUzZxSeorveyErWF/jTF9kQWaXm5cSQ6fm/FlPhkwkWsz/8GxRf4e3X+sbk4Wadi2MaZvSligEZFMEVksIu+JyCoR+blLLxKR+SKy1v0tDMlzrYiUi8iHInJ2SPokEVnh1t0tIuLSM0TkcZf+togMj/f7jIdxQwaQdfYNpPlryF32hx7bb8tFlfe9tbXH+39seLMx/UciazSNwGmqOh6YAEwXkanAT4B/q+oo4N9uGREZA8wCjgGmA/eIiM/t615gNjDKPaa79MuBSlUdCdwB3BqPN5YI/uIjqT/qQnJWPUpq1boe2WcsO+yjze9mjOlbEhZo1FPrFtPcQ4EZwByXPgeY6Z7PAB5T1UZVXQ+UA1NEpATIU9VF6t1c58GwPC37ehI4vaW20xfVTP4OmppJ3qJbemR/sa51tDds2xjTtyS0j0ZEfCLyLrADmK+qbwODVHUrgPt7qNu8FNgUkr3CpZW65+HprfKoqh+oBoojlGO2iCwVkaW7d+/uqbcXd8GsYmomfZvMTf8hY+Nr3d6f1TqMMT0hoYFGVQOqOgEow6udjI2yeaSaiEZJj5YnvBz3qepkVZ1cXNwmDvUqdcdcjD9/OPmLbumRedCs1mGM6a6kGHWmqlXAAry+le2uOQz3d4fbrAIYGpKtDNji0ssipLfKIyKpQD6wJyZvIln40qn+9E9Ird5AzqpHEl0aY4xJ6KizgSJS4J5nAWcAHwBzgcvcZpcBz7rnc4FZbiTZCLxO/8Wuea1GRKa6/pdLw/K07OsC4BXXj9OnNQ47hX1DTyJ32R9Iqd+V6OK065mVu/juM+U8szJ5y2iM6b5ETqpZAsxxI8dSgCdU9TkRWQQ8ISKXAxuBCwFUdZWIPAGsBvzAlaoacPu6AngAyALmuQfA/cBDIlKOV5OZFZd3lgSqP30th/79PHKX3kX1yTclujhtPLNyF7e94nW5Ld7ojWabOfaQRBbJGBMjCQs0qvo+MDFC+m7g9Hby3AzcHCF9KdCmf0dV9+ECVX8TKBhB3dhLyFkxh/qjZ9E88JhEF6mVBeVVbZYt0BjTN3XYdCYiOSKS4p6PFpHzRCQt9kUz3VUz6dsEs4rJf+PnEAx0nCGOpo0siLpsjOk7OtNH8zqQKSKleBdQfg2vmcokOU3PZe+nf0z6zhVkf/D3RBenlZljD+FHpw1lyrBcfnTaUKvNGNOHdabpTFS13vWZ/E5VbxOR5bEumOkZDUd8luwPniJv8R3sG3EmwazkGb49c+whFmCM6Qc6U6MREfk0cDHwvEuzO3P2FiJUf+Z6xN9A3lu/TnRpjDH9UGcCzTXAtcDTbuTX4cCrsS2W6Un+gsOpPfbrZK99lvQtixNdnP1iNTO0MSa5RK2ZuKHHn1PV81rSVHUdcHWsC2Z6Vu1x3yRr3TwKXruOnRc8jaYl9kr/lpmhmwNKmm+bTXFjTB8WtUbjrlOZFKeymBjS1CyqTrkZX00FeW/fnujisLyihia/mxnab7dyNqYv60xfy3IRmQv8HdjfxqGq/4hZqUxMNJVMpm7sVxiw8kEaRpxJU+nUhJUlLyt1/6RzQbdsjOmbOtNHUwTsBk4DPuce58ayUKZnhfaF1Ez5Lv78wyh47X+QpsT1jext8O+f8VTcsjGmb+rwZ6Sqfi0eBTGxEakv5LhTfsUhcy8mf+EvqJp2CyTgFj0Ty3JJT93mymV32DSmL+sw0IhIJt6dKo8BMlvSVfXrMSyX6SGR7pI57viJ1Ey6krxlv6dp8CTqj/5i3MvVcq+b5RU1TCzLtYEAxvRhnWk6ewgYDJwNvIY3Db/13PYS7d0ls/a4K9hXdiL5b95M2q5VCSmb3evGmP6hM4FmpKpeD9Sp6hzgs8C42BbL9JR275IpKVSdehvBzCIK538XaayOe9m6cx2NXYNjTO/RmaE+ze5vlbsD5jZgeMxKZHrcuJKciLWGYFYRe864nUPmXkrRv77L7ul/BF96XMrUnetoVmyt46p/rMUfUFJ92/j9+XYNjjHJrDM1mvtEpBC4Du9GYquB22JaKhM3zYMmUnXKTWRsfovCV38ct1meI/Uddda8NXtoDiiKl3femr5901RjervOjDr7s3v6OnB4bItjEqFh9ExSGvaQ//avCWYWUn3i9Z0eibZia12XOvS9vqOujjoLv0lqn79pqjG9WruBRkT+G6hW1fvD0r8D+FT1zlgXzsRP3fiv42vYzYD3/0IwLZuaKd/vMNh0p/mrO6POzjm6mOfX7MYfgFSftxzumZW7WFBexbSRBTZDtDEJFq1G83XguAjp9wFLgG4FGhEZCjyIN6ItCNynqneJSBHwOF4/0Abgi6pa6fJcizfUOgBcraovufRJHLiV8wvANaqqIpLhXmMS3kWnF6nqhu6Uuy/b+6kfIM115L53P776nVSdfFPUPpuIQ6cPImC013fUmXy/P390u0HKbhNtTHKJ1kejqtoUIbER6Ikr/PzA91X1aGAqcKWIjAF+AvxbVUfh3WjtJwBu3Sy863mmA/e4ST8B7gVmA6PcY7pLvxyoVNWRwB3ArT1Q7r5LhOrP3MDeydeQvXYuxS9+E2lqv++kvaHT8RBtaHSk20QbYxIn6mAAERnUmbSuUNWtqvqOe14DrAFKgRnAHLfZHGCmez4DeExVG1V1PVAOTBGREiBPVRepquLVYELztOzrSeB0kQRcBt+biFB73LeonPYr0rcsZeA/LiB927KIm44ryeGak8uYPDSXa04uS5qRX3abaGOSS7Sms18Dz4vI94F3XNokvBFnv+nJQojIcGAi8DYwSFW3gheMRORQt1kp8FZItgqX1uyeh6e35Nnk9uUXkWqgGNjVk+XvixpGzySQW0bBgmspnvsV6sZdxt7jr4HU/ZNDsGJrHXe9XkFzQHlvSy1HFGclRbBpaSazPhpjkkO7gUZVHxSRncAvgLF4Q3tWATeo6ryeKoCIDACeAr6rqnujVDgirdAo6dHyhJdhNl7TG6WlpW0y9FdNJZNZ8JlHKFzyWyateIDMdS9RO+Fy6o+8AFIzut1H09URa51ht4k2JnlEHd7sAkqPBZVwIpKGF2QeDrntwHYRKXG1mRJgh0uvAIaGZC8Dtrj0sgjpoXkqRCQVyAfaXHShqvfhDXJg/PjxNlbWWbG1jqv/uZnmwEWcmHosd6c/S+HCX5L7zv9Rd8zFnFhwMn/1SZeGKHd00WUsg5AxJr46c8FmTLi+kvuBNaoaeieuucBl7vllwLMh6bNEJENERuB1+i92zWw1IjLV7fPSsDwt+7oAeMX145hOCL052cLmo/njYXey69w5+ItGkrf0Lk569QssLbyOh4c9x2NTNzFhQBV08vBGu+iyZdj0fW9t5eqn10acZsamoIkfO9amuxJ5t6kTga8AK0TkXZf2U+AW4AkRuRzYCFwIoKqrROQJvJkJ/MCV7g6gAFdwYHhzaC3sfuAhESnHq8nMivWb6kva3JwsO42mIVPYPWQKKbVbyVo/n8z1LzN1++PI9kdgKQTTBhAYMJhAziB2U8iWxgwKC4sYWFSIpmahqZloWjYllTUcK8pestmpBeypPzDAsSXAKQfuvhle2+mtt4HubTW13nysTfKIdsHmNe66lhNVdWFPv7CqvkH7w6RPbyfPzcDNEdKX4vUjhafvwwUqc/BCb0YWfnOy4IAS6sZdSt24S8G/j7Q9H5G2axWplR/jq9tOU9UWUirXcBQN5O5saLPvHwNkHFjetzWL1McH4c8fzln+IexIyeNdHck6LWlz983u9g11JFbBoDeetGN9rE3/EK1G8zXgLuB3RL5w0/RxoSd4JcrtllMzaT70WJoPPXZ/0oNLtnHf9q0EFXwS5Krj8/nSsXlIcwPSXM/CDzfz3PIN5FHPQKnis8P8jM7cS2rVOsZXvcFx6V5Q26V57Fo9kay0s9h32GloZhNmgiEAACAASURBVEE3p6+JLpbBoDeetGN5rE3/ES3QrBGRDcBAEXk/JF3wLuY8NnI201e03G65ZWjfwdxueWJZLr6UbWhASUnxMeawEoLZB06qT7+VzuvBA1PHfCB53HLmEQCs3FzNnc/+h/H6IVN9H3DWvg/Ieu01VFJpLP0UU0adx+/OO4l3tja2W+uIViuJti6WwSD0mPhSesdJ225QZ3pCtOHNXxKRwcBLwHnxK5JJFt293bLfdfb7A20HCOyq87e7PLY0n3NPnsqC8qMYOvIyKo8ppnbXKjLXvUTWuhcpfPXHTEsvILfwv2gq/jJwRKt9RRvR1tFot9j/gtewv8mvq1MFGdOio+HN24DxIpIOjHbJH6pqc5Rspo/ozq/ZexdubnVKvXfhZu65YPT+9eceU8zq7fWtlltEvhB0LM0Dx1Iz5XtsWfEqlW8+wGnbHiWw7XG2D59B+gnfJpDrXQPVMqINDoxoayl7tHXdfc8dWV5RQyDoHY9AkF7RdGZMT+hw1JmInII3rcsGvBaUoSJymaq+HuOymSTQ0a/Z9pqhPqnc12q78OVoV+9Hbb6SFP7VeAz3Nf83JbqTb6fNZdbGuaRs+if1R11AzaSr2FPf+ndQ6+WObzEQq1/w1t9h+qvODG++HThLVT8EEJHRwKN409GYfixax7kvpfWAwvBlgCOKs9jb4OeI4qxW6R2dkFvWbw0M5Bf6DcpO/x6Tt/yN7DVPkFX+HF/IvYi3OIkm0gAoyj7wNe/MLQZixfo7TH/VmUCT1hJkAFT1I3dFv+nnotU8UsKmEgpfjhakOjohh68fVZJD9eE3UHfMJeS9dSszNv2ZsenPc53/6ywKHsPoQ7Nb5Y12i4FYs/4O0x91JtAsFZH7gYfc8sVA5Ol8Tb8SreYxoXQAL39Y2Wo5VEejuzo6IUda7y88gj3n3Mc///kU0zffzaPpN/Nk4GSWb/0OhDTN2cnemPjqTKC5ArgSuBqvj+Z14J5YFsokj2hDgaPVPLLTWs9uFL4cy/6KNTnHc3vTbVyd+g9m+55n+ifv0bTuRvYdPr3jzMaYHtdhoHE3OrvdPUw/0pmLF9uvHYT3ybRebrmXTctggJ6sYbT0w/zGP4sX9AQeKZhD0b++R8PhL1F94vUEs4qi5u9t08T0hP74nk38JHKuM5PkOppzDNo/QZ1zdJHrdFdSfcI5Rxe1yXfHaxX4A8ryzQd/L5uOalrfO2WoC2InUjfms8h795O77A+kb1lM9cm/YN/wiLMc9cppYrqrP75nE18Jm73ZJL82k2qGTUETbZblcSU5fHHCQErz0/nihIFtTlzRZm/uSEezO7dch7N0Uw13vV7Biu2N1E78JjvPf5JgziCKXr6KggU/RZpq2+w7Ut9RT0rGmZBj/Z6N6XSgERH7idPPtExBA5GnoIl2gnpm5S4eXraDiuomHl62g2dWht/UtOPrWdrT0Ykx9PYGTf4D6/1Fo9k58zFqJn6TrLXPMvDJ80jfsrhVXq/vSEgRYjaPWrTbHyRCLN+zMdCJQCMiJ4jIamCNWx4vIjYYoB/wpqDxTkDpqe1dzxL5BPXE8h2ttg1fPufoYtJ8XgBLO8jrWTo6MdY0BVrNSlDTFDiw0pdOzfHfZdd5D0NKGsXPfZW8RbeCvxE4MMBh9tSSiE1I3amRJGvNoaP3bEx3daaP5g7gbLybiKGq74nIyTEtlUkKnbmepb0O/X3+YKttw5e7cz1LR+VaG3ZbgvBlgOZBE9j5hafJe+s2Bqx4gIyKN6iadgvNA49pd4BDd/syknlmABvybWKpU4MBVHWTtL7gLtDetqZviXYC8jr0N+EPwPLNNa069AfnprOt5sDUL4Nz0w9q390pV0FYX1L4cquBBCfdyL7DTqPg9es55JmLqJ34TRaVfIV3tuxrE8S6O7OzzQxg+qvOBJpNInICoG5yzatxzWimf5u3ZjfN7idHc8Bbbjl5Di/K5N0tB5qXhhdlxq1cVWF9SaHLEWdvHnYyOy6cS/7Cm8l95x7K9HnubprN/SmHt5rduTM1kmdW7oo4f1sLqzmY/qgzgwG+hXfBZilQAUxwy6bfa/9ame70wXTXtJEF7S63N9pNM/KpOu027h98AwOp4pn06/m+PMy/Vm3Zn7ejvoxnVu7itlc2sXhjDbe9sinCAAgTLhlH4Zme15kLNnfhTTvT40TkL8C5wA5VHevSioDHgeF4M0Z/UVUr3bprgcvxmu6uVtWXXPok4AEgC3gBuEZVVUQy8GaengTsBi5S1Q2xeC/90ehDs9pdTuScYtFmho4+szOsGHACdzWWcm3qo3wr9Tl2bVyGbPwZjcOmdfi6z63a3WY5vFZjF0YeYNfv9B+dGXU2R0QKQpYLXYDoCQ8A4fOC/AT4t6qOAv7tlhGRMcAs4BiX5x4R8bk89wKzgVHu0bLPy4FKVR2JN6jh1h4qt6Hj4c/jSnK49PjBCTl5zBx7CHfOHNnmRB86k3Ok5XOOLqYuZQDX+v8fX26+jsyMdIpfvIKiF7/Fx2vXcNU/PuKPi7Zy1T8+avMrPN0nUZdbmu28/MkzvDlRknUUnul5nWk6O1ZVq1oWXO1iYk+8uLunTfiVejOAOe75HGBmSPpjqtqoquuBcmCKiJQAeaq6SFUVrwYzM8K+ngROl7BRDabrOhr+nIxCZ3KOtAzsv6Tn7eAY3pz2GNWf+iHpW5fw6Vcv4qcyh2Kq9/dJhapr8kdd7s5Fqn2RXb/Tf3RmMECKiBSGNF8VdTJfVw1S1a0AqrpVRA516aXAWyHbVbi0Zvc8PL0lzya3L7+IVAPFQKvGcxGZjVcjorS0FNM53R1FlYhmpNBaV6Ra2MPLttNy5+mAwt+W72HsuV+nYdS5fPCPm/lK3Xwu8i3gL4HprK6dBQzbn3dnbet9hS93dJFqRwMJ+ppYzndnkktnAsZvgTdF5Em3fCFwc+yK1K5INRGNkh4tT+sE1fuA+wDGjx/fe27mngS6OooqUe3zoRdvtrmYE/hoZ33E5WD2ofyl4Bp+Xnk230t9kqtSn6Vx+4v43/g8teMuI5A/vMORduccXcw/V+0moOCT1gMkWgYSACze6DUh9fVgE/mW3XEKNsFm0natJn3HCny1W/DVbCGlYRekpKK+DDQtm+aiUTQPHEfTwLFoZmF8ytVHdWYwwIMishQ4De/Efb6qro5hmbaLSImrzZQALZeUVwBDQ7YrA7a49LII6aF5KkQkFcinbVOdSYDuXpPSVR1dzNkUCLa7XJSdyutawtXN3+Fu/+e5aeArTP3gKbJXP05j6ae5qvg0vrPlcBrwAsxZR7WeSPTj3Q2taksf727Y/54jzaTQ1wNNvL8DKfU7yFw3n8yNr5K+bTkpfu9HhPoy8A8YQjB7IAT9pDTVklK9gcx1LyHud2ljyRTqj7qAhhFnQmr8hur3Fe0GGhHJU9W9rqlsG/BIyLoiVY3VCXsucBlwi/v7bEj6IyJyOzAEr9N/saoGRKRGRKYCbwOXAr8L29ci4ALgFdePYxIsUVfJTxtZsL/G0LIcKsOXQuj1yN6yJ/Q20J+klLH3lF+yPf+n5Kx+nKy1z3DG5l+yJCOTBcEJvBqYwNurp7YKFgvKq0JfigXlVfvXdzSTQncl42i3eHwHpLmezHUvkv3Rs6RvXYKgNBccQcPomTQOOZ6mQRMJZh8KEbpupanWq/VsXUL22rkUvvoj8hfmUTvuUuqO/RqaFqF/z0QUrUbzCN7Q42W0bm4St3x4d19cRB4FpgGHiEgFcANegHlCRC4HNuI11aGqq0TkCWA14AeuVNWWM8IVHBjePM89AO4HHhKRcryazKzultn0jERdJT9z7CFsrm7ktfIqTonQFzIoN42tITMaDMo9cNfySEO2g+RQM/kqaiZ9m+v+9ARnBl7ndN9yzvW9BVX/R/MTR9A8cCxNA8fx5YGHsmmjsJ1CgqS0CnKpKa1PdOHLAASaSGmsdo+9SGM1KU01SFMtO/ZUsnNPNUMGCAOzAA2ApID42FkfZPWHDezTLOYvyaH4xDEMGzqMQM4gND0v4kk2HmL5HUjd85H7ATCXlOZa/PnDqT3uChoOn46/aBTg+sTmVzFtpK/N9+BAf9nhzJw0hdrjriB961JyVv6NvGW/J+eDv7P3+O/SMOo87zibqCTaD3w3Qmuoqm6MX5ESa/z48Tpv3ryONzS9Uuu+IWnTN3TFkx/xXkg/y/ghOdx7wehW+ds7MV72yBrW7toHKMfIJ5yfu4qLB28mbedKfA0Hxp80qY8dFJKZU0BufhGals3CT2ppDgqCkk4z2Sl+Jg7yIU21+4NJir/tnG2hgio0kUpqWjopvlRQBfXjb24mnebIedLz8BcMZ2XjIBbVDiazbBz/dcpJaGZBxO2TWtBP5oZXyFn1MBlbF6O+dBpGnE390V+kafCkVgE1tE8M4EenDd0fbKKtA0jftoy8RbeQvnMljUM+ReWptxLMGRSHN3gQNEjmJ6/SdMgYggNK4vKSpaWly1R1cqR1Ufto3EWPT+Nd8GhMr9dRv0B12Ci06o6mrwnJW5KX4QKNsEqHU3zIeM6ZfjioklK3jT+98AYNOz9hmOxgoFRxmL+RcRogpX4HQ6WOoHjNZftIg5R0gmn5aE4JwfQBaPoAghkFBDPzCabnoRn5BDPyCKbn8sTqBv5vWTV1mkGKCLOPK+HS4wfvL9eXH1pNRWUdudSTJ/Ucm1vPz0/Kwle3ndS9G9n2yYeU1C7jStkDnwAPgj9vGE2DJtA06DiaBh+Hv3Bkwmo+HUmp30X2B38nZ80T+Oq24R8whL1Tvk/dUV9otxM/WjNmtHUATYMnsWvm42R/+BR5b97CoU/OoOqUX7Jv+BmdKm+smzF91Z9Q8Pr1ZGxdQjAtm71T/pv6MV9KaM2rM6PO3hKR41V1ScxLY0yMTSzLxZeyDQ0ovpS2/QLDCjPZUNnYarlFy3UwcOA6mE6dKEQIDiiheMyprX8pnzSUIe4Edt0z5a36jqYMy+XOz47s1HsaPaIO/7trSWmnr6O2KYCfVCrJo1LzqAuksu+IcfvXX/bxKioamyighmNSNvCZrI18tWg7GRULyV47F4BAZhFNJcfTOGQKTaVT8eePSGzg0SDpm98i+8OnyFo/Hwk2s6/0BKpPvI59w6ZBii9q9mh9dR314wEgKdQfdSGNgydT+MoPKXr5O9SO/Qp7p/4IUto/rcZ0tKUqOSsfInfxHeBLo/qEn5Kx8XUKFv6SrPIXqDrtNgK5ibl8ozOB5lTgWyKyAajD9dGo6rGxLJgxsaNhfw+4eNIgFm6oJhAEX4q33DZf5OWOZh2INjXOlurGVtuGL0fTUV9HZb0/6nK9mxm1ilwWBsexRicw46xjQRVfzSbSty4jY8vbpG9ZTNb6lwAIZB9K45BP0Vg6laYhn4rZCazVtUXHFJNauZasdS+S9dGzpNZuIZiRT92YWdSN+RKBghGd3m+0zyLaunCBghHsmvEIeW//hgErHyK1ah2Vp9+OZuRF3D6WI+1yVjxA/lu3sW/YqVSddCPBnEOpO+YSstY+S/4bNxF87TYeHHRtQgaEdCbQnBPzUhgTJ8sraggEvRARCNLmH31cSQ73fCHyHG2ho85SI0wU2tF68E5ikU5cYwbnUFHd1Gr5YES7nklahu+ELofYUx+IvCxCIG8YDXnDaDjy8/sDT8bmt7xHxUKyy/8JgH/AEJoGT6Jp8HE0DZqIv/CIqL/sO+OZlbu465WPmZTyEWxZSdbydyls2IgiNJV+ipop/03D8DMgNaNL+2/vs+hoXRu+dPae8FP8RaPJ/8/POeSZWeyZfi+B/MPabBqrkXaZG/5F3lu/puHw6VSe/tsDzWQiNIyeSe26xRR9Mo8H1n+Zv/oy4j6vXLThzZl4MzePBFYA96tq+KXOxvQqnflHb++k3dFEod2ZSPTwsIs7w5e747RRhbz8YWWr5VBhcSjiVc7eCi/w1OcNo/7oL4IqqZXlXm1n6xIyNi/aH3jUl0Fz0Wiai4/ivYaBLKwqYNjwUZwy7nCCGQXgC7k/kSrSXE9Kwy589TtJrfyYtD0fcerad7k8Yy0Z0oxfU/jAPxb5zFfZN/wM75qXJFN/1AX484ZROP8aDnn2S+yZ/n80H9q64ScWI+3Sdq2i4JUf0TxwHJXTfhWxL+bNtKlcJE9zgqxkQeC4uF231iLaT445eNO7/AevVjMGuCYehTImVmI9rLqrMyVMLMslI7Xrv3SjdTB/4diBzP+wcv80Gl84tvVJOs0HoRMkpIV1b7S7bxH8RaPwF42ibuwlrsZTQfr2d0nbvYa0XatJKX+ZE/zVnADwnnsAQV8mSAoaDKAaJFVbj4oLpuVQkDmCOQ1n8WZwDEuCR3HliaOZOSa5L2JtGjKFXTMfpfiF2RQ/91Uqz7i9zczfPXlPopS67RS9+G2CmQXsOfv3rNgZYHnFtjafVeFRJ1NTnsU5viUs1Elxn1cuWqAZo6rjAETkfmBxfIpkTGwl47Q53QmAHZVreUUNIt5oZ5G2zYXTRrau8UwbWdjpfbciQiBvKA15Q2kY9TkAvvH4h1Rs38FhsoOhsoMxeU1cOi6TlMa97Kxt4pXyKvxBYa8MYPqkIxlSUoq/YASBAUO8QLZyF/XlVVzZi+Z/C+QPZ9eMRyh68VsUvXQV1SfdQP1RF/b464i/gaKXrkSaa9l93iO8V53d7mc1trSAmrJpnLttIfnTRzA2ifpo9v/EcBNSxqE4xiSvWE+Z0tUA2FG5OmouvPHs4QC8tWEvU4fn7V/uzL47ckhOGqsZwAodwAo9nNqifM6f6F3r/fiSbdzXvJWgQopAQEq4dOjgVvkPqq8kiQSzD2H35+ZQ+K/vUfD6z/DVbKZm8jU9N1JPlYIFPyVt12r2nP0H/MVHsnzJtqifVeaYc8jaPI/jWE0Tn+6ZcnRStEAzXkT2uucCZLnlllFnkYdVGNNHJWranI50VK7O1JZCg8vB7Lsj0UbxJevx7CmalsOes/9A/hs3kbv8j/hqNlN1ys2t+6e6aMA795C17kWqP/UDGg87Fej4eDYO/QxBXyZZ6+fTVBrfQBN1ZoD+yGYGMNEk45xhENtydXff0fIn6/HsUaoMePdP5C25g8bBk6g8/XaCOYd2nK8d2aseoWDhTdSPnknVKf/bqpbU0fEsfPlq0ne8y/aLF/T4BZzRZgawQBPGAo0xJhYyP36BgteuQ9OyqTztNzSVTj3ofQx490/kLb6dfcNOZc+Zdx507Sir/DkKX/khO2c8QvOgHrl/5X7RAo3NBmeMMXGw74j/YtfnnyCYUUDxC5eTu/Ru8O/rXGZVchffTt7i26kfeS57zrqrS01w+4adgqakkbX+Xwedtzss0BhjTJz4C0ey6/OP0zDyXHLfuZdBj59D1kfPgLZ/W4j0be9wyNwvk/vun6g7+iKqpt0CKWntbh+NpufSXHwkqXs+7Opb6JJY3pLZGGNMGE3LoerUW6k/6gLy3vo1hQuuJXf5H9k39CSaSo6nuXAkvrptpNZUkLHxdbI2/ItA9kAqT/4lDUee3+2Ra/68YaTvWNFD76ZzLNAYY0wCNJUcz66Zj5H18TyyP3yK7DV/Z8DKh1ptE0zLYe/kq6kbd1mP3WgtkDcU37qXINjc5ZrRwbJAY4wxiSIpNIz8LA0jPwuBJtJ3rsBXvZHAgBICuWUEBgzu9pxx4fx5wxAN4KvZEnE+tliwQGOMMcnAl+7doG1wbG//FcgbBkDq3k1xCzQ2GMAYY/oRvws0vr3xu3Fyvwg0IjJdRD4UkXIR+Umiy2OMMYkSzB5I0JdJqgWaniMiPuAPHJiB+ksiMiaxpTLGmARxk5/69m7qeNse0ucDDTAFKFfVdaraBDwGzEhwmYwxJmH8+cNI3ftJ3F6vPwSaUiA0dFe4tP1EZLaILBWRpbt3745r4YwxJt4CecNI3VsR9ULRntQfAk2kq5taTfCmqvep6mRVnVxc3Pb2u8YY05f484YhgUZS6nbE5fX6Q6CpAIaGLJcBWxJUFmOMSbhAnndKjNeAgP4QaJYAo0RkhIikA7OAuQkukzHGJIw/z7t+Jl6Bps9fsOnuDnoV8BLgA/6iqqsSXCxjjEmYwIDBqKTGbeRZnw80AKr6AvBCosthjDFJISWVQO4QazozxhgTO/78w+I2O4AFGmOM6YcCuUNJ3bsJ4nCXZQs0xhjTD/nzh5HSVENKY1XMX8sCjTHG9EPxnFzTAo0xxvRD+28XUG2BxhhjTAz4c8tQxGo0xhhjYiQ1g0DO4LgMcbZAY4wx/VRwwGB8cZjvzAKNMcb0U8GMAht1ZowxJnaCmQWk7LNAY4wxJkaCmQWIBRpjjDGxEswoICWwD/z7Yvo6FmiMMaafCmbkA5DSWB3T17FAY4wx/VQwswAg5v00FmiMMaaf2h9oYjzyzAKNMcb0U8EMq9EYY4yJIWs6M8YYE1N9ejCAiFwoIqtEJCgik8PWXSsi5SLyoYicHZI+SURWuHV3i4i49AwRedylvy0iw0PyXCYia93jsni9P2OM6RVSMwn6MvtsH81K4Hzg9dBEERkDzAKOAaYD94iIz62+F5gNjHKP6S79cqBSVUcCdwC3un0VATcAnwKmADeISGEM35MxxvQ6GofZARISaFR1jap+GGHVDOAxVW1U1fVAOTBFREqAPFVdpKoKPAjMDMkzxz1/Ejjd1XbOBuar6h5VrQTmcyA4GWOMIT7T0CRbH00psClkucKllbrn4emt8qiqH6gGiqPsqw0RmS0iS0Vk6e7du3vgbRhjTO8Qj4k1YxZoRORfIrIywmNGtGwR0jRKelfztE5UvU9VJ6vq5OLi4ijFM8aYviUe852lxmrHqnpGF7JVAENDlsuALS69LEJ6aJ4KEUkF8oE9Ln1aWJ4FXSiTMcb0WcGM/L456iyKucAsN5JsBF6n/2JV3QrUiMhU1/9yKfBsSJ6WEWUXAK+4fpyXgLNEpNANAjjLpRljjHG8prNq0IgNPj0iZjWaaETk88DvgIHA8yLyrqqeraqrROQJYDXgB65U1YDLdgXwAJAFzHMPgPuBh0SkHK8mMwtAVfeIyE3AErfdL1R1T+zfnTHG9B7BzAJEA0hTDZqRF5PXSEigUdWngafbWXczcHOE9KXA2Ajp+4AL29nXX4C/dKuwxhjTh4XOdxaIUaBJtqYzY4wxcbR/doAYDgiwQGOMMf3YgRpN7AYEWKAxxph+LB4zOFugMcaYfkzjcE8aCzTGGNOPBdPzUMRqNMYYY2IkxYdm5FmgMcYYEzvBjHzEms6MMcbESjCzwEadGWOMiZ1gRr41nRljjImdWN8qwAKNMcb0c7G++ZkFGmOM6eeCmQWkNNdBoCkm+7dAY4wx/dz+2QFiNCDAAo0xxvRzsZ7vzAKNMcb0cxrjGZwt0BhjTD8XjPF8ZxZojDGmn4v1DM4WaIwxpp/bX6PpS4FGRH4tIh+IyPsi8rSIFISsu1ZEykXkQxE5OyR9koiscOvuFhFx6Rki8rhLf1tEhofkuUxE1rrHZfF8j8YY01toajaakhaz+c4SVaOZD4xV1WOBj4BrAURkDDALOAaYDtwjIj6X515gNjDKPaa79MuBSlUdCdwB3Or2VQTcAHwKmALcICKFsX9rxhjTy4h409D0pVFnqvqyqvrd4ltAmXs+A3hMVRtVdT1QDkwRkRIgT1UXqaoCDwIzQ/LMcc+fBE53tZ2zgfmqukdVK/GCW0twMsYYEyKWswMkQx/N14F57nkpsClkXYVLK3XPw9Nb5XHBqxoojrKvNkRktogsFZGlu3fv7tabMcaY3sibwTk2gSY1JnsFRORfwOAIq/5HVZ912/wP4AcebskWYXuNkt7VPK0TVe8D7gMYP358xG2MMaYvayw9EfE3xGTfMQs0qnpGtPWuc/5c4HTXHAZerWNoyGZlwBaXXhYhPTRPhYikAvnAHpc+LSzPgi68FWOM6fNqj/tWzPadqFFn04EfA+epan3IqrnALDeSbARep/9iVd0K1IjIVNf/cinwbEielhFlFwCvuMD1EnCWiBS6QQBnuTRjjDFxFLMaTQd+D2QA890o5bdU9VuqukpEngBW4zWpXamqAZfnCuABIAuvT6elX+d+4CERKcerycwCUNU9InITsMRt9wtV3RPzd2aMMaYVOdBqZcDro5k3b17HGxpjjNmvtLR0mapOjrQuGUadGWOM6cMs0BhjjIkpCzTGGGNiygKNMcaYmLJAY4wxJqZs1FkYEdkJfNKNXRwC7Oqh4vQkK9fBsXIdHCvXwemL5TpMVQdGWmGBpoeJyNL2hvglkpXr4Fi5Do6V6+D0t3JZ05kxxpiYskBjjDEmpizQ9Lz7El2Adli5Do6V6+BYuQ5OvyqX9dEYY4yJKavRGGOMiSkLNMYYY2LKAk0XichfRGSHiKwMSbtRRDaLyLvu8V8JKNdQEXlVRNaIyCoRucalF4nIfBFZ6/4WJkm5EnrMRCRTRBaLyHuuXD936Yk+Xu2VK+HfMVcOn4gsF5Hn3HJCj1eUciX8eInIBhFZ4V5/qUtL+PFqp1wxOV7WR9NFInIyUAs8qKpjXdqNQK2q/iaB5SoBSlT1HRHJBZYBM4GvAntU9RYR+QlQqKo/ToJyfZEEHjN3I70cVa0VkTTgDeAa4HwSe7zaK9d0Evwdc+X7b2AykKeq54rIbSTweEUp140k/n9yAzBZVXeFpCX8eLVTrhuJwfGyGk0XqerreDdaSyqqulVV33HPa4A1QCkwA5jjNpuDd5JPhnIllHpq3WKaeyiJP17tlSvhRKQM+Czw55DkhB6vKOVKVgk/XvFkgabnXSUi77umtYQ0H7QQkeHAROBtYJC7JTbu76FJUi5I8DFzzS3vAjuA+aqaFMernXJB4r9jdwI/AoIhaQk/Xu2UCxJ/vBR4WUSWichsl5YMxytSuSAGx8sCTc+6FzgCmABsBX6bqIKI1F0GugAAA49JREFUyADgKeC7qro3UeUIF6FcCT9mqhpQ1QlAGTBFRMbGuwyRtFOuhB4vETkX2KGqy+L5uh2JUq6Ef7+AE1X1OOAc4ErX7J4MIpUrJsfLAk0PUtXt7uQQBP4ETElEOVyb/lPAw6r6D5e83fWTtPSX7EiGciXLMXNlqQIW4PWDJPx4RSpXEhyvE4HzXPv+Y8BpIvI3En+8IpYrCY4XqrrF/d0BPO3KkOjjFbFcsTpeFmh6UMsXx/k8sLK9bWNYBgHuB9ao6u0hq+YCl7nnlwHPJkO5En3MRGSgiBS451nAGcAHJP54RSxXoo+Xql6rqmWqOhyYBbyiqpeQ4OPVXrkSfbxEJMcNfkFEcoCzXBkS/f2KWK5YHa/UnthJfyQijwLTgENEpAK4AZgmIhPw2j43AN9MQNFOBL4CrHDt+wA/BW4BnhCRy4GNwIVJUq4vJfiYlQBzRMSH98PrCVV9TkQWkdjj1V65HkqC71gkif5+tee2BB+vQcDT3u8sUoFHVPVFEVlCYo9Xe+WKyffLhjcbY4yJKWs6M8YYE1MWaIwxxsSUBRpjjDExZYHGGGNMTFmgMcYYE1MWaIyJMxGp7Xirg97nhNCZdt0svD/o6dcxpiss0BjTN0wAEnLLAGM6YoHGmAQSkR+KyBI3iWHLPWeGi3ffnj+Jdy+al93sAIjI8W7bRSLyaxFZKSLpwC+Ai8S7h8hFbvdjRGSBiKwTkasT9BaNsUBjTKKIyFnw/9u7f9UoojAM489XBrIXENKkWQjYBNLoDSRFSpuUITZ2abXR0iuw0CZdYCFtCtOk00pTeAFia6MhNissr8UcYSPEJYTJGHh+MDB8MxxOc/iYP7yHMV2e1AawORe4OAZeJ3kA/AAet/oh8DTJI2AGkOQX8AKYJNlIMmn3rgPbbfyXLWtOunM2Gmk4W+04Bz7RNYZxu/YlyZ+ono/AWss+GyV53+pHC8Y/STJtG1t9o4sdke6cWWfScAp4leTNlWK3X890rjQDltr9N/H3GK53DcInGmk474D9tkcPVbVaVddugJXkO3BZVQ9baXfu8iUw6m2m0i3YaKSBJDmle/31oao+A8csbhZPgLctXbqAi1Y/o/v4P/8zgPRfML1ZukeqajnJz3b+DFhJcjDwtKR/8p2tdL/sVNVzurX7FdgbdjrSYj7RSJJ65TcaSVKvbDSSpF7ZaCRJvbLRSJJ6ZaORJPXqN7nyuvHhju4mAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"PlotPolly(p2,x,y,'length')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"# calculate polynomial\n",
"# Here we use a polynomial of the 3rd order (cubic) \n",
"f1 = np.polyfit(x, y, 11)\n",
"p1 = np.poly1d(f1)\n",
"print(p)\n",
"PlotPolly(p1,x,y, 'Length')\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>The analytical expression for Multivariate Polynomial function gets complicated. For example, the expression for a second-order (degree=2)polynomial with two variables is given by:</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"Yhat = a + b_1 X_1 +b_2 X_2 +b_3 X_1 X_2+b_4 X_1^2+b_5 X_2^2\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can perform a polynomial transform on multiple features. First, we import the module:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import PolynomialFeatures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We create a <b>PolynomialFeatures</b> object of degree 2: "
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"PolynomialFeatures(degree=2, include_bias=True, interaction_only=False)"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pr=PolynomialFeatures(degree=2)\n",
"pr"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"Z_pr=pr.fit_transform(Z)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The original data is of 201 samples and 4 features "
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"(201, 4)"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Z.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"after the transformation, there 201 samples and 15 features"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"(201, 15)"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Z_pr.shape"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"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>horsepower</th>\n",
" <th>curb-weight</th>\n",
" <th>engine-size</th>\n",
" <th>highway-mpg</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>111.0</td>\n",
" <td>2548</td>\n",
" <td>130</td>\n",
" <td>27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>111.0</td>\n",
" <td>2548</td>\n",
" <td>130</td>\n",
" <td>27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>154.0</td>\n",
" <td>2823</td>\n",
" <td>152</td>\n",
" <td>26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>102.0</td>\n",
" <td>2337</td>\n",
" <td>109</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>115.0</td>\n",
" <td>2824</td>\n",
" <td>136</td>\n",
" <td>22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>196</th>\n",
" <td>114.0</td>\n",
" <td>2952</td>\n",
" <td>141</td>\n",
" <td>28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>197</th>\n",
" <td>160.0</td>\n",
" <td>3049</td>\n",
" <td>141</td>\n",
" <td>25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>198</th>\n",
" <td>134.0</td>\n",
" <td>3012</td>\n",
" <td>173</td>\n",
" <td>23</td>\n",
" </tr>\n",
" <tr>\n",
" <th>199</th>\n",
" <td>106.0</td>\n",
" <td>3217</td>\n",
" <td>145</td>\n",
" <td>27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>200</th>\n",
" <td>114.0</td>\n",
" <td>3062</td>\n",
" <td>141</td>\n",
" <td>25</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>201 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" horsepower curb-weight engine-size highway-mpg\n",
"0 111.0 2548 130 27\n",
"1 111.0 2548 130 27\n",
"2 154.0 2823 152 26\n",
"3 102.0 2337 109 30\n",
"4 115.0 2824 136 22\n",
".. ... ... ... ...\n",
"196 114.0 2952 141 28\n",
"197 160.0 3049 141 25\n",
"198 134.0 3012 173 23\n",
"199 106.0 3217 145 27\n",
"200 114.0 3062 141 25\n",
"\n",
"[201 rows x 4 columns]"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Z"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Pipeline</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>Data Pipelines simplify the steps of processing the data. We use the module <b>Pipeline</b> to create a pipeline. We also use <b>StandardScaler</b> as a step in our pipeline.</p>"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import StandardScaler"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We create the pipeline, by creating a list of tuples including the name of the model or estimator and its corresponding constructor."
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"Input=[('scale',StandardScaler()), ('polynomial', PolynomialFeatures(include_bias=False)), ('model',LinearRegression())]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"we input the list as an argument to the pipeline constructor "
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"Pipeline(memory=None,\n",
" steps=[('scale', StandardScaler(copy=True, with_mean=True, with_std=True)), ('model', <class 'sklearn.linear_model.base.LinearRegression'>)])"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipe=Pipeline(Input)\n",
"pipe"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can normalize the data, perform a transform and fit the model simultaneously. "
]
},
{
"cell_type": "code",
"execution_count": 69,
"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/preprocessing/data.py:625: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
" return self.partial_fit(X, y)\n",
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/sklearn/base.py:465: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
" return self.fit(X, y, **fit_params).transform(X)\n"
]
},
{
"ename": "TypeError",
"evalue": "fit() missing 1 required positional argument: 'y'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-69-e6630a583109>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mpipe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mZ\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/sklearn/pipeline.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 265\u001b[0m \u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfit_params\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_fit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_final_estimator\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 267\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_final_estimator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 268\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 269\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: fit() missing 1 required positional argument: 'y'"
]
}
],
"source": [
"pipe.fit(Z,y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Similarly, we can normalize the data, perform a transform and produce a prediction simultaneously"
]
},
{
"cell_type": "code",
"execution_count": 70,
"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/pipeline.py:331: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
" Xt = transform.transform(Xt)\n"
]
},
{
"ename": "TypeError",
"evalue": "predict() missing 1 required positional argument: 'X'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-70-6a957783f163>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mypipe\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpipe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mZ\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mypipe\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/sklearn/utils/metaestimators.py\u001b[0m in \u001b[0;36m<lambda>\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 116\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;31m# lambda, but not partial, allows help() to work with update_wrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 118\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 119\u001b[0m \u001b[0;31m# update the docstring of the returned function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0mupdate_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/sklearn/pipeline.py\u001b[0m in \u001b[0;36mpredict\u001b[0;34m(self, X, **predict_params)\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtransform\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0mXt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtransform\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 332\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msteps\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mpredict_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 333\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mif_delegate_has_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdelegate\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'_final_estimator'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: predict() missing 1 required positional argument: 'X'"
]
}
],
"source": [
"ypipe=pipe.predict(Z)\n",
"ypipe[0:4]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-danger alertdanger\" style=\"margin-top: 20px\">\n",
"<h1>Question #5:</h1>\n",
"<b>Create a pipeline that Standardizes the data, then perform prediction using a linear regression model using the features Z and targets y</b>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [],
"source": [
"# Write your code below and press Shift+Enter to execute \n",
"Input=[('scale',StandardScaler()),('model',LinearRegression)]"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"pipe=Pipeline(Input)"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/sklearn/preprocessing/data.py:625: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
" return self.partial_fit(X, y)\n",
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/sklearn/base.py:465: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
" return self.fit(X, y, **fit_params).transform(X)\n"
]
},
{
"ename": "TypeError",
"evalue": "fit() missing 1 required positional argument: 'y'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-71-e6630a583109>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mpipe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mZ\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/sklearn/pipeline.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 265\u001b[0m \u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfit_params\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_fit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_final_estimator\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 267\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_final_estimator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 268\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 269\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: fit() missing 1 required positional argument: 'y'"
]
}
],
"source": [
"pipe.fit(Z,y)"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/sklearn/pipeline.py:331: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
" Xt = transform.transform(Xt)\n"
]
},
{
"ename": "TypeError",
"evalue": "predict() missing 1 required positional argument: 'X'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-73-ac566d521967>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mYpipe\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpipe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mZ\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mYpipe\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/sklearn/utils/metaestimators.py\u001b[0m in \u001b[0;36m<lambda>\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 116\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;31m# lambda, but not partial, allows help() to work with update_wrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 118\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 119\u001b[0m \u001b[0;31m# update the docstring of the returned function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0mupdate_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/conda/envs/python/lib/python3.6/site-packages/sklearn/pipeline.py\u001b[0m in \u001b[0;36mpredict\u001b[0;34m(self, X, **predict_params)\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtransform\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0mXt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtransform\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 332\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msteps\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mpredict_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 333\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mif_delegate_has_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdelegate\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'_final_estimator'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: predict() missing 1 required positional argument: 'X'"
]
}
],
"source": [
"Ypipe=pipe.predict(Z)\n",
"Ypipe[0:7]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"</div>\n",
"Double-click <b>here</b> for the solution.\n",
"\n",
"<!-- The answer is below:\n",
"\n",
"Input=[('scale',StandardScaler()),('model',LinearRegression())]\n",
"\n",
"pipe=Pipeline(Input)\n",
"\n",
"pipe.fit(Z,y)\n",
"\n",
"ypipe=pipe.predict(Z)\n",
"ypipe[0:10]\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Part 4: Measures for In-Sample Evaluation</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>When evaluating our models, not only do we want to visualize the results, but we also want a quantitative measure to determine how accurate the model is.</p>\n",
"\n",
"<p>Two very important measures that are often used in Statistics to determine the accuracy of a model are:</p>\n",
"<ul>\n",
" <li><b>R^2 / R-squared</b></li>\n",
" <li><b>Mean Squared Error (MSE)</b></li>\n",
"</ul>\n",
" \n",
"<b>R-squared</b>\n",
"\n",
"<p>R squared, also known as the coefficient of determination, is a measure to indicate how close the data is to the fitted regression line.</p>\n",
" \n",
"<p>The value of the R-squared is the percentage of variation of the response variable (y) that is explained by a linear model.</p>\n",
"\n",
"\n",
"\n",
"<b>Mean Squared Error (MSE)</b>\n",
"\n",
"<p>The Mean Squared Error measures the average of the squares of errors, that is, the difference between actual value (y) and the estimated value (ŷ).</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Model 1: Simple Linear Regression</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's calculate the R^2"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The R-square is: 0.7609686443622008\n"
]
}
],
"source": [
"#highway_mpg_fit\n",
"lm.fit(X, Y)\n",
"# Find the R^2\n",
"print('The R-square is: ', lm.score(X, Y))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can say that ~ 49.659% of the variation of the price is explained by this simple linear model \"horsepower_fit\"."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's calculate the MSE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can predict the output i.e., \"yhat\" using the predict method, where X is the input variable:"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The output of the first four predicted value is: [13728.4631336 13728.4631336 17399.38347881 10224.40280408]\n"
]
}
],
"source": [
"Yhat=lm.predict(X)\n",
"print('The output of the first four predicted value is: ', Yhat[0:4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lets import the function <b>mean_squared_error</b> from the module <b>metrics</b>"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import mean_squared_error"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"we compare the predicted results with the actual results "
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The mean square error of price and predicted value is: 15021126.025174143\n"
]
}
],
"source": [
"mse = mean_squared_error(df['price'], Yhat)\n",
"print('The mean square error of price and predicted value is: ', mse)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Model 2: Multiple Linear Regression</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's calculate the R^2"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The R-square is: 0.8093562806577457\n"
]
}
],
"source": [
"# fit the model \n",
"lm.fit(Z, df['price'])\n",
"# Find the R^2\n",
"print('The R-square is: ', lm.score(Z, df['price']))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can say that ~ 80.896 % of the variation of price is explained by this multiple linear regression \"multi_fit\"."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's calculate the MSE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" we produce a prediction "
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"Y_predict_multifit = lm.predict(Z)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" we compare the predicted results with the actual results "
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The mean square error of price and predicted value using multifit is: 11980366.87072649\n"
]
}
],
"source": [
"print('The mean square error of price and predicted value using multifit is: ', \\\n",
" mean_squared_error(df['price'], Y_predict_multifit))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Model 3: Polynomial Fit</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's calculate the R^2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"let’s import the function <b>r2_score</b> from the module <b>metrics</b> as we are using a different function"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import r2_score"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We apply the function to get the value of r^2"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The R-square value is: 0.674194666390652\n"
]
}
],
"source": [
"r_squared = r2_score(y, p(x))\n",
"print('The R-square value is: ', r_squared)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can say that ~ 67.419 % of the variation of price is explained by this polynomial fit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>MSE</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also calculate the MSE: "
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"20474146.426361218"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean_squared_error(df['price'], p(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Part 5: Prediction and Decision Making</h2>\n",
"<h3>Prediction</h3>\n",
"\n",
"<p>In the previous section, we trained the model using the method <b>fit</b>. Now we will use the method <b>predict</b> to produce a prediction. Lets import <b>pyplot</b> for plotting; we will also be using some functions from numpy.</p>"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"%matplotlib inline "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a new input "
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"new_input=np.arange(1, 100, 1).reshape(-1, 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Fit the model "
]
},
{
"cell_type": "code",
"execution_count": 86,
"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": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm.fit(X, Y)\n",
"lm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Produce a prediction"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([-7796.47889059, -7629.6188749 , -7462.75885921, -7295.89884352,\n",
" -7129.03882782])"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"yhat=lm.predict(new_input)\n",
"yhat[0:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"we can plot the data "
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(new_input, yhat)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Decision Making: Determining a Good Model Fit</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>Now that we have visualized the different models, and generated the R-squared and MSE values for the fits, how do we determine a good model fit?\n",
"<ul>\n",
" <li><i>What is a good R-squared value?</i></li>\n",
"</ul>\n",
"</p>\n",
"\n",
"<p>When comparing models, <b>the model with the higher R-squared value is a better fit</b> for the data.\n",
"<ul>\n",
" <li><i>What is a good MSE?</i></li>\n",
"</ul>\n",
"</p>\n",
"\n",
"<p>When comparing models, <b>the model with the smallest MSE value is a better fit</b> for the data.</p>\n",
"\n",
"\n",
"<h4>Let's take a look at the values for the different models.</h4>\n",
"<p>Simple Linear Regression: Using Highway-mpg as a Predictor Variable of Price.\n",
"<ul>\n",
" <li>R-squared: 0.49659118843391759</li>\n",
" <li>MSE: 3.16 x10^7</li>\n",
"</ul>\n",
"</p>\n",
" \n",
"<p>Multiple Linear Regression: Using Horsepower, Curb-weight, Engine-size, and Highway-mpg as Predictor Variables of Price.\n",
"<ul>\n",
" <li>R-squared: 0.80896354913783497</li>\n",
" <li>MSE: 1.2 x10^7</li>\n",
"</ul>\n",
"</p>\n",
" \n",
"<p>Polynomial Fit: Using Highway-mpg as a Predictor Variable of Price.\n",
"<ul>\n",
" <li>R-squared: 0.6741946663906514</li>\n",
" <li>MSE: 2.05 x 10^7</li>\n",
"</ul>\n",
"</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Simple Linear Regression model (SLR) vs Multiple Linear Regression model (MLR)</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>Usually, the more variables you have, the better your model is at predicting, but this is not always true. Sometimes you may not have enough data, you may run into numerical problems, or many of the variables may not be useful and or even act as noise. As a result, you should always check the MSE and R^2.</p>\n",
"\n",
"<p>So to be able to compare the results of the MLR vs SLR models, we look at a combination of both the R-squared and MSE to make the best conclusion about the fit of the model.\n",
"<ul>\n",
" <li><b>MSE</b>The MSE of SLR is 3.16x10^7 while MLR has an MSE of 1.2 x10^7. The MSE of MLR is much smaller.</li>\n",
" <li><b>R-squared</b>: In this case, we can also see that there is a big difference between the R-squared of the SLR and the R-squared of the MLR. The R-squared for the SLR (~0.497) is very small compared to the R-squared for the MLR (~0.809).</li>\n",
"</ul>\n",
"</p>\n",
"\n",
"This R-squared in combination with the MSE show that MLR seems like the better model fit in this case, compared to SLR."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Simple Linear Model (SLR) vs Polynomial Fit</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<ul>\n",
" <li><b>MSE</b>: We can see that Polynomial Fit brought down the MSE, since this MSE is smaller than the one from the SLR.</li> \n",
" <li><b>R-squared</b>: The R-squared for the Polyfit is larger than the R-squared for the SLR, so the Polynomial Fit also brought up the R-squared quite a bit.</li>\n",
"</ul>\n",
"<p>Since the Polynomial Fit resulted in a lower MSE and a higher R-squared, we can conclude that this was a better fit model than the simple linear regression for predicting Price with Highway-mpg as a predictor variable.</p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Multiple Linear Regression (MLR) vs Polynomial Fit</h3>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<ul>\n",
" <li><b>MSE</b>: The MSE for the MLR is smaller than the MSE for the Polynomial Fit.</li>\n",
" <li><b>R-squared</b>: The R-squared for the MLR is also much larger than for the Polynomial Fit.</li>\n",
"</ul>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Conclusion:</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>Comparing these three models, we conclude that <b>the MLR model is the best model</b> to be able to predict price from our dataset. This result makes sense, since we have 27 variables in total, and we know that <b>more than one of those variables are potential predictors of the final car price.</b></p>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>Thank you </h1>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"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>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"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.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment