{ "cells": [ { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "source": [ "# Polynomial Regression\n", "---" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "source": [ "### Importing Needed packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "outputs": [], "source": [ "# primary data structure libraries\n", "import numpy as np\n", "import pandas as pd \n", "\n", "# primary machine learning library\n", "from sklearn import linear_model\n", "from sklearn.metrics import r2_score\n", "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "# primary plotting library\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt \n", "\n", "# optional: for ggplot-like style of plots\n", "mpl.style.use(['ggplot']) \n", "\n", "# using the inline backend\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "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", "- **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": [ "\n", "## Reading the data in" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "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": 2, "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": [ "Lets select some features that we want to use for regression." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "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", "
ENGINESIZECYLINDERSFUELCONSUMPTION_COMBCO2EMISSIONS
02.048.5196
12.449.6221
21.545.9136
33.5611.1255
43.5610.6244
53.5610.0230
63.5610.1232
73.7611.1255
83.7611.6267
\n", "
" ], "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": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]\n", "cdf.head(9)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets plot Emission values with respect to Engine size:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false }, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "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", "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." ] }, { "cell_type": "code", "execution_count": 5, "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": [ "\n", "## Polynomial regression" ] }, { "cell_type": "markdown", "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "source": [ "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", "\n", "\n", "__PloynomialFeatures()__ 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: " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 2. , 4. ],\n", " [ 1. , 2.4 , 5.76],\n", " [ 1. , 1.5 , 2.25],\n", " ...,\n", " [ 1. , 3.2 , 10.24],\n", " [ 1. , 3. , 9. ],\n", " [ 1. , 3.2 , 10.24]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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", "$\n", "\\begin{bmatrix}\n", " v_1\\\\\n", " v_2\\\\\n", " \\vdots\\\\\n", " v_n\n", "\\end{bmatrix}\n", "$\n", "$\\longrightarrow$\n", "$\n", "\\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", "in our example\n", "\n", "$\n", "\\begin{bmatrix}\n", " 2.\\\\\n", " 2.4\\\\\n", " 1.5\\\\\n", " \\vdots\n", "\\end{bmatrix}\n", "$\n", "$\\longrightarrow$\n", "$\n", "\\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", "$" ] }, { "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", "\n", "\n", "so we can use __LinearRegression()__ function to solve it:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "button": false, "new_sheet": false, "run_control": { "read_only": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Coefficients: [[ 0. 50.05478081 -1.45483662]]\n", "Intercept: [107.86185183]\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:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Emission')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "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": [ "\n", "## Evaluation" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean absolute error: 22.10\n", "Residual sum of squares (MSE): 874.88\n", "R2-score: 0.72\n" ] } ], "source": [ "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": [ "## Thanks for reading :)\n", "Created by [Saeed Aghabozorgi](https://www.linkedin.com/in/saeedaghabozorgi/) and modified by [Tarun Kamboj](https://www.linkedin.com/in/kambojtarun/)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.6" }, "widgets": { "state": {}, "version": "1.1.2" } }, "nbformat": 4, "nbformat_minor": 2 }