Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmalc/2723be39dcb2c96aade595e50d0a6ce3 to your computer and use it in GitHub Desktop.
Save dmalc/2723be39dcb2c96aade595e50d0a6ce3 to your computer and use it in GitHub Desktop.
Created on Skills Network Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<center>\n",
" <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/Logos/organization_logo/organization_logo.png\" width=\"300\" alt=\"cognitiveclass.ai logo\" />\n",
"</center>\n",
"\n",
"# Polynomial Regression\n",
"\n",
"Estimated time needed: **15** minutes\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,test 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=\"#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>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"### Importing Needed packages\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"button": false,
"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,
"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.\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--2020-10-17 21:46:15-- https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/FuelConsumptionCo2.csv\n",
"Resolving s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)... 67.228.254.196\n",
"Connecting to s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)|67.228.254.196|: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.04s \n",
"\n",
"2020-10-17 21:46:15 (1.80 MB/s) - ‘FuelConsumption.csv’ saved [72629/72629]\n",
"\n"
]
}
],
"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](https://www.ibm.com/us-en/cloud/object-storage?cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork-20718538&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork-20718538&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork-20718538&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"## Understanding the Data\n",
"\n",
"### `FuelConsumption.csv`:\n",
"\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?cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork-20718538&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork-20718538&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork-20718538&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork-20718538&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ)\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": [
"## Reading the data in\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"button": false,
"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": 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": [
"Lets select some features that we want to use for regression.\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"button": false,
"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": 4,
"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:\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
},
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEHCAYAAABBW1qbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAwDElEQVR4nO2df5xddXnn389MJiGTqMAksoGQGUqBdmItypTWTX+gAbHRF2i3unFHzUt9NZjQFu36smazW7XddNnWttLdJjYVJJqpLFvtyotSlERtV0ulAQFJkCUuCQSykIA/QBBI8uwf59yZM3fOuefHPeeeO3c+79fr+7r3fs/5nvPcm8z3Od/neb7PY+6OEEIIAdBXtwBCCCG6BykFIYQQk0gpCCGEmERKQQghxCRSCkIIISaRUhBCCDHJvCovbmYHgKeB48Axdx8zs1OB/wGMAAeAt7n798LzNwHvDc//bXf/UqvrL1myxEdGRqoSXwghepI777zzqLsvjTtWqVIIea27H418/jCw292vNrMPh59/18xGgbXASuB0YJeZnevux5MuPDIywp49e6qUXQgheg4zO5h0rA7z0eXAjvD9DuDNkf4b3P15d38I2A9c2HnxhBBi7lK1UnDgy2Z2p5mtD/tOc/fDAOHry8P+M4BHImMPhX1CCCE6RNXmo1Xu/piZvRy4zcy+0+Jci+mbkYMjVC7rAVasWFGOlEIIIYCKVwru/lj4+gTwtwTmoMfNbBlA+PpEePoh4MzI8OXAYzHX3O7uY+4+tnRprJ9ECCFEQSpTCma2yMxe0ngPvB64D7gJWBeetg74Yvj+JmCtmS0ws7OAc4A7qpJPCCHETKpcKZwGfN3M7iGY3P/O3W8FrgYuMbMHgUvCz7j7XuBGYB9wK3Blq8gjIcTcYmICRkagry94nZioW6LexGZz6uyxsTFXSKoQvc/EBKxfD88+O9U3OAjbt8P4eH1yzVbM7E53H4s7ph3NQoiuZ/Pm6QoBgs+bN9cjTy8jpSCE6HoefjhfvyiOlIIQoutJij5XVHr5SCkIIbqeLVsCH0KUwcGgX5SLlIIQousZHw+cysPDYBa8yslcDZ1IiCeEEG0zPi4l0Am0UhBCCDGJlIIQQohJpBSEEEJMIqUghBBiEikFIYQQk0gpCCGEmERKQQghxCRSCkIIISaRUhBCCDGJlIIQQohJpBSEEEJMUrlSMLN+M/uWmd0cfv6omT1qZneHbU3k3E1mtt/MHjCzS6uWTQghxHQ6kRDvKuB+4KWRvj9z949HTzKzUWAtsBI4HdhlZueqTrMQQnSOSlcKZrYceCPwqQynXw7c4O7Pu/tDwH7gwirlE0IIMZ2qzUefAD4EnGjq/00zu9fMrjOzU8K+M4BHIuccCvuEEEJ0iMqUgpm9CXjC3e9sOrQNOBs4HzgM/EljSMxlPOa6681sj5ntOXLkSIkSCyGEqHKlsAq4zMwOADcArzOzne7+uLsfd/cTwF8xZSI6BJwZGb8ceKz5ou6+3d3H3H1s6dKlFYovhBBzj8qUgrtvcvfl7j5C4ED+iru/w8yWRU57C3Bf+P4mYK2ZLTCzs4BzgDuqkk8IIcRM6ijH+Udmdj6BaegAcAWAu+81sxuBfcAx4EpFHgkhRGfpyOY1d/+au78pfP9Od/8Zd3+lu1/m7ocj521x97Pd/Tx3//tOyCaEmB1MTMDICPT1Ba8TE3VL1JtoR7MQIpWNG2HePDALXjdu7Oz9JyZg/Xo4eBDcg9f166UYqkBKQQjRko0bYds2OB4ac48fDz53UjFs3gzPPju979lng35RLuY+I+pz1jA2NuZ79uypWwwhepq+vuDpvBkzONG8A6mHZeglzOxOdx+LO6aVghCiJUnPjZ18nlyxIl+/KI6UghCi69myBQYHp/cNDgb9olykFIQQXc/4OGzfDsPDgcloeDj4PD5et2S9h5SCEKIlGzbk66+K8XE4cCDwIRw4IIVQFVIKQvQAVcbwb90aKID+/uBzf3/weevW9q6rfQfdiZSCEBVTdYx/XAz/u98NS5aUN+Fu3QrHjgXXP3asHIWgfQfdiUJShaiQRox/M2U8aTcYGQkm1VYMDnaXDT5J5uHhwDQkqqVVSKqUghAVMm/e1KavKP39wRN3GSTF8DfTTROu9h3Ui/YpCFETcQqhVX8RssbqP/xw8XukmcDy+ge076B7kVIQokIsrnRUi/4ixMXwx1F0wk1Lc1HEP6B9B92LlIIQFVLGbuC0p/TmGP6hIZg/f/o57Uy4n/xk6/4ieYm076B7kVIQc5q6s3+mkTUZXTSG/+hReO97p4eQrltXfMJNU2xJZqk0c5X2HXQnUgpiztKJ7J+NiTlrfzPbt+frh8Bss2PH9O+1Y0d14Z7yD/QWUgpizlJkws3L+vX5+psp4qjudJpp+Qd6i8qVgpn1m9m3zOzm8POpZnabmT0Yvp4SOXeTme03swfM7NKqZRNzm05EBrW7G7jISqOoOSeJtDQX4+OBeaosc5Wol06sFK4C7o98/jCw293PAXaHnzGzUWAtsBJ4A7DVzDIusoXIT7umnay0sxu4yEqjbHNOmmLrtLlKVEulSsHMlgNvBD4V6b4c2BG+3wG8OdJ/g7s/7+4PAfuBC6uUT8xt2jXtdIJVqwIHeJR584L+JOLMOQMD8MwzxdNetFJsqorWW1S9UvgE8CEgukfxNHc/DBC+vjzsPwN4JHLeobBPiEqoKtFbmWzePHPn87FjMyfc6OaxzZsD8000RNUMnnyymjxDZZurRL1UphTM7E3AE+5+Z9YhMX0zguHMbL2Z7TGzPUeOHGlLRiHKTvRWNlkm3LjNYzt2BCuGEydg8WJ44YXp48t8klf0UW9R5UphFXCZmR0AbgBeZ2Y7gcfNbBlA+PpEeP4h4MzI+OXAY80Xdfft7j7m7mNLly6tUHwh6ifLhJtmvqn6Sb6q6KOVK4MVTqOtXNne9UQ2KlMK7r7J3Ze7+wiBA/kr7v4O4CZgXXjaOuCL4fubgLVmtsDMzgLOAe6oSj4hZgNZJty0Sb/qJ/kqdievXAn79k3v27dPiqET1LFP4WrgEjN7ELgk/Iy77wVuBPYBtwJXunuJwYFCzD6yTLhpk34n9hGUvTu5WSGk9c8lKt+F7+6ztl1wwQUuRN3s3Ok+POxuFrzu3Nn5+w8OugcehaANDk6Xo24Z8xL9Ls1tLrNhQ/xvsmFDvusAezxhXtWOZiHaoBsqiGVZTTQ/yYNKYc5GOrELX0pBiDaYjTH6VSiysp3Co6P5+ucKndiFL6UgRBvUEaMfnXwbLW2Sj+5jWLcuvyK7+OLp97v44qljVTiF9+6dqQBGR4P+uUwnduFLKQjRBp2O0U8qztNqkm9eGSQ9VSbVeb74Yti9e3rf7t1TiqEqp/DevdMt53NdIUBnduFLKQjRBt2cIbSxWokzccWR9LTZrBDS+kV1dGIXvpSCEG3QzRXEGquVrKasMu3Sojqq3oUvpSBEDxJdrWQ1ZQ0PVyePmD1IKQjRBt0QktogabUSZ+KKY82a+P7Vq/P1i9mNlIIQLYhG7cTF83c6JLVVveSkHcXNJq4k38Ett8T379o1UwGsXh30Q+fqUojOIKUgRAJZVgF1hKTG7WlNS30Q3bx24kTsZVvKvGvX9Ps1FAKUFxFTefoGkY2krc6zoSnNhaiS4eH4lALDw1PnDA3FnzM0VJ1cGza49/cH9+nvdx8dzZf6IMv3ysvq1dOvtXp1/u9URvoGkQ2U5kKI/HRj8ZiNG2HbtumlL5P2A2zbFm/2KjuMdmICbr99et/tt880tbUyxXUifYPISJK2mA1NKwVRJVmeqM3izzErT45oMrtWieJatSoT5CX9TkNDU/cYGnKfPz9ZJiXA6yxopSBEfrI8USeFe/b1lZNsrtmvUZRnnw3SWzRkgtaprlultWgmaSf0k09Oyf3kk62rv8lZ3T1IKQiRQJaNaUnhnsePlxOimnU3chayypSW1qJMGqa4iy6KP57UL6rDvJ3Hj5oZGxvzPXv21C2GmONMTAST98MPB0/icTuDh4enUlbnoa+vvRVCK/r7g5XCihWBcmsou6T8StFx69dP7aRNO78Vjd9lZCR+xVH0dxOtMbM73X0s7phWCkK0Sbvhnq1CMatKrAfTVw7veU/21czx44ETuyFnURNP1BTXjU79uUplSsHMTjKzO8zsHjPba2YfC/s/amaPmtndYVsTGbPJzPab2QNmdmlVsglRFYsW5euPiyaKTrg/+ZPlyxjHCy/AVVflG9OIDDrvvGznDwzA0FC8Ka7T2WZFC5I80O02wIDF4fsB4JvALwAfBT4Yc/4ocA+wADgL+C7Q3+oeij4S3UDW6KA4GvsNmlt/f+vj0Xb66TPLcRZt7jP3HKSd3+p7Z41wylJSVJQHdUQfhfd+Jvw4ELZW1tHLgRvc/Xl3fwjYD1xYlXxClEG70UFplbRaZS5tTJ+PPpotjUV/fzb7f1xai6TrNeRIolWEU5RuzjY716jUp2Bm/WZ2N/AEcJu7fzM89Jtmdq+ZXWdmp4R9ZwCPRIYfCvuE6Bh5Uy20Gx2UFoqZNVTzG9+AQ4eCCfrEiUD2KIODsGNHcGxoKP6a0f5oWosNG+LPL7OwC8ysIy2FUA+VKgV3P+7u5wPLgQvN7BXANuBs4HzgMPAn4elxzzAznkHMbL2Z7TGzPUeOHKlEbjE3SbPvx5EUo5+VJHt8oz9p4j1+fGoPwfz50+V2D/LsL1489dS9bl2gwPrCv/hmpTIwANdcE3+vtMIuJ50UPy6pX3Q3HQtJNbOPAD9y949H+kaAm939FWa2CcDd/0t47EvAR9399rjrgUJSRbnMmxdvrunvDybZPGOaSQpVbYSFtjp/48bAlJK3CE5D7oaJK7qiGRiAl74UnnpqZkhqXpYsCTanNTM0BEePFrumqJZaQlLNbKmZnRy+XwhcDHzHzJZFTnsLcF/4/iZgrZktMLOzgHOAO6qST4hm0uz7eY9FSQpVzdIfrbSVh4ZscSauF18MJnL3wOz0jW/ku3aUp57K1y+6m3nppxRmGbDDzPoJlM+N7n6zmX3WzM4nMA0dAK4AcPe9ZnYjsA84Blzp7ioQKDpGf3/yJN9w0I6OTi8gPzyczYRUR1WzhrknLda/YSaDYqUdk1ZSSlExO6ky+uhed3+Vu7/S3V/h7r8f9r/T3X8m7L/M3Q9Hxmxx97Pd/Tx3//uqZBOiQdSxnOWpf98+WLly6nPWqmad2m8QpeGPyBrrXzQjaZJpLalfdDfa0SwKk1aVrNtlaHYsN0gL24ymqm4OpUzia1/LLlcrTj45vn9gINkRnFVx5fVZiB4laQPDbGjavFYf3bDZqF0Z0jaOFUnnnHdM3vOLFqPJssGu8b3zUuR3EvVCi81rSognCtENCczalaHVk717+vE48kYw5b1HkQipZhorpGaiq4s8FPmdRL20HX0URhL9BzPbHm44u87MritXTDGb6IYEZu3KkLYxbHQ0/nhzf9SEtXBh/JiyNnoViZBqZtWqqf0KDfr6gv4iJG1uS+oX3U1Wn8IXgZcBu4C/izQxR+mGBGZZZGjlc0grOL9370wF0Bx91Jzm4plnZk64q1cnP4EnPWUn9ZdRjGbz5pmhsCdOTBW8iaMb/EeiQyTZlaINuDvLeZ1u8inUx2zwKWSRccOGKd9Cf3/+QvFJpSiz/i6d8ilEyVtCNO13TPPNiO6DFj6FrErhPwNrspzbySalUC/tTqhl0KrWcJYay+1c3z173eSkexaRsSpFVlRGOZpnH62UQlbz0VXAzWb2YzN7Omw/rGTpImYFExNBgrVonqAdO7rLrNCuz6HZNBRXxjKruSzpnlnqQDcT3eF87Fh+5/CaNfn6037HvCYw0eUkaYvZ0LRSqI8ynsLbJc2ssWhRvIyLFmW7fpbvuHOn+/z56SuF/v7k1UanV1x1rRTSVl2ic9Cu+Si4BpcBHw/bm7KOq7JJKdRHXrt0FvJOGlWbNbKM37nTfWAgXSkkKa648QMDrb973Pl5KNunkPV3ar6vmRRDXbStFICrgd3Ae8J2G3B1lrFVNimF+ih7pVDEcZ02uXVCKST9Do2VQZITtvE7DQ3FHx8aipcpSQHlUQxF/u1aKewsv1PSamr+/Oxyi/IoQyncC/RFPvcD92YZW2WTUqiPsqOP0ibXuJVDN6wU2lVMeWVs9zu5x5u85s8v/m+XZeVRhtyiPFophTy5j06OvH9ZYSeG6AnKLp+Y5Mw8fjyYOuKcvEWctGWTtleijH0FVRA82yV/zsP73pevX3Q5Sdoi2oC3AweB64EdwEPA2ixjq2xaKfQOWeL940wc7Zo1WpFlfLv29qpWCq2c11UECaQ5y7VS6C4oydG8jMDZfDnwr7KOq7JJKfQOO3e69/VlUwxZI3WymDVaKZXR0fjxo6MzZS+6VyLvZJnFp5C2wa2KIIE0Vq+Ov+fq1dXdUyRTWCkAPxW+vjqutRrbiSal0DskTWRZWpJiWLw4/vzFi4PjWWzrzYqhWSGkUUbkTjNp0UdJyrWvL9vvUhXNikEKoT7aUQrbw9evxrSvtBrbiSalUC9lxp0nRelkXTnEkTbh5o38yUrz77JhQ3UmrjjSrtlqF7b2EMwNSjEf5W3ASQQ1lu8B9gIfC/tPJQhpfTB8PSUyZhOwH3gAuDTtHlIK9VF29FFRhdBqAq2iXkIaeX+XOpRClt+z03msRGdppRQy1VMws7cCt7r702b2H0Pz0R+4+7dajDFgkbs/Y2YDwNcJ0mX8GvCUu19tZh8OlcLvmtko8DngQuB0goys53qLOs2qp1AfZddTSKoTkIWitQqqqAOQ93epQoa+vvixZkE21Ky/dSdrY4jO0nY9BeA/hQrhF4FLCSKQPtlqQKiQngk/DoTNCRzVO8L+HcCbw/eXAze4+/Pu/hDBiuHCjPKJDpNUrD5LEfs42qk3kDR28eLW/UND8ceT+rOQFFp78GB5aaejdaXnzQs+R0lSJo3+iy7Kdp9O1sYQ3UNWpdB4rngjsM3dvwjMTxtkZv1mdjfwBHCbu38TOM3dDwOEry8PTz8DeCQy/FDYJ7qQsuPv4wq/xLF48fRaxKtXwy23xE+4P/pR/DUa/ddcE9Q2jjIwEPTnITpJt3q6dw+Uw7vfXVwxNNeVPn48+NysGFqxf3+28zpZG0N0EUl2pWgDbgb+EvguwSa2BcA9WcaG408mcE6/Avh+07Hvha9/Abwj0n8t8G9irrUe2APsWbFiRXlGNpGLLLbwPI7orPsUYOqaQ0Mzo4eK5ORpx1leNGqq4cwu20+Sds2sqb7z+hSU7G52QQlpLgYJfAHnhJ+XAa/PMjZyjY8AHyRwIi+LXOeB8P0mYFPk/C8Br2l1TTma6yMtcqdMh2veVmae/4ULp49buHD68VZRU2kTcJbfMc/vVMZvWWRSL5LUT9RLK6WQ1dF8NnDI3Z83s4uAVwKfcffvtxizFHjR3b9vZguBLwP/FfgV4EmfcjSf6u4fMrOVwF8z5WjeHSohOZq7kLQC8mU6XPPScKgWceJu3Bik62jliF24EJ59dupere6Rdnzx4ngz16JFQWnPZrJ8p3Z+ywzTwQyWLIEnn5zZPzQER48Wl0VURxmO5s8Dx83sJwnMOmcRTOCtWAZ81czuBf6FwKdwM0HG1UvM7EHgkvAz7r4XuBHYB9wKXNlKIfQ6ZdfETXNO5iWtgHy7BW7aoagtvNlen8Rzz029b9e3kub3mA3EKYRW/aLLSVpCRBtwV/j6IeC3wvffyjK2ytar5qOy9wCUUde3mTQzRt78OmWZjtrZLZxnA13W3zbtGnllrNp8VISyryeqhxJ8Ct8kSIp3H3BW2HdflrFVtl5VCmUnLKuisHraRNBpn0IZu4WLTp6tksGl+QyqUAp5nPbRVjTtRFU7w0V1tFIKWc1H7wZeA2xx94fM7CxgZ3nrFRGlbNNLmqmnCspOrZ3GiROBr6Kq60dZuHD651WrYPny4HsuXx58blBW2GuDDRvS++NSijdMhxCYtk4/ffrx1ath165iMl1zDcxvClCfP7/4dxQ1k6QtZkPr1ZVC2U9eaQnSilC2yaCd3EdJ98z7O2YJ12z+zbKsiFqFaxbJHpqlpnP0nkNDM6ODyk5joZDU2QVFVwpmdmP4+m0zuzfSvh06kMUsoPnJNq2/DqpYtZx/fr5+9/Rrnjgx3Um/efNUJFKDZ5+FdeumggQgWMXErWbOPTf+Pkn9AFu3BhFe7sHr1q0zzxkfn7rn4sXw4oszZdy8OfkeeYner1MrNlENLUNSzWyZux82s+G44+5eMKlBOfRqSGpa7pq6r9cYm0SWybWZl7wkPgQzK3H3TAubzXp+q/FJv22UwcFk01leGWF62Gx/f5DmI04xNKji31/MbgqHpPpUOoqDoQL4HvB0pIkKSCvxWPf1qqCKEMy8vpSs+Zei47P8hq2eyvPKWCTNRSf+/csOoRY1kmRXijbgCuBx4ABBKc6HgP+bZWyVrVd9CmUXVm/X7h1H2T6FdvwJ0RYtglMk6ipqr09q0fFxv22e3yWvjEW+U9khzp2+vigfSghJfRBYkuXcTrZeVgplpw1oNekXuV8RpVC0nnJRxVBkf0ZUKSQ5npvHR79XFkXSfL88MhZVxlU6gquo+SyqpQylcCswmOXcTrZeVQqd/iMrEu2Ud3JqpyxlkdYgS6RO9NxW10wbX+R3yStjFXtO2qWOms+iPVophay5j14FfJpgE9vzEdPTb5dmxyqAHM3lUMRpnGXMxERgS3/44eA7xdnJG7mQysx9FJUhD2U4z/PmMsrLypWwb9/M/tFR2Lu3/esXoeyCS6J6ysh99JfAV4B/Bu6MNFEBzRuP0vq7kYmJwHF78GAwoSY5TosW5elWmsNT0/rz8sAD+fo7QdxmucHBoF/MPrIqhWPu/jvu/ml339FolUo2h4kmXMvS3y5VVCCLi9+Po2hRnlaMjpZ/zawkrSharTTyRO7UsTs9jU7vXhfVklUpfNXM1pvZMjM7tdEqlWwOk2QiqiqmvIo0BVlXAGVPZu2YUZLMR2WbtqJMTASV2BorqrTKbGVXvCsLbV7rHbIqhX9HUATnn5gyHfWeMb+HaH763Lgx+Wl0fByuu276k95117X3h511kmpnNRKl4d5sVgh5nsLf9758/WVw1VUzdxu/+GLQH0fSXop2alwLMY0kD/RsaL0afVQ07LBBltj5vr72whLTZMwaJZQlW2iWlhRqmzd+Pk8kUJHfpd3zy5CxCpT7aHZB0ZBU4EOR929tOvaHrcZ2okkpxJM1dfKiRdXJmJSEr10lktaim/zqiJ/vhFLoNrR5bfbRSimkmY/WRt5vajr2hpIWK6KJdh2/We35VVb3yuP/6MtqxMzACy9MmV7qqP6W99+uCid/p0lKClhmwj3ROdL+HC3hfdzn6QfNzjSzr5rZ/Wa218yuCvs/amaPmtndYVsTGbPJzPab2QNmdmmub9JDzLX89MHCszwaZSDryPmU99+uF/6t6yy9KiogaQkRrDCCMpzN7+M+x4xdBrw6fP8S4P8Ao8BHgQ/GnD8K3AMsIKgB/V2gv9U9etV85N6ejTarqSVaG6Ds3EdZahNU2RrfqQ6zRt7fcrbb45XmYvZBC/PRvBSd8bNm9kOCVcHC8D3h55NSlM1hoJFl9Wkzux84o8WQy4Eb3P154CEz2w9cCNyeIqMoyBVXBK+NjWYNE8DBg1PRLEUjkMp++i9CQ/bGruoVK4INVVWHS46P57tH3vO7jS1bpv//AW1em9UkaYsyGzACPAy8lGClcAC4F7gOOCU8578D74iMuRb49VbX7dWVws6dM5+0zbI/QaY9RTdHrBR50kt7Sk/Kp9TJlcJcptOrj9m+2plr0G7uo3Yws8XAPxDUd/6CmZ0GHAUc+ANgmbu/x8z+Arjd3XeG464FbnH3zzddbz2wHmDFihUXHOy1PAnAggWBw7SZ+fPh+edn9jeTN4dPkVxLafdYsmTKtl8H3bBSqYvmlR+0LvQj5h5l5D4qeuMB4PPAhLt/AcDdH3f34+5+AvgrAhMRwCHgzMjw5cBjzdd09+3uPubuY0uXLq1S/NqIUwit+tulCofsU08VHyvaQ9FAoh0qUwpmZgQmoPvd/U8j/csip70FuC98fxOw1swWmNlZwDnAHVXJJ6aoIqHZqUqCUhuKBhLtUOVKYRXwTuB1TeGnf2Rm3zaze4HXAh8AcPe9wI3APoL6DVe6e41pvnoTs6AucLR8YycTmvX1VZtLSMyO8quie0mLPiqMu3+d+L0Mt7QYswVQzELFNOr6QuuC76046ST48Y/j+yHZfOQe+CmqVAyzaeNXFSgaSLRDpT4FUQ9ZU0dv3x68TkzAu941PVPnu97VOnncT/xE6/66nlYHBmbXxq8qUCpr0Q5SChWQJzNnFcRV5oqjkbb6iitmRhmdODG1jyHPPRr9a9bEH0/qb4fFi6cmv09/WpMfKJW1KE5l5qO5ShUbwaL09ZW/CSspB1I7uZFuSTASJvW3w3PPVVdrQoi5hlYKJVN1OGDDvLN+ffsrkCrt+p2MgKmz6pgQvYaUQsl0ajIsQ9FUucGrkz6FuquOCdFLSCmUTCcnw26OO0/b+1DmRK6qY0KUh5RCyXTSwdrNcedpETDnnVf82g2F0t8PGzYUD6sVQsyk8txHVTI2NuZ79nRXqeiknD9DQ3D0aLZrZLH1t8plk8dX4F5N7qM05s0r5gvImv9JCJFMbbmP5iJJSeDKSg5XRdx5HQXrizqHf+mXypVDCDEdhaTOMqoIvWyYX7ZvDybr/v7ATl+lWaa/v5hi+NrXShdFCBFBK4Ua2LgxMJ/E5SGqi61b4dixwPRz7Fj1dvqizmGFnwpRLVoplIxZsn0eAgXQyDsE5eQhqoO075lG8+okKwo/FaJatFIoQKs0FklO1kZ/I99QM0n9nSLv6uWnfzpffxzR1cnpp2cbo/BTIapFK4WctJvGIumpuE6zSJHVy/335+tPY2Cg9fFO+DmEEApJzc3ISKAImhkeDhKPpYVqJoVi9vcHT83Qfrhn3pDULDLluUeR/1JlX08IkYxCUkskqSR01lLRF12Ur79KFi4MXrth9ZLkK5APQYjOIqWQk3Ynr7vvztdfJc89F7wW+U6LF+frT6MbFJMQotoazWea2VfN7H4z22tmV4X9p5rZbWb2YPh6SmTMJjPbb2YPmNmlVcnWDu1OXlVvbitCkvO2lVP3k58MzE5R5s0L+oswPJyvXwhRDVWuFI4B/97dfxr4BeBKMxsFPgzsdvdzgN3hZ8Jja4GVwBuArWbWdcaD2TB5nXxyvvO3bg1yCOXJKTQ+DtdfPz230fXXF99l3cmcUUKIZCpTCu5+2N3vCt8/DdwPnAFcDuwIT9sBvDl8fzlwg7s/7+4PAfuBC6uSryizYfL6/vfzjymyea3M6l6dLMojhEimIz4FMxsBXgV8EzjN3Q9DoDiAl4ennQE8Ehl2KOzrKpImqe3bg30LohidLMojhEim8mnMzBYDnwfe7+4/bHVqTN+MYEQzW29me8xsz5EjR8oSMzNJUUbHj3cmdLKuus9V08k6FEKIZCpVCmY2QKAQJtz9C2H342a2LDy+DHgi7D8EnBkZvhx4rPma7r7d3cfcfWzp0qXVCZ9A3SGSZZbj7CbSivIIITpDldFHBlwL3O/ufxo5dBOwLny/DvhipH+tmS0ws7OAc4A7qpKvKN0SIllm3eeitEr3kZfxcVi3brqze9268tKDCyGyUeVKYRXwTuB1ZnZ32NYAVwOXmNmDwCXhZ9x9L3AjsA+4FbjS3btkCu5OkuztixZlG59n53MzjXQfBw+Ws3qZmAjCWRtK9/jx4HMvrYaEmA0ozUVO2plI3bOlc8h6j0ZqjWYuvhh2704fv2gRPPNMtns1k5buIy8nnRRfUW3BAvjxj/NfTwiRjNJc9CCt7O1f+Uq2a/zoR8XvX3a0UFKJTZXeFKKzSCnMMrKU4+zE4k/RQkL0JkqdPcuoohxnEbZsmZ5CHBQtJEQvoJVCD9KO3yMr4+PBaiWa5qLV6iWN1avz9QshqkGO5pzU7Wgus57C0BAcPZrt3E7Q7CBfvRp27apPHiF6FTma5xhZk/O97W3VypGXc8+dvk/h3HPrlUeIuYiUQg8Stzs4js98pnpZstIoCRrdp7BtW3qtaCFEuUgp9CDN9v4k2glJLZvt2/P1CyGqQUqhR4mmtZ4NqPKaEN2BlEKHSUpBEe0vOxInabXQiSglIcTsQkqhQzSqoWWZoPfvjz8nqV8IIcpCSqFDvOxlwWtSrqFof1LNhqT+NJLCWLspGnk2lDkVYi4gpdAhVEGsNaqnIER3IKUQw8aNMG9eYNKZN6+csMhTT23/Gr1M2TukhRDFUO6jJhrx8g0a8fKQrZh9N7J6dXwq7W5LITE+LiUgRN1opdBEWrz80FCx6z71VLFxZbBr10wFoBQSQog4pBSaSIuXL5oaou6U0rt2BY7lRpNCEELEUWWN5uvM7Akzuy/S91Eze7SpPGfj2CYz229mD5jZpVXJBa1rCzdy7zTT6L/llvz3GxiYcphmCUmdPz/+nKR+IYQoiypXCtcDb4jp/zN3Pz9stwCY2SiwFlgZjtlqZgnTc3uk1RZevz5+XKO/SBRRdMLPEh563XUzlYdZ0C+EEFVSmVJw938EslrSLwducPfn3f0hYD9wYRVybd48vTAMBJ83bw7eb90KGzZMz9a5YcOUkznJDNTfH0zccSuNF16Yun6WePzxcfjsZ6dH4nz2s3LCCiGqpw6fwm+a2b2heemUsO8M4JHIOYfCvtLJUlt41SpYvjyYkJcvDz43SIqn37EjyDOUlGuocf2s8fjR3EUHDkghCCE6Q6eVwjbgbOB84DDwJ2F/nKU91tBiZuvNbI+Z7Tly5EhuAZJSSjf608xLcfH069YFK4G+vqDF0VhhZI3Hb+X3yEK744UQcxR3r6wBI8B9aceATcCmyLEvAa9Ju/4FF1zgeenri8bgTLW+vuD48HD88f5+d7Pg+M6dU9fbudN9cDB+TKMNDk4fk0bcNfNcY+dO9/nzp4+fPz+fDEKI3gXY4wnzaqXlOM1sBLjZ3V8Rfl7m7ofD9x8Aft7d15rZSuCvCfwIpwO7gXPcvWXi5CLlONNKXfb1pecEGhycerofGYnPSdTfH5h+VqwITEN5zD9J1xweDkxJaSxZAk8+ObO/28pvCiHqoZZynGb2OeB24DwzO2Rm7wX+yMy+bWb3Aq8FPgDg7nuBG4F9wK3AlWkKoShpIadZ9hNEHdNJPoqGf6GIPyCL36MVcQqh0V9m6g4hRO9RZfTR2919mbsPuPtyd7/W3d/p7j/j7q9098saq4bw/C3ufra7n+fuf1+VXGkhp2vWxB9vpjFBJymRdjarJeVJKit/kkpdCiGSmHM7mtNCTrNuTmtM+klKJKtyqYKsqThU6lII0cycUwoQKIBjxwLfwbFj0xPdZTHRRENIk5RIkZ3PDZLyJGXNn3TNNcEu6jRU6lII0cycVAqtSNuc1hxC2q79P48MWU1S4+Pw6U9Phb0mkeRfEULMXaQUmkjbnNbsOC4ygaftISij4Ex081tSiuyLLsp+PSHE3EBKoYm8xV7yTuBpm+OKyJCGaj4LIbIipRBDnhQTeSfwtNxLVVCFiUsI0ZtIKRSg2fwD2ZVI3Ka05v4sq4k8VBE2K4ToTaQUctLuhJ22eQ7KX02U4aMQQswNpBRy0u6EnVbZDco395TtoxBC9C7z6hZgttHuhD08nJzXqMGKFfHntGPuGR+XEhBCpKOVQk7atc9nMeXI3COEqAsphZy0O2FnMeXI3COEqItKU2dXTZHU2WUwMRH4EB5+uFhqbCGEqJNaUmf3Mu2WysxSFU2V04QQdSClUAJ5JvAsIa1l71MQQoisyHzUJo0JPBqmGq3M1kyWqmrtVl4TQohWtDIfSSm0Sd4JPKncp1lgjsp6jhBCFKWucpzXmdkTZnZfpO9UM7vNzB4MX0+JHNtkZvvN7AEzu7Qqucom776FLCGtSkshhKiLKn0K1wNvaOr7MLDb3c8BdoefMbNRYC2wMhyz1cxmRbb/vBO49ikIIbqZKms0/yPQXCvscmBH+H4H8OZI/w3u/ry7PwTsBy6sSrYyyTuBa5+CEKKb6XSai9Pc/TCAux82s5eH/WcA/xw571DY1/U0Juo8+xaypJxQWgohRB10S+6juKKRsR5wM1sPrAdY0SVGdk3gQoheodP7FB43s2UA4esTYf8h4MzIecuBx+Iu4O7b3X3M3ceWLl1aqbBCCDHX6LRSuAlYF75fB3wx0r/WzBaY2VnAOcAdHZZNCCHmPJWZj8zsc8BFwBIzOwR8BLgauNHM3gs8DLwVwN33mtmNwD7gGHCluydUHhBCCFEVlSkFd397wqHVCedvARR0KYQQNaLcR0IIISaZ1WkuzOwIEJNkIjNLgKMliVMVkrEcJGM5SMZyqFvGYXePjdSZ1UqhXcxsT1L+j25BMpaDZCwHyVgO3SyjzEdCCCEmkVIQQggxyVxXCtvrFiADkrEcJGM5SMZy6FoZ57RPQQghxHTm+kpBCCFEhDmnFOKK/3QbZnammX3VzO43s71mdlXdMjVjZieZ2R1mdk8o48fqlikJM+s3s2+Z2c11y5KEmR0ws2+b2d1mVm85wQTM7GQz+xsz+074f/M1dcsUxczOC3+/Rvuhmb2/brmaMbMPhH8z95nZ58zspLplijLnzEdm9svAM8Bn3P0VdcsTR5gscJm732VmLwHuBN7s7vtqFm0SMzNgkbs/Y2YDwNeBq9z9n1OGdhwz+x1gDHipu7+pbnniMLMDwJi7d218vZntAP63u3/KzOYDg+7+/ZrFiiUs0vUo8PPu3s5eplIxszMI/lZG3f25ML3PLe5+fb2STTHnVgoJxX+6Cnc/7O53he+fBu6ny+pLeMAz4ceBsHXdE4aZLQfeCHyqbllmM2b2UuCXgWsB3P2FblUIIauB73aTQogwD1hoZvOAQRIyQtfFnFMKsw0zGwFeBXyzZlFmEJpl7iZIgX6bu3edjMAngA8BJ2qWIw0Hvmxmd4Y1Q7qNnwCOAJ8OTXGfMrNFdQvVgrXA5+oWohl3fxT4OEFC0MPAD9z9y/VKNR0phS7GzBYDnwfe7+4/rFueZtz9uLufT1D/4kIz6ypznJm9CXjC3e+sW5YMrHL3VwO/ClwZmjm7iXnAq4Ft7v4q4EeENda7jdC0dRnwP+uWpRkzO4Wg/PBZwOnAIjN7R71STUdKoUsJ7fSfBybc/Qt1y9OK0IzwNeAN9Uoyg1XAZaG9/gbgdWa2s16R4nH3x8LXJ4C/pftqlB8CDkVWg39DoCS6kV8F7nL3x+sWJIaLgYfc/Yi7vwh8AfjXNcs0DSmFLiR04l4L3O/uf1q3PHGY2VIzOzl8v5DgP/t3ahWqCXff5O7L3X2EwJzwFXfvqqcyADNbFAYUEJpkXg90VXScu/8/4BEzOy/sWk1Q/6QbeTtdaDoKeRj4BTMbDP/OVxP4DLuGOacUwuI/twPnmdmhsOBPt7EKeCfBk20jvG5N3UI1sQz4qpndC/wLgU+ha0M+u5zTgK+b2T0EFQf/zt1vrVmmOH4LmAj/zc8H/rBecWZiZoPAJQRP4F1HuNL6G+Au4NsEc3BX7W6ecyGpQgghkplzKwUhhBDJSCkIIYSYREpBCCHEJFIKQgghJpFSEEIIMYmUgpgzmNnxpiyahXfkmtk/lSlb07XHzOzPq7q+EK1QSKqYM5jZM+6+uG45hOhmtFIQc56wlsHHzOyusKbBT4X9S83strD/L83soJktCY89E75eZGZfi9QZmAh3qmJmF5jZP4RJ7r4UpkRvvvdbw7z695jZP0aueXP4/pbIyuYHZrYuTET4x2b2L2Z2r5ld0anfSvQ+UgpiLrGwyXz0byPHjoYJ6bYBHwz7PkKQGuPVBPmIViRc91XA+4FRgmyiq8LcVf8N+HV3vwC4DtgSM/b3gEvd/WcJkrhNw93XhEkH3wscBP5X+P4H7v5zwM8Bv2FmZ2X8DYRoyby6BRCigzwXTrBxNNIi3An8Wvj+F4G3ALj7rWb2vYSxd7j7IYAwlfgI8H3gFcBt4cKhnyBVcjPfAK4Pi63EpmYIVyefBd7m7j8ws9cDrzSzXw9PeRlwDvBQgnxCZEZKQYiA58PX40z9XVjOsdHxBux195YlK939fWb28wSFgO42s/Ojx8MKYjcAv+/ujSR5BvyWu38po3xCZEbmIyGS+TrwNoDw6fyUHGMfAJZaWMfYzAbMbGXzSWZ2trt/091/DzgKnNl0ytXAve5+Q6TvS8CG0ESFmZ3b5QVvxCxCKwUxl1gYmnca3OrurcJSPwZ8LvQ9/AOB+efpLDdy9xdC886fm9nLCP7WPgHsbTr1j83sHIKn/93APcCvRI5/ENgbkfv3CEqLjgB3hU7tI8Cbs8glRBoKSRUiATNbABx392PhE/+2Fj4JIXoCrRSESGYFcKOZ9QEvAL9RszxCVI5WCkIIISaRo1kIIcQkUgpCCCEmkVIQQggxiZSCEEKISaQUhBBCTCKlIIQQYpL/D/ZoRF15citXAAAAAElFTkSuQmCC\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,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"#### Creating train and test dataset\n",
"\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": {
"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": [
"<h2 id=\"polynomial_regression\">Polynomial regression</h2>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"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",
"$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",
"**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": 7,
"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.2 , 10.24],\n",
" [ 1. , 3.2 , 10.24]])"
]
},
"execution_count": 7,
"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",
"$\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",
"so we can use **LinearRegression()** function to solve it:\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Coefficients: [[ 0. 49.05014012 -1.42487315]]\n",
"Intercept: [110.22349688]\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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\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,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h2 id=\"evaluation\">Evaluation</h2>\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean absolute error: 22.22\n",
"Residual sum of squares (MSE): 879.91\n",
"R2-score: 0.72\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?\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Coefficients: [[ 0. 49.05014012 -1.42487315]]\n",
"Intercept: [110.22349688]\n"
]
},
{
"ename": "IndexError",
"evalue": "index 3 is out of bounds for axis 0 with size 3",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-11-200ac8bc68c1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mENGINESIZE\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mCO2EMISSIONS\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'blue'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0mXX\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m10.0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0myy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclf3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mintercept_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m \u001b[0mclf3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoef_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mXX\u001b[0m\u001b[0;34m+\u001b[0m \u001b[0mclf3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoef_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpower\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mclf3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoef_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpower\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 22\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myy\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'-r'\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Engine size\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mIndexError\u001b[0m: index 3 is out of bounds for axis 0 with size 3"
]
},
{
"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",
"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",
"poly3 = PolynomialFeatures(degree=3)\n",
"train_x_poly3 = poly.fit_transform(train_x)\n",
"train_x_poly3\n",
"\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",
"\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",
"\n",
"test_x_poly3 = poly3.fit_transform(test_x)\n",
"test_y3 = clf3.predict(test_x_poly3)\n",
"\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",
"-->\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"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=\"https://www.ibm.com/analytics/spss-statistics-software\">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://www.ibm.com/cloud/watson-studio\">Watson Studio</a>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Thank you for completing this lab!\n",
"\n",
"## Author\n",
"\n",
"Saeed Aghabozorgi\n",
"\n",
"### Other Contributors\n",
"\n",
"<a href=\"https://www.linkedin.com/in/joseph-s-50398b136/\" target=\"_blank\">Joseph Santarcangelo</a>\n",
"\n",
"## Change Log\n",
"\n",
"| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n",
"| ----------------- | ------- | ---------- | ---------------------------------- |\n",
"| 2020-08-27 | 2.0 | Lavanya | Moved lab to course repo in GitLab |\n",
"| | | | |\n",
"| | | | |\n",
"\n",
"## <h3 align=\"center\"> © IBM Corporation 2020. All rights reserved. <h3/>\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.6.11"
},
"widgets": {
"state": {},
"version": "1.1.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment