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

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

\n", "\n", "\n", "# Polynomial 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 Polynomial 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. Downloading Data
  2. \n", "
  3. Polynomial regression
  4. \n", "
  5. Evaluation
  6. \n", "
  7. Practice
  8. \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\n" ] }, { "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 10:30: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, 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 10:30:00 (41.3 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_source=skills_network&utm_content=in_lab_content_link&utm_id=Lab-IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork)\n" ] }, { "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", "- **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", "
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": 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": {}, "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": [ "
" ] }, "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" ] }, { "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": [ "

Polynomial regression

\n" ] }, { "cell_type": "markdown", "metadata": {}, "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", "\n", "$$y = b + \\theta_1 x + \\theta_2 x^2$$\n", "\n", "\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", "\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": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 1.5 , 2.25],\n", " [ 1. , 3.5 , 12.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": 12, "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", "$$\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", "\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", "\n", "\n", "\n", "\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 2nd degree 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 a '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 problems. \n", "\n", "\n", "\n", "so we can use __LinearRegression()__ function to solve it:\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Coefficients: [[ 0. 50.8343626 -1.5636381]]\n", "Intercept: [106.99883066]\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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HlyzQ0RERD6NwQ4RERH5NAY7RERE5NMY7BAREZFPY7BDREREPo3BDhEREfk0BjtERETk0xjsEBERkU9jsENEFc6HH36ImjVrerQP3bp1Q1JSkkf7QETKMIMyEalm5MiR+Oijj8oc79u3L7Zu3arada5cuYKLFy+iTp06qp3TUefOnYO/vz+Cg4M91gciUoaFQIlIVbfffjuWL19uckyn06l6jcDAQI8Xeg0LC/Po9YlIOU5jEZGqdDodIiMjTW6hoaHG5zUaDd577z3cddddqFatGpo2bYrNmzebnGPz5s1o2rQpAgMD0b17d3z00UfQaDS4cOECgLLTWDNnzsTNN9+MlStXokGDBggJCcHQoUNx8eJFYxshBObPn49GjRohMDAQLVu2xLp162y+lyVLlqBp06aoWrUqIiIiMHjwYONzpaexdu7cCY1GU+Y2cuRIY/stW7agTZs2qFq1Kho1aoRZs2ahqKjIwU+XiJzBYIeI3G7WrFkYMmQIfvnlF9x5550YPnw4zp07BwA4ceIEBg8ejEGDBuHQoUMYPXo0pk+fbvecx48fx8aNG/HZZ5/hs88+w65duzBv3jzj888++yyWL1+Ot99+G0ePHsWTTz6J+++/H7t27bJ4vgMHDuCJJ57ACy+8gN9//x1bt25Fly5dLLbt2LEjsrKyjLdvvvkGVatWNbb/6quvcP/99+OJJ57Ar7/+infeeQcffvghXnrpJUc/OiJyhup11Imo0hoxYoTQarUiKCjI5PbCCy8Y2wAQzz77rPFxfn6+0Gg04ssvvxRCCPHUU0+JuLg4k/NOnz5dABDnz58XQgixfPlyERISYnx+xowZolq1aiIvL894bMqUKeLWW281XqNq1api7969JucdNWqUGDZsmMX3sn79elGjRg2Tc5bWtWtXMWHChDLH//33X9G4cWMxduxY47HOnTuLOXPmmLRbuXKliIqKsnhuIlIX1+wQkaq6d++Ot99+2+SY+fqWm266yfhzUFAQgoODkZOTAwD4/fff0a5dO5P2t9xyi93rNmjQwGSxcFRUlPGcv/76K65evYrevXubvKawsBCtWrWyeL7evXujfv36aNSoEW6//Xbcfvvtxqk3a65du4a7774b9erVw+uvv248npaWhv3795uM5Oj1ely9ehWXL1+2eU4iKj8GO0SkqqCgIDRp0sRmG39/f5PHGo0GxcXFAOTaGo1GY/K8ULBp1NY5Dfeff/456tata9LO2uLp4OBgHDx4EDt37sS2bdvw/PPPY+bMmdi/f7/Vbe+PP/44Tp48if3796NKlZL/vRYXF2PWrFlISEgo85qqVavafW9EVD4MdojIqzRv3hxffPGFybEDBw6U65w33HADdDodTp48ia5duyp+XZUqVdCrVy/06tULM2bMQM2aNfHNN99YDFoWLFiAtWvX4vvvv0d4eLjJc61bt8bvv/9uNwgkItdgsENEqiooKEB2drbJsSpVqqBWrVqKXj969GgsWLAATz31FEaNGoVDhw7hww8/BIAyIz5KBQcHY/LkyXjyySdRXFyMTp06IS8vD3v37kX16tUxYsSIMq/57LPP8Ndff6FLly4IDQ3FF198geLiYlx33XVl2m7fvh1Tp07FW2+9hVq1ahnff2BgIEJCQvD888+jf//+iI2NxT333AM/Pz/88ssvOHz4MGbPnu3UeyIi5bgbi4hUtXXrVkRFRZncOnXqpPj1DRs2xLp165CSkoKbbroJb7/9tnE3Vnny9bz44ot4/vnnMXfuXFx//fXo27cvtmzZgoYNG1psX7NmTaSkpKBHjx64/vrrsXTpUqxZswY33nhjmbZ79uyBXq/HmDFjTN73hAkTAMikip999hlSU1PRrl07tG/fHgsWLED9+vWdfj9EpBwzKBOR13vppZewdOlSZGRkeLorRFQBcRqLiLzOkiVL0K5dO4SHh+O7777DK6+8gsTERE93i4gqKAY7ROR1jh07htmzZ+PcuXOoV68eJk2ahGnTpnm6W0RUQXEai4iIiHwaFygTERGRT2OwQ0RERD6NwQ4RERH5NAY7RERE5NMY7BAREZFPY7BDREREPo3BDhEREfk0BjtERETk0/4P5AZJGO2sueEAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "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": {}, "source": [ "

Evaluation

\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean absolute error: 20.89\n", "Residual sum of squares (MSE): 790.03\n", "R2-score: 0.80\n" ] } ], "source": [ "from sklearn.metrics import r2_score\n", "\n", "test_x_poly = poly.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": [ "

Practice

\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": [], "source": [ "# write your code here\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Click here for the solution\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.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", "
\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Want to learn more?

\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: SPSS Modeler\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 Watson Studio\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", "\n", "##

© IBM Corporation 2020. All rights reserved.

\n", "\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python", "language": "python", "name": "conda-env-python-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.12" }, "prev_pub_hash": "4dc110debac287dfd374a575573c16e62a80a935b3bbe2b2f6d5a0598e6e33f6" }, "nbformat": 4, "nbformat_minor": 4 }