Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save iateadonut/7483bd88c3e378d71941ff8d3fc8c497 to your computer and use it in GitHub Desktop.
Save iateadonut/7483bd88c3e378d71941ff8d3fc8c497 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<a href=\"https://www.bigdatauniversity.com\"><img src=\"https://ibm.box.com/shared/static/cw2c7r3o20w9zn8gkecaeyjhgw3xdgbj.png\" width=\"400\" align=\"center\"></a>\n",
"\n",
"<h1><center>Polynomial Regression</center></h1>\n",
"\n",
"<h4>About this Notebook</h4>\n",
"In this notebook, we learn how to use scikit-learn for Polynomial regression. We download a dataset that is related to fuel consumption and Carbon dioxide emission of cars. Then, we split our data into training and test sets, create a model using training set, evaluate our model using test set, and finally use model to predict unknown value."
]
},
{
"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>"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"### Importing Needed packages"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"button": false,
"collapsed": true,
"deletable": true,
"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,
"deletable": true,
"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."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"button": false,
"collapsed": true,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [],
"source": [
"!wget -O FuelConsumption.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/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](http://cocl.us/ML0101EN-IBM-Offer-CC)"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"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,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"## Reading the data in"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"button": false,
"collapsed": true,
"deletable": true,
"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": 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,
"collapsed": true,
"deletable": true,
"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": 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,
"collapsed": true,
"deletable": true,
"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,
"deletable": true,
"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,
"collapsed": true,
"deletable": true,
"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,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h2 id=\"polynomial_regression\">Polynomial regression</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"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",
"\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",
"\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,
"collapsed": true,
"deletable": true,
"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.2 , 10.24],\n",
" [ 1. , 3. , 9. ]])"
]
},
"execution_count": 6,
"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",
"$\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,
"collapsed": true,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Coefficients: [[ 0. 48.78601648 -1.20423645]]\n",
"Intercept: [108.4969537]\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": {},
"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": [
"<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,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h2 id=\"evaluation\">Evaluation</h2>"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean absolute error: 24.65\n",
"Residual sum of squares (MSE): 1002.39\n",
"R2-score: 0.63\n"
]
}
],
"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?"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Coefficients: [[ 0. 25.76321464 5.10256492 -0.51969837]]\n",
"Intercept: [133.03176715]\n",
"Mean absolute error: 24.68\n",
"Residual sum of squares (MSE): 1004.99\n",
"R2-score: 0.63\n"
]
},
{
"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: ',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_y3_ , test_y) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Double-click __here__ for the solution.\n",
"\n",
"<!-- Your answer is below:\n",
"\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: ',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_y3_ , test_y) )\n",
"\n",
"\n",
"-->"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"deletable": true,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"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=\"http://cocl.us/ML0101EN-SPSSModeler\">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://cocl.us/ML0101EN_DSX\">Watson Studio</a>\n",
"\n",
"<h3>Thanks for completing this lesson!</h3>\n",
"\n",
"<h4>Author: <a href=\"https://ca.linkedin.com/in/saeedaghabozorgi\">Saeed Aghabozorgi</a></h4>\n",
"<p><a href=\"https://ca.linkedin.com/in/saeedaghabozorgi\">Saeed Aghabozorgi</a>, PhD is a Data Scientist in IBM with a track record of developing enterprise level applications that substantially increases clients’ ability to turn data into actionable knowledge. He is a researcher in data mining field and expert in developing advanced analytic methods like machine learning and statistical modelling on large datasets.</p>\n",
"\n",
"<hr>\n",
"\n",
"<p>Copyright &copy; 2018 <a href=\"https://cocl.us/DX0108EN_CC\">Cognitive Class</a>. This notebook and its source code are released under the terms of the <a href=\"https://bigdatauniversity.com/mit-license/\">MIT License</a>.</p>"
]
}
],
"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.6.8"
},
"widgets": {
"state": {},
"version": "1.1.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment