A HANDS-ON GUIDE TO REGRESSION WITH FAST.AI
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "Regression_Using_Fastai.ipynb", | |
"provenance": [], | |
"collapsed_sections": [ | |
"Mv5lcQQ9egIE", | |
"ZTmAW33KefrK" | |
] | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"accelerator": "GPU" | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "ABvnJMmltKyV", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#Regression With Fastai\n", | |
"\n", | |
"---\n", | |
"\n", | |
"**Getting Started With Regression**\n", | |
"\n", | |
"Regression With Fast.ai in 7 simple steps:\n", | |
"\n", | |
"* Importing the libraries\n", | |
"* Creating a TabularList\n", | |
"* Initialising Neural Network\n", | |
"* Training the model\n", | |
"* Evaluating the model\n", | |
"* A simple analysis on the predictions of the validation set\n", | |
"* Predicting using the network\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "Mv5lcQQ9egIE" | |
}, | |
"source": [ | |
"##Importing All Major Libraries" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "NIlD79e-egIB", | |
"colab": {} | |
}, | |
"source": [ | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"from fastai.tabular import *" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "gtXEtYoIegH_" | |
}, | |
"source": [ | |
"**The fastai.tabular package includes all the modules that are necessary for processing tabular data.**" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "ZTmAW33KefrK" | |
}, | |
"source": [ | |
"## Importing The Data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "YlPjV7wHefrG", | |
"colab": {} | |
}, | |
"source": [ | |
"#Reading the datasets from excel sheet\n", | |
"training_set = pd.read_excel(\"Data_Train.xlsx\")\n", | |
"test_set = pd.read_excel(\"Data_Test.xlsx\")\n" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "Vxa9jxUhefJr" | |
}, | |
"source": [ | |
"## Understanding The Data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "d08a1373-bdbe-4b63-d7b1-05f207b68dcc", | |
"id": "yZkjxvbXefJm", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 204 | |
} | |
}, | |
"source": [ | |
"training_set.head(5)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"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>Name</th>\n", | |
" <th>Location</th>\n", | |
" <th>Year</th>\n", | |
" <th>Kilometers_Driven</th>\n", | |
" <th>Fuel_Type</th>\n", | |
" <th>Transmission</th>\n", | |
" <th>Owner_Type</th>\n", | |
" <th>Mileage</th>\n", | |
" <th>Engine</th>\n", | |
" <th>Power</th>\n", | |
" <th>Seats</th>\n", | |
" <th>New_Price</th>\n", | |
" <th>Price</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>Maruti Wagon R LXI CNG</td>\n", | |
" <td>Mumbai</td>\n", | |
" <td>2010</td>\n", | |
" <td>72000</td>\n", | |
" <td>CNG</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>26.6 km/kg</td>\n", | |
" <td>998 CC</td>\n", | |
" <td>58.16 bhp</td>\n", | |
" <td>5.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1.75</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>Hyundai Creta 1.6 CRDi SX Option</td>\n", | |
" <td>Pune</td>\n", | |
" <td>2015</td>\n", | |
" <td>41000</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>19.67 kmpl</td>\n", | |
" <td>1582 CC</td>\n", | |
" <td>126.2 bhp</td>\n", | |
" <td>5.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>12.50</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>Honda Jazz V</td>\n", | |
" <td>Chennai</td>\n", | |
" <td>2011</td>\n", | |
" <td>46000</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>18.2 kmpl</td>\n", | |
" <td>1199 CC</td>\n", | |
" <td>88.7 bhp</td>\n", | |
" <td>5.0</td>\n", | |
" <td>8.61 Lakh</td>\n", | |
" <td>4.50</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>Maruti Ertiga VDI</td>\n", | |
" <td>Chennai</td>\n", | |
" <td>2012</td>\n", | |
" <td>87000</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>20.77 kmpl</td>\n", | |
" <td>1248 CC</td>\n", | |
" <td>88.76 bhp</td>\n", | |
" <td>7.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>6.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>Audi A4 New 2.0 TDI Multitronic</td>\n", | |
" <td>Coimbatore</td>\n", | |
" <td>2013</td>\n", | |
" <td>40670</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Automatic</td>\n", | |
" <td>Second</td>\n", | |
" <td>15.2 kmpl</td>\n", | |
" <td>1968 CC</td>\n", | |
" <td>140.8 bhp</td>\n", | |
" <td>5.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>17.74</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Name Location Year ... Seats New_Price Price\n", | |
"0 Maruti Wagon R LXI CNG Mumbai 2010 ... 5.0 NaN 1.75\n", | |
"1 Hyundai Creta 1.6 CRDi SX Option Pune 2015 ... 5.0 NaN 12.50\n", | |
"2 Honda Jazz V Chennai 2011 ... 5.0 8.61 Lakh 4.50\n", | |
"3 Maruti Ertiga VDI Chennai 2012 ... 7.0 NaN 6.00\n", | |
"4 Audi A4 New 2.0 TDI Multitronic Coimbatore 2013 ... 5.0 NaN 17.74\n", | |
"\n", | |
"[5 rows x 13 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 4 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "c812c285-1148-4d4f-a3e5-8de5f9fbca50", | |
"id": "jyevDx0mefJa", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 1000 | |
} | |
}, | |
"source": [ | |
"\n", | |
"# Checking the number of rows\n", | |
"print(\"\\n\\nNumber of observations in the datasets :\\n\",'#' * 40)\n", | |
"\n", | |
"print(\"\\nTraining Set : \",len(training_set))\n", | |
"print(\"Test Set : \",len(test_set))\n", | |
"\n", | |
"# checking the number of features in the Datasets\n", | |
"print(\"\\n\\nNumber of features in the datasets :\\n\",'#' * 40)\n", | |
"\n", | |
"print(\"\\nTraining Set : \",len(training_set.columns))\n", | |
"print(\"Test Set : \",len(test_set.columns))\n", | |
"\n", | |
"# checking the features in the Datasets\n", | |
"print(\"\\n\\nFeatures in the datasets :\\n\",'#' * 40)\n", | |
"\n", | |
"print(\"\\nTraining Set : \", list(training_set.columns))\n", | |
"print(\"Test Set : \",list(test_set.columns))\n", | |
"\n", | |
"# Checking the data types of features\n", | |
"print(\"\\n\\nDatatypes of features in the datasets :\\n\",'#' * 40)\n", | |
"\n", | |
"print(\"\\nTraining Set : \", training_set.dtypes)\n", | |
"print(\"\\nTest Set : \",test_set.dtypes)\n", | |
"\n", | |
"# checking for NaNs or empty cells\n", | |
"print(\"\\n\\nEmpty cells or Nans in the datasets :\\n\",'#' * 40)\n", | |
"\n", | |
"print(\"\\nTraining Set : \",training_set.isnull().values.any())\n", | |
"print(\"\\nTest Set : \",test_set.isnull().values.any())\n", | |
"\n", | |
"# checking for NaNs or empty cells by column\n", | |
"print(\"\\n\\nNumber of empty cells or Nans in the datasets :\\n\",'#' * 40)\n", | |
"\n", | |
"print(\"\\nTraining Set : \",\"\\n\", training_set.isnull().sum())\n", | |
"print(\"\\nTest Set : \",test_set.isnull().sum())\n", | |
"\n", | |
"#Displaying dataset information\n", | |
"print(\"\\n\\nInfo:\\n\",'#' * 40)\n", | |
"\n", | |
"training_set.info()\n" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"\n", | |
"Number of observations in the datasets :\n", | |
" ########################################\n", | |
"\n", | |
"Training Set : 6019\n", | |
"Test Set : 1234\n", | |
"\n", | |
"\n", | |
"Number of features in the datasets :\n", | |
" ########################################\n", | |
"\n", | |
"Training Set : 13\n", | |
"Test Set : 12\n", | |
"\n", | |
"\n", | |
"Features in the datasets :\n", | |
" ########################################\n", | |
"\n", | |
"Training Set : ['Name', 'Location', 'Year', 'Kilometers_Driven', 'Fuel_Type', 'Transmission', 'Owner_Type', 'Mileage', 'Engine', 'Power', 'Seats', 'New_Price', 'Price']\n", | |
"Test Set : ['Name', 'Location', 'Year', 'Kilometers_Driven', 'Fuel_Type', 'Transmission', 'Owner_Type', 'Mileage', 'Engine', 'Power', 'Seats', 'New_Price']\n", | |
"\n", | |
"\n", | |
"Datatypes of features in the datasets :\n", | |
" ########################################\n", | |
"\n", | |
"Training Set : Name object\n", | |
"Location object\n", | |
"Year int64\n", | |
"Kilometers_Driven int64\n", | |
"Fuel_Type object\n", | |
"Transmission object\n", | |
"Owner_Type object\n", | |
"Mileage object\n", | |
"Engine object\n", | |
"Power object\n", | |
"Seats float64\n", | |
"New_Price object\n", | |
"Price float64\n", | |
"dtype: object\n", | |
"\n", | |
"Test Set : Name object\n", | |
"Location object\n", | |
"Year int64\n", | |
"Kilometers_Driven int64\n", | |
"Fuel_Type object\n", | |
"Transmission object\n", | |
"Owner_Type object\n", | |
"Mileage object\n", | |
"Engine object\n", | |
"Power object\n", | |
"Seats float64\n", | |
"New_Price object\n", | |
"dtype: object\n", | |
"\n", | |
"\n", | |
"Empty cells or Nans in the datasets :\n", | |
" ########################################\n", | |
"\n", | |
"Training Set : True\n", | |
"\n", | |
"Test Set : True\n", | |
"\n", | |
"\n", | |
"Number of empty cells or Nans in the datasets :\n", | |
" ########################################\n", | |
"\n", | |
"Training Set : \n", | |
" Name 0\n", | |
"Location 0\n", | |
"Year 0\n", | |
"Kilometers_Driven 0\n", | |
"Fuel_Type 0\n", | |
"Transmission 0\n", | |
"Owner_Type 0\n", | |
"Mileage 2\n", | |
"Engine 36\n", | |
"Power 36\n", | |
"Seats 42\n", | |
"New_Price 5195\n", | |
"Price 0\n", | |
"dtype: int64\n", | |
"\n", | |
"Test Set : Name 0\n", | |
"Location 0\n", | |
"Year 0\n", | |
"Kilometers_Driven 0\n", | |
"Fuel_Type 0\n", | |
"Transmission 0\n", | |
"Owner_Type 0\n", | |
"Mileage 0\n", | |
"Engine 10\n", | |
"Power 10\n", | |
"Seats 11\n", | |
"New_Price 1052\n", | |
"dtype: int64\n", | |
"\n", | |
"\n", | |
"Info:\n", | |
" ########################################\n", | |
"<class 'pandas.core.frame.DataFrame'>\n", | |
"RangeIndex: 6019 entries, 0 to 6018\n", | |
"Data columns (total 13 columns):\n", | |
"Name 6019 non-null object\n", | |
"Location 6019 non-null object\n", | |
"Year 6019 non-null int64\n", | |
"Kilometers_Driven 6019 non-null int64\n", | |
"Fuel_Type 6019 non-null object\n", | |
"Transmission 6019 non-null object\n", | |
"Owner_Type 6019 non-null object\n", | |
"Mileage 6017 non-null object\n", | |
"Engine 5983 non-null object\n", | |
"Power 5983 non-null object\n", | |
"Seats 5977 non-null float64\n", | |
"New_Price 824 non-null object\n", | |
"Price 6019 non-null float64\n", | |
"dtypes: float64(2), int64(2), object(9)\n", | |
"memory usage: 611.4+ KB\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "hpL0zhrwefJY" | |
}, | |
"source": [ | |
"### Exploring Categorical features\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "9bd796e2-e67c-4a7f-aa22-4c88eaa38a47", | |
"id": "nurG2A5HefJV", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"# Non categorical Features in The dataset\n", | |
"training_set.select_dtypes(['int','float']).columns" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"Index(['Year', 'Kilometers_Driven', 'Seats', 'Price'], dtype='object')" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "a53f69fb-d866-414a-8c8f-482c99615c6b", | |
"id": "smURtTVmefJQ", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 68 | |
} | |
}, | |
"source": [ | |
"#Categotical Features in The Dataset\n", | |
"training_set.select_dtypes('object').columns\n" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"Index(['Name', 'Location', 'Fuel_Type', 'Transmission', 'Owner_Type',\n", | |
" 'Mileage', 'Engine', 'Power', 'New_Price'],\n", | |
" dtype='object')" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 7 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "ab2cffa4-bcd6-4dbf-8fc5-3571f23e4873", | |
"id": "a7Rz9UZBefJK", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 476 | |
} | |
}, | |
"source": [ | |
"#The Unique values in each of the categorical features \n", | |
"\n", | |
"all_brands = list(training_set.Name) + list(test_set.Name)\n", | |
"\n", | |
"all_locations = list(training_set.Location) + list(test_set.Location)\n", | |
"\n", | |
"all_fuel_types = list(training_set.Fuel_Type) + list(test_set.Fuel_Type)\n", | |
"\n", | |
"all_transmissions = list(training_set.Transmission) + list(test_set.Transmission)\n", | |
"\n", | |
"all_owner_types = list(training_set.Owner_Type) + list(test_set.Owner_Type)\n", | |
"\n", | |
"\n", | |
"\n", | |
"print(\"\\nNumber Of Unique Values In Name : \\n \", len(set(all_brands)))\n", | |
"#print(\"\\nThe Unique Values In Name : \\n \", set(all_brands))\n", | |
"\n", | |
"print(\"\\nNumber Of Unique Values In Location : \\n \", len(set(all_locations)))\n", | |
"print(\"\\nThe Unique Values In Location : \\n \", set(all_locations) )\n", | |
"\n", | |
"print(\"\\nNumber Of Unique Values In Fuel_Type : \\n \", len(set(all_fuel_types)))\n", | |
"print(\"\\nThe Unique Values In Fuel_Type : \\n \", set(all_fuel_types) )\n", | |
"\n", | |
"print(\"\\nNumber Of Unique Values In Transmission : \\n \", len(set(all_transmissions)))\n", | |
"print(\"\\nThe Unique Values In Transmission : \\n \", set(all_transmissions) )\n", | |
"\n", | |
"print(\"\\nNumber Of Unique Values In Owner_Type : \\n \", len(set(all_owner_types)))\n", | |
"print(\"\\nThe Unique Values In Owner_Type : \\n \", set(all_owner_types) )" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"Number Of Unique Values In Name : \n", | |
" 2041\n", | |
"\n", | |
"Number Of Unique Values In Location : \n", | |
" 11\n", | |
"\n", | |
"The Unique Values In Location : \n", | |
" {'Hyderabad', 'Kolkata', 'Coimbatore', 'Delhi', 'Bangalore', 'Pune', 'Mumbai', 'Chennai', 'Jaipur', 'Kochi', 'Ahmedabad'}\n", | |
"\n", | |
"Number Of Unique Values In Fuel_Type : \n", | |
" 5\n", | |
"\n", | |
"The Unique Values In Fuel_Type : \n", | |
" {'Electric', 'CNG', 'LPG', 'Petrol', 'Diesel'}\n", | |
"\n", | |
"Number Of Unique Values In Transmission : \n", | |
" 2\n", | |
"\n", | |
"The Unique Values In Transmission : \n", | |
" {'Automatic', 'Manual'}\n", | |
"\n", | |
"Number Of Unique Values In Owner_Type : \n", | |
" 4\n", | |
"\n", | |
"The Unique Values In Owner_Type : \n", | |
" {'First', 'Fourth & Above', 'Second', 'Third'}\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "KzTZDzoRedSA" | |
}, | |
"source": [ | |
"## Feature Generation And Dataset Restructuring" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "ajipRklVedR9", | |
"colab": {} | |
}, | |
"source": [ | |
"#Based on the information gathered from the data, lets simplify and restructure it.\n", | |
"\n", | |
"def restructure(data):\n", | |
" \n", | |
" names = list(data.Name)\n", | |
" \n", | |
" brand = []\n", | |
" model = []\n", | |
" \n", | |
" #Splitting The Column 'Name'\n", | |
" for i in range(len(names)):\n", | |
" try:\n", | |
" brand.append(names[i].split(\" \")[0])\n", | |
" try:\n", | |
" model.append(\" \".join(names[i].split(\" \")[1:]).strip())\n", | |
" except:\n", | |
" pass\n", | |
" except:\n", | |
" print(\"ERR ! - \", names[i], \"@\" , i)\n", | |
" \n", | |
" \n", | |
" #Cleaning Mileage Column\n", | |
" mileage = list(data.Mileage)\n", | |
" \n", | |
" for i in range(len(mileage)):\n", | |
" try :\n", | |
" mileage[i] = float(mileage[i].split(\" \")[0].strip())\n", | |
" except:\n", | |
" mileage[i] = np.nan\n", | |
" \n", | |
" #Cleaning Engine Column \n", | |
" engine = list(data.Engine)\n", | |
" for i in range(len(engine)):\n", | |
" try :\n", | |
" engine[i] = int(engine[i].split(\" \")[0].strip())\n", | |
" except:\n", | |
" engine[i] = np.nan\n", | |
" \n", | |
" #Cleaning Power Columns\n", | |
" power = list(data.Power)\n", | |
" for i in range(len(power)):\n", | |
" try :\n", | |
" power[i] = float(power[i].split(\" \")[0].strip())\n", | |
" except:\n", | |
" power[i] = np.nan\n", | |
" \n", | |
" #Cleaning New_Price\n", | |
" data['New_Price'].fillna(0, inplace = True)\n", | |
" \n", | |
" newp = list(data['New_Price'])\n", | |
" \n", | |
" for i in range(len(newp)):\n", | |
" if newp[i] == 0:\n", | |
" newp[i] = float(newp[i])\n", | |
" continue\n", | |
" elif 'Cr' in newp[i]:\n", | |
" newp[i] = float(newp[i].split()[0].strip()) * 100 \n", | |
" elif 'Lakh' in newp[i]:\n", | |
" newp[i] = float(newp[i].split()[0].strip())\n", | |
" \n", | |
" \n", | |
" #Re-ordering the columns\n", | |
"\n", | |
" restructured = pd.DataFrame({'Brand': brand,\n", | |
" 'Model':model,\n", | |
" 'Location': data['Location'], \n", | |
" 'Year':data['Year'] , \n", | |
" 'Kilometers_Driven':data['Kilometers_Driven'],\n", | |
" 'Fuel_Type':data['Fuel_Type'],\n", | |
" 'Transmission':data['Transmission'],\n", | |
" 'Owner_Type':data['Owner_Type'],\n", | |
" 'Mileage':mileage,\n", | |
" 'Engine':engine,\n", | |
" 'Power':power,\n", | |
" 'Seats':data['Seats'],\n", | |
" 'New_Price':newp\n", | |
" })\n", | |
"\n", | |
" #If the dataset passed is training set include the Price column\n", | |
" if 'Price' in data.columns:\n", | |
" restructured['Price'] = data['Price']\n", | |
" return restructured\n", | |
" \n", | |
" \n", | |
" else:\n", | |
" return restructured\n", | |
" " | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "2nEwUvr7edR8" | |
}, | |
"source": [ | |
"**Summary:**\n", | |
"\n", | |
"The data is is restructured in the following ways:\n", | |
"1. The Name column in the original dataset is split in to two features, Brand and Model.\n", | |
"1. The Mileage column is cleaned to have float values.\n", | |
"1. The Engine column is cleaned to have integer values.\n", | |
"2. The Power column is cleaned to have integer values.\n", | |
"2. The New_Price column is cleaned to remove nulls and correct the units.\n", | |
"\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "Zow6LouDedR2", | |
"colab": {} | |
}, | |
"source": [ | |
"#Restructuring Training and Test sets\n", | |
"train_data = restructure(training_set)\n", | |
"test_data = restructure(test_set)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "25e9c2a4-5375-4089-b582-583fd8366905", | |
"id": "wi7gg6ljedRt", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"#the dimensions of the training set\n", | |
"train_data.shape" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(6019, 14)" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 11 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "721cc3f0-40a0-4950-a2cf-a2bff0479e23", | |
"id": "6d4vq7CbedRm", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"#the dimensions of the test set\n", | |
"test_data.shape" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(1234, 13)" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 12 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "ee486914-1185-4d2d-cefb-bf70d71f90f1", | |
"id": "MTj9MSHDedRd", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 204 | |
} | |
}, | |
"source": [ | |
"#Top 5 rows of the training set\n", | |
"train_data.head(5)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"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>Brand</th>\n", | |
" <th>Model</th>\n", | |
" <th>Location</th>\n", | |
" <th>Year</th>\n", | |
" <th>Kilometers_Driven</th>\n", | |
" <th>Fuel_Type</th>\n", | |
" <th>Transmission</th>\n", | |
" <th>Owner_Type</th>\n", | |
" <th>Mileage</th>\n", | |
" <th>Engine</th>\n", | |
" <th>Power</th>\n", | |
" <th>Seats</th>\n", | |
" <th>New_Price</th>\n", | |
" <th>Price</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>Maruti</td>\n", | |
" <td>Wagon R LXI CNG</td>\n", | |
" <td>Mumbai</td>\n", | |
" <td>2010</td>\n", | |
" <td>72000</td>\n", | |
" <td>CNG</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>26.60</td>\n", | |
" <td>998.0</td>\n", | |
" <td>58.16</td>\n", | |
" <td>5.0</td>\n", | |
" <td>0.00</td>\n", | |
" <td>1.75</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>Hyundai</td>\n", | |
" <td>Creta 1.6 CRDi SX Option</td>\n", | |
" <td>Pune</td>\n", | |
" <td>2015</td>\n", | |
" <td>41000</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>19.67</td>\n", | |
" <td>1582.0</td>\n", | |
" <td>126.20</td>\n", | |
" <td>5.0</td>\n", | |
" <td>0.00</td>\n", | |
" <td>12.50</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>Honda</td>\n", | |
" <td>Jazz V</td>\n", | |
" <td>Chennai</td>\n", | |
" <td>2011</td>\n", | |
" <td>46000</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>18.20</td>\n", | |
" <td>1199.0</td>\n", | |
" <td>88.70</td>\n", | |
" <td>5.0</td>\n", | |
" <td>8.61</td>\n", | |
" <td>4.50</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>Maruti</td>\n", | |
" <td>Ertiga VDI</td>\n", | |
" <td>Chennai</td>\n", | |
" <td>2012</td>\n", | |
" <td>87000</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>20.77</td>\n", | |
" <td>1248.0</td>\n", | |
" <td>88.76</td>\n", | |
" <td>7.0</td>\n", | |
" <td>0.00</td>\n", | |
" <td>6.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>Audi</td>\n", | |
" <td>A4 New 2.0 TDI Multitronic</td>\n", | |
" <td>Coimbatore</td>\n", | |
" <td>2013</td>\n", | |
" <td>40670</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Automatic</td>\n", | |
" <td>Second</td>\n", | |
" <td>15.20</td>\n", | |
" <td>1968.0</td>\n", | |
" <td>140.80</td>\n", | |
" <td>5.0</td>\n", | |
" <td>0.00</td>\n", | |
" <td>17.74</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Brand Model Location ... Seats New_Price Price\n", | |
"0 Maruti Wagon R LXI CNG Mumbai ... 5.0 0.00 1.75\n", | |
"1 Hyundai Creta 1.6 CRDi SX Option Pune ... 5.0 0.00 12.50\n", | |
"2 Honda Jazz V Chennai ... 5.0 8.61 4.50\n", | |
"3 Maruti Ertiga VDI Chennai ... 7.0 0.00 6.00\n", | |
"4 Audi A4 New 2.0 TDI Multitronic Coimbatore ... 5.0 0.00 17.74\n", | |
"\n", | |
"[5 rows x 14 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 13 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"outputId": "1f09b118-e32a-4465-8914-5523a492f2dc", | |
"id": "0AeGSHZWedRR", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 204 | |
} | |
}, | |
"source": [ | |
"#Top 5 rows of the test set\n", | |
"test_data.head()" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"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>Brand</th>\n", | |
" <th>Model</th>\n", | |
" <th>Location</th>\n", | |
" <th>Year</th>\n", | |
" <th>Kilometers_Driven</th>\n", | |
" <th>Fuel_Type</th>\n", | |
" <th>Transmission</th>\n", | |
" <th>Owner_Type</th>\n", | |
" <th>Mileage</th>\n", | |
" <th>Engine</th>\n", | |
" <th>Power</th>\n", | |
" <th>Seats</th>\n", | |
" <th>New_Price</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>Maruti</td>\n", | |
" <td>Alto K10 LXI CNG</td>\n", | |
" <td>Delhi</td>\n", | |
" <td>2014</td>\n", | |
" <td>40929</td>\n", | |
" <td>CNG</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>32.26</td>\n", | |
" <td>998.0</td>\n", | |
" <td>58.20</td>\n", | |
" <td>4.0</td>\n", | |
" <td>0.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>Maruti</td>\n", | |
" <td>Alto 800 2016-2019 LXI</td>\n", | |
" <td>Coimbatore</td>\n", | |
" <td>2013</td>\n", | |
" <td>54493</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>Second</td>\n", | |
" <td>24.70</td>\n", | |
" <td>796.0</td>\n", | |
" <td>47.30</td>\n", | |
" <td>5.0</td>\n", | |
" <td>0.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>Toyota</td>\n", | |
" <td>Innova Crysta Touring Sport 2.4 MT</td>\n", | |
" <td>Mumbai</td>\n", | |
" <td>2017</td>\n", | |
" <td>34000</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>13.68</td>\n", | |
" <td>2393.0</td>\n", | |
" <td>147.80</td>\n", | |
" <td>7.0</td>\n", | |
" <td>25.27</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>Toyota</td>\n", | |
" <td>Etios Liva GD</td>\n", | |
" <td>Hyderabad</td>\n", | |
" <td>2012</td>\n", | |
" <td>139000</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>23.59</td>\n", | |
" <td>1364.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>5.0</td>\n", | |
" <td>0.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>Hyundai</td>\n", | |
" <td>i20 Magna</td>\n", | |
" <td>Mumbai</td>\n", | |
" <td>2014</td>\n", | |
" <td>29000</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>18.50</td>\n", | |
" <td>1197.0</td>\n", | |
" <td>82.85</td>\n", | |
" <td>5.0</td>\n", | |
" <td>0.00</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Brand Model ... Seats New_Price\n", | |
"0 Maruti Alto K10 LXI CNG ... 4.0 0.00\n", | |
"1 Maruti Alto 800 2016-2019 LXI ... 5.0 0.00\n", | |
"2 Toyota Innova Crysta Touring Sport 2.4 MT ... 7.0 25.27\n", | |
"3 Toyota Etios Liva GD ... 5.0 0.00\n", | |
"4 Hyundai i20 Magna ... 5.0 0.00\n", | |
"\n", | |
"[5 rows x 13 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 14 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "lltV1jSW1j4F" | |
}, | |
"source": [ | |
"## Regression With Fast.ai\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "6yXVii4w1j38" | |
}, | |
"source": [ | |
"###Creating A TabularList" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "xV1y3p9E6N_2", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"TabularList in fastai is the basic ItemList for any kind of tabular data.It is a class to create a list of inputs in items for tabular data. \n", | |
"\n", | |
"Main Arguments:\n", | |
"\n", | |
"cat_names : The categorical features in the data.\n", | |
"\n", | |
"cont_names : The continuous features in the data.\n", | |
"\n", | |
"procs : A liat of transformations to be applies to the data such as FillMissing, Categorify, Normalize etc." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "E1-0qnbH1j32", | |
"colab": {} | |
}, | |
"source": [ | |
"#Defining the keyword arguments for fastai's TabularList\n", | |
"\n", | |
"#Path / default location for saving/loading models\n", | |
"path = ''\n", | |
"\n", | |
"#The dependent variable/target\n", | |
"dep_var = 'Price'\n", | |
"\n", | |
"#The list of categorical features in the dataset\n", | |
"cat_names = ['Brand', 'Model', 'Location', 'Fuel_Type', 'Transmission', 'Owner_Type'] \n", | |
"\n", | |
"#The list of continuous features in the dataset\n", | |
"#Exclude the Dependent variable 'Price'\n", | |
"cont_names =['Year', 'Kilometers_Driven', 'Mileage', 'Engine', 'Power', 'Seats', 'New_Price'] \n", | |
"\n", | |
"#List of Processes/transforms to be applied to the dataset\n", | |
"procs = [FillMissing, Categorify, Normalize]\n" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "4e48KbHy1j30", | |
"colab": {} | |
}, | |
"source": [ | |
"#Start index for creating a validation set from train_data\n", | |
"start_indx = len(train_data) - int(len(train_data) * 0.2)\n", | |
"\n", | |
"#End index for creating a validation set from train_data\n", | |
"end_indx = len(train_data)\n", | |
"\n", | |
"\n", | |
"#TabularList for Validation\n", | |
"val = (TabularList.from_df(train_data.iloc[start_indx:end_indx].copy(), path=path, cat_names=cat_names, cont_names=cont_names))\n", | |
"\n", | |
"test = (TabularList.from_df(test_data, path=path, cat_names=cat_names, cont_names=cont_names, procs=procs))\n", | |
"\n" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "Vt18jvfP1j3u", | |
"colab": {} | |
}, | |
"source": [ | |
"#TabularList for training\n", | |
"data = (TabularList.from_df(train_data, path=path, cat_names=cat_names, cont_names=cont_names, procs=procs)\n", | |
" .split_by_idx(list(range(start_indx,end_indx)))\n", | |
" .label_from_df(cols=dep_var)\n", | |
" .add_test(test)\n", | |
" .databunch())" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "WHGNuBzM7sgT", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"**Summary:**\n", | |
"\n", | |
"1. Initializing/Setting The parameters for TabularList such as path, dep_var, cat_names, cont_names and procs.\n", | |
"1. Setting the index for Validation set. The start index and End index are set in such a away that it takes the last 20% data from the training set for validation.\n", | |
"2. Creating TabularList for Validation set from train_data. \n", | |
"2. Creating TabularList for Test set from test_data. \n", | |
"1. Creating a DataBunch for the network.DataBunch is a class that binds train_dl,valid_dl and test_dl in a data object.\n", | |
"\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "f5syfNX71j3r", | |
"outputId": "2ffdab91-8eb1-4d9d-b275-ae2aad39c1de", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 359 | |
} | |
}, | |
"source": [ | |
"#Display the data batch\n", | |
"data.show_batch(rows = 10)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th>Brand</th>\n", | |
" <th>Model</th>\n", | |
" <th>Location</th>\n", | |
" <th>Fuel_Type</th>\n", | |
" <th>Transmission</th>\n", | |
" <th>Owner_Type</th>\n", | |
" <th>Mileage_na</th>\n", | |
" <th>Engine_na</th>\n", | |
" <th>Power_na</th>\n", | |
" <th>Seats_na</th>\n", | |
" <th>Year</th>\n", | |
" <th>Kilometers_Driven</th>\n", | |
" <th>Mileage</th>\n", | |
" <th>Engine</th>\n", | |
" <th>Power</th>\n", | |
" <th>Seats</th>\n", | |
" <th>New_Price</th>\n", | |
" <th>target</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>Nissan</td>\n", | |
" <td>Micra Active XV</td>\n", | |
" <td>Pune</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>1.4350</td>\n", | |
" <td>-0.3498</td>\n", | |
" <td>0.3534</td>\n", | |
" <td>-0.7136</td>\n", | |
" <td>-0.8759</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>0.2942</td>\n", | |
" <td>4.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Maruti</td>\n", | |
" <td>Zen Estilo 1.1 LXI BSIII</td>\n", | |
" <td>Bangalore</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>Second</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-1.9544</td>\n", | |
" <td>0.0080</td>\n", | |
" <td>0.0264</td>\n", | |
" <td>-0.9445</td>\n", | |
" <td>-0.9338</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>1.65</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Maruti</td>\n", | |
" <td>Swift LDI SP Limited Edition</td>\n", | |
" <td>Hyderabad</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>0.8188</td>\n", | |
" <td>-0.0453</td>\n", | |
" <td>1.5627</td>\n", | |
" <td>-0.6294</td>\n", | |
" <td>-0.7433</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>6.25</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Renault</td>\n", | |
" <td>Duster 110PS Diesel RxZ</td>\n", | |
" <td>Delhi</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-0.1056</td>\n", | |
" <td>0.0776</td>\n", | |
" <td>0.2042</td>\n", | |
" <td>-0.2704</td>\n", | |
" <td>-0.0868</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>4.75</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Maruti</td>\n", | |
" <td>SX4 ZDI</td>\n", | |
" <td>Chennai</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>Third</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-0.7219</td>\n", | |
" <td>0.2068</td>\n", | |
" <td>0.7507</td>\n", | |
" <td>-0.6294</td>\n", | |
" <td>-0.4612</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>3.5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Maruti</td>\n", | |
" <td>Zen Estilo LXI BS IV</td>\n", | |
" <td>Mumbai</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-1.3381</td>\n", | |
" <td>-0.1212</td>\n", | |
" <td>0.2020</td>\n", | |
" <td>-1.0507</td>\n", | |
" <td>-0.8747</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>1.46</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Hyundai</td>\n", | |
" <td>i10 Sportz 1.2</td>\n", | |
" <td>Bangalore</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-1.0300</td>\n", | |
" <td>-0.3001</td>\n", | |
" <td>0.5004</td>\n", | |
" <td>-0.7153</td>\n", | |
" <td>-0.6499</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>3.45</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Honda</td>\n", | |
" <td>City i-VTEC V</td>\n", | |
" <td>Kolkata</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-0.7219</td>\n", | |
" <td>-0.2646</td>\n", | |
" <td>-0.1492</td>\n", | |
" <td>-0.2097</td>\n", | |
" <td>0.0818</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>0.6630</td>\n", | |
" <td>3.87</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Mahindra</td>\n", | |
" <td>XUV500 W6 2WD</td>\n", | |
" <td>Coimbatore</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>0.8188</td>\n", | |
" <td>0.0373</td>\n", | |
" <td>-0.6540</td>\n", | |
" <td>0.9396</td>\n", | |
" <td>0.5144</td>\n", | |
" <td>2.1244</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>11.05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Toyota</td>\n", | |
" <td>Innova 2.5 G (Diesel) 7 Seater BS IV</td>\n", | |
" <td>Hyderabad</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-0.4138</td>\n", | |
" <td>0.7137</td>\n", | |
" <td>-1.1171</td>\n", | |
" <td>1.4705</td>\n", | |
" <td>-0.2478</td>\n", | |
" <td>2.1244</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>9.6</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "Nq-MnASS1j3q" | |
}, | |
"source": [ | |
"###Initializing Neural Network\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "OJlEk4gi1j3n", | |
"colab": {} | |
}, | |
"source": [ | |
"#Initializing the network\n", | |
"learn = tabular_learner(data, layers=[300,200, 100, 50], metrics= [rmse,r2_score])\n" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "iOTLWeZk1j3l" | |
}, | |
"source": [ | |
"\n", | |
"The above line of code will initialize a neural network with 4 layers and the number of nodes in each layer as 300,200, 100 and 50 respectively. \n", | |
"\n", | |
"The network will use two primary metrics for evaluation:\n", | |
"\n", | |
"* Root Mean Squared Error(RMSE)\n", | |
"* R-Squared\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "hIDubrn63-VS", | |
"colab_type": "code", | |
"outputId": "a096e3ec-ac14-4e19-8e25-66384d49750a", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 1000 | |
} | |
}, | |
"source": [ | |
"#Show the complete Summary of the model\n", | |
"learn.summary" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<bound method model_summary of Learner(data=TabularDataBunch;\n", | |
"\n", | |
"Train: LabelList (4816 items)\n", | |
"x: TabularList\n", | |
"Brand Maruti; Model Wagon R LXI CNG; Location Mumbai; Fuel_Type CNG; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year -1.0300; Kilometers_Driven 0.1273; Mileage 1.8700; Engine -1.0507; Power -1.0451; Seats -0.3457; New_Price -0.2485; ,Brand Hyundai; Model Creta 1.6 CRDi SX Option; Location Pune; Fuel_Type Diesel; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year 0.5106; Kilometers_Driven -0.1808; Mileage 0.3490; Engine -0.0665; Power 0.2514; Seats -0.3457; New_Price -0.2485; ,Brand Honda; Model Jazz V; Location Chennai; Fuel_Type Petrol; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year -0.7219; Kilometers_Driven -0.1311; Mileage 0.0264; Engine -0.7119; Power -0.4631; Seats -0.3457; New_Price 0.4200; ,Brand Maruti; Model Ertiga VDI; Location Chennai; Fuel_Type Diesel; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year -0.4138; Kilometers_Driven 0.2764; Mileage 0.5904; Engine -0.6294; Power -0.4620; Seats 2.1244; New_Price -0.2485; ,Brand Audi; Model A4 New 2.0 TDI Multitronic; Location Coimbatore; Fuel_Type Diesel; Transmission Automatic; Owner_Type Second; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year -0.1056; Kilometers_Driven -0.1841; Mileage -0.6321; Engine 0.5840; Power 0.5296; Seats -0.3457; New_Price -0.2485; \n", | |
"y: FloatList\n", | |
"1.75,12.5,4.5,6.0,17.74\n", | |
"Path: .;\n", | |
"\n", | |
"Valid: LabelList (1203 items)\n", | |
"x: TabularList\n", | |
"Brand BMW; Model #na#; Location Delhi; Fuel_Type Petrol; Transmission Automatic; Owner_Type Second; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year -2.2625; Kilometers_Driven -0.1112; Mileage -1.4178; Engine 2.2879; Power 3.6776; Seats -0.3457; New_Price -0.2485; ,Brand Hyundai; Model Elantra CRDi SX; Location Coimbatore; Fuel_Type Diesel; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year 1.7431; Kilometers_Driven -0.1722; Mileage 1.0140; Engine -0.0665; Power 0.2514; Seats -0.3457; New_Price -0.2485; ,Brand Tata; Model Sumo EX; Location Coimbatore; Fuel_Type Diesel; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year 0.5106; Kilometers_Driven 0.2558; Mileage -0.6101; Engine 2.2491; Power -0.5565; Seats 2.1244; New_Price -0.2485; ,Brand Datsun; Model #na#; Location Kolkata; Fuel_Type Petrol; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year 0.8188; Kilometers_Driven -0.4392; Mileage 1.0140; Engine -1.3861; Power -1.1312; Seats -0.3457; New_Price 0.0605; ,Brand BMW; Model X5 xDrive 30d; Location Chennai; Fuel_Type Diesel; Transmission Automatic; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year -1.3381; Kilometers_Driven 0.5049; Mileage -1.4002; Engine 2.3115; Power 2.5152; Seats -0.3457; New_Price -0.2485; \n", | |
"y: FloatList\n", | |
"6.99,15.57,5.29,2.25,20.0\n", | |
"Path: .;\n", | |
"\n", | |
"Test: LabelList (1234 items)\n", | |
"x: TabularList\n", | |
"Brand Maruti; Model #na#; Location Delhi; Fuel_Type CNG; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year 0.2025; Kilometers_Driven -0.1815; Mileage 3.1122; Engine -1.0507; Power -1.0443; Seats -1.5807; New_Price -0.2485; ,Brand Maruti; Model Alto 800 2016-2019 LXI; Location Coimbatore; Fuel_Type Petrol; Transmission Manual; Owner_Type Second; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year -0.1056; Kilometers_Driven -0.0467; Mileage 1.4530; Engine -1.3911; Power -1.2520; Seats -0.3457; New_Price -0.2485; ,Brand Toyota; Model #na#; Location Mumbai; Fuel_Type Diesel; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year 1.1269; Kilometers_Driven -0.2504; Mileage -0.9657; Engine 1.3003; Power 0.6630; Seats 2.1244; New_Price 1.7134; ,Brand Toyota; Model Etios Liva GD; Location Hyderabad; Fuel_Type Diesel; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na True; Seats_na False; Year -0.4138; Kilometers_Driven 0.7932; Mileage 1.2094; Engine -0.4339; Power -0.2747; Seats -0.3457; New_Price -0.2485; ,Brand Hyundai; Model i20 Magna; Location Mumbai; Fuel_Type Petrol; Transmission Manual; Owner_Type First; Mileage_na False; Engine_na False; Power_na False; Seats_na False; Year 0.2025; Kilometers_Driven -0.3001; Mileage 0.0922; Engine -0.7153; Power -0.5746; Seats -0.3457; New_Price -0.2485; \n", | |
"y: EmptyLabelList\n", | |
",,,,\n", | |
"Path: ., model=TabularModel(\n", | |
" (embeds): ModuleList(\n", | |
" (0): Embedding(29, 11)\n", | |
" (1): Embedding(1696, 103)\n", | |
" (2): Embedding(12, 6)\n", | |
" (3): Embedding(6, 4)\n", | |
" (4): Embedding(3, 3)\n", | |
" (5): Embedding(5, 4)\n", | |
" (6): Embedding(3, 3)\n", | |
" (7): Embedding(3, 3)\n", | |
" (8): Embedding(3, 3)\n", | |
" (9): Embedding(3, 3)\n", | |
" )\n", | |
" (emb_drop): Dropout(p=0.0, inplace=False)\n", | |
" (bn_cont): BatchNorm1d(7, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (layers): Sequential(\n", | |
" (0): Linear(in_features=150, out_features=300, bias=True)\n", | |
" (1): ReLU(inplace=True)\n", | |
" (2): BatchNorm1d(300, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (3): Linear(in_features=300, out_features=200, bias=True)\n", | |
" (4): ReLU(inplace=True)\n", | |
" (5): BatchNorm1d(200, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (6): Linear(in_features=200, out_features=100, bias=True)\n", | |
" (7): ReLU(inplace=True)\n", | |
" (8): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (9): Linear(in_features=100, out_features=50, bias=True)\n", | |
" (10): ReLU(inplace=True)\n", | |
" (11): BatchNorm1d(50, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (12): Linear(in_features=50, out_features=1, bias=True)\n", | |
" )\n", | |
"), opt_func=functools.partial(<class 'torch.optim.adam.Adam'>, betas=(0.9, 0.99)), loss_func=FlattenedLoss of MSELoss(), metrics=[<function root_mean_squared_error at 0x7fe2cd330268>, <function r2_score at 0x7fe2cd330400>], true_wd=True, bn_wd=True, wd=0.01, train_bn=True, path=PosixPath('.'), model_dir='models', callback_fns=[functools.partial(<class 'fastai.basic_train.Recorder'>, add_time=True, silent=False)], callbacks=[], layer_groups=[Sequential(\n", | |
" (0): Embedding(29, 11)\n", | |
" (1): Embedding(1696, 103)\n", | |
" (2): Embedding(12, 6)\n", | |
" (3): Embedding(6, 4)\n", | |
" (4): Embedding(3, 3)\n", | |
" (5): Embedding(5, 4)\n", | |
" (6): Embedding(3, 3)\n", | |
" (7): Embedding(3, 3)\n", | |
" (8): Embedding(3, 3)\n", | |
" (9): Embedding(3, 3)\n", | |
" (10): Dropout(p=0.0, inplace=False)\n", | |
" (11): BatchNorm1d(7, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (12): Linear(in_features=150, out_features=300, bias=True)\n", | |
" (13): ReLU(inplace=True)\n", | |
" (14): BatchNorm1d(300, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (15): Linear(in_features=300, out_features=200, bias=True)\n", | |
" (16): ReLU(inplace=True)\n", | |
" (17): BatchNorm1d(200, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (18): Linear(in_features=200, out_features=100, bias=True)\n", | |
" (19): ReLU(inplace=True)\n", | |
" (20): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (21): Linear(in_features=100, out_features=50, bias=True)\n", | |
" (22): ReLU(inplace=True)\n", | |
" (23): BatchNorm1d(50, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", | |
" (24): Linear(in_features=50, out_features=1, bias=True)\n", | |
")], add_time=True, silent=False)>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 20 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "otdALDmE1j3k" | |
}, | |
"source": [ | |
"###Training The Network" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "h2vWHWFyU34D", | |
"colab_type": "code", | |
"outputId": "160692fd-21fb-4427-e927-785ca35e18ee", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 300 | |
} | |
}, | |
"source": [ | |
"learn.lr_find(start_lr = 1e-05,end_lr = 1e+05, num_it = 100)\n", | |
"learn.recorder.plot()" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
}, | |
{ | |
"output_type": "stream", | |
"text": [ | |
"LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "H_6pgTxddHEj", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Learning rate is a hyper-parameter that controls how much the weights of the network is being adjusted with respect the loss gradient.\n", | |
"\n", | |
"The lr_find method helps explore the learning rate in a specified range. The graph shows the deviation in loss with respect to the learning rate." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "Am3r-2zR1j3U", | |
"outputId": "66b12617-06cf-4701-94e4-7fe1743071ed", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 824 | |
} | |
}, | |
"source": [ | |
"#Fitting data and training the network\n", | |
"learn.fit_one_cycle(25)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: left;\">\n", | |
" <th>epoch</th>\n", | |
" <th>train_loss</th>\n", | |
" <th>valid_loss</th>\n", | |
" <th>root_mean_squared_error</th>\n", | |
" <th>r2_score</th>\n", | |
" <th>time</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>0</td>\n", | |
" <td>170.930954</td>\n", | |
" <td>161.123108</td>\n", | |
" <td>12.526302</td>\n", | |
" <td>-0.330882</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>152.859070</td>\n", | |
" <td>149.356277</td>\n", | |
" <td>12.099945</td>\n", | |
" <td>-0.264155</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>119.679787</td>\n", | |
" <td>96.389923</td>\n", | |
" <td>9.771078</td>\n", | |
" <td>0.140050</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>82.348785</td>\n", | |
" <td>55.138988</td>\n", | |
" <td>7.370564</td>\n", | |
" <td>0.508471</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>48.968166</td>\n", | |
" <td>23.842108</td>\n", | |
" <td>4.833325</td>\n", | |
" <td>0.789911</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>5</td>\n", | |
" <td>26.032892</td>\n", | |
" <td>17.158106</td>\n", | |
" <td>3.929134</td>\n", | |
" <td>0.869249</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>6</td>\n", | |
" <td>17.878710</td>\n", | |
" <td>9.110335</td>\n", | |
" <td>2.786590</td>\n", | |
" <td>0.926840</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>7</td>\n", | |
" <td>13.887877</td>\n", | |
" <td>9.249630</td>\n", | |
" <td>2.722911</td>\n", | |
" <td>0.934174</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>8</td>\n", | |
" <td>13.685216</td>\n", | |
" <td>14.990489</td>\n", | |
" <td>3.492407</td>\n", | |
" <td>0.894274</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>9</td>\n", | |
" <td>11.866707</td>\n", | |
" <td>9.405542</td>\n", | |
" <td>2.823769</td>\n", | |
" <td>0.926297</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>10</td>\n", | |
" <td>11.612128</td>\n", | |
" <td>9.532630</td>\n", | |
" <td>2.771031</td>\n", | |
" <td>0.931684</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>11</td>\n", | |
" <td>11.271067</td>\n", | |
" <td>10.023697</td>\n", | |
" <td>2.850357</td>\n", | |
" <td>0.928993</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>12</td>\n", | |
" <td>12.695855</td>\n", | |
" <td>9.955544</td>\n", | |
" <td>2.761512</td>\n", | |
" <td>0.933563</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>13</td>\n", | |
" <td>12.834098</td>\n", | |
" <td>12.585591</td>\n", | |
" <td>3.112505</td>\n", | |
" <td>0.916915</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>14</td>\n", | |
" <td>11.626652</td>\n", | |
" <td>11.697491</td>\n", | |
" <td>2.959678</td>\n", | |
" <td>0.923977</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>15</td>\n", | |
" <td>11.730012</td>\n", | |
" <td>18.769026</td>\n", | |
" <td>3.915838</td>\n", | |
" <td>0.875023</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>16</td>\n", | |
" <td>13.120429</td>\n", | |
" <td>12.952336</td>\n", | |
" <td>3.194207</td>\n", | |
" <td>0.913939</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>17</td>\n", | |
" <td>10.109412</td>\n", | |
" <td>15.637222</td>\n", | |
" <td>3.527203</td>\n", | |
" <td>0.897277</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>18</td>\n", | |
" <td>9.204473</td>\n", | |
" <td>12.849992</td>\n", | |
" <td>3.102328</td>\n", | |
" <td>0.916921</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>19</td>\n", | |
" <td>7.052763</td>\n", | |
" <td>11.737025</td>\n", | |
" <td>2.987463</td>\n", | |
" <td>0.920450</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>20</td>\n", | |
" <td>7.344553</td>\n", | |
" <td>12.277870</td>\n", | |
" <td>3.056447</td>\n", | |
" <td>0.917726</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>21</td>\n", | |
" <td>6.613494</td>\n", | |
" <td>12.115734</td>\n", | |
" <td>2.985884</td>\n", | |
" <td>0.922169</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>22</td>\n", | |
" <td>6.371452</td>\n", | |
" <td>12.402617</td>\n", | |
" <td>2.996723</td>\n", | |
" <td>0.920773</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>23</td>\n", | |
" <td>6.860789</td>\n", | |
" <td>12.873620</td>\n", | |
" <td>3.077043</td>\n", | |
" <td>0.917000</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>24</td>\n", | |
" <td>7.468849</td>\n", | |
" <td>12.758644</td>\n", | |
" <td>3.077939</td>\n", | |
" <td>0.916618</td>\n", | |
" <td>00:01</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"colab_type": "text", | |
"id": "-nj8YKKD1j3R" | |
}, | |
"source": [ | |
"**The above line trains the network for 25 epochs.**" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "jsxdqeB9hEwd", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"### Evaluating Performance" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "Bbzeli2I1j3C", | |
"outputId": "a70ea551-1888-48cc-b8a2-e1a20d5385b4", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 204 | |
} | |
}, | |
"source": [ | |
"#Display Predictions On Training Data\n", | |
"learn.show_results(ds_type=DatasetType.Train,rows = 5)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th>Brand</th>\n", | |
" <th>Model</th>\n", | |
" <th>Location</th>\n", | |
" <th>Fuel_Type</th>\n", | |
" <th>Transmission</th>\n", | |
" <th>Owner_Type</th>\n", | |
" <th>Mileage_na</th>\n", | |
" <th>Engine_na</th>\n", | |
" <th>Power_na</th>\n", | |
" <th>Seats_na</th>\n", | |
" <th>Year</th>\n", | |
" <th>Kilometers_Driven</th>\n", | |
" <th>Mileage</th>\n", | |
" <th>Engine</th>\n", | |
" <th>Power</th>\n", | |
" <th>Seats</th>\n", | |
" <th>New_Price</th>\n", | |
" <th>target</th>\n", | |
" <th>prediction</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>Volkswagen</td>\n", | |
" <td>Polo Petrol Comfortline 1.2L</td>\n", | |
" <td>Kochi</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-0.4138</td>\n", | |
" <td>-0.0634</td>\n", | |
" <td>-0.3533</td>\n", | |
" <td>-0.7136</td>\n", | |
" <td>-0.7452</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>3.82</td>\n", | |
" <td>[4.371329]</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Toyota</td>\n", | |
" <td>Corolla Altis G MT</td>\n", | |
" <td>Kolkata</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>0.2025</td>\n", | |
" <td>-0.3199</td>\n", | |
" <td>-0.8340</td>\n", | |
" <td>0.2975</td>\n", | |
" <td>0.4769</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>7.95</td>\n", | |
" <td>[8.259411]</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Maruti</td>\n", | |
" <td>Wagon R VXI</td>\n", | |
" <td>Mumbai</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>0.2025</td>\n", | |
" <td>-0.1547</td>\n", | |
" <td>0.9701</td>\n", | |
" <td>-1.0507</td>\n", | |
" <td>-0.8759</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>0.1871</td>\n", | |
" <td>3.16</td>\n", | |
" <td>[3.749952]</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Hyundai</td>\n", | |
" <td>Accent CRDi</td>\n", | |
" <td>Kochi</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-2.2625</td>\n", | |
" <td>1.0072</td>\n", | |
" <td>-1.0930</td>\n", | |
" <td>-0.2165</td>\n", | |
" <td>-0.5908</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>1.8</td>\n", | |
" <td>[2.474023]</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Honda</td>\n", | |
" <td>Amaze S i-Dtech</td>\n", | |
" <td>Ahmedabad</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>0.2025</td>\n", | |
" <td>0.0209</td>\n", | |
" <td>1.6944</td>\n", | |
" <td>-0.2080</td>\n", | |
" <td>-0.2745</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>4.35</td>\n", | |
" <td>[5.159999]</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "Ho9s8tIr1j26", | |
"outputId": "883dea64-3738-4fa3-8ac5-578af8bfb27a", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 204 | |
} | |
}, | |
"source": [ | |
"#Display Predictions On Validation Data\n", | |
"learn.show_results(ds_type=DatasetType.Valid)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th>Brand</th>\n", | |
" <th>Model</th>\n", | |
" <th>Location</th>\n", | |
" <th>Fuel_Type</th>\n", | |
" <th>Transmission</th>\n", | |
" <th>Owner_Type</th>\n", | |
" <th>Mileage_na</th>\n", | |
" <th>Engine_na</th>\n", | |
" <th>Power_na</th>\n", | |
" <th>Seats_na</th>\n", | |
" <th>Year</th>\n", | |
" <th>Kilometers_Driven</th>\n", | |
" <th>Mileage</th>\n", | |
" <th>Engine</th>\n", | |
" <th>Power</th>\n", | |
" <th>Seats</th>\n", | |
" <th>New_Price</th>\n", | |
" <th>target</th>\n", | |
" <th>prediction</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>BMW</td>\n", | |
" <td>#na#</td>\n", | |
" <td>Delhi</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Automatic</td>\n", | |
" <td>Second</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-2.2625</td>\n", | |
" <td>-0.1112</td>\n", | |
" <td>-1.4178</td>\n", | |
" <td>2.2879</td>\n", | |
" <td>3.6776</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>6.99</td>\n", | |
" <td>[10.922736]</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Hyundai</td>\n", | |
" <td>Elantra CRDi SX</td>\n", | |
" <td>Coimbatore</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>1.7431</td>\n", | |
" <td>-0.1722</td>\n", | |
" <td>1.0140</td>\n", | |
" <td>-0.0665</td>\n", | |
" <td>0.2514</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>15.57</td>\n", | |
" <td>[9.735545]</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Tata</td>\n", | |
" <td>Sumo EX</td>\n", | |
" <td>Coimbatore</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>0.5106</td>\n", | |
" <td>0.2558</td>\n", | |
" <td>-0.6101</td>\n", | |
" <td>2.2491</td>\n", | |
" <td>-0.5565</td>\n", | |
" <td>2.1244</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>5.29</td>\n", | |
" <td>[5.969137]</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>Datsun</td>\n", | |
" <td>#na#</td>\n", | |
" <td>Kolkata</td>\n", | |
" <td>Petrol</td>\n", | |
" <td>Manual</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>0.8188</td>\n", | |
" <td>-0.4392</td>\n", | |
" <td>1.0140</td>\n", | |
" <td>-1.3861</td>\n", | |
" <td>-1.1312</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>0.0605</td>\n", | |
" <td>2.25</td>\n", | |
" <td>[2.973508]</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>BMW</td>\n", | |
" <td>X5 xDrive 30d</td>\n", | |
" <td>Chennai</td>\n", | |
" <td>Diesel</td>\n", | |
" <td>Automatic</td>\n", | |
" <td>First</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>-1.3381</td>\n", | |
" <td>0.5049</td>\n", | |
" <td>-1.4002</td>\n", | |
" <td>2.3115</td>\n", | |
" <td>2.5152</td>\n", | |
" <td>-0.3457</td>\n", | |
" <td>-0.2485</td>\n", | |
" <td>20.0</td>\n", | |
" <td>[17.299963]</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab_type": "code", | |
"id": "POO2TIFc1j3J", | |
"outputId": "7d2ad68b-0101-44ba-a372-2909b72b6e88", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 102 | |
} | |
}, | |
"source": [ | |
"#Getting The Training And Validation Errors\n", | |
"\n", | |
"tr = learn.validate(learn.data.train_dl)\n", | |
"va = learn.validate(learn.data.valid_dl)\n", | |
"print(\"The Metrics used In Evaluating The Network:\", str(learn.metrics))\n", | |
"\n", | |
"print(\"\\nThe calculated RMSE & R-Squared For The Training Set :\", tr[1:])\n", | |
"print(\"\\nThe calculated RMSE & R-Squared For The Validation Set :\", va[1:])" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"The Metrics used In Evaluating The Network: [<function root_mean_squared_error at 0x7fe2cd330268>, <function r2_score at 0x7fe2cd330400>]\n", | |
"\n", | |
"The calculated RMSE & R-Squared For The Training Set : [tensor(1.6506), tensor(0.9713)]\n", | |
"\n", | |
"The calculated RMSE & R-Squared For The Validation Set : [tensor(3.0779), tensor(0.9166)]\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "Tx9o36q0CLWs", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Summary:\n", | |
"\n", | |
"The Root Mean Squared Error is the standard deviation of the errors/residuals. It tells us the 'Goodness Of Fit' of a model. The lower the value of RMSE the better the model.\n", | |
"\n", | |
"The R-Squared metric also called the coefficient of determination is used to understand the variation in the dependent variable(y) and the independent variable(X).The closer the value of R-Squared is to one, the better the model.\n", | |
"\n", | |
"**The above output suggests that:**\n", | |
"\n", | |
"**The model/network was able to attain an RMSE of 1.4678 and an R_squared of 0.9726 while training and an RMSE of 3.1737 and an R_squared of 0.9107 while Validating on the validation set.**\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "YUKxTHXkVpPv", | |
"colab_type": "code", | |
"outputId": "fa04c351-ec24-4f87-c8b7-e328f2a51932", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 283 | |
} | |
}, | |
"source": [ | |
"#Plotting The losses for training and validation\n", | |
"learn.recorder.plot_losses()\n" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEKCAYAAAAIO8L1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl8VOW9+PHPN3tICAkkbAkQdsJO\nCOACKoK4objVpVrXSmttrV2vtfeq9Vd7tXqt9V5r64JLq1hbdwVREUUUgYDsYV8EEiAJkITsyXx/\nf5yTMIEJJJDJTDLf9+s1rzl5znPOfOckme88zznneURVMcYYY44WFugAjDHGBCdLEMYYY3yyBGGM\nMcYnSxDGGGN8sgRhjDHGJ0sQxhhjfLIEYYwxxidLEMYYY3yyBGGMMcaniEAHcCqSk5M1PT090GEY\nY0ybsnz58gJVTTlRvTadINLT08nOzg50GMYY06aIyM6m1LMuJmOMMT5ZgjDGGOOTJQhjjDE+telz\nEMaY9qO6uprdu3dTUVER6FDajZiYGNLS0oiMjDyp7S1BGGOCwu7du+nYsSPp6emISKDDafNUlcLC\nQnbv3k3fvn1Pah/WxWSMCQoVFRV06dLFkkMLERG6dOlySi0ySxDGmKBhyaFlnerxDNkEsWRbIZv3\nlQQ6DGOMCVohmyCueeZrzvvTwkCHYYwJEoWFhYwePZrRo0fTvXt3UlNT63+uqqpq0j5uueUWNm7c\n6OdIW4+dpDbGGKBLly6sXLkSgAceeID4+Hh++ctfNqijqqgqYWG+v1u/8MILfo+zNYVsC8IYY5pi\ny5YtDB06lOuvv55hw4aRl5fHzJkzycrKYtiwYTz44IP1dSdOnMjKlSupqakhMTGRe+65h1GjRnH6\n6aezf//+AL6Lk2MtCGNM0Pnde+tYn1vcovsc2jOB+y8ZdlLbbtiwgZdffpmsrCwAHn74YTp37kxN\nTQ2TJ0/mqquuYujQoQ22KSoq4uyzz+bhhx/m5z//ObNmzeKee+455ffRmqwFYYwxJ9C/f//65AAw\ne/ZsMjMzyczMJCcnh/Xr1x+zTWxsLBdeeCEAY8eOZceOHa0VbouxFoQxJuic7Dd9f4mLi6tf3rx5\nM3/+859ZunQpiYmJ3HDDDT7vNYiKiqpfDg8Pp6amplVibUnWgjDGmGYoLi6mY8eOJCQkkJeXx7x5\n8wIdkt9YC8IYY5ohMzOToUOHMmTIEPr06cOZZ54Z6JD8RlQ10DGctKysLD3ZCYPS7/kAgB0PX9yS\nIRljTlJOTg4ZGRmBDqPd8XVcRWS5qmY1skk962IyxhjjkyUIY4wxPlmCMMYY41PIJ4i2fA7GGGP8\nKeQThMfygzHG+BTyCaLWMoQxxvgU8gnCY11Mxhhg8uTJx9z09sQTT3DHHXc0uk18fDwAubm5XHXV\nVT7rnHPOOZzocvwnnniCsrKy+p8vuugiDh061NTQ/cZvCUJEeonIAhFZLyLrROSnbvkDIrJHRFa6\nj4u8tvmNiGwRkY0icr6/YvNmCcIYA3Ddddfx2muvNSh77bXXuO666064bc+ePfn3v/990q99dIKY\nM2cOiYmJJ72/luLPFkQN8AtVHQqcBtwpInXDHf5JVUe7jzkA7rprgWHABcBfRCTcj/EBdg7CGOO4\n6qqr+OCDD+onB9qxYwe5ubmMGTOGKVOmkJmZyYgRI3jnnXeO2XbHjh0MHz4cgPLycq699loyMjK4\n/PLLKS8vr693xx131A8Tfv/99wPw5JNPkpuby+TJk5k8eTIA6enpFBQUAPD4448zfPhwhg8fzhNP\nPFH/ehkZGdx+++0MGzaMadOmNXidluK3oTZUNQ/Ic5dLRCQHSD3OJjOA11S1EtguIluA8cBif8UI\ndg7CmKA09x7Yu6Zl99l9BFz4cKOrO3fuzPjx45k7dy4zZszgtdde4+qrryY2Npa33nqLhIQECgoK\nOO2007j00ksbne/56aefpkOHDuTk5LB69WoyMzPr1z300EN07tyZ2tpapkyZwurVq7nrrrt4/PHH\nWbBgAcnJyQ32tXz5cl544QWWLFmCqjJhwgTOPvtskpKS2Lx5M7Nnz+bZZ5/l6quv5o033uCGG25o\nmWPlapVzECKSDowBlrhFPxaR1SIyS0SS3LJUYJfXZrs5fkJpER5LEMYYl3c3U133kqpy7733MnLk\nSKZOncqePXvYt29fo/tYuHBh/Qf1yJEjGTlyZP26119/nczMTMaMGcO6det8DhPubdGiRVx++eXE\nxcURHx/PFVdcwRdffAFA3759GT16NOC/4cT9PlifiMQDbwB3q2qxiDwN/D9A3ef/AW5txv5mAjMB\nevfufcrx2TkIY4LQcb7p+9OMGTP42c9+xooVKygrK2Ps2LG8+OKL5Ofns3z5ciIjI0lPT/c5vPeJ\nbN++nccee4xly5aRlJTEzTfffFL7qRMdHV2/HB4e7pcuJr+2IEQkEic5vKKqbwKo6j5VrVVVD/As\nTjcSwB6gl9fmaW5ZA6r6jKpmqWpWSkrKKcdYawnCGOOKj49n8uTJ3HrrrfUnp4uKiujatSuRkZEs\nWLCAnTt3HncfZ511Fq+++ioAa9euZfXq1YAzTHhcXBydOnVi3759zJ07t36bjh07UlJScsy+Jk2a\nxNtvv01ZWRmlpaW89dZbTJo0qaXe7gn58yomAZ4HclT1ca/yHl7VLgfWusvvAteKSLSI9AUGAkv9\nFV8dyw/GGG/XXXcdq1atqk8Q119/PdnZ2YwYMYKXX36ZIUOGHHf7O+64g8OHD5ORkcF9993H2LFj\nARg1ahRjxoxhyJAhfPe7320wTPjMmTO54IIL6k9S18nMzOTmm29m/PjxTJgwge9///uMGTOmhd9x\n4/w23LeITAS+ANYAHrf4XuA6YDROF9MO4AfuCW1E5Lc43U01OF1SczmOlhju+6t7zqVnYuxJ7cMY\n03JsuG//OJXhvv15FdMiwNdp/jnH2eYh4CF/xeSLXcVkjDG+hfyd1NbFZIwxvoV8gqiqrQ10CMYY\nl42u3LJO9XiGfIIoq7IEYUwwiImJobCw0JJEC1FVCgsLiYmJOel9+P0+iGBnCcKY4JCWlsbu3bvJ\nz88PdCjtRkxMDGlpaSe9vSWIqppAh2CMASIjI+nbt2+gwzBerIvJWhDGGOOTJYhKSxDGGONLyCaI\niDDnFg3rYjLGGN9CNkHERjpTTZRVWwvCGGN8CdkEER7utCBqau2SOmOM8SV0E4TUJQjPCWoaY0xo\nCtkEUafGxmIyxhifQjZB1KUFSxDGGONbyCaIOtXWxWSMMT6FbIKoG+/FTlIbY4xvIZsg6tR4rAVh\njDG+hGyCqGs3VFsLwhhjfArZBFHHLnM1xhjfQj5BvL86j0NlVYEOwxhjgk7IJoi6OUlqPMptL2UH\nNhhjjAlCIZsgvH3z7cFAh2CMMUEnZBOE97SGdq+cMcYcK2QThDHGmOML2QRhjQZjjDm+kE0Qxhhj\nji90E4Q1IYwx5rhCN0EcpaisOtAhGGNMUAnZBHF0A2JdblFA4jDGmGDltwQhIr1EZIGIrBeRdSLy\nU7e8s4h8LCKb3eckt1xE5EkR2SIiq0Uk01+x+bK1oLQ1X84YY4KeP1sQNcAvVHUocBpwp4gMBe4B\n5qvqQGC++zPAhcBA9zETeNqPsTW4DwLgv95e68+XM8aYNsdvCUJV81R1hbtcAuQAqcAM4CW32kvA\nZe7yDOBldXwNJIpID3/FBzA1oyujeiX68yWMMabNapVzECKSDowBlgDdVDXPXbUX6OYupwK7vDbb\n7ZYdva+ZIpItItn5+fknHZMC6V3ieOX7E056H8YY0575PUGISDzwBnC3qhZ7r1Onn6dZF5yq6jOq\nmqWqWSkpKScV064DZZRV1VJcUU18dARnDujC2D5JJ7UvY4xpr/yaIEQkEic5vKKqb7rF++q6jtzn\n/W75HqCX1+ZpblmLW73buWJpX3ElAB2jIympsMtcjTHGmz+vYhLgeSBHVR/3WvUucJO7fBPwjlf5\nje7VTKcBRV5dUS0qTJznuqZLQmwExeU1/ngpY4xpsyL8uO8zge8Ba0RkpVt2L/Aw8LqI3AbsBK52\n180BLgK2AGXALf4KTOoShHsl0+b9h9lbXMHmfSUM7NbRXy9rjDFtit8ShKouAqSR1VN81FfgTn/F\n402kYVjffHsIgEVbCixBGGOMKyTvpA5zE4THbUFcMKw7APHR/mxQGWNM2xKSCaKu/VB3r9yvLxgM\nQHhYYw0eY4wJPSGZIMLcd12XIOJjnJZD4eGqAEVkjDHBJyQTRN05CHWvY6rrWnpoTg4V1bUALN95\nkOe+2BaYAI0xJgiEZKd7XUdS3VzUsZHh9euKK6qJiQznyqe/AuDWM/sSZl1PxpgQFJItiDBpeCOE\n91VNJRU1DQbyO1Bm3U7GmNAU0glCfYzyUVJRw+THPqv/eX7OvtYKyxhjgkpIJogjN8odu+6yp75k\nR2FZ/c91w3IYY0yoCe0E0YS6uw+W+zUWY4wJViGZII6+UQ5gzl2TfNbNySv2WW6MMe1dSCcI7y6m\noT0T+Nv3xh5Td39JJYWHK1srNGOMCRohmSAa62KaNrRbg5/rrm7NySvxf1DGGBNkQvI+iLCjx9pw\niQgv3DKOwsNVRIYLGT0SmPanheTkFTNxYHLrB2qMMQEUkglC6s9BHLtu8uCux5Q9NCeH28/q5++w\njDEmqIRmF5P77Os+iMbYeQhjTKgJyQTh6yR1Y35+3iAAxv7+E9bn2hVNxpjQYQniBC4e2aN++bvP\nfc2izQWUVdn0pMaY9i8kE0RzbpTr07lD/fKhsmpueH4Jf/3cRnk1xrR/oZ0gmtCEiAgP4/NfncMv\npw2qL1u4KZ/HP97EV1sL/BWiMcYEXEgmiOZ0MQH06RLHgK5H5qpeuesQT87fzHefXcKXWyxJGGPa\np5BMEEe6mJp+FVNqYqzP8uufW9ISIRljTNAJyQQR4c45WlPb9ASRRl798rXjejVYV1Re3TKBGWNM\nEAnJBBEd4bztyhpP0zbIXUnirDN5JHoWsVTw8JUj+eLXk+tX7zpQdpyNjTGmbbIE0RRdM5DT7uAa\nmU9Oz4dgz3J6de7A+z+ZCFiCMMa0TyGaIJw5qCtrapu2QUQ0TPs93PQu1FTC89Pg80fplRgFwK6D\nliCMMe1PaCaISOdtR4Y38+33PQvu+BKGXgYLfk+n12aQEVPIzkJLEMaY9ickE0RMZDj3XjSEf848\nrfkbxybCVc/DFc/B/g28Kb8mbNUrbNpbzPurc7n/nbW89c3ulg/aGGNamTTlZrGT2rHILGA6sF9V\nh7tlDwC3A/lutXtVdY677jfAbUAtcJeqzjvRa2RlZWl2drYfom+iQ7vI//stpBQuY27tOO6tvo2D\nJADwHxcM4baJfYmKCMkcbIwJYiKyXFWzTlSvSZ9eItJfRKLd5XNE5C4RSTzBZi8CF/go/5OqjnYf\ndclhKHAtMMzd5i8iEt6U2AIqsReFV/6LP1Rfx5SwFXwYfQ9nha0C4JEPNzDoP+dy92vfsLOwNMCB\nGmNM8zX16+0bQK2IDACeAXoBrx5vA1VdCBxo4v5nAK+paqWqbge2AOObuG1A9UlO4JnaS7is6v9R\npHG8HPUI90e8RDRVALy9MpezH/0Mj6/JJ4wxJog1NUF4VLUGuBz4X1X9FdDjBNs05scislpEZolI\nkluWCuzyqrPbLQt6sVHhXDCsO+s1nUuqHmJWzQXcEjGP96N+Sx/ZW19vz6HyAEZpjDHN19QEUS0i\n1wE3Ae+7ZZEn8XpPA/2B0UAe8D/N3YGIzBSRbBHJzs/PP/EGreDBGcMAqCSKB2tu5IPRf2FATBF/\nTJ5TX2fL/sOBCs8YY05KUxPELcDpwEOqul1E+gJ/b+6Lqeo+Va1VVQ/wLEe6kfbgdFvVSXPLfO3j\nGVXNUtWslJSU5obgF10TYtj80IXERjqnTeZXDkMyLiWzYikROHNHbM23BGGMaVualCBUdb2q3qWq\ns91uoY6q+khzX0xEvLulLgfWusvvAteKSLSbfAYCS5u7/0CKDA+jc5xz49zo3omQMZ3I6mLevNBD\nUodIa0EYY9qciKZUEpHPgEvd+suB/SLypar+/DjbzAbOAZJFZDdwP3COiIzGmatnB/ADAFVdJyKv\nA+uBGuBOVW3ibc7B47WZp/F69i5umNAHartBZAdGlnzBoG7fYeO+kkCHZ4wxzdKk+yBE5BtVHSMi\n3wd6qer9IrJaVUf6P8TGBfw+iBP55w2waxkPDXmDZxft5G/fG8v5w7oHOipjTIhr0fsggAi3e+hq\njpykNicy5BI4vJeruu8H4I8fbghwQMYY03RNTRAPAvOAraq6TET6AZv9F1Y7MWgahEUw+ODnXJ2V\nRmFpld0PYYxpM5p6kvpfqjpSVe9wf96mqlf6N7R2IDYJ0ifBhvfJ6p3EobJqOxdhjGkzmjrURpqI\nvCUi+93HGyKS5u/g2oWM6VC4haldDxEZLryzMjfQERljTJM0tYvpBZxLUXu6j/fcMnMigy8GoPO3\n8xjWsxOrdh0KcEDGGNM0TU0QKar6gqrWuI8XgeC4Sy3YJfSAtHGQ8z5pSbFszT9s5yGMMW1CUxNE\noYjcICLh7uMGoNCfgbUrQ6ZD3krOS61mf0klj3+8KdARGWPMCTU1QdyKc4nrXpwxlK4CbvZTTO1P\nxiUAnFH9NQD/t2BLIKMxxpgmaepVTDtV9VJVTVHVrqp6GWBXMTVVl/6QkkHK7o+ZmtGNyHCxbiZj\nTNA7lenOGh1mw/iQMR12fsmlA6OprlUesZvmjDFB7lQShLRYFKFgyHRQD+dHrgDgbwu3setAWYCD\nMsaYxp1KgrA+kuboMQo69SZ681yeu9EZAmXSHxdQVeMJcGDGGOPbcROEiJSISLGPRwnO/RCmqURg\nyMWw9VOm9o8jsYMz39I33x4McGDGGOPbcROEqnZU1QQfj46q2qShwo2XjOlQWwlbPuGDuyYBMHft\n3hNsZIwxgWEf8q2p9+nQoQtseJ/UYZcB8OJXO6iq9TBxQDIXDu+OiJ3aMcYEh1M5B2GaKywcBl8I\nmz6Cmiqun9AbgFeXfMuPXlnBmyt8zrJqjDEBYQmitQ25BCqLYMdCbpvYt8Gq//loY4CCMsaYY1mC\naG39zoGoeMh5n34p8Q1W7S2uCEhIxhjjiyWI1hYZAwOmwsY54PHw7x+eXr/Ko5BfUhnA4Iwx5ghL\nEIGQcQkc3ge7l5GV3plRvRLrVy3clB/AwIwx5ghLEIEw8DwIi4QN7wHw2u2n8cYdZxAbGc7a3KIA\nB2eMMQ5LEIEQ0wn6ngU574MqsVHhjO2TRI/EGF74cge1NpCfMSYIWIIIlIzpcHA77F9fX7S9oBSA\nRVsKAhWVMcbUswQRKIMvBsRpRbjevXMiAB+ts7urjTGBZwkiUDp2g17j689DAIxI60RSh0heWfIt\nFdW1AQzOGGMsQQTWkOmwdw0c3FFf9ItpgwFYsGF/gIIyxhiHJYhAypjuPG/4oL7osjGpxEaG84e5\nOZRXWSvCGBM4fksQIjJLRPaLyFqvss4i8rGIbHafk9xyEZEnRWSLiKwWkUx/xRVUOveDrsManIeI\nj47gljPT2XWgnIz7PuThuRv4+9c7AxikMSZU+bMF8SJwwVFl9wDzVXUgMN/9GeBCYKD7mAk87ce4\ngkvGdPh2MRw+coPcdeN71y//9fOt/Nfba9lnw3AYY1qZ3xKEqi4EDhxVPAN4yV1+CbjMq/xldXwN\nJIpID3/FFlSGTAfUGXrD1atzB/50zSgGdTsyVtMr1oowxrSy1j4H0U1V89zlvUA3dzkV2OVVb7db\n1v51HwGJvWHD+w2KLx+Txs+mDqr/ef6G/ajaDXTGmNYTsJPU6nzaNfsTT0Rmiki2iGTn57eDcYtE\nnCHAt30GFcUNVp0xIJkenWLo2SmGdbnFLN1+dIPMGGP8p7UTxL66riP3ue5azj1AL696aW7ZMVT1\nGVXNUtWslJQUvwbbajKmQ20VbPm4QXGn2Ei+uudc5vx0EjGRYby90iYUMsa0ntZOEO8CN7nLNwHv\neJXf6F7NdBpQ5NUV1f71mgBxKbDu7WNWiQiJHaKYktGNT3L247FxmowxrcSfl7nOBhYDg0Vkt4jc\nBjwMnCcim4Gp7s8Ac4BtwBbgWeBH/oorKIWFw4irYeNcOOz7BrnzMrqRX1LJyt2HWjk4Y0yo8udV\nTNepag9VjVTVNFV9XlULVXWKqg5U1amqesCtq6p6p6r2V9URqprtr7iCVtYt4KmGb/7hc/XkwV0B\nuOIvX7F4a2FrRmaMCVF2J3WwSB4I6ZNg+Qvg8RyzulOHyPrlf9glr8aYVmAJIphk3QKHvoWtn/pc\nfdPpfQBYucu6mYwx/mcJIpgMuQQ6JEP2LJ+r779kGJeO6smeQ+WWJIwxfmcJIphEREHm92DTXCg6\n9pLWsDDhwRnDCBP4NGdfAAI0xoQSSxDBJvMmUIUVL/tcndghilG9EvnCZp0zxviZJYhg07kvDJgC\nK16C2hqfVSYNSGbVrkMUlVW3cnDGmFBiCSIYZd0KJXmw6UOfqycNSsGjsHibtSKMMf5jCSIYDTwf\nOvZs9GT16F6JxEdHsHCzJQhjjP9YgghG4REw9ibYOh8ObD9mdWR4GKf168IXm9vBYIXGmKBlCSJY\nZd4IEg7LX/S5+uxByew6UM5v31pDVc2xN9YZY8ypsgQRrBJ6wuALnaE3aiqPWX2OO/TGK0u+Ze7a\n0BnX0BjTeixBBLOsW6CsAHLeO2ZVWlJs/fKT8zdTU2utCGNMy7IEEcz6nQuJfSD7hWNWiQjj0zsD\nsDW/lOU7D7Z2dMaYds4SRDALC3NaETsXQf7GY1bPnnkaK+87jzCBhXbC2hjTwixBBLvRN0BYpM9W\nRHiYM5nQpIEpPLVgKwdLqwIQoDGmvbIEEeziU2DopbDqVagq81ll5ln9AHjhy2MviTXGmJNlCaIt\nyLoVKopg3Vs+V585IJmpGV159ovt7C2qaOXgjDHtlSWItqDPmZA8qNE7qwF+MW0w5dW1/PqN1a0Y\nmDGmPbME0RaIOK2IPdmQt8pnlYweCVw1No2vthRwwM5FGGNagCWItmLUtRAR4/NkdZ2bz0inxqPM\nWmTnIowxp84SRFsRmwTDr4Q1/4LKEp9Vhqd2YmyfJOauzUNVWzlAY0x7YwmiLcm6FaoOw+rXG61y\n+ZhUtuaX8uHava0YmDGmPbIE0ZakjoXuI5xupkZaCFdkphITGcYdr6xg2Y4DrRygMaY9sQTRltSd\nrN63BnZn+6zSISqCO84eAMCtLyxrzeiMMe2MJYi2ZsR3ICr+uJe8/mhyf3p2iqGksoZ566yryRhz\ncixBtDXRHWHk1bDuTSjz3YUUGR7G6z88HYCXvtrRisEZY9oTSxBtUdatUFMBq15rtEpaUgd+dE5/\nvt5WaHdXG2NOiiWItqj7CEgbB8uehdqaRqtdndULj8IbK3a3YnDGmPYiIAlCRHaIyBoRWSki2W5Z\nZxH5WEQ2u89JgYitzZj4MziwDVb+o9Eq6clxTOjbmdezd+Hx2H0RxpjmCWQLYrKqjlbVLPfne4D5\nqjoQmO/+bBoz+CLoNQE+e7jRUV4BvjuhNzsLy/jJ7G9aMThjTHsQTF1MM4CX3OWXgMsCGEvwE4Gp\nD0BJHiz9W6PVzh/WHYAP1uSx60DjicQYY44WqAShwEcislxEZrpl3VQ1z13eC3TztaGIzBSRbBHJ\nzs8P8VnU+pwBA8+HRX+Cct9TjsZEhvP5r85BBP48f3MrB2iMacsClSAmqmomcCFwp4ic5b1SnYGE\nfHaaq+ozqpqlqlkpKSmtEGqQm3o/VBQ7SaIRfbrEce24Xvx7+W7etBPWxpgmCkiCUNU97vN+4C1g\nPLBPRHoAuM/7AxFbm9NtGIy8Bpb8DYr2NFrt7qmDALj3rTUUlVe3VnTGmDas1ROEiMSJSMe6ZWAa\nsBZ4F7jJrXYT8E5rx9ZmTb4X1AOfP9xolW4JMbz74zOprPFw+8vZNtqrMeaEAtGC6AYsEpFVwFLg\nA1X9EHgYOE9ENgNT3Z9NUyT1gazb4Jt/QP7GRquNTEvk7imDWLr9AC98uaP14jPGtEmtniBUdZuq\njnIfw1T1Ibe8UFWnqOpAVZ2qqjYUaXOc9UuIjIP5Dx632k/OHcC49CQefH+9XdVkjDmuYLrM1ZyK\nuGQ44yew4X3Y1fgormFhwh8uHwHAP5ftaq3ojDFtkCWI9uT0OyEuBT55oNH5IgAGduvI5MEp/Gv5\nLmpqPa0XnzGmTbEE0Z5Ex8NZv4adi2DLJ8et+t0JfdhXXMljH21qpeCMMW2NJYj2ZuzNkJQOn/wO\nPI23Ds4d0hWAWYu22zhNxhifLEG0NxFRMPk/nVnn1v670WrhYcL/XjeGqloPs77c3ooBGmPaCksQ\n7dHwK50hwT/9PdRUNVrtohE9GNM7kT/P30xeUXkrBmiMaQssQbRHYWEw5QE4tBOWv9BotfAw4dGr\nRlJSUcPp//0pG/YWt16MxpigZwmivRowBdInwed/hMqSxqt1da5oAnjg3XWtFZ0xpg2wBNFe1Q0H\nXlYAi586btWnbxjLFWNS+XrbAZ60EV+NMS5LEO1ZWhZkXAJf/S8cbnxo9JjIcB66fASjeiXy+Meb\nWLgpxIdRN8YAliDav3Pvg+oy+OKx41aLjQrn77eNJ71LB+55YzU/fnUFH6/f10pBGmOCkSWI9i5l\nEIy5AZY9Dwd3HLdqQkwk/33FSHKLKnh/dR63v5zNutyi1onTGBN0LEGEgnN+A2HhzkB+ntrjVj29\nfxfGp3eu//niJxfxzMKtDeos3X6AHQWlfgnVGBM8LEGEgoSecNqPYO0b8OfR8PmjUJzXaPWXbh3P\nI1eOYM5dkwD4w5wNDZLE1X9bzDmPfcamfY1fHWWMafukLU8ck5WVpdnZ2YEOo23w1ML6d2D5i7D9\nc5BwGHSBMzTHgClOC8OHsqoa7pr9DZ/kOBP8Lbl3ChP+MB+AvslxPHDpME7v14WoCPuuYUxbISLL\nVTXrhPUsQYSgwq2w4mVY+QqU5kOnXpB5o3OuIqHnMdWraz3c9846Zi/9tr5s2tBufOSexD53SFee\n+m4msVHhLN95kH7JcSTFRbUSbVbFAAAWuUlEQVTa2zHGNI8lCHNiNVWwcY7Tqti2ACTMq1Ux9ZhW\nxYtfbueB99YDMPv20ygqr+aH/1hev/4v12fyo1dWAPDWj85gdK9ERKS13o1prqoyZ7yuA9tg8MXO\nZdH2+woJliBM8xzY5rQqvvmH06pISHNaFeNucyYjcnk8SlhYww+R2Uu/5TdvrvG52yHdOxIXHcE9\nFw4hq0+SJYxgcGA7ZD8PK/4OFYcAARQS+zjjeI24CroNC3SUxo8sQZiTU1MFm+Y6rYqtn0JkB6dF\nccZPfHY/1fl0wz7+MGcDW/Yf5sVbxjFv3V5mL204Y9349M78dOpAOsVGMjy1U6P7OlxZw/ycfUzJ\n6EZ8dEQLvbHW8dJXO/hicwFXjU1lakY3IsKD5NyMxwPbPoWlz8KmeU5rMeMSGD8Tug+HDR/Amn/D\nts9AayElw00WV0Lnfif3mtXlULAZDn3r/O2kDIaouBZ9W+bkWIIwpy5/Iyz6E6x+3eluGn09TLzb\nmW/CB49HWZ9XXP/hX1Xj4e2VexiZ1omXF+/k1SVHzmFcNKI7/zV9KD06xR6zn2cXbuOhOTkAPHDJ\nUC4dEAk57xG/9T2iIsLZmjyFP347kHOzRnDJqJ5s3V/K8NSEJrdOVNVvLZlzHl3AjkJnru/YyHDG\n9+3M1IyuXDOud7NP5LdInBVFsPJVJzEc2OrMODj2Fifpd0o9tv7hfFj/tnPF27eLnbKemVRmXMG/\nK8YxMXMEfboc9SFffhDyN0HBRudvpmCT83zoW+Coz5fE3k7ySRkMXTMgZQgkD3ImuzKtxhKEaTkH\nd8CXf3a6nzy1MOI7MOnnzj95M6zPLeY/317DtoJSDpVVEyYwpncS04Z2Y2yfJJLioqis9vDe6lxe\n+WwVNyWtZdzhBZwZtpZwUTZ7UomJDKNX7S5qVVjqyeADzwTm1Y6jY0oqHo9y6aieXJGZRlKHKBJi\nI475gP3F66t4Y8VuhqcmcOuZfZkxOhVV5VB5Ncnx0Y3GXl5Vy/eeX8Lg7h2pqVWS4qK4fVJfuhy1\nzVVPf8WGvSVckZnKW9/soaSiBoD0Lh0Y2jOBASnxvPDVDhJiIvnDFSMYkdqJ3EPlDOwWT5gINbVK\nbFQ4338pm5zcIm4Y1ZHrx/UgoVNnLv3bCg5X1vL7y4ZzxoBkX2EesT8Hlj4Dq/4J1aWQNg7G/wCG\nXgoRx77PiupaYiKPupLt0C507ZtUrnydmIK1eFRY4skgO2IUU1NrGCC5RB7YDKX7j2wTHg3JA52/\njeTBzo2aib35dMk3kL+BiYkFRBVugsLNUOs1FH1ibydZ1D06dofYRIhJhNgkiOnU6JV2QUnVeX81\nlUeeayqOKqtwWuy1lUeOhYQ5D+TIsoQ554bkqLJOvaBz35MKzxKEaXnFebD4/yB7ltN9kHEJTPoF\n9BzdrN2oKjl5Jby5YjfPLToyWVEc5UwNW84l4Ys5O3w1kdRSFJPK3w9n8YHndMK6DSO/pJLE0q1M\nj1jC9zp+Q1LZdmoJY0PUcGaXjmVe7TjySazf5y1npnPT6emEhwlvfbOHxz9ufIrV6SN7cNnoVNbl\nFrOjsJQaj5ISH03PxBhEhP/3/voG9bvERXHfJUO5aEQPvtxSwFMLtrBy1yHOGpjC8zePo+5/65Oc\n/fz2rTXsL6n0+bpheOgl++kvuQwIy+WCbiXU5m9kgOSSJIfr69WqUEosJcRSRixhMR0p9sTQuXMX\n0rp3Q6PiKKiKIiF/BR1yv3I+rEdcReWYW3l7f1cmD+5K14SY+v09tWAL767MZaN7P0v3hBi6JUQz\nbVh3bpvYl+iIMP6VvZtfv7GafpLLJWGLuTZ2KT1qdlGsHdguqcT2HEq/jEwiug5hcXEXZq3zMG14\nT07r14VenTvUv9bw++dxuLKG9C4dePQ7oxjXKwEObncSWf4G57F/w7GJw1t0gpswOrnPiUeeJdz9\nwK048mFcfdTPNZVQU+48e2qcbSTMGR5fwrx+Dj/qw9n9gPbUOF+QaqvdZa9HbbWzzlMDHne9v515\nN5z3u5Pa1BKE8Z/SQljyNCx5BiqLnCueJv0S+pze7F1VlB0m++PX6JU7lx77FxKlVeyjC4f6TWfw\nlJugZ2aDK2uKK6p5asEW+ifHc3VWmvMBs/5tWPc2FGxECWNb3CheODSaebXjKJBEjv4Tv3vqQK7M\nTOOLzQV8ubWAJdsOUFhaSVxUBIcrj/xjCx6iqCGaaqKpJopqZp7Rk0HJ0aTEwLOfrWd3gTMUiSIo\nTpxn9E/mJ1MGeX0TFMqqPWwvKKWiqpqy/dsZ37GQ3C2roGAzaZ5cIqmuf9187cRW7UmnXkPpmJrB\n3A1F5BcWEC/lTOvfgcrSYooPHSC8ppQYTylxVBAv5cTjPPLowj9qpnJgyLWk9kjjT584STE6Iozr\nxvfmB2f3I6lDFEP+68P61+zRKYa8oopGf089OsUwoW9nnrhmNJWHD7D+gPDYx5v4ckshXTtGc/OZ\n6az89lD9pc8AXTtG0zc5jorqWlbtLmJC387sOVTO7oPO5FQXDu/Or84fTL8Ur+6l2hqnxVqaDxWH\nyN2bR5fwcqKri50T6uWHfD+rQkSM0zqKjDmyHBHj9XB/joxxkoF6UK1FVJ0Pd/U451/U4zw8Hq8y\nhfBIJ3mERUJYhPMId5/ryup/jnBeLzzafY5q+Hz0uvAo5++87rXV47ym9zPacH1Cz5M+P2QJwvhf\nRREsew4W/8UZVrz36dBlgNcfdu1Rf/Ae9x/RXV9bCbuWQtVhp2986GXOidFeE5xvdc2hekyyQMKo\nSRrAoYoaqmtqiYkQqqprSIwNJzoMrzg97oeFh+rqaqitJFKrEU/1CV/2pEm40z2QPMjpkkkeVL+8\nskDYXnCYGaNS668YU1UWbysks3dSfVdQeVUty3ce5NsDZczP2cf+kkrCBEoraygsreJwZQ3Vtc7/\n9+8uHca63CLeXLGHWlW6xEVRcLiK/75iBFdkphIdEU5RWTVhYZC94yCPfLiBDXtLEIG7zh3Iz84b\n5OOQK59tyuexeRtZl+tMNhUVEcad5wxg54FSVuw8WH8+BuDZG7M4o38XHp23kRe/2lFfPrRHAheP\n7EHXjtF8krOPimoPnWIjiYsOr7/QYeZZ/fjeaX0atEoa88zCrTy/aDuTBqYwtEcC147vRYeoYy92\n2FlYyvlPLGRUWiLXje/NgK7xJHaIJC3pxK8BTrfcv7J3cf6w7g1aZm2BJQjTeqrKYMVLTtdT5eGj\nmu0nePQY6SSFPhOdb18tZX8OrHsL9q1rQhxH9e1GxDhze0fEuN/4vH+OPvINsO7bHzjJBvX9XP/t\nz42tU5rzzS/CvzcT7iuuYN66vZw3tFv9xQC7DpTx3BfbeHtlLkXl1bz344mMSGv8ijI48clyVWXZ\njoO8+NV2hnRP4K4pA+vX1XqUlbsOMiotscEVXZU1tewtqmDu2r18uHYvK3cdql8XH92wJXe0kWmd\nGNazE2N6JRIdGUan2Ej6JsfVnzy//rmv+XJLYX392MhwJg9JYWRaIh5V0pI6ECawad9hnpy/meT4\naAoOO91/YQLnDe3G2YO6Mr5vEv1T4o9573Wfme+tzuOu2d8AcPGIHozq1YnzhnanT+cOx1wK7suO\nglJ+/0EO5w7pyrj0JCprPAzr2fjFFk8t2MKizQUkdogkPTmOW8/sS0rHxs+bHY8lCGNMm6CqbM0v\n5bON+5k+sifdEqIpKq9m98Fy9hVXcO6QruwtrmD2km9ZvK0Qj8KGvGJKqxoOPNmzUwxd4qNZs6eI\nqRndePyaUXy0bh/Ldx7k4/X76pPA0Rb9x2S2F5QyZ00eIMfUTYiJYGRaIj0TY4iJDOflxTtJ6RhN\nvntO6eIRPfhw3V5qPc5nadeO0UzJ6MqI1EQqqmuJjAgjXIS+yXH0S4kjJT6asDDhN2+uaTA6QZ0u\ncVF0jIng9P5dSOkYQ2piDILw6zdWN6j3yJUjuGZc75M65pYgjDHtVq1H2ZZ/mOKKanLySjhQWsW2\n/MPsPljO+rxi/n7bBMb2SWqwzZ5D5cREhJF/uJLdB8o5WFZFh6gILh7Zo0E9VWV7QSnLdhwge8dB\nDpRWsb2wlG35R0YwvmBYd7J3HiQ5Poo5d03iQFkVy7Yf4Kuthew5VM6y7QcoaaQVFBURRlxUOAfL\nqhnWM4EHZwxjzpq9gNPtFR0RTv7hSnLyiuuvgqvzxDWjuWRUT749UEavpNiTvs+mzSYIEbkA+DMQ\nDjynqg83VtcShDGmNZVW1hATGU74CbqQPB4lr7iCmloP0RHhVNd62Ly/hM37DpN7qJyC0iqiwsM4\nf1g3Lhjew+c+VJXKGg+7D5ZTUV1LamJsi41x1tQEEVS3qYpIOPAUcB6wG1gmIu+q6vrjb2mMMf4X\n18Q7+8PChNTEhjeB9urcgXOHdGvya4kIMZHhDOgauJsIg2QcgHrjgS2quk1Vq4DXgBkBjskYY0JS\nsCWIVMB7AJ/dbpkxxphWFmwJ4oREZKaIZItIdn5+fqDDMcaYdivYEsQeoJfXz2luWT1VfUZVs1Q1\nKyUlpVWDM8aYUBJsCWIZMFBE+opIFHAt8G6AYzLGmJAUVFcxqWqNiPwYmIdzmessVV0X4LCMMSYk\nBVWCAFDVOcCcQMdhjDGhLti6mIwxxgSJoLuTujlEJB/YeZKbJwMFLRiOP1iMpy7Y44PgjzHY44Pg\njzHY4uujqie8yqdNJ4hTISLZTbnVPJAsxlMX7PFB8McY7PFB8McY7PE1xrqYjDHG+GQJwhhjjE+h\nnCCeCXQATWAxnrpgjw+CP8Zgjw+CP8Zgj8+nkD0HYYwx5vhCuQVhjDHmOEIyQYjIBSKyUUS2iMg9\nAYqhl4gsEJH1IrJORH7qlj8gIntEZKX7uMhrm9+4MW8UkfNbKc4dIrLGjSXbLessIh+LyGb3Ockt\nFxF50o1xtYhk+jm2wV7HaaWIFIvI3YE+hiIyS0T2i8har7JmHzMRucmtv1lEbmqFGB8VkQ1uHG+J\nSKJbni4i5V7H869e24x1/z62uO/jxJMxn3x8zf69+vN/vZEY/+kV3w4RWemWt/oxbBGqGlIPnCE8\ntgL9gChgFTA0AHH0ADLd5Y7AJmAo8ADwSx/1h7qxRgN93fcQ3gpx7gCSjyr7I3CPu3wP8Ii7fBEw\nFxDgNGBJK/9e9wJ9An0MgbOATGDtyR4zoDOwzX1OcpeT/BzjNCDCXX7EK8Z073pH7WepG7e47+NC\nP8bXrN+rv//XfcV41Pr/Ae4L1DFsiUcotiCCYlIiVc1T1RXucgmQw/HnvpgBvKaqlaq6HdiC814C\nYQbwkrv8EnCZV/nL6vgaSBQR3/MptrwpwFZVPd6Nk61yDFV1IXDAx2s355idD3ysqgdU9SDwMXCB\nP2NU1Y9UtW4S5K9xRlNulBtngqp+rc4n3cte76vF4zuOxn6vfv1fP16MbivgamD28fbhz2PYEkIx\nQQTdpEQikg6MAZa4RT92m/mz6roiCFzcCnwkIstFZKZb1k1V89zlvUDdPIqBPLbX0vCfMZiOITT/\nmAX67/RWnG+zdfqKyDci8rmITHLLUt246rRGjM35vQbyGE4C9qnqZq+yYDmGTRaKCSKoiEg88AZw\nt6oWA08D/YHRQB5OMzWQJqpqJnAhcKeInOW90v3WE9BL4cQZGv5S4F9uUbAdwwaC4Zgdj4j8FqgB\nXnGL8oDeqjoG+DnwqogkBCC0oP69HuU6Gn5hCZZj2CyhmCBOOClRaxGRSJzk8IqqvgmgqvtUtVZV\nPcCzHOkCCUjcqrrHfd4PvOXGs6+u68h93h/IGHGS1wpV3efGGlTH0NXcYxaQWEXkZmA6cL2byHC7\nbgrd5eU4/fqD3Hi8u6H8GuNJ/F4DdQwjgCuAf9aVBcsxbK5QTBBBMSmR20f5PJCjqo97lXv32V8O\n1F0h8S5wrYhEi0hfYCDOyS1/xhgnIh3rlnFOYq51Y6m7quYm4B2vGG90r8w5DSjy6lbxpwbf1oLp\nGHpp7jGbB0wTkSS3K2WaW+Y3InIB8GvgUlUt8ypPEZFwd7kfznHb5sZZLCKnuX/PN3q9L3/E19zf\na6D+16cCG1S1vusoWI5hswX6LHkgHjhXjmzCyeK/DVAME3G6GVYDK93HRcDfgTVu+btAD69tfuvG\nvJFWuNIB5+qPVe5jXd2xAroA84HNwCdAZ7dcgKfcGNcAWa0QYxxQCHTyKgvoMcRJVnlANU6f8m0n\nc8xwzgNscR+3tEKMW3D67Ov+Hv/q1r3S/f2vBFYAl3jtJwvng3or8H+4N9/6Kb5m/179+b/uK0a3\n/EXgh0fVbfVj2BIPu5PaGGOMT6HYxWSMMaYJLEEYY4zxyRKEMcYYnyxBGGOM8ckShDHGGJ8sQZig\nJiK17uiXq0RkhYiccYL6iSLyoybs9zMRaXNzBPuTiLwoIlcFOg4TPCxBmGBXrqqjVXUU8Bvgv09Q\nPxE4YYIIFPcuW2PaBEsQpi1JAA6CM4aViMx3WxVrRKRulM6Hgf5uq+NRt+5/uHVWicjDXvv7jogs\nFZFNdYOniUi4OPMiLHMHhfuBW95DRBa6+13rNdhaPXHG//+j+1pLRWSAW/6iiPxVRJYAfxRnboi3\n3f1/LSIjvd7TC+72q0XkSrd8mogsdt/rv9zxuxCRh8WZT2S1iDzmln3HjW+ViCw8wXsSEfk/ceZL\n+ATo2pK/LNP22bcZE+xixZl0JQZnDo1z3fIK4HJVLRaRZOBrEXkXZ66F4ao6GkBELsQZ4nmCqpaJ\nSGevfUeo6nhxJp65H2eIhNtwhrsYJyLRwJci8hHO2DrzVPUhd8iEDo3EW6SqI0TkRuAJnHGNwBlj\n5wxVrRWR/wW+UdXLRORcnCGeRwP/Vbe9G3uS+97+E5iqqqUi8h/Az0XkKZzhJoaoqoo7uQ9wH3C+\nqu7xKmvsPY0BBuPMp9ANWA/MatJvxYQESxAm2JV7fdifDrwsIsNxhqj4gzijy3pwhkju5mP7qcAL\n6o4tpKre4/e/6T4vx5nQBZwxj0Z69cV3whk3ZxkwS5wBFt9W1ZWNxDvb6/lPXuX/UtVad3kiztAL\nqOqnItJFnJE9p+KMF4S77qCITMf5AP/SGaqHKGAxUISTJJ8XkfeB993NvgReFJHXvd5fY+/pLGC2\nG1euiHzayHsyIcoShGkzVHWx+406BWeMnRRgrKpWi8gOnFZGc1S6z7Uc+V8Q4CeqeszAeG4yuhjn\nA/hxVX3ZV5iNLJc2M7b6l8WZOOg6H/GMx5ko6Srgx8C5qvpDEZngxrlcRMY29p7Ea8pOY3yxcxCm\nzRCRITjTSBbifAve7yaHyThTjQKU4EzhWudj4BYR6eDuw7uLyZd5wB1uSwERGSTOqLZ9cCaAeRZ4\nDmeqSV+u8Xpe3EidL4Dr3f2fAxSoMxfIx8CdXu83CWdmtzO9zmfEuTHF4wxQOAf4GTDKXd9fVZeo\n6n1APs5w1z7fE7AQuMY9R9EDmHyCY2NCjLUgTLCrOwcBzjfhm9x+/FeA90RkDZANbABQ1UIR+VKc\nieTnquqvRGQ0kC0iVcAc4N7jvN5zON1NK8Tp08nHmQLyHOBXIlINHMYZltmXJBFZjdM6OeZbv+sB\nnO6q1UAZR4YB/z3wlBt7LfA7VX1TnDkaZrvnD8A5J1ECvCMiMe5x+bm77lERGeiWzccZiXd1I+/p\nLZxzOuuBb2k8oZkQZaO5GtNC3G6uLFUtCHQsxrQE62Iyxhjjk7UgjDHG+GQtCGOMMT5ZgjDGGOOT\nJQhjjDE+WYIwxhjjkyUIY4wxPlmCMMYY49P/B0iBtCVzVx4dAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "geTYEndBzt4F", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"The above graph shows the change is loss during the course of training the network. At the beginning of the training we can see a high loss value. As the networks learned from the data, the loss started to drop until it could no longer improve during the course of training.\n", | |
"\n", | |
"The validation shows a relatively consistent and low loss values. \n", | |
"\n", | |
"\n", | |
"**Note :**\n", | |
"\n", | |
"The validation losses are only calculated once per epoch, whereas training losses are calculated after \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "eFwkk6DJWYRE", | |
"colab_type": "code", | |
"outputId": "f23ceed7-798a-4ab5-802e-d081768a747a", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 283 | |
} | |
}, | |
"source": [ | |
"#Plotting Momentum & Learning Rate\n", | |
"learn.recorder.plot_lr(show_moms=True)\n" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 864x288 with 2 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "6TA6_2R11Njc", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"The above plots learning rate and momentum during the course of training.\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "YWPxEegNWlPS", | |
"colab_type": "code", | |
"outputId": "b2fca3df-d25c-49d8-8b18-6e963bf3d9d0", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 500 | |
} | |
}, | |
"source": [ | |
"#Plotting the metrics of evaluation\n", | |
"learn.recorder.plot_metrics()\n" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<Figure size 432x576 with 2 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "xz7HGNnb8ir6", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"The decreasing RMSE and increasing R-Squared depicts the Goodness Of Fit.\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "aveEvEXHxv55", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"### Exploring Validation Predictions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "RLGU4fqRXmh0", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"val = train_data.tail(1203)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "b94vi3UnZyJ9", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"#Converting the prediction to DataFrame for Comparing\n", | |
"val_preds = learn.get_preds(ds_type=DatasetType.Valid)[0]\n", | |
"val_preds = [i[0] for i in val_preds.tolist()] \n", | |
"val['Predicted'] = val_preds" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "aKgGxIpCa_Gg", | |
"colab_type": "code", | |
"outputId": "88c79fda-8075-4158-9b3f-2defc2f77ec7", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |