{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", " \n", " \"Skills\n", " \n", "

\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": [ "

Table of contents

\n", "\n", "
\n", "
    \n", "
  1. Understanding the Data
  2. \n", "
  3. Reading the Data in
  4. \n", "
  5. Multiple Regression Model
  6. \n", "
  7. Prediction
  8. \n", "
  9. Practice
  10. \n", "
\n", "
\n", "
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Importing Needed packages\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "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": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2025-10-20 11:48:16-- 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 11:48:16 (35.7 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", "

Understanding the Data

\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": [ "

Reading the data in

\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MODELYEARMAKEMODELVEHICLECLASSENGINESIZECYLINDERSTRANSMISSIONFUELTYPEFUELCONSUMPTION_CITYFUELCONSUMPTION_HWYFUELCONSUMPTION_COMBFUELCONSUMPTION_COMB_MPGCO2EMISSIONS
02014ACURAILXCOMPACT2.04AS5Z9.96.78.533196
12014ACURAILXCOMPACT2.44M6Z11.27.79.629221
22014ACURAILX HYBRIDCOMPACT1.54AV7Z6.05.85.948136
32014ACURAMDX 4WDSUV - SMALL3.56AS6Z12.79.111.125255
42014ACURARDX AWDSUV - SMALL3.56AS6Z12.18.710.627244
\n", "
" ], "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": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ENGINESIZECYLINDERSFUELCONSUMPTION_CITYFUELCONSUMPTION_HWYFUELCONSUMPTION_COMBCO2EMISSIONS
02.049.96.78.5196
12.4411.27.79.6221
21.546.05.85.9136
33.5612.79.111.1255
43.5612.18.710.6244
53.5611.97.710.0230
63.5611.88.110.1232
73.7612.89.011.1255
83.7613.49.511.6267
\n", "
" ], "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": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "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": {}, "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": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "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": [ "

Multiple Regression Model

\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": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Coefficients: [[11.79987964 7.35962587 9.22632845]]\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": [ "

Prediction

\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean Squared Error (MSE) : 478.48\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": [ "

Practice

\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": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Coefficients: [[11.80890723 7.33126412 5.15052854 4.05198101]]\n", "Residual sum of squares: 478.03\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": [ "
Click here for the solution\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", "
\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", "Joseph Santarcangelo\n", "\n", "##

© IBM Corporation 2020. All rights reserved.

\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 }