Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save azmek/dee2b91f9d9bb053641a795eab22dd18 to your computer and use it in GitHub Desktop.
Save azmek/dee2b91f9d9bb053641a795eab22dd18 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": null,
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [],
"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?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": 2,
"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": 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.\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>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:\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
},
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEHCAYAAABBW1qbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAwDElEQVR4nO2df5xddXnn389MJiGTqMAksoGQGUqBdmItypTWTX+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": 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": [
"<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": 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. , 9. ],\n",
" [ 1. , 3.2 , 10.24],\n",
" [ 1. , 3.2 , 10.24]])"
]
},
"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",
"The equation and the sample example is displayed below. \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",
"\\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"
]
},
{
"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": 7,
"metadata": {
"button": false,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Coefficients: [[ 0. 48.38385112 -1.13347415]]\n",
"Intercept: [109.27920266]\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": 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,
"new_sheet": false,
"run_control": {
"read_only": false
}
},
"source": [
"<h2 id=\"evaluation\">Evaluation</h2>\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean absolute error: 21.90\n",
"Residual sum of squares (MSE): 800.86\n",
"R2-score: 0.76\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": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Coefficients: [[ 0. 25.3037285 5.35426125 -0.54992561]]\n",
"Intercept: [133.37891005]\n",
"Mean absolute error: 21.74\n",
"Residual sum of squares (MSE): 795.66\n",
"R2-score: 0.76\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",
"\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_y,test_y3_ ) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<details><summary>Click here for the solution</summary>\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.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_y,test_y3_ ) )\n",
"\n",
"```\n",
"\n",
"</details>\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",
"| 2021-01-11 | 2.3 | Lakshmi | Changed R2-score calculation in polynomial regression |\n",
"| 2020-11-04 | 2.2 | Lakshmi | Made changes in markdown of equations |\n",
"| 2020-11-03 | 2.1 | Lakshmi | Made changes in URL |\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.12"
},
"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