818 lines
105 KiB
Plaintext
818 lines
105 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<p style=\"text-align:center\">\n",
|
||
" <a href=\"https://skills.network\" target=\"_blank\">\n",
|
||
" <img src=\"https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/assets/logos/SN_web_lightmode.png\" width=\"200\" alt=\"Skills Network Logo\">\n",
|
||
" </a>\n",
|
||
"</p>\n",
|
||
"\n",
|
||
"\n",
|
||
"# Multiple Linear Regression\n",
|
||
"\n",
|
||
"\n",
|
||
"Estimated time needed: **15** minutes\n",
|
||
" \n",
|
||
"\n",
|
||
"## Objectives\n",
|
||
"\n",
|
||
"After completing this lab you will be able to:\n",
|
||
"\n",
|
||
"* Use scikit-learn to implement Multiple Linear 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=\"#understanding-data\">Understanding the Data</a></li>\n",
|
||
" <li><a href=\"#reading_data\">Reading the Data in</a></li>\n",
|
||
" <li><a href=\"#multiple_regression_model\">Multiple Regression Model</a></li>\n",
|
||
" <li><a href=\"#prediction\">Prediction</a></li>\n",
|
||
" <li><a href=\"#practice\">Practice</a></li>\n",
|
||
" </ol>\n",
|
||
"</div>\n",
|
||
"<br>\n",
|
||
"<hr>\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Importing Needed packages\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"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": {},
|
||
"source": [
|
||
"### Downloading Data\n",
|
||
"To download the data, we will use !wget to download it from IBM Object Storage.\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"--2025-10-20 08:48:58-- 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, 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.002s \n",
|
||
"\n",
|
||
"2025-10-20 08:48:58 (41.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": [
|
||
"\n",
|
||
"<h2 id=\"understanding_data\">Understanding the Data</h2>\n",
|
||
"\n",
|
||
"### `FuelConsumption.csv`:\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)\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",
|
||
"- **FUELTYPE** e.g. z\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": {},
|
||
"source": [
|
||
"<h2 id=\"reading_data\">Reading the data in</h2>\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"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": {
|
||
"tags": []
|
||
},
|
||
"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_CITY</th>\n",
|
||
" <th>FUELCONSUMPTION_HWY</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>9.9</td>\n",
|
||
" <td>6.7</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>11.2</td>\n",
|
||
" <td>7.7</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>6.0</td>\n",
|
||
" <td>5.8</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>12.7</td>\n",
|
||
" <td>9.1</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>12.1</td>\n",
|
||
" <td>8.7</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>11.9</td>\n",
|
||
" <td>7.7</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>11.8</td>\n",
|
||
" <td>8.1</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>12.8</td>\n",
|
||
" <td>9.0</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>13.4</td>\n",
|
||
" <td>9.5</td>\n",
|
||
" <td>11.6</td>\n",
|
||
" <td>267</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" ENGINESIZE CYLINDERS FUELCONSUMPTION_CITY FUELCONSUMPTION_HWY \\\n",
|
||
"0 2.0 4 9.9 6.7 \n",
|
||
"1 2.4 4 11.2 7.7 \n",
|
||
"2 1.5 4 6.0 5.8 \n",
|
||
"3 3.5 6 12.7 9.1 \n",
|
||
"4 3.5 6 12.1 8.7 \n",
|
||
"5 3.5 6 11.9 7.7 \n",
|
||
"6 3.5 6 11.8 8.1 \n",
|
||
"7 3.7 6 12.8 9.0 \n",
|
||
"8 3.7 6 13.4 9.5 \n",
|
||
"\n",
|
||
" FUELCONSUMPTION_COMB CO2EMISSIONS \n",
|
||
"0 8.5 196 \n",
|
||
"1 9.6 221 \n",
|
||
"2 5.9 136 \n",
|
||
"3 11.1 255 \n",
|
||
"4 10.6 244 \n",
|
||
"5 10.0 230 \n",
|
||
"6 10.1 232 \n",
|
||
"7 11.1 255 \n",
|
||
"8 11.6 267 "
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_CITY','FUELCONSUMPTION_HWY','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": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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2Lx5s/OxlpYWbNu2DYMGDQIA9O/fHzExMW5jampqsHfvXucYIiIiatvaW3nypqYmfPHFF86vq6qqsHv3bqSkpKBHjx4oLCzEokWLkJ2djezsbCxatAgJCQm49dZbAQDJycmYMmUKZs+ejdTUVKSkpGDOnDnIzc3FiBEjrHpbREREFEYsDXZ27dqFYcOGOb+eNWsWAGDSpElYuXIl5s2bhxMnTmDq1Kk4cuQILrvsMrzzzjtISkpyvqa4uBjt27fHxIkTceLECQwfPhwrV66EnVuQiIiICGFUZ8dK0VZnh4iIqC2I+Do7REREREZgsENERERRzdKcnXChXsmLtkrKRERE0Uz93A6UkcNgB3A2FmUlZSIiosjT2NiI5ORkn88zQRnAmTNn8O233yIpKSlgdWYtGhoakJWVhYMHD7aZxGe+Z77naMX3zPccrSL5PSuKgsbGRmRkZKBdO9+ZOVzZAdCuXTtkZmaadvy2WKWZ77lt4HtuG/ie24ZIfc/+VnRUTFAmIiKiqMZgh4iIiKIagx0TxcXF4aGHHkJcXJzVUwkZvue2ge+5beB7bhvawntmgjIRERFFNa7sEBERUVRjsENERERRjcEOERERRTUGO0RERBTVGOyY5P3338fYsWORkZEBm82G9evXWz0lUy1evBgDBgxAUlISunXrhvHjx+Ozzz6zelqmWr58OS6++GJnIa6BAwfirbfesnpaIbN48WLYbDYUFhZaPRVTLViwADabze2Wnp5u9bRMV11djdtvvx2pqalISEjAL37xC1RWVlo9LdP06tWr1c/ZZrNh2rRpVk/NNKdPn8Yf//hH9O7dG/Hx8TjvvPPw5z//GWfOnLF6aoZjBWWTHDt2DD//+c9x55134vrrr7d6Oqbbtm0bpk2bhgEDBuD06dN44IEHMGrUKHz66adITEy0enqmyMzMxKOPPorzzz8fALBq1Srk5eXhX//6F/r162fx7MxVUVGB5557DhdffLHVUwmJfv36YcuWLc6v7Xa7hbMx35EjR3DFFVdg2LBheOutt9CtWzccOHAA55xzjtVTM01FRQUcDofz671792LkyJG48cYbLZyVuR577DE888wzWLVqFfr164ddu3bhzjvvRHJyMmbMmGH19AzFYMcko0ePxujRo62eRshs2rTJ7esVK1agW7duqKysxFVXXWXRrMw1duxYt68f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SA9Le64TUVSZNGmSYrfblcTERLfbn//8Z+cYAMof//hH59dNTU2KzWZT3nrrLUVRFOW+++5TcnJy3I77wAMPKACUI0eOKIqiKCtWrFCSk5Odzz/00ENKQkKC0tDQ4Hxs7ty5ymWXXeY8R4cOHZSdO3e6HXfKlCnKLbfc4vW9rF27VunUqZPbMV0NGTJEmTFjRqvHf/jhB6VPnz7K1KlTnY8NHjxYWbRokdu41atXK927d/d6bCIyFnN2iMhQw4YNw/Lly90e88xvufjii53/TkxMRFJSEurq6gAAn332GQYMGOA2/le/+lXA8/bq1cstWbh79+7OY3766ac4efIkRo4c6faalpYWXHLJJV6PN3LkSPTs2RPnnXcerr32Wlx77bXOS2++nDp1Ctdffz169OiBp556yvl4ZWUlKioq3FZyHA4HTp48iePHj/s9JhEFj8EOERkqMTER559/vt8xMTExbl/bbDacOXMGgMitsdlsbs8rEptG/R1TvX/jjTdw7rnnuo3zlTydlJSEjz/+GOXl5XjnnXfw4IMPYsGCBaioqPC57f33v/89vvnmG1RUVKB9+7P/ez1z5gwefvhh5Ofnt3pNhw4dAr43IgoOgx0iCisXXngh3nzzTbfHdu3aFdQxf/aznyEuLg7ffPMNhgwZIv269u3bY8SIERgxYgQeeughnHPOOXjvvfe8Bi1LlizBK6+8gg8++ACpqaluz/3yl7/EZ599FjAIJCJzMNghIkM1NzejtrbW7bH27dujS5cuUq+/5557sGTJEtx3332YMmUKdu/ejZUrVwJAqxUfWUlJSZgzZw5mzpyJM2fO4Morr0RDQwN27tyJjh07YtKkSa1e8/rrr+PLL7/EVVddhc6dO+PNN9/EmTNncMEFF7Qau2XLFsybNw9//etf0aVLF+f7j4+PR3JyMh588EGMGTMGWVlZuPHGG9GuXTt88skn2LNnDxYuXKjrPRGRPO7GIiJDbdq0Cd27d3e7XXnlldKv7927N1599VWUlZXh4osvxvLly527sYKp1/Pf//3fePDBB7F48WJcdNFFuOaaa/Daa6+hd+/eXsefc845KCsrw9VXX42LLroIzzzzDF5++WX069ev1dgdO3bA4XDgd7/7ndv7njFjBgBRVPH111/H5s2bMWDAAFx++eVYsmQJevbsqfv9EJE8VlAmorD3yCOP4JlnnsHBgwetngoRRSBexiKisPP0009jwIABSE1NxT/+8Q88/vjjmD59utXTIqIIxWCHiMLO/v37sXDhQvz444/o0aMHZs+ejfnz51s9LSKKULyMRURERFGNCcpEREQU1RjsEBERUVRjsENERERRjcEOERERRTUGO0RERBTVGOwQERFRVGOwQ0RERFGNwQ4RERFFtf8PvJlBIb+scX0AAAAASUVORK5CYII=\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"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": {},
|
||
"source": [
|
||
"#### Creating train and test dataset\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",
|
||
"This will provide a more accurate evaluation on out-of-sample accuracy because the testing dataset is not part of the dataset that have been used to train the model. Therefore, it gives us a better understanding of how well our model generalizes on new data.\n",
|
||
"\n",
|
||
"We know the outcome of each data point in the testing dataset, making it great to test with! Since this data has not been used to train the model, the model has no knowledge of the outcome of these data points. So, in essence, it is truly an out-of-sample testing.\n",
|
||
"\n",
|
||
"Let's split our dataset into train and test sets. Around 80% of the entire dataset will be used for training and 20% for testing. We create a mask to select random rows using the __np.random.rand()__ function: \n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"msk = np.random.rand(len(df)) < 0.8\n",
|
||
"train = cdf[msk]\n",
|
||
"test = cdf[~msk]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Train data distribution\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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igpcd911Fo3KXOPGjXP7+amnnsLLL7+MTz/9NKqTnaamJtxxxx34y1/+gieffNLq4YRE586dO8RsjuqZZ55BTk4Oli9f7nysd+/e1g0oBM4991y3n59++mn07dsXgwcPtmhE5vvkk09QUFCAG2+8EYD4Ha9evRq7d++2eGTG42UsMkVDQwMAICUlxeKRhIbD4UBpaSlOnDiBq666yurhmGratGm48cYbMXz4cKuHEjIHDx5EVlYW+vTpg9tvvx1fffWV1UMy1YYNG3D55ZfjN7/5DdLS0nDZZZfhL3/5i9XDCpnW1lasXLkS9957r6HNocPNNddcg7/97W/44osvAAD/+7//ix07duCGG26weGTG48wOGU5RFMyePRvXXHMN8vLyrB6OqSorK3HVVVfh1KlTOOecc7B27VpcfPHFVg/LNKWlpdizZw927dpl9VBC5oorrsCbb76Jfv364fvvv8eTTz6JQYMG4cCBA0hNTbV6eKb46quv8PLLL2P27Nl45JFH8Nlnn+HBBx9EXFwc7rrrLquHZ7p169bh2LFjuPvuu60eiqkeeughNDQ04KKLLoLdbofD4cBTTz2FiRMnWj00wzHZIcNNnz4d+/btw44dO6weiukuvPBC7N27F8eOHcOaNWswefJkbNu2LSoTnurqasycORObNm1Cly5drB5OyLhejs7Pz8dVV12Fvn374o033sDs2bMtHJl52tracPnll2PhwoUAgMsuuwwHDhzAyy+/3CGSnddffx1jxoxBVlaW1UMx1dtvv42VK1di1apV6N+/P/bu3YuioiJkZWVh8uTJVg/PUEx2yFAzZszAhg0b8PHHHyM7O9vq4ZguNjbWuUD58ssvx65du/DCCy/glVdesXhkxquoqEB9fT0GDBjgfMzhcODjjz/G0qVL0dLSEvULdwEgMTER+fn5OHjwoNVDMU1mZma7hP0Xv/gF1qxZY9GIQufrr7/Gli1bUFZWZvVQTDdv3jz813/9F26//XYAIpn/+uuvsWjRIiY7RN4oioIZM2Zg7dq1KC8vR58+fawekiUURUFLS4vVwzDFsGHDUFlZ6fbYPffcg4suuggPPfRQh0h0AKClpQX/+c9/cO2111o9FNNcffXV7UpHfPHFF+jVq5dFIwoddXOFumg3mp08eRKdOrkv3bXb7dx6TvKamprw5ZdfOn+uqqrC3r17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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS, color='blue')\n",
|
||
"plt.xlabel(\"Engine size\")\n",
|
||
"plt.ylabel(\"Emission\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<h2 id=\"multiple_regression_model\">Multiple Regression Model</h2>\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"In reality, there are multiple variables that impact the co2emission. When more than one independent variable is present, the process is called multiple linear regression. An example of multiple linear regression is predicting co2emission using the features FUELCONSUMPTION_COMB, EngineSize and Cylinders of cars. The good thing here is that multiple linear regression model is the extension of the simple linear regression model.\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/utils/validation.py:37: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.\n",
|
||
" LARGE_SPARSE_SUPPORTED = LooseVersion(scipy_version) >= '0.14.0'\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Coefficients: [[12.30803692 5.97870106 9.91174566]]\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/least_angle.py:35: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" eps=np.finfo(np.float).eps,\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/least_angle.py:597: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" eps=np.finfo(np.float).eps, copy_X=True, fit_path=True,\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/least_angle.py:836: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" eps=np.finfo(np.float).eps, copy_X=True, fit_path=True,\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/least_angle.py:862: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" eps=np.finfo(np.float).eps, positive=False):\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/least_angle.py:1097: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" max_n_alphas=1000, n_jobs=None, eps=np.finfo(np.float).eps,\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/least_angle.py:1344: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" max_n_alphas=1000, n_jobs=None, eps=np.finfo(np.float).eps,\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/least_angle.py:1480: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" eps=np.finfo(np.float).eps, copy_X=True, positive=False):\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/randomized_l1.py:152: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" precompute=False, eps=np.finfo(np.float).eps,\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/randomized_l1.py:320: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" eps=np.finfo(np.float).eps, random_state=None,\n",
|
||
"/home/jupyterlab/conda/envs/python/lib/python3.7/site-packages/sklearn/linear_model/randomized_l1.py:580: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\n",
|
||
"Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
|
||
" eps=4 * np.finfo(np.float).eps, n_jobs=None,\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn import linear_model\n",
|
||
"regr = linear_model.LinearRegression()\n",
|
||
"x = np.asanyarray(train[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB']])\n",
|
||
"y = np.asanyarray(train[['CO2EMISSIONS']])\n",
|
||
"regr.fit (x, y)\n",
|
||
"# The coefficients\n",
|
||
"print ('Coefficients: ', regr.coef_)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"As mentioned before, __Coefficient__ and __Intercept__ are the parameters of the fitted line. \n",
|
||
"Given that it is a multiple linear regression model with 3 parameters and that the parameters are the intercept and coefficients of the hyperplane, sklearn can estimate them from our data. Scikit-learn uses plain Ordinary Least Squares method to solve this problem.\n",
|
||
"\n",
|
||
"#### Ordinary Least Squares (OLS)\n",
|
||
"OLS is a method for estimating the unknown parameters in a linear regression model. OLS chooses the parameters of a linear function of a set of explanatory variables by minimizing the sum of the squares of the differences between the target dependent variable and those predicted by the linear function. In other words, it tries to minimizes the sum of squared errors (SSE) or mean squared error (MSE) between the target variable (y) and our predicted output ($\\hat{y}$) over all samples in the dataset.\n",
|
||
"\n",
|
||
"OLS can find the best parameters using of the following methods:\n",
|
||
"* Solving the model parameters analytically using closed-form equations\n",
|
||
"* Using an optimization algorithm (Gradient Descent, Stochastic Gradient Descent, Newton’s Method, etc.)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<h2 id=\"prediction\">Prediction</h2>\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Mean Squared Error (MSE) : 535.89\n",
|
||
"Variance score: 0.87\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"y_hat= regr.predict(test[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB']])\n",
|
||
"x = np.asanyarray(test[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB']])\n",
|
||
"y = np.asanyarray(test[['CO2EMISSIONS']])\n",
|
||
"print(\"Mean Squared Error (MSE) : %.2f\"\n",
|
||
" % np.mean((y_hat - y) ** 2))\n",
|
||
"\n",
|
||
"# Explained variance score: 1 is perfect prediction\n",
|
||
"print('Variance score: %.2f' % regr.score(x, y))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"__Explained variance regression score:__ \n",
|
||
"Let $\\hat{y}$ be the estimated target output, y the corresponding (correct) target output, and Var be the Variance (the square of the standard deviation). Then the explained variance is estimated as follows:\n",
|
||
"\n",
|
||
"$\\texttt{explainedVariance}(y, \\hat{y}) = 1 - \\frac{Var\\{ y - \\hat{y}\\}}{Var\\{y\\}}$ \n",
|
||
"The best possible score is 1.0, the lower values are worse.\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<h2 id=\"practice\">Practice</h2>\n",
|
||
"Try to use a multiple linear regression with the same dataset, but this time use FUELCONSUMPTION_CITY and FUELCONSUMPTION_HWY instead of FUELCONSUMPTION_COMB. Does it result in better accuracy?\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Coefficients: [[12.43705901 5.45029768 6.77509197 2.71811195]]\n",
|
||
"Residual sum of squares: 541.86\n",
|
||
"Variance score: 0.87\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"regr = linear_model.LinearRegression()\n",
|
||
"x = np.asanyarray(train[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_CITY','FUELCONSUMPTION_HWY']])\n",
|
||
"y = np.asanyarray(train[['CO2EMISSIONS']])\n",
|
||
"regr.fit (x, y)\n",
|
||
"print ('Coefficients: ', regr.coef_)\n",
|
||
"y_= regr.predict(test[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_CITY','FUELCONSUMPTION_HWY']])\n",
|
||
"x = np.asanyarray(test[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_CITY','FUELCONSUMPTION_HWY']])\n",
|
||
"y = np.asanyarray(test[['CO2EMISSIONS']])\n",
|
||
"print(\"Residual sum of squares: %.2f\"% np.mean((y_ - y) ** 2))\n",
|
||
"print('Variance score: %.2f' % regr.score(x, y))\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"<details><summary>Click here for the solution</summary>\n",
|
||
"\n",
|
||
"```python\n",
|
||
"regr = linear_model.LinearRegression()\n",
|
||
"x = np.asanyarray(train[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_CITY','FUELCONSUMPTION_HWY']])\n",
|
||
"y = np.asanyarray(train[['CO2EMISSIONS']])\n",
|
||
"regr.fit (x, y)\n",
|
||
"print ('Coefficients: ', regr.coef_)\n",
|
||
"y_= regr.predict(test[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_CITY','FUELCONSUMPTION_HWY']])\n",
|
||
"x = np.asanyarray(test[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_CITY','FUELCONSUMPTION_HWY']])\n",
|
||
"y = np.asanyarray(test[['CO2EMISSIONS']])\n",
|
||
"print(\"Residual sum of squares: %.2f\"% np.mean((y_ - y) ** 2))\n",
|
||
"print('Variance score: %.2f' % regr.score(x, y))\n",
|
||
"\n",
|
||
"```\n",
|
||
"\n",
|
||
"</details>\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Thank you for completing this lab!\n",
|
||
"\n",
|
||
"\n",
|
||
"## Author\n",
|
||
"\n",
|
||
"Saeed Aghabozorgi\n",
|
||
"\n",
|
||
"\n",
|
||
"### Other Contributors\n",
|
||
"\n",
|
||
"<a href=\"https://www.linkedin.com/in/joseph-s-50398b136/\" target=\"_blank\">Joseph Santarcangelo</a>\n",
|
||
"\n",
|
||
"## <h3 align=\"center\"> © IBM Corporation 2020. All rights reserved. <h3/>\n",
|
||
" \n",
|
||
"<!--\n",
|
||
"\n",
|
||
"## Change Log\n",
|
||
"\n",
|
||
"\n",
|
||
"| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n",
|
||
"|---|---|---|---|\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",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"--!>\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.7.12"
|
||
},
|
||
"prev_pub_hash": "c1170d4cb1c9bbce7dbbef74b645fc6b265a5aaf4ce89c4ac861feed8769ed99"
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|