Skip to content
Snippets Groups Projects
02-DNN-Regression-Premium.ipynb 161 KiB
Newer Older
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "<img width=\"800px\" src=\"../fidle/img/00-Fidle-header-01.svg\"></img>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "\n",
    "# <!-- TITLE --> [BHP2] - Regression with a Dense Network (DNN) - Advanced code\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "  <!-- DESC -->  More advanced example of DNN network code - BHPD dataset\n",
    "  <!-- AUTHOR : Jean-Luc Parouty (CNRS/SIMaP) -->\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "\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 with backup and restore of the trained model. \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 these information :\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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "\n",
    "## What we're going to do :\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "\n",
    " - (Retrieve data)\n",
    " - (Preparing the data)\n",
    " - (Build a model)\n",
    " - Train and save the model\n",
    " - Restore saved model\n",
    " - Evaluate the model\n",
    " - Make some predictions\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 1 - Import and init"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "\n",
       "div.warn {    \n",
       "    background-color: #fcf2f2;\n",
       "    border-color: #dFb5b4;\n",
       "    border-left: 5px solid #dfb5b4;\n",
       "    padding: 0.5em;\n",
       "    font-weight: bold;\n",
       "    font-size: 1.1em;;\n",
       "    }\n",
       "\n",
       "\n",
       "\n",
       "div.nota {    \n",
       "    background-color: #DAFFDE;\n",
       "    border-left: 5px solid #92CC99;\n",
       "    padding: 0.5em;\n",
       "    }\n",
       "\n",
       "div.todo:before { content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1My44OTEyIiBoZWlnaHQ9IjE0My4zOTAyIiB2aWV3Qm94PSIwIDAgNTMuODkxMiAxNDMuMzkwMiI+PHRpdGxlPjAwLUJvYi10b2RvPC90aXRsZT48cGF0aCBkPSJNMjMuNDU2OCwxMTQuMzAxNmExLjgwNjMsMS44MDYzLDAsMSwxLDEuODE1NywxLjgyNEExLjgyMDksMS44MjA5LDAsMCwxLDIzLjQ1NjgsMTE0LjMwMTZabS0xMC42NjEyLDEuODIyQTEuODI3MiwxLjgyNzIsMCwxLDAsMTAuOTgsMTE0LjMsMS44MiwxLjgyLDAsMCwwLDEyLjc5NTYsMTE2LjEyMzZabS03LjcwNyw0LjU4NzR2LTVzLjQ4NjMtOS4xMjIzLDguMDIxNS0xMS45Njc1YTE5LjIwODIsMTkuMjA4MiwwLDAsMSw2LjA0ODYtMS4yNDU0LDE5LjE3NzgsMTkuMTc3OCwwLDAsMSw2LjA0ODcsMS4yNDc1YzcuNTM1MSwyLjgzNDcsOC4wMTc0LDExLjk2NzQsOC4wMTc0LDExLjk2NzR2NS4wMjM0bC4wMDQyLDcuNjgydjIuNGMuMDE2Ny4xOTkyLjAzMzYuMzkyMS4wMzM2LjU4NzEsMCwuMjEzOC0uMDE2OC40MTA5LS4wMzM2LjYzMzJ2LjA1ODdoLS4wMDg0YTguMzcxOSw4LjM3MTksMCwwLDEtNy4zNzM4LDcuNjU0N3MtLjk5NTMsMy42MzgtNi42OTMzLDMuNjM4LTYuNjkzNC0zLjYzOC02LjY5MzQtMy42MzhhOC4zNyw4LjM3LDAsMCwxLTcuMzcxNi03LjY1NDdINS4wODQzdi0uMDU4N2MtLjAxODktLjIyLS4wMjk0LS40MTk0LS4wMjk0LS42MzMyLDAtLjE5MjkuMDE2Ny0uMzgzNy4wMjk0LS41ODcxdi0yLjRtMTguMDkzNy00LjA0YTEuMTU2NSwxLjE1NjUsMCwxLDAtMi4zMTI2LDAsMS4xNTY0LDEuMTU2NCwwLDEsMCwyLjMxMjYsMFptNC4wODM0LDBhMS4xNTk1LDEuMTU5NSwwLDEsMC0xLjE2MzYsMS4xN0ExLjE3NSwxLjE3NSwwLDAsMCwyNy4yNjE0LDEyNC4zNzc5Wk05LjM3MzksMTE0LjYzNWMwLDMuMTA5MywyLjQxMzIsMy4zMSwyLjQxMzIsMy4zMWExMzMuOTI0MywxMzMuOTI0MywwLDAsMCwxNC43MzQ4LDBzMi40MTExLS4xOTI5LDIuNDExMS0zLjMxYTguMDc3Myw4LjA3NzMsMCwwLDAtMi40MTExLTUuNTUxOWMtNC41LTMuNTAzMy05LjkxMjYtMy41MDMzLTE0Ljc0MTEsMEE4LjA4NTEsOC4wODUxLDAsMCwwLDkuMzczOSwxMTQuNjM1WiIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjMzLjE0MzYiIGN5PSIxMjQuNTM0IiByPSIzLjgzNjMiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48cmVjdCB4PSIzNS42NjU5IiB5PSIxMTIuOTYyNSIgd2lkdGg9IjIuMDc3IiBoZWlnaHQ9IjEwLjU0NTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjYgMjQxLjExMjEpIHJvdGF0ZSgtMTU1Ljc0NikiIHN0eWxlPSJmaWxsOiMwMTAxMDEiLz48Y2lyY2xlIGN4PSIzOC44NzA0IiBjeT0iMTEzLjQyNzkiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxjaXJjbGUgY3g9IjUuMjI0OCIgY3k9IjEyNC41MzQiIHI9IjMuODM2MyIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxyZWN0IHg9IjEuNDE2NCIgeT0iMTI0LjYzMDEiIHdpZHRoPSIyLjA3NyIgaGVpZ2h0PSIxMC41NDU4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LjkwOTcgMjU5LjgwNikgcm90YXRlKC0xODApIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PGNpcmNsZSBjeD0iMi40MDkxIiBjeT0iMTM3LjA5OTYiIHI9IjIuNDA4NSIgc3R5bGU9ImZpbGw6IzAxMDEwMSIvPjxwYXRoIGQ9Ik0xOC4wNTExLDEwMC4xMDY2aC0uMDE0NlYxMDIuNjFoMi4zdi0yLjQyNzlhMi40MjI5LDIuNDIyOSwwLDEsMC0yLjI4NTQtLjA3NTVaIiBzdHlsZT0iZmlsbDojMDEwMTAxIi8+PHBhdGggZD0iTTM5LjQyMTQsMjcuMjU4djEuMDVBMTEuOTQ1MiwxMS45NDUyLDAsMCwwLDQ0LjU5NTQsNS43OWEuMjQ0OS4yNDQ5LDAsMCwxLS4wMjM1LS40MjI3TDQ2Ljc1LDMuOTUxNWEuMzg5Mi4zODkyLDAsMCwxLC40MjYyLDAsMTQuODQ0MiwxNC44NDQyLDAsMCwxLTcuNzU0MywyNy4yNTkxdjEuMDY3YS40NS40NSwwLDAsMS0uNzA0Ny4zNzU4bC0zLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsMC0uNzUxNmwzLjg0MTktMi41MWEuNDUuNDUsMCwwLDEsLjY5NDYuMzc1OFpNNDMuMjMsMi41ODkyLDM5LjM4NzguMDc5NGEuNDUuNDUsMCwwLDAtLjcwNDYuMzc1OHYxLjA2N2ExNC44NDQyLDE0Ljg0NDIsMCwwLDAtNy43NTQzLDI3LjI1OTEuMzg5LjM4OSwwLDAsMCwuNDI2MSwwbDIuMTc3Ny0xLjQxOTNhLjI0NS4yNDUsMCwwLDAtLjAyMzUtLjQyMjgsMTEuOTQ1MSwxMS45NDUxLDAsMCwxLDUuMTc0LTIyLjUxNDZ2MS4wNWEuNDUuNDUsMCwwLDAsLjcwNDYuMzc1OGwzLjg1NTMtMi41MWEuNDUuNDUsMCwwLDAsMC0uNzUxNlpNMzkuMDUyMywxNC4yNDU4YTIuMTIwNiwyLjEyMDYsMCwxLDAsMi4xMjA2LDIuMTIwNmgwQTIuMTI0LDIuMTI0LDAsMCwwLDM5LjA1MjMsMTQuMjQ1OFptNi4wNzMyLTQuNzc4MS44MjU0LjgyNTVhMS4wNTY4LDEuMDU2OCwwLDAsMSwuMTE3NSwxLjM0MjFsLS44MDIsMS4xNDQyYTcuMTAxOCw3LjEwMTgsMCwwLDEsLjcxMTQsMS43MTEybDEuMzc1Ny4yNDE2YTEuMDU2OSwxLjA1NjksMCwwLDEsLjg3NTcsMS4wNHYxLjE2NDNhMS4wNTY5LDEuMDU2OSwwLDAsMS0uODc1NywxLjA0bC0xLjM3MjQuMjQxNkE3LjExLDcuMTEsMCwwLDEsNDUuMjcsMTkuOTNsLjgwMTksMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLS4xMTc0LDEuMzQyMmwtLjgyODguODQ4OWExLjA1NywxLjA1NywwLDAsMS0xLjM0MjEuMTE3NGwtMS4xNDQyLS44MDE5YTcuMTMzOCw3LjEzMzgsMCwwLDEtMS43MTEzLjcxMTNsLS4yNDE2LDEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLTEuMDQuODc1N0gzOC40Njg0YTEuMDU2OCwxLjA1NjgsMCwwLDEtMS4wNC0uODc1N2wtLjI0MTYtMS4zNzI0YTcuMTM1NSw3LjEzNTUsMCwwLDEtMS43MTEzLS43MTEzbC0xLjE0NDEuODAxOWExLjA1NzEsMS4wNTcxLDAsMCwxLTEuMzQyMi0uMTE3NGwtLjgzNTUtLjgyNTVhMS4wNTcsMS4wNTcsMCwwLDEtLjExNzQtMS4zNDIxbC44MDE5LTEuMTQ0MmE3LjEyMSw3LjEyMSwwLDAsMS0uNzExMy0xLjcxMTJsLTEuMzcyNC0uMjQxNmExLjA1NjksMS4wNTY5LDAsMCwxLS44NzU3LTEuMDRWMTUuNzgyNmExLjA1NjksMS4wNTY5LDAsMCwxLC44NzU3LTEuMDRsMS4zNzU3LS4yNDE2YTcuMTEsNy4xMSwwLDAsMSwuNzExNC0xLjcxMTJsLS44MDItMS4xNDQyYTEuMDU3LDEuMDU3LDAsMCwxLC4xMTc1LTEuMzQyMmwuODI1NC0uODI1NEExLjA1NjgsMS4wNTY4LDAsMCwxLDM0LjMyNDUsOS4zNmwxLjE0NDIuODAxOUE3LjEzNTUsNy4xMzU1LDAsMCwxLDM3LjE4LDkuNDUxbC4yNDE2LTEuMzcyNGExLjA1NjgsMS4wNTY4LDAsMCwxLDEuMDQtLjg3NTdoMS4xNjc3YTEuMDU2OSwxLjA1NjksMCwwLDEsMS4wNC44NzU3bC4yNDE2LDEuMzcyNGE3LjEyNSw3LjEyNSwwLDAsMSwxLjcxMTIuNzExM0w0My43NjY2LDkuMzZBMS4wNTY5LDEuMDU2OSwwLDAsMSw0NS4xMjU1LDkuNDY3N1ptLTIuMDMsNi44OTg3QTQuMDQzMyw0LjA0MzMsMCwxLDAsMzkuMDUyMywyMC40MWgwQTQuMDQ2NSw0LjA0NjUsMCwwLDAsNDMuMDk1NSwxNi4zNjY0WiIgc3R5bGU9ImZpbGw6I2UxMjIyOSIvPjxwb2x5Z29uIHBvaW50cz0iMzkuNDEzIDM0Ljc1NyAzOS41MzcgMzQuNzU3IDM5LjY3NSAzNC43NTcgMzkuNjc1IDEwOS41MSAzOS41MzcgMTA5LjUxIDM5LjQxMyAxMDkuNTEgMzkuNDEzIDM0Ljc1NyAzOS40MTMgMzQuNzU3IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojOTk5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjMwODg1NDQ1MDU2MDE2MThweDtmaWxsLXJ1bGU6ZXZlbm9kZCIvPjwvc3ZnPg==);\n",
       "    float:left;\n",
       "    margin-right:20px;\n",
       "    margin-top:-20px;\n",
       "    margin-bottom:20px;\n",
       "}\n",
       "div.todo{\n",
       "    font-weight: bold;\n",
       "    font-size: 1.1em;\n",
       "    margin-top:40px;\n",
       "}\n",
       "div.todo ul{\n",
       "    margin: 0.2em;\n",
       "}\n",
       "div.todo li{\n",
       "    margin-left:60px;\n",
       "    margin-top:0;\n",
       "    margin-bottom:0;\n",
       "}\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "\n",
       "\n",
       "</style>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "FIDLE 2020 - Practical Work Module\n",
      "Version              : 0.56 DEV\n",
      "Run time             : Wednesday 9 September 2020, 10:45:46\n",
      "TensorFlow version   : 2.2.0\n",
      "Keras version        : 2.3.0-tf\n",
      "Current place        : Fidle at IDRIS\n",
      "Dataset dir          : /gpfswork/rech/mlh/commun/datasets\n",
      "Update keras cache   : Done\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import os,sys\n",
    "\n",
    "from IPython.display import Markdown\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "from importlib import reload\n",
    "\n",
    "sys.path.append('..')\n",
    "import fidle.pwk as ooo\n",
    "\n",
    "place, dataset_dir = ooo.init(places={'MyLaptop':'/path/to/datasets'})"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 2 - Retrieve data\n",
    "\n",
    "### 2.1 - Option 1  : From Keras\n",
    "Boston housing is a famous historic dataset, so we can get it directly from [Keras datasets](https://www.tensorflow.org/api_docs/python/tf/keras/datasets)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "source": [
    "# (x_train, y_train), (x_test, y_test) = keras.datasets.boston_housing.load_data(test_split=0.2, seed=113)"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 - Option 2 : From a csv file\n",
    "More fun !"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style  type=\"text/css\" >\n",
       "</style><table id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7\" ><thead>    <tr>        <th class=\"blank level0\" ></th>        <th class=\"col_heading level0 col0\" >crim</th>        <th class=\"col_heading level0 col1\" >zn</th>        <th class=\"col_heading level0 col2\" >indus</th>        <th class=\"col_heading level0 col3\" >chas</th>        <th class=\"col_heading level0 col4\" >nox</th>        <th class=\"col_heading level0 col5\" >rm</th>        <th class=\"col_heading level0 col6\" >age</th>        <th class=\"col_heading level0 col7\" >dis</th>        <th class=\"col_heading level0 col8\" >rad</th>        <th class=\"col_heading level0 col9\" >tax</th>        <th class=\"col_heading level0 col10\" >ptratio</th>        <th class=\"col_heading level0 col11\" >b</th>        <th class=\"col_heading level0 col12\" >lstat</th>        <th class=\"col_heading level0 col13\" >medv</th>    </tr></thead><tbody>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                <tr>\n",
       "                        <th id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7level0_row0\" class=\"row_heading level0 row0\" >0</th>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col0\" class=\"data row0 col0\" >0.01</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col1\" class=\"data row0 col1\" >18.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col2\" class=\"data row0 col2\" >2.31</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col3\" class=\"data row0 col3\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col4\" class=\"data row0 col4\" >0.54</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col5\" class=\"data row0 col5\" >6.58</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col6\" class=\"data row0 col6\" >65.20</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col7\" class=\"data row0 col7\" >4.09</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col8\" class=\"data row0 col8\" >1.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col9\" class=\"data row0 col9\" >296.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col10\" class=\"data row0 col10\" >15.30</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col11\" class=\"data row0 col11\" >396.90</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col12\" class=\"data row0 col12\" >4.98</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row0_col13\" class=\"data row0 col13\" >24.00</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7level0_row1\" class=\"row_heading level0 row1\" >1</th>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col0\" class=\"data row1 col0\" >0.03</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col1\" class=\"data row1 col1\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col2\" class=\"data row1 col2\" >7.07</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col3\" class=\"data row1 col3\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col4\" class=\"data row1 col4\" >0.47</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col5\" class=\"data row1 col5\" >6.42</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col6\" class=\"data row1 col6\" >78.90</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col7\" class=\"data row1 col7\" >4.97</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col8\" class=\"data row1 col8\" >2.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col9\" class=\"data row1 col9\" >242.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col10\" class=\"data row1 col10\" >17.80</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col11\" class=\"data row1 col11\" >396.90</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col12\" class=\"data row1 col12\" >9.14</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row1_col13\" class=\"data row1 col13\" >21.60</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7level0_row2\" class=\"row_heading level0 row2\" >2</th>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col0\" class=\"data row2 col0\" >0.03</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col1\" class=\"data row2 col1\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col2\" class=\"data row2 col2\" >7.07</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col3\" class=\"data row2 col3\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col4\" class=\"data row2 col4\" >0.47</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col5\" class=\"data row2 col5\" >7.18</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col6\" class=\"data row2 col6\" >61.10</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col7\" class=\"data row2 col7\" >4.97</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col8\" class=\"data row2 col8\" >2.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col9\" class=\"data row2 col9\" >242.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col10\" class=\"data row2 col10\" >17.80</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col11\" class=\"data row2 col11\" >392.83</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col12\" class=\"data row2 col12\" >4.03</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row2_col13\" class=\"data row2 col13\" >34.70</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7level0_row3\" class=\"row_heading level0 row3\" >3</th>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col0\" class=\"data row3 col0\" >0.03</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col1\" class=\"data row3 col1\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col2\" class=\"data row3 col2\" >2.18</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col3\" class=\"data row3 col3\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col4\" class=\"data row3 col4\" >0.46</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col5\" class=\"data row3 col5\" >7.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col6\" class=\"data row3 col6\" >45.80</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col7\" class=\"data row3 col7\" >6.06</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col8\" class=\"data row3 col8\" >3.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col9\" class=\"data row3 col9\" >222.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col10\" class=\"data row3 col10\" >18.70</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col11\" class=\"data row3 col11\" >394.63</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col12\" class=\"data row3 col12\" >2.94</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row3_col13\" class=\"data row3 col13\" >33.40</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7level0_row4\" class=\"row_heading level0 row4\" >4</th>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col0\" class=\"data row4 col0\" >0.07</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col1\" class=\"data row4 col1\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col2\" class=\"data row4 col2\" >2.18</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col3\" class=\"data row4 col3\" >0.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col4\" class=\"data row4 col4\" >0.46</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col5\" class=\"data row4 col5\" >7.15</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col6\" class=\"data row4 col6\" >54.20</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col7\" class=\"data row4 col7\" >6.06</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col8\" class=\"data row4 col8\" >3.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col9\" class=\"data row4 col9\" >222.00</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col10\" class=\"data row4 col10\" >18.70</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col11\" class=\"data row4 col11\" >396.90</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col12\" class=\"data row4 col12\" >5.33</td>\n",
       "                        <td id=\"T_da570864_f278_11ea_a3cd_0cc47af5c7c7row4_col13\" class=\"data row4 col13\" >36.20</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "    </tbody></table>"
      ],
      "text/plain": [
       "<pandas.io.formats.style.Styler at 0x153c0f2ab5d0>"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Missing Data :  0   Shape is :  (506, 14)\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    }
   ],
   "source": [
    "data = pd.read_csv(f'{dataset_dir}/BHPD/BostonHousing.csv', header=0)\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "\n",
    "display(data.head(5).style.format(\"{0:.2f}\"))\n",
    "print('Missing Data : ',data.isna().sum().sum(), '  Shape is : ', data.shape)"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 3 - Preparing the data\n",
    "### 3.1 - Split data\n",
    "We will use 80% of the data for training and 20% for validation.  \n",
    "x will be input data and y the expected output"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "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": [
    "# ---- 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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style  type=\"text/css\" >\n",
       "</style><table id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7\" ><caption>Before normalization :</caption><thead>    <tr>        <th class=\"blank level0\" ></th>        <th class=\"col_heading level0 col0\" >crim</th>        <th class=\"col_heading level0 col1\" >zn</th>        <th class=\"col_heading level0 col2\" >indus</th>        <th class=\"col_heading level0 col3\" >chas</th>        <th class=\"col_heading level0 col4\" >nox</th>        <th class=\"col_heading level0 col5\" >rm</th>        <th class=\"col_heading level0 col6\" >age</th>        <th class=\"col_heading level0 col7\" >dis</th>        <th class=\"col_heading level0 col8\" >rad</th>        <th class=\"col_heading level0 col9\" >tax</th>        <th class=\"col_heading level0 col10\" >ptratio</th>        <th class=\"col_heading level0 col11\" >b</th>        <th class=\"col_heading level0 col12\" >lstat</th>    </tr></thead><tbody>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                <tr>\n",
       "                        <th id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col0\" class=\"data row0 col0\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col1\" class=\"data row0 col1\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col2\" class=\"data row0 col2\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col3\" class=\"data row0 col3\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col4\" class=\"data row0 col4\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col5\" class=\"data row0 col5\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col6\" class=\"data row0 col6\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col7\" class=\"data row0 col7\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col8\" class=\"data row0 col8\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col9\" class=\"data row0 col9\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col10\" class=\"data row0 col10\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col11\" class=\"data row0 col11\" >354.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row0_col12\" class=\"data row0 col12\" >354.00</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col0\" class=\"data row1 col0\" >3.24</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col1\" class=\"data row1 col1\" >10.63</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col2\" class=\"data row1 col2\" >11.34</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col3\" class=\"data row1 col3\" >0.06</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col4\" class=\"data row1 col4\" >0.56</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col5\" class=\"data row1 col5\" >6.28</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col6\" class=\"data row1 col6\" >69.69</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col7\" class=\"data row1 col7\" >3.74</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col8\" class=\"data row1 col8\" >9.27</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col9\" class=\"data row1 col9\" >404.71</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col10\" class=\"data row1 col10\" >18.54</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col11\" class=\"data row1 col11\" >359.32</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row1_col12\" class=\"data row1 col12\" >12.54</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col0\" class=\"data row2 col0\" >7.34</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col1\" class=\"data row2 col1\" >21.95</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col2\" class=\"data row2 col2\" >7.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col3\" class=\"data row2 col3\" >0.25</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col4\" class=\"data row2 col4\" >0.11</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col5\" class=\"data row2 col5\" >0.72</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col6\" class=\"data row2 col6\" >27.79</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col7\" class=\"data row2 col7\" >2.07</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col8\" class=\"data row2 col8\" >8.60</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col9\" class=\"data row2 col9\" >168.73</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col10\" class=\"data row2 col10\" >2.16</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col11\" class=\"data row2 col11\" >85.20</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row2_col12\" class=\"data row2 col12\" >7.02</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col0\" class=\"data row3 col0\" >0.01</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col1\" class=\"data row3 col1\" >0.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col2\" class=\"data row3 col2\" >0.46</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col3\" class=\"data row3 col3\" >0.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col4\" class=\"data row3 col4\" >0.39</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col5\" class=\"data row3 col5\" >3.56</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col6\" class=\"data row3 col6\" >2.90</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col7\" class=\"data row3 col7\" >1.13</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col8\" class=\"data row3 col8\" >1.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col9\" class=\"data row3 col9\" >187.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col10\" class=\"data row3 col10\" >12.60</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col11\" class=\"data row3 col11\" >0.32</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row3_col12\" class=\"data row3 col12\" >1.73</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col0\" class=\"data row4 col0\" >0.08</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col1\" class=\"data row4 col1\" >0.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col2\" class=\"data row4 col2\" >5.19</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col3\" class=\"data row4 col3\" >0.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col4\" class=\"data row4 col4\" >0.46</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col5\" class=\"data row4 col5\" >5.91</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col6\" class=\"data row4 col6\" >46.83</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col7\" class=\"data row4 col7\" >2.11</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col8\" class=\"data row4 col8\" >4.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col9\" class=\"data row4 col9\" >277.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col10\" class=\"data row4 col10\" >17.40</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col11\" class=\"data row4 col11\" >374.59</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row4_col12\" class=\"data row4 col12\" >6.92</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col0\" class=\"data row5 col0\" >0.24</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col1\" class=\"data row5 col1\" >0.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col2\" class=\"data row5 col2\" >9.69</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col3\" class=\"data row5 col3\" >0.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col4\" class=\"data row5 col4\" >0.54</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col5\" class=\"data row5 col5\" >6.19</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col6\" class=\"data row5 col6\" >79.45</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col7\" class=\"data row5 col7\" >3.10</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col8\" class=\"data row5 col8\" >5.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col9\" class=\"data row5 col9\" >330.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col10\" class=\"data row5 col10\" >19.10</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col11\" class=\"data row5 col11\" >391.34</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row5_col12\" class=\"data row5 col12\" >11.17</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col0\" class=\"data row6 col0\" >2.90</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col1\" class=\"data row6 col1\" >12.50</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col2\" class=\"data row6 col2\" >18.10</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col3\" class=\"data row6 col3\" >0.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col4\" class=\"data row6 col4\" >0.62</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col5\" class=\"data row6 col5\" >6.63</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col6\" class=\"data row6 col6\" >94.25</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col7\" class=\"data row6 col7\" >5.08</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col8\" class=\"data row6 col8\" >8.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col9\" class=\"data row6 col9\" >666.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col10\" class=\"data row6 col10\" >20.20</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col11\" class=\"data row6 col11\" >395.76</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row6_col12\" class=\"data row6 col12\" >17.06</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col0\" class=\"data row7 col0\" >73.53</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col1\" class=\"data row7 col1\" >100.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col2\" class=\"data row7 col2\" >27.74</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col3\" class=\"data row7 col3\" >1.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col4\" class=\"data row7 col4\" >0.87</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col5\" class=\"data row7 col5\" >8.72</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col6\" class=\"data row7 col6\" >100.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col7\" class=\"data row7 col7\" >12.13</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col8\" class=\"data row7 col8\" >24.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col9\" class=\"data row7 col9\" >711.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col10\" class=\"data row7 col10\" >22.00</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col11\" class=\"data row7 col11\" >396.90</td>\n",
       "                        <td id=\"T_da5fe308_f278_11ea_a3cd_0cc47af5c7c7row7_col12\" class=\"data row7 col12\" >37.97</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "    </tbody></table>"
      ],
      "text/plain": [
       "<pandas.io.formats.style.Styler at 0x153b8aded2d0>"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<style  type=\"text/css\" >\n",
       "</style><table id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7\" ><caption>After normalization :</caption><thead>    <tr>        <th class=\"blank level0\" ></th>        <th class=\"col_heading level0 col0\" >crim</th>        <th class=\"col_heading level0 col1\" >zn</th>        <th class=\"col_heading level0 col2\" >indus</th>        <th class=\"col_heading level0 col3\" >chas</th>        <th class=\"col_heading level0 col4\" >nox</th>        <th class=\"col_heading level0 col5\" >rm</th>        <th class=\"col_heading level0 col6\" >age</th>        <th class=\"col_heading level0 col7\" >dis</th>        <th class=\"col_heading level0 col8\" >rad</th>        <th class=\"col_heading level0 col9\" >tax</th>        <th class=\"col_heading level0 col10\" >ptratio</th>        <th class=\"col_heading level0 col11\" >b</th>        <th class=\"col_heading level0 col12\" >lstat</th>    </tr></thead><tbody>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                <tr>\n",
       "                        <th id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col0\" class=\"data row0 col0\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col1\" class=\"data row0 col1\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col2\" class=\"data row0 col2\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col3\" class=\"data row0 col3\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col4\" class=\"data row0 col4\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col5\" class=\"data row0 col5\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col6\" class=\"data row0 col6\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col7\" class=\"data row0 col7\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col8\" class=\"data row0 col8\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col9\" class=\"data row0 col9\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col10\" class=\"data row0 col10\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col11\" class=\"data row0 col11\" >354.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row0_col12\" class=\"data row0 col12\" >354.00</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col0\" class=\"data row1 col0\" >0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col1\" class=\"data row1 col1\" >0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col2\" class=\"data row1 col2\" >0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col3\" class=\"data row1 col3\" >0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col4\" class=\"data row1 col4\" >-0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col5\" class=\"data row1 col5\" >-0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col6\" class=\"data row1 col6\" >0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col7\" class=\"data row1 col7\" >-0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col8\" class=\"data row1 col8\" >0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col9\" class=\"data row1 col9\" >-0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col10\" class=\"data row1 col10\" >0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col11\" class=\"data row1 col11\" >0.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row1_col12\" class=\"data row1 col12\" >0.00</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col0\" class=\"data row2 col0\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col1\" class=\"data row2 col1\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col2\" class=\"data row2 col2\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col3\" class=\"data row2 col3\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col4\" class=\"data row2 col4\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col5\" class=\"data row2 col5\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col6\" class=\"data row2 col6\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col7\" class=\"data row2 col7\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col8\" class=\"data row2 col8\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col9\" class=\"data row2 col9\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col10\" class=\"data row2 col10\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col11\" class=\"data row2 col11\" >1.00</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row2_col12\" class=\"data row2 col12\" >1.00</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col0\" class=\"data row3 col0\" >-0.44</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col1\" class=\"data row3 col1\" >-0.48</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col2\" class=\"data row3 col2\" >-1.56</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col3\" class=\"data row3 col3\" >-0.26</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col4\" class=\"data row3 col4\" >-1.46</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col5\" class=\"data row3 col5\" >-3.81</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col6\" class=\"data row3 col6\" >-2.40</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col7\" class=\"data row3 col7\" >-1.26</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col8\" class=\"data row3 col8\" >-0.96</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col9\" class=\"data row3 col9\" >-1.29</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col10\" class=\"data row3 col10\" >-2.75</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col11\" class=\"data row3 col11\" >-4.21</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row3_col12\" class=\"data row3 col12\" >-1.54</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col0\" class=\"data row4 col0\" >-0.43</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col1\" class=\"data row4 col1\" >-0.48</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col2\" class=\"data row4 col2\" >-0.88</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col3\" class=\"data row4 col3\" >-0.26</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col4\" class=\"data row4 col4\" >-0.87</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col5\" class=\"data row4 col5\" >-0.53</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col6\" class=\"data row4 col6\" >-0.82</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col7\" class=\"data row4 col7\" >-0.79</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col8\" class=\"data row4 col8\" >-0.61</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col9\" class=\"data row4 col9\" >-0.76</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col10\" class=\"data row4 col10\" >-0.53</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col11\" class=\"data row4 col11\" >0.18</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row4_col12\" class=\"data row4 col12\" >-0.80</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col0\" class=\"data row5 col0\" >-0.41</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col1\" class=\"data row5 col1\" >-0.48</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col2\" class=\"data row5 col2\" >-0.24</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col3\" class=\"data row5 col3\" >-0.26</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col4\" class=\"data row5 col4\" >-0.16</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col5\" class=\"data row5 col5\" >-0.12</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col6\" class=\"data row5 col6\" >0.35</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col7\" class=\"data row5 col7\" >-0.31</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col8\" class=\"data row5 col8\" >-0.50</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col9\" class=\"data row5 col9\" >-0.44</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col10\" class=\"data row5 col10\" >0.26</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col11\" class=\"data row5 col11\" >0.38</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row5_col12\" class=\"data row5 col12\" >-0.19</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col0\" class=\"data row6 col0\" >-0.05</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col1\" class=\"data row6 col1\" >0.09</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col2\" class=\"data row6 col2\" >0.97</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col3\" class=\"data row6 col3\" >-0.26</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col4\" class=\"data row6 col4\" >0.61</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col5\" class=\"data row6 col5\" >0.49</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col6\" class=\"data row6 col6\" >0.88</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col7\" class=\"data row6 col7\" >0.65</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col8\" class=\"data row6 col8\" >-0.15</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col9\" class=\"data row6 col9\" >1.55</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col10\" class=\"data row6 col10\" >0.77</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col11\" class=\"data row6 col11\" >0.43</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row6_col12\" class=\"data row6 col12\" >0.64</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col0\" class=\"data row7 col0\" >9.58</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col1\" class=\"data row7 col1\" >4.07</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col2\" class=\"data row7 col2\" >2.34</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col3\" class=\"data row7 col3\" >3.79</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col4\" class=\"data row7 col4\" >2.82</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col5\" class=\"data row7 col5\" >3.42</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col6\" class=\"data row7 col6\" >1.09</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col7\" class=\"data row7 col7\" >4.05</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col8\" class=\"data row7 col8\" >1.71</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col9\" class=\"data row7 col9\" >1.82</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col10\" class=\"data row7 col10\" >1.60</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col11\" class=\"data row7 col11\" >0.44</td>\n",
       "                        <td id=\"T_da6798c8_f278_11ea_a3cd_0cc47af5c7c7row7_col12\" class=\"data row7 col12\" >3.62</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "    </tbody></table>"
      ],
      "text/plain": [
       "<pandas.io.formats.style.Styler at 0x153b8adbe050>"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      ]
     },
     "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",
    "\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",
    "More informations about : \n",
    " - [Optimizer](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)\n",
    " - [Activation](https://www.tensorflow.org/api_docs/python/tf/keras/activations)\n",
    " - [Loss](https://www.tensorflow.org/api_docs/python/tf/keras/losses)\n",
    " - [Metrics](https://www.tensorflow.org/api_docs/python/tf/keras/metrics)"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [],
   "source": [
    "  def get_model_v1(shape):\n",
    "    \n",
    "    model = keras.models.Sequential()\n",
    "    model.add(keras.layers.Input(shape, name=\"InputLayer\"))\n",
    "    model.add(keras.layers.Dense(64, activation='relu', name='Dense_n1'))\n",
    "    model.add(keras.layers.Dense(64, activation='relu', name='Dense_n2'))\n",
    "    model.add(keras.layers.Dense(1, name='Output'))\n",
    "    \n",
    "    model.compile(optimizer = 'rmsprop',\n",
    "                  loss      = 'mse',\n",
    "                  metrics   = ['mae', 'mse'] )\n",
    "    return model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5 - Train the model\n",
    "### 5.1 - Get it"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "Dense_n1 (Dense)             (None, 64)                896       \n",
      "_________________________________________________________________\n",
      "Dense_n2 (Dense)             (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "Output (Dense)               (None, 1)                 65        \n",
      "=================================================================\n",
      "Total params: 5,121\n",
      "Trainable params: 5,121\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "data": {
      "text/plain": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      ]
     },
     "metadata": {},
     "output_type": "display_data"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    }
   ],
   "source": [
    "model=get_model_v1( (13,) )\n",
    "\n",
    "model.summary()\n",
    "img=keras.utils.plot_model( model, to_file='./run/model.png', show_shapes=True, show_layer_names=True, dpi=96)\n",
    "display(img)"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.2 - Add callback"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [],
   "source": [
    "os.makedirs('./run/models',   mode=0o750, exist_ok=True)\n",
    "save_dir = \"./run/models/best_model.h5\"\n",
    "\n",
    "savemodel_callback = tf.keras.callbacks.ModelCheckpoint(filepath=save_dir, verbose=0, save_best_only=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.3 - Train it"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "36/36 [==============================] - 0s 10ms/step - loss: 493.8600 - mae: 20.1628 - mse: 493.8600 - val_loss: 344.0921 - val_mae: 16.4232 - val_mse: 344.0921\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 2/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 271.4029 - mae: 13.9558 - mse: 271.4029 - val_loss: 135.1553 - val_mae: 9.4587 - val_mse: 135.1553\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 3/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 98.2466 - mae: 7.5100 - mse: 98.2466 - val_loss: 66.5462 - val_mae: 6.2643 - val_mse: 66.5462\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 4/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 49.8627 - mae: 5.1989 - mse: 49.8627 - val_loss: 44.7207 - val_mae: 5.0417 - val_mse: 44.7207\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 5/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 32.4176 - mae: 4.1260 - mse: 32.4176 - val_loss: 32.3549 - val_mae: 4.2057 - val_mse: 32.3549\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 6/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 24.6088 - mae: 3.4733 - mse: 24.6088 - val_loss: 27.5344 - val_mae: 3.8070 - val_mse: 27.5344\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 7/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 20.7117 - mae: 3.2537 - mse: 20.7117 - val_loss: 24.9330 - val_mae: 3.5383 - val_mse: 24.9330\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 8/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 18.2772 - mae: 3.0100 - mse: 18.2772 - val_loss: 23.2481 - val_mae: 3.3901 - val_mse: 23.2481\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 9/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 16.4003 - mae: 2.8432 - mse: 16.4003 - val_loss: 21.9234 - val_mae: 3.2054 - val_mse: 21.9234\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 10/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 15.1889 - mae: 2.7275 - mse: 15.1889 - val_loss: 22.4510 - val_mae: 3.2592 - val_mse: 22.4510\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 11/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 13.8576 - mae: 2.6184 - mse: 13.8576 - val_loss: 20.2455 - val_mae: 3.0453 - val_mse: 20.2455\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 12/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 12.8444 - mae: 2.5178 - mse: 12.8444 - val_loss: 24.1662 - val_mae: 3.3867 - val_mse: 24.1662\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 13/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 12.5199 - mae: 2.4892 - mse: 12.5199 - val_loss: 20.2512 - val_mae: 3.0096 - val_mse: 20.2512\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 14/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 11.7703 - mae: 2.3801 - mse: 11.7703 - val_loss: 19.5756 - val_mae: 2.9569 - val_mse: 19.5756\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 15/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 11.4068 - mae: 2.3343 - mse: 11.4068 - val_loss: 19.8973 - val_mae: 2.9276 - val_mse: 19.8973\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 16/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.8153 - mae: 2.3001 - mse: 10.8153 - val_loss: 19.1401 - val_mae: 2.8576 - val_mse: 19.1401\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 17/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.5820 - mae: 2.2517 - mse: 10.5820 - val_loss: 19.8560 - val_mae: 2.9379 - val_mse: 19.8560\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 18/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.1091 - mae: 2.2229 - mse: 10.1091 - val_loss: 19.5092 - val_mae: 2.8537 - val_mse: 19.5092\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 19/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.1551 - mae: 2.1879 - mse: 10.1551 - val_loss: 19.4200 - val_mae: 2.8337 - val_mse: 19.4200\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 20/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.7575 - mae: 2.1486 - mse: 9.7575 - val_loss: 19.8508 - val_mae: 2.8520 - val_mse: 19.8508\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 21/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.5391 - mae: 2.1334 - mse: 9.5391 - val_loss: 19.6073 - val_mae: 2.8094 - val_mse: 19.6073\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 22/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.5457 - mae: 2.1677 - mse: 9.5457 - val_loss: 19.4711 - val_mae: 2.8027 - val_mse: 19.4711\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 23/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.4080 - mae: 2.1558 - mse: 9.4080 - val_loss: 19.0961 - val_mae: 2.7937 - val_mse: 19.0961\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 24/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.0595 - mae: 2.0982 - mse: 9.0595 - val_loss: 18.5873 - val_mae: 2.7763 - val_mse: 18.5873\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 25/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.8593 - mae: 2.1166 - mse: 8.8593 - val_loss: 20.5131 - val_mae: 2.8059 - val_mse: 20.5131\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 26/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.9069 - mae: 2.0790 - mse: 8.9069 - val_loss: 18.8169 - val_mae: 2.7318 - val_mse: 18.8169\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 27/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.6986 - mae: 2.0321 - mse: 8.6986 - val_loss: 18.8858 - val_mae: 2.7567 - val_mse: 18.8858\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 28/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.6039 - mae: 2.0581 - mse: 8.6039 - val_loss: 18.5083 - val_mae: 2.7327 - val_mse: 18.5083\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 29/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.4062 - mae: 2.0187 - mse: 8.4062 - val_loss: 18.5227 - val_mae: 2.7294 - val_mse: 18.5227\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 30/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.5707 - mae: 2.0294 - mse: 8.5707 - val_loss: 19.1018 - val_mae: 2.7214 - val_mse: 19.1018\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 31/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.2422 - mae: 1.9886 - mse: 8.2422 - val_loss: 18.4019 - val_mae: 2.7168 - val_mse: 18.4019\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 32/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.9650 - mae: 1.9721 - mse: 7.9650 - val_loss: 17.9165 - val_mae: 2.6871 - val_mse: 17.9165\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 33/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.0356 - mae: 1.9331 - mse: 8.0356 - val_loss: 20.1362 - val_mae: 2.8835 - val_mse: 20.1362\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 34/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.1133 - mae: 1.9798 - mse: 8.1133 - val_loss: 18.7192 - val_mae: 2.7234 - val_mse: 18.7192\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 35/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.8014 - mae: 1.9488 - mse: 7.8014 - val_loss: 19.4508 - val_mae: 2.7816 - val_mse: 19.4508\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 36/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.8598 - mae: 1.9583 - mse: 7.8598 - val_loss: 19.5103 - val_mae: 2.9375 - val_mse: 19.5103\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 37/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.7984 - mae: 1.9296 - mse: 7.7984 - val_loss: 19.4718 - val_mae: 2.7538 - val_mse: 19.4718\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 38/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.5976 - mae: 1.9239 - mse: 7.5976 - val_loss: 19.2051 - val_mae: 2.7307 - val_mse: 19.2051\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 39/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.6630 - mae: 1.9172 - mse: 7.6630 - val_loss: 18.6308 - val_mae: 2.7413 - val_mse: 18.6308\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 40/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.4104 - mae: 1.8826 - mse: 7.4104 - val_loss: 17.8465 - val_mae: 2.7210 - val_mse: 17.8465\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 41/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.4981 - mae: 1.8841 - mse: 7.4981 - val_loss: 19.4714 - val_mae: 2.7838 - val_mse: 19.4714\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 42/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.3673 - mae: 1.8906 - mse: 7.3673 - val_loss: 17.8742 - val_mae: 2.6332 - val_mse: 17.8742\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 43/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.3283 - mae: 1.8515 - mse: 7.3283 - val_loss: 18.3729 - val_mae: 2.6627 - val_mse: 18.3729\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 44/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.1782 - mae: 1.8650 - mse: 7.1782 - val_loss: 20.5136 - val_mae: 3.0215 - val_mse: 20.5136\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 45/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.2115 - mae: 1.8789 - mse: 7.2115 - val_loss: 17.6324 - val_mae: 2.6560 - val_mse: 17.6324\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 46/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.9389 - mae: 1.8178 - mse: 6.9389 - val_loss: 17.7074 - val_mae: 2.7116 - val_mse: 17.7074\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 47/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.1571 - mae: 1.8432 - mse: 7.1571 - val_loss: 17.9549 - val_mae: 2.6420 - val_mse: 17.9549\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 48/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.0388 - mae: 1.8194 - mse: 7.0388 - val_loss: 18.3145 - val_mae: 2.8232 - val_mse: 18.3145\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 49/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.9670 - mae: 1.8063 - mse: 6.9670 - val_loss: 17.6338 - val_mae: 2.6524 - val_mse: 17.6338\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 50/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.8445 - mae: 1.7940 - mse: 6.8445 - val_loss: 16.7234 - val_mae: 2.6413 - val_mse: 16.7234\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 51/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.9393 - mae: 1.8154 - mse: 6.9393 - val_loss: 18.0841 - val_mae: 2.8057 - val_mse: 18.0841\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 52/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.7668 - mae: 1.7698 - mse: 6.7668 - val_loss: 18.0858 - val_mae: 2.7448 - val_mse: 18.0858\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 53/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.6034 - mae: 1.7724 - mse: 6.6034 - val_loss: 16.6955 - val_mae: 2.6054 - val_mse: 16.6955\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 54/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.7387 - mae: 1.7751 - mse: 6.7387 - val_loss: 20.1177 - val_mae: 2.8366 - val_mse: 20.1177\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 55/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.4552 - mae: 1.7589 - mse: 6.4552 - val_loss: 17.7537 - val_mae: 2.6217 - val_mse: 17.7537\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 56/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.4993 - mae: 1.7678 - mse: 6.4993 - val_loss: 17.1823 - val_mae: 2.6101 - val_mse: 17.1823\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 57/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.4921 - mae: 1.7340 - mse: 6.4921 - val_loss: 19.8667 - val_mae: 3.0042 - val_mse: 19.8667\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 58/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.5311 - mae: 1.7701 - mse: 6.5311 - val_loss: 16.7387 - val_mae: 2.6019 - val_mse: 16.7387\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 59/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.2846 - mae: 1.6964 - mse: 6.2846 - val_loss: 16.7143 - val_mae: 2.6060 - val_mse: 16.7143\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 60/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.3824 - mae: 1.7143 - mse: 6.3824 - val_loss: 16.2439 - val_mae: 2.6744 - val_mse: 16.2439\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 61/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.2568 - mae: 1.7032 - mse: 6.2568 - val_loss: 16.7933 - val_mae: 2.6208 - val_mse: 16.7933\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 62/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.3085 - mae: 1.7262 - mse: 6.3085 - val_loss: 16.5479 - val_mae: 2.5937 - val_mse: 16.5479\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 63/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.2031 - mae: 1.6910 - mse: 6.2031 - val_loss: 16.2833 - val_mae: 2.6115 - val_mse: 16.2833\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 64/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.0996 - mae: 1.7162 - mse: 6.0996 - val_loss: 18.4672 - val_mae: 2.9381 - val_mse: 18.4672\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 65/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.1800 - mae: 1.7108 - mse: 6.1800 - val_loss: 17.0333 - val_mae: 2.7235 - val_mse: 17.0333\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 66/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.0228 - mae: 1.6654 - mse: 6.0228 - val_loss: 18.1264 - val_mae: 2.8055 - val_mse: 18.1264\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 67/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.1494 - mae: 1.6927 - mse: 6.1494 - val_loss: 17.0323 - val_mae: 2.6064 - val_mse: 17.0323\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 68/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.9137 - mae: 1.6858 - mse: 5.9137 - val_loss: 17.1055 - val_mae: 2.6391 - val_mse: 17.1055\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 69/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.0769 - mae: 1.6926 - mse: 6.0769 - val_loss: 16.8573 - val_mae: 2.6361 - val_mse: 16.8573\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 70/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.8309 - mae: 1.6378 - mse: 5.8309 - val_loss: 17.2946 - val_mae: 2.6609 - val_mse: 17.2946\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 71/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.9778 - mae: 1.7016 - mse: 5.9778 - val_loss: 15.9038 - val_mae: 2.5838 - val_mse: 15.9038\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 72/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.8563 - mae: 1.6335 - mse: 5.8563 - val_loss: 17.4159 - val_mae: 2.6298 - val_mse: 17.4159\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 73/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.7478 - mae: 1.6517 - mse: 5.7478 - val_loss: 16.3856 - val_mae: 2.5893 - val_mse: 16.3856\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 74/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.6123 - mae: 1.6471 - mse: 5.6123 - val_loss: 16.3227 - val_mae: 2.6746 - val_mse: 16.3227\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 75/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.6092 - mae: 1.6309 - mse: 5.6092 - val_loss: 16.3552 - val_mae: 2.5841 - val_mse: 16.3552\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 76/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.7278 - mae: 1.6690 - mse: 5.7278 - val_loss: 16.2516 - val_mae: 2.5807 - val_mse: 16.2516\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 77/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.5015 - mae: 1.6626 - mse: 5.5015 - val_loss: 16.2511 - val_mae: 2.6601 - val_mse: 16.2511\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 78/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.6931 - mae: 1.6550 - mse: 5.6931 - val_loss: 16.6842 - val_mae: 2.6523 - val_mse: 16.6842\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 79/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.4391 - mae: 1.6007 - mse: 5.4391 - val_loss: 18.1906 - val_mae: 2.7731 - val_mse: 18.1906\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 80/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.4225 - mae: 1.6033 - mse: 5.4225 - val_loss: 15.6912 - val_mae: 2.5630 - val_mse: 15.6912\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 81/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.5329 - mae: 1.6150 - mse: 5.5329 - val_loss: 16.4829 - val_mae: 2.6005 - val_mse: 16.4829\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 82/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.3777 - mae: 1.5899 - mse: 5.3777 - val_loss: 16.6022 - val_mae: 2.6415 - val_mse: 16.6022\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 83/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.3488 - mae: 1.6064 - mse: 5.3488 - val_loss: 15.7812 - val_mae: 2.6189 - val_mse: 15.7812\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 84/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.4109 - mae: 1.6151 - mse: 5.4109 - val_loss: 16.1101 - val_mae: 2.6002 - val_mse: 16.1101\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 85/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.2320 - mae: 1.5687 - mse: 5.2320 - val_loss: 17.5305 - val_mae: 2.7975 - val_mse: 17.5305\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 86/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.2325 - mae: 1.5457 - mse: 5.2325 - val_loss: 18.4276 - val_mae: 2.7352 - val_mse: 18.4276\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 87/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.2545 - mae: 1.5747 - mse: 5.2545 - val_loss: 17.2209 - val_mae: 2.7965 - val_mse: 17.2209\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 88/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.3344 - mae: 1.6059 - mse: 5.3344 - val_loss: 15.7674 - val_mae: 2.5888 - val_mse: 15.7674\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 89/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.2197 - mae: 1.5489 - mse: 5.2197 - val_loss: 16.0532 - val_mae: 2.5752 - val_mse: 16.0532\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 90/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.0072 - mae: 1.5649 - mse: 5.0072 - val_loss: 18.6302 - val_mae: 3.0371 - val_mse: 18.6302\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 91/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.9996 - mae: 1.5426 - mse: 4.9996 - val_loss: 17.1384 - val_mae: 2.8235 - val_mse: 17.1384\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 92/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.0666 - mae: 1.5521 - mse: 5.0666 - val_loss: 16.0273 - val_mae: 2.6984 - val_mse: 16.0273\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 93/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.0523 - mae: 1.5273 - mse: 5.0523 - val_loss: 15.9783 - val_mae: 2.5942 - val_mse: 15.9783\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 94/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.9561 - mae: 1.5317 - mse: 4.9561 - val_loss: 17.4211 - val_mae: 2.7392 - val_mse: 17.4211\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 95/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.7807 - mae: 1.5195 - mse: 4.7807 - val_loss: 17.4444 - val_mae: 2.6350 - val_mse: 17.4444\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 96/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.7558 - mae: 1.5327 - mse: 4.7558 - val_loss: 16.5095 - val_mae: 2.7889 - val_mse: 16.5095\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 97/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.9151 - mae: 1.5311 - mse: 4.9151 - val_loss: 17.1855 - val_mae: 2.7893 - val_mse: 17.1855\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 98/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.7915 - mae: 1.5052 - mse: 4.7915 - val_loss: 16.9043 - val_mae: 2.8458 - val_mse: 16.9043\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 99/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.6241 - mae: 1.4739 - mse: 4.6241 - val_loss: 15.9920 - val_mae: 2.5725 - val_mse: 15.9920\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 100/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.8180 - mae: 1.4844 - mse: 4.8180 - val_loss: 16.6288 - val_mae: 2.6493 - val_mse: 16.6288\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    }
   ],
   "source": [
    "history = model.fit(x_train,\n",
    "                    y_train,\n",
    "                    epochs          = 100,\n",
    "                    batch_size      = 10,\n",
    "                    verbose         = 1,\n",
    "                    validation_data = (x_test, y_test),\n",
    "                    callbacks       = [savemodel_callback])"
   ]
  },
  {
   "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [