Created
June 10, 2021 22:15
-
-
Save intisarkhalil/124ecb37a81e76ba3ab5dd4f4b08bec5 to your computer and use it in GitHub Desktop.
Created on Skills Network Labs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<center>\n", | |
" <img src=\"https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%202/images/IDSNlogo.png\" width=\"300\" alt=\"cognitiveclass.ai logo\" />\n", | |
"</center>\n", | |
"\n", | |
"# Polynomial Regression\n", | |
"\n", | |
"Estimated time needed: **15** minutes\n", | |
"\n", | |
"## Objectives\n", | |
"\n", | |
"After completing this lab you will be able to:\n", | |
"\n", | |
"* Use scikit-learn to implement Polynomial Regression\n", | |
"* Create a model, train it, test it and use the model\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h1>Table of contents</h1>\n", | |
"\n", | |
"<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n", | |
" <ol>\n", | |
" <li><a href=\"#download_data\">Downloading Data</a></li>\n", | |
" <li><a href=\"#polynomial_regression\">Polynomial regression</a></li>\n", | |
" <li><a href=\"#evaluation\">Evaluation</a></li>\n", | |
" <li><a href=\"#practice\">Practice</a></li>\n", | |
" </ol>\n", | |
"</div>\n", | |
"<br>\n", | |
"<hr>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"### Importing Needed packages\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"import pandas as pd\n", | |
"import pylab as pl\n", | |
"import numpy as np\n", | |
"%matplotlib inline" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<h2 id=\"download_data\">Downloading Data</h2>\n", | |
"To download the data, we will use !wget to download it from IBM Object Storage.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--2021-06-10 20:55:00-- https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%202/data/FuelConsumptionCo2.csv\n", | |
"Resolving cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud (cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud)... 169.63.118.104\n", | |
"Connecting to cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud (cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud)|169.63.118.104|:443... connected.\n", | |
"HTTP request sent, awaiting response... 200 OK\n", | |
"Length: 72629 (71K) [text/csv]\n", | |
"Saving to: ‘FuelConsumption.csv’\n", | |
"\n", | |
"FuelConsumption.csv 100%[===================>] 70.93K --.-KB/s in 0.005s \n", | |
"\n", | |
"2021-06-10 20:55:00 (14.2 MB/s) - ‘FuelConsumption.csv’ saved [72629/72629]\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"!wget -O FuelConsumption.csv https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%202/data/FuelConsumptionCo2.csv" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**Did you know?** When it comes to Machine Learning, you will likely be working with large datasets. As a business, where can you host your data? IBM is offering a unique opportunity for businesses, with 10 Tb of IBM Cloud Object Storage: [Sign up now for free](https://www.ibm.com/us-en/cloud/object-storage?utm_medium=Exinfluencer\\&utm_source=Exinfluencer\\&utm_content=000026UJ\\&utm_term=10006555\\&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkML0101ENSkillsNetwork20718538-2021-01-01)\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"## Understanding the Data\n", | |
"\n", | |
"### `FuelConsumption.csv`:\n", | |
"\n", | |
"We have downloaded a fuel consumption dataset, **`FuelConsumption.csv`**, which contains model-specific fuel consumption ratings and estimated carbon dioxide emissions for new light-duty vehicles for retail sale in Canada. [Dataset source](http://open.canada.ca/data/en/dataset/98f1a129-f628-4ce4-b24d-6f16bf24dd64?utm_medium=Exinfluencer\\&utm_source=Exinfluencer\\&utm_content=000026UJ\\&utm_term=10006555\\&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkML0101ENSkillsNetwork20718538-2021-01-01)\n", | |
"\n", | |
"* **MODELYEAR** e.g. 2014\n", | |
"* **MAKE** e.g. Acura\n", | |
"* **MODEL** e.g. ILX\n", | |
"* **VEHICLE CLASS** e.g. SUV\n", | |
"* **ENGINE SIZE** e.g. 4.7\n", | |
"* **CYLINDERS** e.g 6\n", | |
"* **TRANSMISSION** e.g. A6\n", | |
"* **FUEL CONSUMPTION in CITY(L/100 km)** e.g. 9.9\n", | |
"* **FUEL CONSUMPTION in HWY (L/100 km)** e.g. 8.9\n", | |
"* **FUEL CONSUMPTION COMB (L/100 km)** e.g. 9.2\n", | |
"* **CO2 EMISSIONS (g/km)** e.g. 182 --> low --> 0\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"## Reading the data in\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": 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>MODELYEAR</th>\n", | |
" <th>MAKE</th>\n", | |
" <th>MODEL</th>\n", | |
" <th>VEHICLECLASS</th>\n", | |
" <th>ENGINESIZE</th>\n", | |
" <th>CYLINDERS</th>\n", | |
" <th>TRANSMISSION</th>\n", | |
" <th>FUELTYPE</th>\n", | |
" <th>FUELCONSUMPTION_CITY</th>\n", | |
" <th>FUELCONSUMPTION_HWY</th>\n", | |
" <th>FUELCONSUMPTION_COMB</th>\n", | |
" <th>FUELCONSUMPTION_COMB_MPG</th>\n", | |
" <th>CO2EMISSIONS</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2014</td>\n", | |
" <td>ACURA</td>\n", | |
" <td>ILX</td>\n", | |
" <td>COMPACT</td>\n", | |
" <td>2.0</td>\n", | |
" <td>4</td>\n", | |
" <td>AS5</td>\n", | |
" <td>Z</td>\n", | |
" <td>9.9</td>\n", | |
" <td>6.7</td>\n", | |
" <td>8.5</td>\n", | |
" <td>33</td>\n", | |
" <td>196</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2014</td>\n", | |
" <td>ACURA</td>\n", | |
" <td>ILX</td>\n", | |
" <td>COMPACT</td>\n", | |
" <td>2.4</td>\n", | |
" <td>4</td>\n", | |
" <td>M6</td>\n", | |
" <td>Z</td>\n", | |
" <td>11.2</td>\n", | |
" <td>7.7</td>\n", | |
" <td>9.6</td>\n", | |
" <td>29</td>\n", | |
" <td>221</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2014</td>\n", | |
" <td>ACURA</td>\n", | |
" <td>ILX HYBRID</td>\n", | |
" <td>COMPACT</td>\n", | |
" <td>1.5</td>\n", | |
" <td>4</td>\n", | |
" <td>AV7</td>\n", | |
" <td>Z</td>\n", | |
" <td>6.0</td>\n", | |
" <td>5.8</td>\n", | |
" <td>5.9</td>\n", | |
" <td>48</td>\n", | |
" <td>136</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>2014</td>\n", | |
" <td>ACURA</td>\n", | |
" <td>MDX 4WD</td>\n", | |
" <td>SUV - SMALL</td>\n", | |
" <td>3.5</td>\n", | |
" <td>6</td>\n", | |
" <td>AS6</td>\n", | |
" <td>Z</td>\n", | |
" <td>12.7</td>\n", | |
" <td>9.1</td>\n", | |
" <td>11.1</td>\n", | |
" <td>25</td>\n", | |
" <td>255</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>2014</td>\n", | |
" <td>ACURA</td>\n", | |
" <td>RDX AWD</td>\n", | |
" <td>SUV - SMALL</td>\n", | |
" <td>3.5</td>\n", | |
" <td>6</td>\n", | |
" <td>AS6</td>\n", | |
" <td>Z</td>\n", | |
" <td>12.1</td>\n", | |
" <td>8.7</td>\n", | |
" <td>10.6</td>\n", | |
" <td>27</td>\n", | |
" <td>244</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" MODELYEAR MAKE MODEL VEHICLECLASS ENGINESIZE CYLINDERS \\\n", | |
"0 2014 ACURA ILX COMPACT 2.0 4 \n", | |
"1 2014 ACURA ILX COMPACT 2.4 4 \n", | |
"2 2014 ACURA ILX HYBRID COMPACT 1.5 4 \n", | |
"3 2014 ACURA MDX 4WD SUV - SMALL 3.5 6 \n", | |
"4 2014 ACURA RDX AWD SUV - SMALL 3.5 6 \n", | |
"\n", | |
" TRANSMISSION FUELTYPE FUELCONSUMPTION_CITY FUELCONSUMPTION_HWY \\\n", | |
"0 AS5 Z 9.9 6.7 \n", | |
"1 M6 Z 11.2 7.7 \n", | |
"2 AV7 Z 6.0 5.8 \n", | |
"3 AS6 Z 12.7 9.1 \n", | |
"4 AS6 Z 12.1 8.7 \n", | |
"\n", | |
" FUELCONSUMPTION_COMB FUELCONSUMPTION_COMB_MPG CO2EMISSIONS \n", | |
"0 8.5 33 196 \n", | |
"1 9.6 29 221 \n", | |
"2 5.9 48 136 \n", | |
"3 11.1 25 255 \n", | |
"4 10.6 27 244 " | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df = pd.read_csv(\"FuelConsumption.csv\")\n", | |
"\n", | |
"# take a look at the dataset\n", | |
"df.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's select some features that we want to use for regression.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": 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>ENGINESIZE</th>\n", | |
" <th>CYLINDERS</th>\n", | |
" <th>FUELCONSUMPTION_COMB</th>\n", | |
" <th>CO2EMISSIONS</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2.0</td>\n", | |
" <td>4</td>\n", | |
" <td>8.5</td>\n", | |
" <td>196</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2.4</td>\n", | |
" <td>4</td>\n", | |
" <td>9.6</td>\n", | |
" <td>221</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>1.5</td>\n", | |
" <td>4</td>\n", | |
" <td>5.9</td>\n", | |
" <td>136</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>3.5</td>\n", | |
" <td>6</td>\n", | |
" <td>11.1</td>\n", | |
" <td>255</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>3.5</td>\n", | |
" <td>6</td>\n", | |
" <td>10.6</td>\n", | |
" <td>244</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>3.5</td>\n", | |
" <td>6</td>\n", | |
" <td>10.0</td>\n", | |
" <td>230</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>3.5</td>\n", | |
" <td>6</td>\n", | |
" <td>10.1</td>\n", | |
" <td>232</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>3.7</td>\n", | |
" <td>6</td>\n", | |
" <td>11.1</td>\n", | |
" <td>255</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>3.7</td>\n", | |
" <td>6</td>\n", | |
" <td>11.6</td>\n", | |
" <td>267</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" ENGINESIZE CYLINDERS FUELCONSUMPTION_COMB CO2EMISSIONS\n", | |
"0 2.0 4 8.5 196\n", | |
"1 2.4 4 9.6 221\n", | |
"2 1.5 4 5.9 136\n", | |
"3 3.5 6 11.1 255\n", | |
"4 3.5 6 10.6 244\n", | |
"5 3.5 6 10.0 230\n", | |
"6 3.5 6 10.1 232\n", | |
"7 3.7 6 11.1 255\n", | |
"8 3.7 6 11.6 267" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]\n", | |
"cdf.head(9)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's plot Emission values with respect to Engine size:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
}, | |
"scrolled": true | |
}, | |
"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.scatter(cdf.ENGINESIZE, cdf.CO2EMISSIONS, color='blue')\n", | |
"plt.xlabel(\"Engine size\")\n", | |
"plt.ylabel(\"Emission\")\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"#### Creating train and test dataset\n", | |
"\n", | |
"Train/Test Split involves splitting the dataset into training and testing sets respectively, which are mutually exclusive. After which, you train with the training set and test with the testing set.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"msk = np.random.rand(len(df)) < 0.8\n", | |
"train = cdf[msk]\n", | |
"test = cdf[~msk]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<h2 id=\"polynomial_regression\">Polynomial regression</h2>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Sometimes, the trend of data is not really linear, and looks curvy. In this case we can use Polynomial regression methods. In fact, many different regressions exist that can be used to fit whatever the dataset looks like, such as quadratic, cubic, and so on, and it can go on and on to infinite degrees.\n", | |
"\n", | |
"In essence, we can call all of these, polynomial regression, where the relationship between the independent variable x and the dependent variable y is modeled as an nth degree polynomial in x. Lets say you want to have a polynomial regression (let's make 2 degree polynomial):\n", | |
"\n", | |
"$$y = b + \\theta\\_1 x + \\theta\\_2 x^2$$\n", | |
"\n", | |
"Now, the question is: how we can fit our data on this equation while we have only x values, such as **Engine Size**?\n", | |
"Well, we can create a few additional features: 1, $x$, and $x^2$.\n", | |
"\n", | |
"**PolynomialFeatures()** function in Scikit-learn library, drives a new feature sets from the original feature set. That is, a matrix will be generated consisting of all polynomial combinations of the features with degree less than or equal to the specified degree. For example, lets say the original feature set has only one feature, *ENGINESIZE*. Now, if we select the degree of the polynomial to be 2, then it generates 3 features, degree=0, degree=1 and degree=2:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[ 1. , 2. , 4. ],\n", | |
" [ 1. , 1.5 , 2.25],\n", | |
" [ 1. , 3.5 , 12.25],\n", | |
" ...,\n", | |
" [ 1. , 3.2 , 10.24],\n", | |
" [ 1. , 3. , 9. ],\n", | |
" [ 1. , 3.2 , 10.24]])" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"from sklearn.preprocessing import PolynomialFeatures\n", | |
"from sklearn import linear_model\n", | |
"train_x = np.asanyarray(train[['ENGINESIZE']])\n", | |
"train_y = np.asanyarray(train[['CO2EMISSIONS']])\n", | |
"\n", | |
"test_x = np.asanyarray(test[['ENGINESIZE']])\n", | |
"test_y = np.asanyarray(test[['CO2EMISSIONS']])\n", | |
"\n", | |
"\n", | |
"poly = PolynomialFeatures(degree=2)\n", | |
"train_x_poly = poly.fit_transform(train_x)\n", | |
"train_x_poly" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**fit_transform** takes our x values, and output a list of our data raised from power of 0 to power of 2 (since we set the degree of our polynomial to 2).\n", | |
"\n", | |
"The equation and the sample example is displayed below.\n", | |
"\n", | |
"$$\n", | |
"\\begin{bmatrix}\n", | |
"v\\_1\\\\\\\\\n", | |
"v\\_2\\\\\\\\\n", | |
"\\vdots\\\\\\\\\n", | |
"v_n\n", | |
"\\end{bmatrix}\\longrightarrow \\begin{bmatrix}\n", | |
"\\[ 1 & v\\_1 & v\\_1^2]\\\\\\\\\n", | |
"\\[ 1 & v\\_2 & v\\_2^2]\\\\\\\\\n", | |
"\\vdots & \\vdots & \\vdots\\\\\\\\\n", | |
"\\[ 1 & v_n & v_n^2]\n", | |
"\\end{bmatrix}\n", | |
"$$\n", | |
"\n", | |
"$$\n", | |
"\\begin{bmatrix}\n", | |
"2.\\\\\\\\\n", | |
"2.4\\\\\\\\\n", | |
"1.5\\\\\\\\\n", | |
"\\vdots\n", | |
"\\end{bmatrix} \\longrightarrow \\begin{bmatrix}\n", | |
"\\[ 1 & 2. & 4.]\\\\\\\\\n", | |
"\\[ 1 & 2.4 & 5.76]\\\\\\\\\n", | |
"\\[ 1 & 1.5 & 2.25]\\\\\\\\\n", | |
"\\vdots & \\vdots & \\vdots\\\\\\\\\n", | |
"\\end{bmatrix}\n", | |
"$$\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"It looks like feature sets for multiple linear regression analysis, right? Yes. It Does.\n", | |
"Indeed, Polynomial regression is a special case of linear regression, with the main idea of how do you select your features. Just consider replacing the $x$ with $x\\_1$, $x\\_1^2$ with $x\\_2$, and so on. Then the degree 2 equation would be turn into:\n", | |
"\n", | |
"$$y = b + \\theta\\_1 x\\_1 + \\theta\\_2 x\\_2$$\n", | |
"\n", | |
"Now, we can deal with it as 'linear regression' problem. Therefore, this polynomial regression is considered to be a special case of traditional multiple linear regression. So, you can use the same mechanism as linear regression to solve such a problems.\n", | |
"\n", | |
"so we can use **LinearRegression()** function to solve it:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Coefficients: [[ 0. 50.31418476 -1.45683063]]\n", | |
"Intercept: [107.03089884]\n" | |
] | |
} | |
], | |
"source": [ | |
"clf = linear_model.LinearRegression()\n", | |
"train_y_ = clf.fit(train_x_poly, train_y)\n", | |
"# The coefficients\n", | |
"print ('Coefficients: ', clf.coef_)\n", | |
"print ('Intercept: ',clf.intercept_)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As mentioned before, **Coefficient** and **Intercept** , are the parameters of the fit curvy line.\n", | |
"Given that it is a typical multiple linear regression, with 3 parameters, and knowing that the parameters are the intercept and coefficients of hyperplane, sklearn has estimated them from our new set of feature sets. Lets plot it:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Text(0, 0.5, 'Emission')" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS, color='blue')\n", | |
"XX = np.arange(0.0, 10.0, 0.1)\n", | |
"yy = clf.intercept_[0]+ clf.coef_[0][1]*XX+ clf.coef_[0][2]*np.power(XX, 2)\n", | |
"plt.plot(XX, yy, '-r' )\n", | |
"plt.xlabel(\"Engine size\")\n", | |
"plt.ylabel(\"Emission\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<h2 id=\"evaluation\">Evaluation</h2>\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from sklearn.metrics import r2_score\n", | |
"\n", | |
"test_x_poly = poly.fit_transform(test_x)\n", | |
"test_y_ = clf.predict(test_x_poly)\n", | |
"\n", | |
"print(\"Mean absolute error: %.2f\" % np.mean(np.absolute(test_y_ - test_y)))\n", | |
"print(\"Residual sum of squares (MSE): %.2f\" % np.mean((test_y_ - test_y) ** 2))\n", | |
"print(\"R2-score: %.2f\" % r2_score(test_y,test_y_ ) )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2 id=\"practice\">Practice</h2>\n", | |
"Try to use a polynomial regression with the dataset but this time with degree three (cubic). Does it result in better accuracy?\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Coefficients: [[ 0. 27.90291837 4.8010316 -0.52779624]]\n", | |
"Intercept: [107.03089884]\n", | |
"Mean absolute error:25.16\n", | |
"Residual sum of squares(MSE):1040.60\n" | |
] | |
}, | |
{ | |
"ename": "NameError", | |
"evalue": "name 'r2_score' is not defined", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-11-1b08753383dd>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Mean absolute error:%.2f\"\u001b[0m\u001b[0;34m%\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabsolute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_y3_\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mtest_y\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Residual sum of squares(MSE):%.2f\"\u001b[0m\u001b[0;34m%\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_y3_\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mtest_y\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"R2-score:%.2f\"\u001b[0m \u001b[0;34m%\u001b[0m\u001b[0mr2_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest_y3_\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;31mNameError\u001b[0m: name 'r2_score' is not defined" | |
] | |
}, | |
{ | |
"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": [ | |
"# write your code here\n", | |
"poly3 = PolynomialFeatures(degree = 3)\n", | |
"train_x_poly3 = poly3.fit_transform(train_x)\n", | |
"clf3= linear_model.LinearRegression()\n", | |
"train_y3_=clf3.fit(train_x_poly3, train_y)\n", | |
"#the coefficients\n", | |
"print('Coefficients:', clf3.coef_)\n", | |
"print('Intercept:', clf.intercept_)\n", | |
"plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS, color='blue')\n", | |
"xx=np.arange(0.0, 10.0, 0.1)\n", | |
"yy= clf3.intercept_[0] + clf3.coef_[0][1]*xx + clf3.coef_[0][2]*np.power(xx, 2)+clf3.coef_[0][3]*np.power(xx , 3)\n", | |
"plt.plot(xx, yy, '-r')\n", | |
"plt.xlabel(\"Engine size\")\n", | |
"plt.ylabel(\"Emissions\")\n", | |
"test_x_poly3=poly3.fit_transform(test_x)\n", | |
"test_y3_=clf3.predict(test_x_poly3)\n", | |
"print(\"Mean absolute error:%.2f\"%np.mean(np.absolute(test_y3_-test_y)))\n", | |
"print(\"Residual sum of squares(MSE):%.2f\"%np.mean((test_y3_-test_y)**2))\n", | |
"print(\"R2-score:%.2f\" % r2_score(test_y, test_y3_))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<details><summary>Click here for the solution</summary>\n", | |
"\n", | |
"```python\n", | |
"poly3 = PolynomialFeatures(degree=3)\n", | |
"train_x_poly3 = poly3.fit_transform(train_x)\n", | |
"clf3 = linear_model.LinearRegression()\n", | |
"train_y3_ = clf3.fit(train_x_poly3, train_y)\n", | |
"\n", | |
"# The coefficients\n", | |
"print ('Coefficients: ', clf3.coef_)\n", | |
"print ('Intercept: ',clf3.intercept_)\n", | |
"plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS, color='blue')\n", | |
"XX = np.arange(0.0, 10.0, 0.1)\n", | |
"yy = clf3.intercept_[0]+ clf3.coef_[0][1]*XX + clf3.coef_[0][2]*np.power(XX, 2) + clf3.coef_[0][3]*np.power(XX, 3)\n", | |
"plt.plot(XX, yy, '-r' )\n", | |
"plt.xlabel(\"Engine size\")\n", | |
"plt.ylabel(\"Emission\")\n", | |
"test_x_poly3 = poly3.fit_transform(test_x)\n", | |
"test_y3_ = clf3.predict(test_x_poly3)\n", | |
"print(\"Mean absolute error: %.2f\" % np.mean(np.absolute(test_y3_ - test_y)))\n", | |
"print(\"Residual sum of squares (MSE): %.2f\" % np.mean((test_y3_ - test_y) ** 2))\n", | |
"print(\"R2-score: %.2f\" % r2_score(test_y,test_y3_ ) )\n", | |
"\n", | |
"```\n", | |
"\n", | |
"</details>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2>Want to learn more?</h2>\n", | |
"\n", | |
"IBM SPSS Modeler is a comprehensive analytics platform that has many machine learning algorithms. It has been designed to bring predictive intelligence to decisions made by individuals, by groups, by systems – by your enterprise as a whole. A free trial is available through this course, available here: <a href=\"https://www.ibm.com/analytics/spss-statistics-software?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkML0101ENSkillsNetwork20718538-2021-01-01\">SPSS Modeler</a>\n", | |
"\n", | |
"Also, you can use Watson Studio to run these notebooks faster with bigger datasets. Watson Studio is IBM's leading cloud solution for data scientists, built by data scientists. With Jupyter notebooks, RStudio, Apache Spark and popular libraries pre-packaged in the cloud, Watson Studio enables data scientists to collaborate on their projects without having to install anything. Join the fast-growing community of Watson Studio users today with a free account at <a href=\"https://www.ibm.com/cloud/watson-studio?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkML0101ENSkillsNetwork20718538-2021-01-01\">Watson Studio</a>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Thank you for completing this lab!\n", | |
"\n", | |
"## Author\n", | |
"\n", | |
"Saeed Aghabozorgi\n", | |
"\n", | |
"### Other Contributors\n", | |
"\n", | |
"<a href=\"https://www.linkedin.com/in/joseph-s-50398b136/?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkML0101ENSkillsNetwork20718538-2021-01-01\" target=\"_blank\">Joseph Santarcangelo</a>\n", | |
"\n", | |
"## Change Log\n", | |
"\n", | |
"| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n", | |
"|---|---|---|---|\n", | |
"| 2021-01-11 | 2.3 | Lakshmi | Changed R2-score calculation in polynomial regression |\n", | |
"| 2020-11-04 | 2.2 | Lakshmi | Made changes in markdown of equations |\n", | |
"| 2020-11-03 | 2.1 | Lakshmi | Made changes in URL |\n", | |
"| 2020-08-27 | 2.0 | Lavanya | Moved lab to course repo in GitLab |\n", | |
"| | | | |\n", | |
"| | | | |\n", | |
"\n", | |
"## <h3 align=\"center\"> © IBM Corporation 2020. All rights reserved. <h3/>\n" | |
] | |
} | |
], | |
"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.13" | |
}, | |
"widgets": { | |
"state": {}, | |
"version": "1.1.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment