diff --git a/BHPD_PyTorch/01-DNN-Regression_PyTorch.ipynb b/BHPD_PyTorch/01-DNN-Regression_PyTorch.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..2272f25f7cc9722ffd9fa7467ee445a4ca2c1783 --- /dev/null +++ b/BHPD_PyTorch/01-DNN-Regression_PyTorch.ipynb @@ -0,0 +1,1149 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img width=\"800px\" src=\"../fidle/img/00-Fidle-header-01.svg\"></img>\n", + "\n", + "\n", + "# <!-- TITLE --> [BHP1] - Regression with a Dense Network (DNN)\n", + "<!-- DESC --> A Simple regression with a Dense Neural Network (DNN) - BHPD dataset\n", + "<!-- AUTHOR : Jean-Luc Parouty (CNRS/SIMaP), Laurent Risser (CNRS/IMT) -->\n", + "\n", + "## Objectives :\n", + " - Predicts **housing prices** from a set of house features. \n", + " - Understanding the **principle** and the **architecture** of a regression with a **dense neural network** \n", + "\n", + "\n", + "The **[Boston Housing Dataset](https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html)** consists of price of houses in various places in Boston. \n", + "Alongside with price, the dataset also provide theses informations : \n", + "\n", + " - CRIM: This is the per capita crime rate by town\n", + " - ZN: This is the proportion of residential land zoned for lots larger than 25,000 sq.ft\n", + " - INDUS: This is the proportion of non-retail business acres per town\n", + " - CHAS: This is the Charles River dummy variable (this is equal to 1 if tract bounds river; 0 otherwise)\n", + " - NOX: This is the nitric oxides concentration (parts per 10 million)\n", + " - RM: This is the average number of rooms per dwelling\n", + " - AGE: This is the proportion of owner-occupied units built prior to 1940\n", + " - DIS: This is the weighted distances to five Boston employment centers\n", + " - RAD: This is the index of accessibility to radial highways\n", + " - TAX: This is the full-value property-tax rate per 10,000 dollars\n", + " - PTRATIO: This is the pupil-teacher ratio by town\n", + " - B: This is calculated as 1000(Bk — 0.63)^2, where Bk is the proportion of people of African American descent by town\n", + " - LSTAT: This is the percentage lower status of the population\n", + " - MEDV: This is the median value of owner-occupied homes in 1000 dollars\n", + "## What we're going to do :\n", + "\n", + " - Retrieve data\n", + " - Preparing the data\n", + " - Build a model\n", + " - Train the model\n", + " - Evaluate the result\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 1 - Import and init" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "from torch.autograd import Variable\n", + "\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import sys,os\n", + "\n", + "import pandas as pd\n", + "\n", + "sys.path.append('..')\n", + "import fidle.pwk as ooo\n", + "\n", + "from fidle_pwk_additional import convergence_history_MSELoss\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 2 - Retrieve data\n", + "\n", + "\n", + "Boston housing is a famous historic dataset, which can be get here: [Boston housing datasets](https://www.kaggle.com/puxama/bostoncsv) " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<style type=\"text/css\" >\n", + "</style> \n", + "<table id=\"T_c53617c0_0d37_11eb_8a97_acde48001122\" ><caption>Few lines of the dataset :</caption> \n", + "<thead> <tr> \n", + " <th class=\"blank level0\" ></th> \n", + " <th class=\"col_heading level0 col0\" >crim</th> \n", + " <th class=\"col_heading level0 col1\" >zn</th> \n", + " <th class=\"col_heading level0 col2\" >indus</th> \n", + " <th class=\"col_heading level0 col3\" >chas</th> \n", + " <th class=\"col_heading level0 col4\" >nox</th> \n", + " <th class=\"col_heading level0 col5\" >rm</th> \n", + " <th class=\"col_heading level0 col6\" >age</th> \n", + " <th class=\"col_heading level0 col7\" >dis</th> \n", + " <th class=\"col_heading level0 col8\" >rad</th> \n", + " <th class=\"col_heading level0 col9\" >tax</th> \n", + " <th class=\"col_heading level0 col10\" >ptratio</th> \n", + " <th class=\"col_heading level0 col11\" >b</th> \n", + " <th class=\"col_heading level0 col12\" >lstat</th> \n", + " <th class=\"col_heading level0 col13\" >medv</th> \n", + " </tr></thead> \n", + "<tbody> <tr> \n", + " <th id=\"T_c53617c0_0d37_11eb_8a97_acde48001122level0_row0\" class=\"row_heading level0 row0\" >0</th> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col0\" class=\"data row0 col0\" >0.01</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col1\" class=\"data row0 col1\" >18.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col2\" class=\"data row0 col2\" >2.31</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col3\" class=\"data row0 col3\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col4\" class=\"data row0 col4\" >0.54</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col5\" class=\"data row0 col5\" >6.58</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col6\" class=\"data row0 col6\" >65.20</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col7\" class=\"data row0 col7\" >4.09</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col8\" class=\"data row0 col8\" >1.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col9\" class=\"data row0 col9\" >296.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col10\" class=\"data row0 col10\" >15.30</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col11\" class=\"data row0 col11\" >396.90</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col12\" class=\"data row0 col12\" >4.98</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row0_col13\" class=\"data row0 col13\" >24.00</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c53617c0_0d37_11eb_8a97_acde48001122level0_row1\" class=\"row_heading level0 row1\" >1</th> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col0\" class=\"data row1 col0\" >0.03</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col1\" class=\"data row1 col1\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col2\" class=\"data row1 col2\" >7.07</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col3\" class=\"data row1 col3\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col4\" class=\"data row1 col4\" >0.47</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col5\" class=\"data row1 col5\" >6.42</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col6\" class=\"data row1 col6\" >78.90</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col7\" class=\"data row1 col7\" >4.97</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col8\" class=\"data row1 col8\" >2.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col9\" class=\"data row1 col9\" >242.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col10\" class=\"data row1 col10\" >17.80</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col11\" class=\"data row1 col11\" >396.90</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col12\" class=\"data row1 col12\" >9.14</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row1_col13\" class=\"data row1 col13\" >21.60</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c53617c0_0d37_11eb_8a97_acde48001122level0_row2\" class=\"row_heading level0 row2\" >2</th> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col0\" class=\"data row2 col0\" >0.03</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col1\" class=\"data row2 col1\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col2\" class=\"data row2 col2\" >7.07</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col3\" class=\"data row2 col3\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col4\" class=\"data row2 col4\" >0.47</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col5\" class=\"data row2 col5\" >7.18</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col6\" class=\"data row2 col6\" >61.10</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col7\" class=\"data row2 col7\" >4.97</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col8\" class=\"data row2 col8\" >2.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col9\" class=\"data row2 col9\" >242.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col10\" class=\"data row2 col10\" >17.80</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col11\" class=\"data row2 col11\" >392.83</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col12\" class=\"data row2 col12\" >4.03</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row2_col13\" class=\"data row2 col13\" >34.70</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c53617c0_0d37_11eb_8a97_acde48001122level0_row3\" class=\"row_heading level0 row3\" >3</th> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col0\" class=\"data row3 col0\" >0.03</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col1\" class=\"data row3 col1\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col2\" class=\"data row3 col2\" >2.18</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col3\" class=\"data row3 col3\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col4\" class=\"data row3 col4\" >0.46</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col5\" class=\"data row3 col5\" >7.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col6\" class=\"data row3 col6\" >45.80</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col7\" class=\"data row3 col7\" >6.06</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col8\" class=\"data row3 col8\" >3.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col9\" class=\"data row3 col9\" >222.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col10\" class=\"data row3 col10\" >18.70</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col11\" class=\"data row3 col11\" >394.63</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col12\" class=\"data row3 col12\" >2.94</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row3_col13\" class=\"data row3 col13\" >33.40</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c53617c0_0d37_11eb_8a97_acde48001122level0_row4\" class=\"row_heading level0 row4\" >4</th> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col0\" class=\"data row4 col0\" >0.07</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col1\" class=\"data row4 col1\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col2\" class=\"data row4 col2\" >2.18</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col3\" class=\"data row4 col3\" >0.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col4\" class=\"data row4 col4\" >0.46</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col5\" class=\"data row4 col5\" >7.15</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col6\" class=\"data row4 col6\" >54.20</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col7\" class=\"data row4 col7\" >6.06</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col8\" class=\"data row4 col8\" >3.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col9\" class=\"data row4 col9\" >222.00</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col10\" class=\"data row4 col10\" >18.70</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col11\" class=\"data row4 col11\" >396.90</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col12\" class=\"data row4 col12\" >5.33</td> \n", + " <td id=\"T_c53617c0_0d37_11eb_8a97_acde48001122row4_col13\" class=\"data row4 col13\" >36.20</td> \n", + " </tr></tbody> \n", + "</table> " + ], + "text/plain": [ + "<pandas.io.formats.style.Styler at 0x1a3b8020f0>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Missing Data : 0 Shape is : (506, 14)\n" + ] + } + ], + "source": [ + "data = pd.read_csv('./BostonHousing.csv', header=0)\n", + "\n", + "display(data.head(5).style.format(\"{0:.2f}\").set_caption(\"Few lines of the dataset :\"))\n", + "print('Missing Data : ',data.isna().sum().sum(), ' Shape is : ', data.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 3 - Preparing the data\n", + "### 3.1 - Split data\n", + "We will use 70% of the data for training and 30% for validation. \n", + "The dataset is **shuffled** and shared between **learning** and **testing**. \n", + "x will be input data and y the expected output" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original data shape was : (506, 14)\n", + "x_train : (354, 13) y_train : (354,)\n", + "x_test : (152, 13) y_test : (152,)\n" + ] + } + ], + "source": [ + "# ---- Suffle and Split => train, test\n", + "#\n", + "data_train = data.sample(frac=0.7, axis=0)\n", + "data_test = data.drop(data_train.index)\n", + "\n", + "# ---- Split => x,y (medv is price)\n", + "#\n", + "x_train = data_train.drop('medv', axis=1)\n", + "y_train = data_train['medv']\n", + "x_test = data_test.drop('medv', axis=1)\n", + "y_test = data_test['medv']\n", + "\n", + "print('Original data shape was : ',data.shape)\n", + "print('x_train : ',x_train.shape, 'y_train : ',y_train.shape)\n", + "print('x_test : ',x_test.shape, 'y_test : ',y_test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 - Data normalization\n", + "**Note :** \n", + " - All input data must be normalized, train and test. \n", + " - To do this we will **subtract the mean** and **divide by the standard deviation**. \n", + " - But test data should not be used in any way, even for normalization. \n", + " - The mean and the standard deviation will therefore only be calculated with the train data." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<style type=\"text/css\" >\n", + "</style> \n", + "<table id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122\" ><caption>Before normalization :</caption> \n", + "<thead> <tr> \n", + " <th class=\"blank level0\" ></th> \n", + " <th class=\"col_heading level0 col0\" >crim</th> \n", + " <th class=\"col_heading level0 col1\" >zn</th> \n", + " <th class=\"col_heading level0 col2\" >indus</th> \n", + " <th class=\"col_heading level0 col3\" >chas</th> \n", + " <th class=\"col_heading level0 col4\" >nox</th> \n", + " <th class=\"col_heading level0 col5\" >rm</th> \n", + " <th class=\"col_heading level0 col6\" >age</th> \n", + " <th class=\"col_heading level0 col7\" >dis</th> \n", + " <th class=\"col_heading level0 col8\" >rad</th> \n", + " <th class=\"col_heading level0 col9\" >tax</th> \n", + " <th class=\"col_heading level0 col10\" >ptratio</th> \n", + " <th class=\"col_heading level0 col11\" >b</th> \n", + " <th class=\"col_heading level0 col12\" >lstat</th> \n", + " </tr></thead> \n", + "<tbody> <tr> \n", + " <th id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122level0_row0\" class=\"row_heading level0 row0\" >count</th> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col0\" class=\"data row0 col0\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col1\" class=\"data row0 col1\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col2\" class=\"data row0 col2\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col3\" class=\"data row0 col3\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col4\" class=\"data row0 col4\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col5\" class=\"data row0 col5\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col6\" class=\"data row0 col6\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col7\" class=\"data row0 col7\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col8\" class=\"data row0 col8\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col9\" class=\"data row0 col9\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col10\" class=\"data row0 col10\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col11\" class=\"data row0 col11\" >354.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row0_col12\" class=\"data row0 col12\" >354.00</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122level0_row1\" class=\"row_heading level0 row1\" >mean</th> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col0\" class=\"data row1 col0\" >3.97</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col1\" class=\"data row1 col1\" >11.41</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col2\" class=\"data row1 col2\" >11.11</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col3\" class=\"data row1 col3\" >0.07</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col4\" class=\"data row1 col4\" >0.55</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col5\" class=\"data row1 col5\" >6.31</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col6\" class=\"data row1 col6\" >68.85</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col7\" class=\"data row1 col7\" >3.81</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col8\" class=\"data row1 col8\" >10.05</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col9\" class=\"data row1 col9\" >414.90</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col10\" class=\"data row1 col10\" >18.48</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col11\" class=\"data row1 col11\" >356.21</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row1_col12\" class=\"data row1 col12\" >12.61</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122level0_row2\" class=\"row_heading level0 row2\" >std</th> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col0\" class=\"data row2 col0\" >8.99</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col1\" class=\"data row2 col1\" >23.03</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col2\" class=\"data row2 col2\" >6.83</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col3\" class=\"data row2 col3\" >0.25</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col4\" class=\"data row2 col4\" >0.11</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col5\" class=\"data row2 col5\" >0.71</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col6\" class=\"data row2 col6\" >28.32</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col7\" class=\"data row2 col7\" >2.14</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col8\" class=\"data row2 col8\" >8.88</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col9\" class=\"data row2 col9\" >170.70</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col10\" class=\"data row2 col10\" >2.12</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col11\" class=\"data row2 col11\" >92.28</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row2_col12\" class=\"data row2 col12\" >7.30</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122level0_row3\" class=\"row_heading level0 row3\" >min</th> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col0\" class=\"data row3 col0\" >0.01</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col1\" class=\"data row3 col1\" >0.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col2\" class=\"data row3 col2\" >0.46</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col3\" class=\"data row3 col3\" >0.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col4\" class=\"data row3 col4\" >0.39</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col5\" class=\"data row3 col5\" >4.14</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col6\" class=\"data row3 col6\" >6.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col7\" class=\"data row3 col7\" >1.13</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col8\" class=\"data row3 col8\" >1.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col9\" class=\"data row3 col9\" >187.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col10\" class=\"data row3 col10\" >13.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col11\" class=\"data row3 col11\" >0.32</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row3_col12\" class=\"data row3 col12\" >1.73</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122level0_row4\" class=\"row_heading level0 row4\" >25%</th> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col0\" class=\"data row4 col0\" >0.08</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col1\" class=\"data row4 col1\" >0.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col2\" class=\"data row4 col2\" >5.13</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col3\" class=\"data row4 col3\" >0.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col4\" class=\"data row4 col4\" >0.45</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col5\" class=\"data row4 col5\" >5.88</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col6\" class=\"data row4 col6\" >45.18</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col7\" class=\"data row4 col7\" >2.07</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col8\" class=\"data row4 col8\" >4.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col9\" class=\"data row4 col9\" >284.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col10\" class=\"data row4 col10\" >17.10</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col11\" class=\"data row4 col11\" >374.71</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row4_col12\" class=\"data row4 col12\" >6.72</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122level0_row5\" class=\"row_heading level0 row5\" >50%</th> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col0\" class=\"data row5 col0\" >0.29</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col1\" class=\"data row5 col1\" >0.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col2\" class=\"data row5 col2\" >9.69</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col3\" class=\"data row5 col3\" >0.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col4\" class=\"data row5 col4\" >0.53</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col5\" class=\"data row5 col5\" >6.23</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col6\" class=\"data row5 col6\" >77.75</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col7\" class=\"data row5 col7\" >3.21</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col8\" class=\"data row5 col8\" >5.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col9\" class=\"data row5 col9\" >348.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col10\" class=\"data row5 col10\" >19.10</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col11\" class=\"data row5 col11\" >390.95</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row5_col12\" class=\"data row5 col12\" >11.27</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122level0_row6\" class=\"row_heading level0 row6\" >75%</th> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col0\" class=\"data row6 col0\" >4.21</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col1\" class=\"data row6 col1\" >12.50</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col2\" class=\"data row6 col2\" >18.10</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col3\" class=\"data row6 col3\" >0.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col4\" class=\"data row6 col4\" >0.63</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col5\" class=\"data row6 col5\" >6.66</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col6\" class=\"data row6 col6\" >94.47</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col7\" class=\"data row6 col7\" >5.29</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col8\" class=\"data row6 col8\" >24.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col9\" class=\"data row6 col9\" >666.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col10\" class=\"data row6 col10\" >20.20</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col11\" class=\"data row6 col11\" >396.27</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row6_col12\" class=\"data row6 col12\" >17.07</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122level0_row7\" class=\"row_heading level0 row7\" >max</th> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col0\" class=\"data row7 col0\" >88.98</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col1\" class=\"data row7 col1\" >95.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col2\" class=\"data row7 col2\" >27.74</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col3\" class=\"data row7 col3\" >1.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col4\" class=\"data row7 col4\" >0.87</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col5\" class=\"data row7 col5\" >8.78</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col6\" class=\"data row7 col6\" >100.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col7\" class=\"data row7 col7\" >12.13</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col8\" class=\"data row7 col8\" >24.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col9\" class=\"data row7 col9\" >711.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col10\" class=\"data row7 col10\" >22.00</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col11\" class=\"data row7 col11\" >396.90</td> \n", + " <td id=\"T_c6fdf8e8_0d37_11eb_8a97_acde48001122row7_col12\" class=\"data row7 col12\" >37.97</td> \n", + " </tr></tbody> \n", + "</table> " + ], + "text/plain": [ + "<pandas.io.formats.style.Styler at 0x1a3b9c4d68>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<style type=\"text/css\" >\n", + "</style> \n", + "<table id=\"T_c7048582_0d37_11eb_8a97_acde48001122\" ><caption>After normalization :</caption> \n", + "<thead> <tr> \n", + " <th class=\"blank level0\" ></th> \n", + " <th class=\"col_heading level0 col0\" >crim</th> \n", + " <th class=\"col_heading level0 col1\" >zn</th> \n", + " <th class=\"col_heading level0 col2\" >indus</th> \n", + " <th class=\"col_heading level0 col3\" >chas</th> \n", + " <th class=\"col_heading level0 col4\" >nox</th> \n", + " <th class=\"col_heading level0 col5\" >rm</th> \n", + " <th class=\"col_heading level0 col6\" >age</th> \n", + " <th class=\"col_heading level0 col7\" >dis</th> \n", + " <th class=\"col_heading level0 col8\" >rad</th> \n", + " <th class=\"col_heading level0 col9\" >tax</th> \n", + " <th class=\"col_heading level0 col10\" >ptratio</th> \n", + " <th class=\"col_heading level0 col11\" >b</th> \n", + " <th class=\"col_heading level0 col12\" >lstat</th> \n", + " </tr></thead> \n", + "<tbody> <tr> \n", + " <th id=\"T_c7048582_0d37_11eb_8a97_acde48001122level0_row0\" class=\"row_heading level0 row0\" >count</th> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col0\" class=\"data row0 col0\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col1\" class=\"data row0 col1\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col2\" class=\"data row0 col2\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col3\" class=\"data row0 col3\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col4\" class=\"data row0 col4\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col5\" class=\"data row0 col5\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col6\" class=\"data row0 col6\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col7\" class=\"data row0 col7\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col8\" class=\"data row0 col8\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col9\" class=\"data row0 col9\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col10\" class=\"data row0 col10\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col11\" class=\"data row0 col11\" >354.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row0_col12\" class=\"data row0 col12\" >354.00</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7048582_0d37_11eb_8a97_acde48001122level0_row1\" class=\"row_heading level0 row1\" >mean</th> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col0\" class=\"data row1 col0\" >0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col1\" class=\"data row1 col1\" >-0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col2\" class=\"data row1 col2\" >0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col3\" class=\"data row1 col3\" >0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col4\" class=\"data row1 col4\" >-0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col5\" class=\"data row1 col5\" >0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col6\" class=\"data row1 col6\" >-0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col7\" class=\"data row1 col7\" >0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col8\" class=\"data row1 col8\" >-0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col9\" class=\"data row1 col9\" >-0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col10\" class=\"data row1 col10\" >0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col11\" class=\"data row1 col11\" >0.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row1_col12\" class=\"data row1 col12\" >-0.00</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7048582_0d37_11eb_8a97_acde48001122level0_row2\" class=\"row_heading level0 row2\" >std</th> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col0\" class=\"data row2 col0\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col1\" class=\"data row2 col1\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col2\" class=\"data row2 col2\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col3\" class=\"data row2 col3\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col4\" class=\"data row2 col4\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col5\" class=\"data row2 col5\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col6\" class=\"data row2 col6\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col7\" class=\"data row2 col7\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col8\" class=\"data row2 col8\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col9\" class=\"data row2 col9\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col10\" class=\"data row2 col10\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col11\" class=\"data row2 col11\" >1.00</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row2_col12\" class=\"data row2 col12\" >1.00</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7048582_0d37_11eb_8a97_acde48001122level0_row3\" class=\"row_heading level0 row3\" >min</th> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col0\" class=\"data row3 col0\" >-0.44</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col1\" class=\"data row3 col1\" >-0.50</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col2\" class=\"data row3 col2\" >-1.56</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col3\" class=\"data row3 col3\" >-0.27</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col4\" class=\"data row3 col4\" >-1.47</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col5\" class=\"data row3 col5\" >-3.04</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col6\" class=\"data row3 col6\" >-2.22</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col7\" class=\"data row3 col7\" >-1.26</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col8\" class=\"data row3 col8\" >-1.02</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col9\" class=\"data row3 col9\" >-1.34</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col10\" class=\"data row3 col10\" >-2.59</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col11\" class=\"data row3 col11\" >-3.86</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row3_col12\" class=\"data row3 col12\" >-1.49</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7048582_0d37_11eb_8a97_acde48001122level0_row4\" class=\"row_heading level0 row4\" >25%</th> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col0\" class=\"data row4 col0\" >-0.43</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col1\" class=\"data row4 col1\" >-0.50</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col2\" class=\"data row4 col2\" >-0.88</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col3\" class=\"data row4 col3\" >-0.27</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col4\" class=\"data row4 col4\" >-0.93</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col5\" class=\"data row4 col5\" >-0.59</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col6\" class=\"data row4 col6\" >-0.84</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col7\" class=\"data row4 col7\" >-0.82</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col8\" class=\"data row4 col8\" >-0.68</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col9\" class=\"data row4 col9\" >-0.77</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col10\" class=\"data row4 col10\" >-0.65</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col11\" class=\"data row4 col11\" >0.20</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row4_col12\" class=\"data row4 col12\" >-0.81</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7048582_0d37_11eb_8a97_acde48001122level0_row5\" class=\"row_heading level0 row5\" >50%</th> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col0\" class=\"data row5 col0\" >-0.41</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col1\" class=\"data row5 col1\" >-0.50</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col2\" class=\"data row5 col2\" >-0.21</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col3\" class=\"data row5 col3\" >-0.27</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col4\" class=\"data row5 col4\" >-0.19</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col5\" class=\"data row5 col5\" >-0.11</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col6\" class=\"data row5 col6\" >0.31</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col7\" class=\"data row5 col7\" >-0.28</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col8\" class=\"data row5 col8\" >-0.57</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col9\" class=\"data row5 col9\" >-0.39</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col10\" class=\"data row5 col10\" >0.29</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col11\" class=\"data row5 col11\" >0.38</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row5_col12\" class=\"data row5 col12\" >-0.18</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7048582_0d37_11eb_8a97_acde48001122level0_row6\" class=\"row_heading level0 row6\" >75%</th> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col0\" class=\"data row6 col0\" >0.03</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col1\" class=\"data row6 col1\" >0.05</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col2\" class=\"data row6 col2\" >1.02</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col3\" class=\"data row6 col3\" >-0.27</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col4\" class=\"data row6 col4\" >0.65</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col5\" class=\"data row6 col5\" >0.49</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col6\" class=\"data row6 col6\" >0.90</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col7\" class=\"data row6 col7\" >0.69</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col8\" class=\"data row6 col8\" >1.57</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col9\" class=\"data row6 col9\" >1.47</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col10\" class=\"data row6 col10\" >0.81</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col11\" class=\"data row6 col11\" >0.43</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row6_col12\" class=\"data row6 col12\" >0.61</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7048582_0d37_11eb_8a97_acde48001122level0_row7\" class=\"row_heading level0 row7\" >max</th> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col0\" class=\"data row7 col0\" >9.45</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col1\" class=\"data row7 col1\" >3.63</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col2\" class=\"data row7 col2\" >2.44</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col3\" class=\"data row7 col3\" >3.70</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col4\" class=\"data row7 col4\" >2.76</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col5\" class=\"data row7 col5\" >3.47</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col6\" class=\"data row7 col6\" >1.10</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col7\" class=\"data row7 col7\" >3.89</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col8\" class=\"data row7 col8\" >1.57</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col9\" class=\"data row7 col9\" >1.73</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col10\" class=\"data row7 col10\" >1.66</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col11\" class=\"data row7 col11\" >0.44</td> \n", + " <td id=\"T_c7048582_0d37_11eb_8a97_acde48001122row7_col12\" class=\"data row7 col12\" >3.48</td> \n", + " </tr></tbody> \n", + "</table> " + ], + "text/plain": [ + "<pandas.io.formats.style.Styler at 0x1a3b8b5828>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<style type=\"text/css\" >\n", + "</style> \n", + "<table id=\"T_c7056722_0d37_11eb_8a97_acde48001122\" ><caption>Few lines of the dataset :</caption> \n", + "<thead> <tr> \n", + " <th class=\"blank level0\" ></th> \n", + " <th class=\"col_heading level0 col0\" >crim</th> \n", + " <th class=\"col_heading level0 col1\" >zn</th> \n", + " <th class=\"col_heading level0 col2\" >indus</th> \n", + " <th class=\"col_heading level0 col3\" >chas</th> \n", + " <th class=\"col_heading level0 col4\" >nox</th> \n", + " <th class=\"col_heading level0 col5\" >rm</th> \n", + " <th class=\"col_heading level0 col6\" >age</th> \n", + " <th class=\"col_heading level0 col7\" >dis</th> \n", + " <th class=\"col_heading level0 col8\" >rad</th> \n", + " <th class=\"col_heading level0 col9\" >tax</th> \n", + " <th class=\"col_heading level0 col10\" >ptratio</th> \n", + " <th class=\"col_heading level0 col11\" >b</th> \n", + " <th class=\"col_heading level0 col12\" >lstat</th> \n", + " </tr></thead> \n", + "<tbody> <tr> \n", + " <th id=\"T_c7056722_0d37_11eb_8a97_acde48001122level0_row0\" class=\"row_heading level0 row0\" >275</th> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col0\" class=\"data row0 col0\" >-0.43</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col1\" class=\"data row0 col1\" >1.24</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col2\" class=\"data row0 col2\" >-0.69</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col3\" class=\"data row0 col3\" >-0.27</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col4\" class=\"data row0 col4\" >-0.93</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col5\" class=\"data row0 col5\" >0.77</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col6\" class=\"data row0 col6\" >-0.92</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col7\" class=\"data row0 col7\" >0.21</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col8\" class=\"data row0 col8\" >-0.68</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col9\" class=\"data row0 col9\" >-0.94</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col10\" class=\"data row0 col10\" >-0.42</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col11\" class=\"data row0 col11\" >0.44</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row0_col12\" class=\"data row0 col12\" >-1.32</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7056722_0d37_11eb_8a97_acde48001122level0_row1\" class=\"row_heading level0 row1\" >51</th> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col0\" class=\"data row1 col0\" >-0.44</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col1\" class=\"data row1 col1\" >0.42</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col2\" class=\"data row1 col2\" >-0.80</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col3\" class=\"data row1 col3\" >-0.27</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col4\" class=\"data row1 col4\" >-1.00</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col5\" class=\"data row1 col5\" >-0.27</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col6\" class=\"data row1 col6\" >-0.21</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col7\" class=\"data row1 col7\" >1.41</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col8\" class=\"data row1 col8\" >-0.68</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col9\" class=\"data row1 col9\" >-1.01</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col10\" class=\"data row1 col10\" >-0.79</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col11\" class=\"data row1 col11\" >0.41</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row1_col12\" class=\"data row1 col12\" >-0.44</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7056722_0d37_11eb_8a97_acde48001122level0_row2\" class=\"row_heading level0 row2\" >54</th> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col0\" class=\"data row2 col0\" >-0.44</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col1\" class=\"data row2 col1\" >2.76</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col2\" class=\"data row2 col2\" >-1.04</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col3\" class=\"data row2 col3\" >-0.27</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col4\" class=\"data row2 col4\" >-1.26</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col5\" class=\"data row2 col5\" >-0.59</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col6\" class=\"data row2 col6\" >-0.75</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col7\" class=\"data row2 col7\" >1.64</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col8\" class=\"data row2 col8\" >-0.79</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col9\" class=\"data row2 col9\" >0.32</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col10\" class=\"data row2 col10\" >1.24</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col11\" class=\"data row2 col11\" >0.44</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row2_col12\" class=\"data row2 col12\" >0.30</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7056722_0d37_11eb_8a97_acde48001122level0_row3\" class=\"row_heading level0 row3\" >319</th> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col0\" class=\"data row3 col0\" >-0.39</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col1\" class=\"data row3 col1\" >-0.50</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col2\" class=\"data row3 col2\" >-0.18</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col3\" class=\"data row3 col3\" >-0.27</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col4\" class=\"data row3 col4\" >-0.09</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col5\" class=\"data row3 col5\" >-0.27</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col6\" class=\"data row3 col6\" >-0.35</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col7\" class=\"data row3 col7\" >0.09</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col8\" class=\"data row3 col8\" >-0.68</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col9\" class=\"data row3 col9\" >-0.65</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col10\" class=\"data row3 col10\" >-0.04</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col11\" class=\"data row3 col11\" >0.43</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row3_col12\" class=\"data row3 col12\" >0.02</td> \n", + " </tr> <tr> \n", + " <th id=\"T_c7056722_0d37_11eb_8a97_acde48001122level0_row4\" class=\"row_heading level0 row4\" >202</th> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col0\" class=\"data row4 col0\" >-0.44</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col1\" class=\"data row4 col1\" >3.09</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col2\" class=\"data row4 col2\" >-1.33</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col3\" class=\"data row4 col3\" >-0.27</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col4\" class=\"data row4 col4\" >-1.21</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col5\" class=\"data row4 col5\" >1.83</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col6\" class=\"data row4 col6\" >-1.88</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col7\" class=\"data row4 col7\" >1.15</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col8\" class=\"data row4 col8\" >-0.91</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col9\" class=\"data row4 col9\" >-0.39</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col10\" class=\"data row4 col10\" >-1.79</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col11\" class=\"data row4 col11\" >0.42</td> \n", + " <td id=\"T_c7056722_0d37_11eb_8a97_acde48001122row4_col12\" class=\"data row4 col12\" >-1.30</td> \n", + " </tr></tbody> \n", + "</table> " + ], + "text/plain": [ + "<pandas.io.formats.style.Styler at 0x1a3ba6e8d0>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(x_train.describe().style.format(\"{0:.2f}\").set_caption(\"Before normalization :\"))\n", + "\n", + "mean = x_train.mean()\n", + "std = x_train.std()\n", + "x_train = (x_train - mean) / std\n", + "x_test = (x_test - mean) / std\n", + "\n", + "display(x_train.describe().style.format(\"{0:.2f}\").set_caption(\"After normalization :\"))\n", + "display(x_train.head(5).style.format(\"{0:.2f}\").set_caption(\"Few lines of the dataset :\"))\n", + "\n", + "x_train, y_train = np.array(x_train), np.array(y_train)\n", + "x_test, y_test = np.array(x_test), np.array(y_test)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 4 - Build a model\n", + "About informations about : \n", + " - [Optimizer](https://pytorch.org/docs/stable/optim.html)\n", + " - [Basic neural-network blocks](https://pytorch.org/docs/stable/nn.html)\n", + " - [Loss](https://pytorch.org/docs/stable/nn.html#loss-functions)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "class model_v1(nn.Module):\n", + " \"\"\"\n", + " Basic fully connected neural-network for tabular data\n", + " \"\"\"\n", + " def __init__(self,num_vars):\n", + " super(model_v1, self).__init__()\n", + " self.num_vars=num_vars\n", + " self.hidden1 = nn.Linear(self.num_vars, 64)\n", + " self.hidden2 = nn.Linear(64, 64)\n", + " self.hidden3 = nn.Linear(64, 1)\n", + "\n", + " def forward(self, x):\n", + " x = x.view(-1,self.num_vars) #flatten the observation before using fully-connected layers\n", + " x = self.hidden1(x)\n", + " x = F.relu(x)\n", + " x = self.hidden2(x)\n", + " x = F.relu(x)\n", + " x = self.hidden3(x)\n", + " return x\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 5 - Train the model\n", + "\n", + "#### 5.1 - stochastic gradient descent strategy to fit the model" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def fit(model,X_train,Y_train,X_test,Y_test, EPOCHS = 5, BATCH_SIZE = 32):\n", + " \n", + " loss = nn.MSELoss()\n", + " optimizer = torch.optim.Adam(model.parameters(),lr=1e-3) #lr is the learning rate\n", + " model.train()\n", + " \n", + " history=convergence_history_MSELoss()\n", + " \n", + " history.update(model,X_train,Y_train,X_test,Y_test)\n", + " \n", + " n=X_train.shape[0] #number of observations in the training data\n", + " \n", + " #stochastic gradient descent\n", + " for epoch in range(EPOCHS):\n", + " \n", + " batch_start=0\n", + " epoch_shuffler=np.arange(n) \n", + " np.random.shuffle(epoch_shuffler) #remark that 'utilsData.DataLoader' could be used instead\n", + " \n", + " while batch_start+BATCH_SIZE < n:\n", + " #get mini-batch observation\n", + " mini_batch_observations = epoch_shuffler[batch_start:batch_start+BATCH_SIZE]\n", + " var_X_batch = Variable(X_train[mini_batch_observations,:]).float()\n", + " var_Y_batch = Variable(Y_train[mini_batch_observations]).float()\n", + " \n", + " #gradient descent step\n", + " optimizer.zero_grad() #set the parameters gradients to 0\n", + " Y_pred_batch = model(var_X_batch) #predict y with the current NN parameters\n", + " \n", + " curr_loss = loss(Y_pred_batch.view(-1), var_Y_batch.view(-1)) #compute the current loss\n", + " curr_loss.backward() #compute the loss gradient w.r.t. all NN parameters\n", + " optimizer.step() #update the NN parameters\n", + " \n", + " #prepare the next mini-batch of the epoch\n", + " batch_start+=BATCH_SIZE\n", + " \n", + " history.update(model,X_train,Y_train,X_test,Y_test)\n", + " \n", + " return history\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 5.2 - get the model" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "model_v1(\n", + " (hidden1): Linear(in_features=13, out_features=64, bias=True)\n", + " (hidden2): Linear(in_features=64, out_features=64, bias=True)\n", + " (hidden3): Linear(in_features=64, out_features=1, bias=True)\n", + ")\n" + ] + } + ], + "source": [ + "\n", + " \n", + "model=model_v1( x_train[0,:].shape[0] )\n", + "\n", + "print(model)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 5.3 - train the model" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "torch_x_train=torch.from_numpy(x_train)\n", + "torch_y_train=torch.from_numpy(y_train)\n", + "torch_x_test=torch.from_numpy(x_test)\n", + "torch_y_test=torch.from_numpy(y_test)\n", + "\n", + "batch_size = 10\n", + "epochs = 100\n", + "\n", + "\n", + "history=fit(model,torch_x_train,torch_y_train,torch_x_test,torch_y_test,EPOCHS=epochs,BATCH_SIZE = batch_size)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 6 - Evaluate\n", + "### 6.1 - Model evaluation\n", + "MAE = Mean Absolute Error (between the labels and predictions) \n", + "A mae equal to 3 represents an average error in prediction of $3k." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x_test / loss : 9.2881\n", + "x_test / mae : 2.3158\n" + ] + } + ], + "source": [ + "var_x_test = Variable(torch_x_test).float()\n", + "var_y_test = Variable(torch_y_test).float()\n", + "y_pred = model(var_x_test)\n", + "\n", + "nn_loss = nn.MSELoss()\n", + "nn_MAE_loss = nn.L1Loss()\n", + "\n", + "print('x_test / loss : {:5.4f}'.format(nn_loss(y_pred.view(-1), var_y_test.view(-1)).item()))\n", + "print('x_test / mae : {:5.4f}'.format(nn_MAE_loss(y_pred.view(-1), var_y_test.view(-1)).item()))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6.2 - Training history\n", + "What was the best result during our training ?" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "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>loss</th>\n", + " <th>mae</th>\n", + " <th>val_loss</th>\n", + " <th>val_mae</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>count</th>\n", + " <td>101.000000</td>\n", + " <td>101.000000</td>\n", + " <td>101.000000</td>\n", + " <td>101.000000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>mean</th>\n", + " <td>23.476395</td>\n", + " <td>2.692269</td>\n", + " <td>23.864368</td>\n", + " <td>2.989625</td>\n", + " </tr>\n", + " <tr>\n", + " <th>std</th>\n", + " <td>76.294859</td>\n", + " <td>2.956140</td>\n", + " <td>74.627726</td>\n", + " <td>2.845627</td>\n", + " </tr>\n", + " <tr>\n", + " <th>min</th>\n", + " <td>3.821492</td>\n", + " <td>1.493004</td>\n", + " <td>8.697336</td>\n", + " <td>2.217072</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25%</th>\n", + " <td>5.978652</td>\n", + " <td>1.768553</td>\n", + " <td>8.936612</td>\n", + " <td>2.270410</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50%</th>\n", + " <td>8.439981</td>\n", + " <td>2.047496</td>\n", + " <td>9.364830</td>\n", + " <td>2.329784</td>\n", + " </tr>\n", + " <tr>\n", + " <th>75%</th>\n", + " <td>13.354569</td>\n", + " <td>2.480675</td>\n", + " <td>11.053273</td>\n", + " <td>2.494222</td>\n", + " </tr>\n", + " <tr>\n", + " <th>max</th>\n", + " <td>548.658447</td>\n", + " <td>21.719831</td>\n", + " <td>565.027466</td>\n", + " <td>22.106112</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " loss mae val_loss val_mae\n", + "count 101.000000 101.000000 101.000000 101.000000\n", + "mean 23.476395 2.692269 23.864368 2.989625\n", + "std 76.294859 2.956140 74.627726 2.845627\n", + "min 3.821492 1.493004 8.697336 2.217072\n", + "25% 5.978652 1.768553 8.936612 2.270410\n", + "50% 8.439981 2.047496 9.364830 2.329784\n", + "75% 13.354569 2.480675 11.053273 2.494222\n", + "max 548.658447 21.719831 565.027466 22.106112" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "df=pd.DataFrame(data=history.history)\n", + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "min( val_mae ) : 2.2171\n" + ] + } + ], + "source": [ + "print(\"min( val_mae ) : {:.4f}\".format( min(history.history[\"val_mae\"]) ) )" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 576x432 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 576x432 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ooo.plot_history(history, plot={'MAE' :['mae', 'val_mae'],\n", + " 'LOSS':['loss','val_loss']})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 7 - Make a prediction\n", + "The data must be normalized with the parameters (mean, std) previously used." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "my_data = [ 1.26425925, -0.48522739, 1.0436489 , -0.23112788, 1.37120745,\n", + " -2.14308942, 1.13489104, -1.06802005, 1.71189006, 1.57042287,\n", + " 0.77859951, 0.14769795, 2.7585581 ]\n", + "real_price = 10.4\n", + "\n", + "my_data=np.array(my_data).reshape(1,13)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Prediction : 10.63 K$\n", + "Reality : 10.40 K$\n" + ] + } + ], + "source": [ + "torch_my_data=torch.from_numpy(my_data)\n", + "var_my_data = Variable(torch_my_data).float()\n", + "\n", + "predictions = model( var_my_data )\n", + "print(\"Prediction : {:.2f} K$\".format(predictions[0][0]))\n", + "print(\"Reality : {:.2f} K$\".format(real_price))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "<img width=\"80px\" src=\"../fidle/img/00-Fidle-logo-01.svg\"></img>" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}