Skip to content
Snippets Groups Projects
02-DNN-Regression-Premium.ipynb 157 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.57 DEV\n",
      "Run time             : Wednesday 9 September 2020, 14:44:23\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, datasets_dir = ooo.init()"
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_3037227a_f29a_11ea_b9ca_0cc47af5a3b3\" ><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_3037227a_f29a_11ea_b9ca_0cc47af5a3b3level0_row0\" class=\"row_heading level0 row0\" >0</th>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col0\" class=\"data row0 col0\" >0.01</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col1\" class=\"data row0 col1\" >18.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col2\" class=\"data row0 col2\" >2.31</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col3\" class=\"data row0 col3\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col4\" class=\"data row0 col4\" >0.54</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col5\" class=\"data row0 col5\" >6.58</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col6\" class=\"data row0 col6\" >65.20</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col7\" class=\"data row0 col7\" >4.09</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col8\" class=\"data row0 col8\" >1.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col9\" class=\"data row0 col9\" >296.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col10\" class=\"data row0 col10\" >15.30</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col11\" class=\"data row0 col11\" >396.90</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_col12\" class=\"data row0 col12\" >4.98</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row0_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_3037227a_f29a_11ea_b9ca_0cc47af5a3b3level0_row1\" class=\"row_heading level0 row1\" >1</th>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col0\" class=\"data row1 col0\" >0.03</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col1\" class=\"data row1 col1\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col2\" class=\"data row1 col2\" >7.07</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col3\" class=\"data row1 col3\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col4\" class=\"data row1 col4\" >0.47</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col5\" class=\"data row1 col5\" >6.42</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col6\" class=\"data row1 col6\" >78.90</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col7\" class=\"data row1 col7\" >4.97</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col8\" class=\"data row1 col8\" >2.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col9\" class=\"data row1 col9\" >242.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col10\" class=\"data row1 col10\" >17.80</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col11\" class=\"data row1 col11\" >396.90</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_col12\" class=\"data row1 col12\" >9.14</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row1_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_3037227a_f29a_11ea_b9ca_0cc47af5a3b3level0_row2\" class=\"row_heading level0 row2\" >2</th>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col0\" class=\"data row2 col0\" >0.03</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col1\" class=\"data row2 col1\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col2\" class=\"data row2 col2\" >7.07</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col3\" class=\"data row2 col3\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col4\" class=\"data row2 col4\" >0.47</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col5\" class=\"data row2 col5\" >7.18</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col6\" class=\"data row2 col6\" >61.10</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col7\" class=\"data row2 col7\" >4.97</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col8\" class=\"data row2 col8\" >2.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col9\" class=\"data row2 col9\" >242.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col10\" class=\"data row2 col10\" >17.80</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col11\" class=\"data row2 col11\" >392.83</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_col12\" class=\"data row2 col12\" >4.03</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row2_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_3037227a_f29a_11ea_b9ca_0cc47af5a3b3level0_row3\" class=\"row_heading level0 row3\" >3</th>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col0\" class=\"data row3 col0\" >0.03</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col1\" class=\"data row3 col1\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col2\" class=\"data row3 col2\" >2.18</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col3\" class=\"data row3 col3\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col4\" class=\"data row3 col4\" >0.46</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col5\" class=\"data row3 col5\" >7.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col6\" class=\"data row3 col6\" >45.80</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col7\" class=\"data row3 col7\" >6.06</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col8\" class=\"data row3 col8\" >3.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col9\" class=\"data row3 col9\" >222.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col10\" class=\"data row3 col10\" >18.70</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col11\" class=\"data row3 col11\" >394.63</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_col12\" class=\"data row3 col12\" >2.94</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row3_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_3037227a_f29a_11ea_b9ca_0cc47af5a3b3level0_row4\" class=\"row_heading level0 row4\" >4</th>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col0\" class=\"data row4 col0\" >0.07</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col1\" class=\"data row4 col1\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col2\" class=\"data row4 col2\" >2.18</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col3\" class=\"data row4 col3\" >0.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col4\" class=\"data row4 col4\" >0.46</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col5\" class=\"data row4 col5\" >7.15</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col6\" class=\"data row4 col6\" >54.20</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col7\" class=\"data row4 col7\" >6.06</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col8\" class=\"data row4 col8\" >3.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col9\" class=\"data row4 col9\" >222.00</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col10\" class=\"data row4 col10\" >18.70</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col11\" class=\"data row4 col11\" >396.90</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_col12\" class=\"data row4 col12\" >5.33</td>\n",
       "                        <td id=\"T_3037227a_f29a_11ea_b9ca_0cc47af5a3b3row4_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 0x15444fda1310>"
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'{datasets_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_30403a18_f29a_11ea_b9ca_0cc47af5a3b3\" ><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_30403a18_f29a_11ea_b9ca_0cc47af5a3b3level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col0\" class=\"data row0 col0\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col1\" class=\"data row0 col1\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col2\" class=\"data row0 col2\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col3\" class=\"data row0 col3\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col4\" class=\"data row0 col4\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col5\" class=\"data row0 col5\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col6\" class=\"data row0 col6\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col7\" class=\"data row0 col7\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col8\" class=\"data row0 col8\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col9\" class=\"data row0 col9\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col10\" class=\"data row0 col10\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_col11\" class=\"data row0 col11\" >354.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row0_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_30403a18_f29a_11ea_b9ca_0cc47af5a3b3level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col0\" class=\"data row1 col0\" >3.49</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col1\" class=\"data row1 col1\" >11.69</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col2\" class=\"data row1 col2\" >11.22</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col3\" class=\"data row1 col3\" >0.07</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col4\" class=\"data row1 col4\" >0.55</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col5\" class=\"data row1 col5\" >6.28</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col6\" class=\"data row1 col6\" >68.33</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col7\" class=\"data row1 col7\" >3.80</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col8\" class=\"data row1 col8\" >9.44</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col9\" class=\"data row1 col9\" >406.32</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col10\" class=\"data row1 col10\" >18.47</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col11\" class=\"data row1 col11\" >354.46</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row1_col12\" class=\"data row1 col12\" >12.50</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col0\" class=\"data row2 col0\" >8.53</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col1\" class=\"data row2 col1\" >23.16</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col2\" class=\"data row2 col2\" >6.92</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col3\" class=\"data row2 col3\" >0.26</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col4\" class=\"data row2 col4\" >0.11</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col5\" class=\"data row2 col5\" >0.72</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col6\" class=\"data row2 col6\" >27.84</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col7\" class=\"data row2 col7\" >2.11</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col8\" class=\"data row2 col8\" >8.68</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col9\" class=\"data row2 col9\" >168.93</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col10\" class=\"data row2 col10\" >2.18</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col11\" class=\"data row2 col11\" >93.84</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row2_col12\" class=\"data row2 col12\" >7.01</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col0\" class=\"data row3 col0\" >0.01</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col1\" class=\"data row3 col1\" >0.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col2\" class=\"data row3 col2\" >1.21</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col3\" class=\"data row3 col3\" >0.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col4\" class=\"data row3 col4\" >0.39</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col5\" class=\"data row3 col5\" >3.56</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col6\" class=\"data row3 col6\" >6.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col7\" class=\"data row3 col7\" >1.13</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col8\" class=\"data row3 col8\" >1.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col9\" class=\"data row3 col9\" >187.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col10\" class=\"data row3 col10\" >12.60</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col11\" class=\"data row3 col11\" >0.32</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row3_col12\" class=\"data row3 col12\" >1.92</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col0\" class=\"data row4 col0\" >0.08</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col1\" class=\"data row4 col1\" >0.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col2\" class=\"data row4 col2\" >5.19</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col3\" class=\"data row4 col3\" >0.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col4\" class=\"data row4 col4\" >0.45</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col5\" class=\"data row4 col5\" >5.88</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col6\" class=\"data row4 col6\" >45.10</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col7\" class=\"data row4 col7\" >2.08</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col8\" class=\"data row4 col8\" >4.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col9\" class=\"data row4 col9\" >279.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col10\" class=\"data row4 col10\" >17.40</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col11\" class=\"data row4 col11\" >374.59</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row4_col12\" class=\"data row4 col12\" >7.15</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col0\" class=\"data row5 col0\" >0.25</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col1\" class=\"data row5 col1\" >0.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col2\" class=\"data row5 col2\" >9.69</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col3\" class=\"data row5 col3\" >0.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col4\" class=\"data row5 col4\" >0.53</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col5\" class=\"data row5 col5\" >6.21</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col6\" class=\"data row5 col6\" >76.50</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col7\" class=\"data row5 col7\" >3.24</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col8\" class=\"data row5 col8\" >5.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col9\" class=\"data row5 col9\" >330.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col10\" class=\"data row5 col10\" >19.10</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col11\" class=\"data row5 col11\" >391.18</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row5_col12\" class=\"data row5 col12\" >11.27</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col0\" class=\"data row6 col0\" >3.52</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col1\" class=\"data row6 col1\" >19.50</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col2\" class=\"data row6 col2\" >18.10</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col3\" class=\"data row6 col3\" >0.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col4\" class=\"data row6 col4\" >0.62</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col5\" class=\"data row6 col5\" >6.63</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col6\" class=\"data row6 col6\" >93.97</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col7\" class=\"data row6 col7\" >5.12</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col8\" class=\"data row6 col8\" >24.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col9\" class=\"data row6 col9\" >666.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col10\" class=\"data row6 col10\" >20.20</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col11\" class=\"data row6 col11\" >395.69</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row6_col12\" class=\"data row6 col12\" >16.57</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col0\" class=\"data row7 col0\" >88.98</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col1\" class=\"data row7 col1\" >100.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col2\" class=\"data row7 col2\" >27.74</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col3\" class=\"data row7 col3\" >1.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col4\" class=\"data row7 col4\" >0.87</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col5\" class=\"data row7 col5\" >8.78</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col6\" class=\"data row7 col6\" >100.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col7\" class=\"data row7 col7\" >12.13</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col8\" class=\"data row7 col8\" >24.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col9\" class=\"data row7 col9\" >711.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col10\" class=\"data row7 col10\" >22.00</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_col11\" class=\"data row7 col11\" >396.90</td>\n",
       "                        <td id=\"T_30403a18_f29a_11ea_b9ca_0cc47af5a3b3row7_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 0x1544c56df050>"
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_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3\" ><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_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col0\" class=\"data row0 col0\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col1\" class=\"data row0 col1\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col2\" class=\"data row0 col2\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col3\" class=\"data row0 col3\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col4\" class=\"data row0 col4\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col5\" class=\"data row0 col5\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col6\" class=\"data row0 col6\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col7\" class=\"data row0 col7\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col8\" class=\"data row0 col8\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col9\" class=\"data row0 col9\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col10\" class=\"data row0 col10\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_col11\" class=\"data row0 col11\" >354.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row0_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_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col0\" class=\"data row1 col0\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col1\" class=\"data row1 col1\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col2\" class=\"data row1 col2\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col3\" class=\"data row1 col3\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col4\" class=\"data row1 col4\" >-0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col5\" class=\"data row1 col5\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col6\" class=\"data row1 col6\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col7\" class=\"data row1 col7\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col8\" class=\"data row1 col8\" >-0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col9\" class=\"data row1 col9\" >-0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col10\" class=\"data row1 col10\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_col11\" class=\"data row1 col11\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row1_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_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col0\" class=\"data row2 col0\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col1\" class=\"data row2 col1\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col2\" class=\"data row2 col2\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col3\" class=\"data row2 col3\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col4\" class=\"data row2 col4\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col5\" class=\"data row2 col5\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col6\" class=\"data row2 col6\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col7\" class=\"data row2 col7\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col8\" class=\"data row2 col8\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col9\" class=\"data row2 col9\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col10\" class=\"data row2 col10\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_col11\" class=\"data row2 col11\" >1.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row2_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_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col0\" class=\"data row3 col0\" >-0.41</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col1\" class=\"data row3 col1\" >-0.50</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col2\" class=\"data row3 col2\" >-1.45</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col3\" class=\"data row3 col3\" >-0.28</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col4\" class=\"data row3 col4\" >-1.48</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col5\" class=\"data row3 col5\" >-3.78</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col6\" class=\"data row3 col6\" >-2.24</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col7\" class=\"data row3 col7\" >-1.27</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col8\" class=\"data row3 col8\" >-0.97</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col9\" class=\"data row3 col9\" >-1.30</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col10\" class=\"data row3 col10\" >-2.70</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col11\" class=\"data row3 col11\" >-3.77</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row3_col12\" class=\"data row3 col12\" >-1.51</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col0\" class=\"data row4 col0\" >-0.40</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col1\" class=\"data row4 col1\" >-0.50</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col2\" class=\"data row4 col2\" >-0.87</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col3\" class=\"data row4 col3\" >-0.28</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col4\" class=\"data row4 col4\" >-0.92</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col5\" class=\"data row4 col5\" >-0.56</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col6\" class=\"data row4 col6\" >-0.83</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col7\" class=\"data row4 col7\" >-0.81</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col8\" class=\"data row4 col8\" >-0.63</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col9\" class=\"data row4 col9\" >-0.75</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col10\" class=\"data row4 col10\" >-0.49</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col11\" class=\"data row4 col11\" >0.21</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row4_col12\" class=\"data row4 col12\" >-0.76</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col0\" class=\"data row5 col0\" >-0.38</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col1\" class=\"data row5 col1\" >-0.50</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col2\" class=\"data row5 col2\" >-0.22</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col3\" class=\"data row5 col3\" >-0.28</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col4\" class=\"data row5 col4\" >-0.14</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col5\" class=\"data row5 col5\" >-0.09</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col6\" class=\"data row5 col6\" >0.29</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col7\" class=\"data row5 col7\" >-0.27</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col8\" class=\"data row5 col8\" >-0.51</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col9\" class=\"data row5 col9\" >-0.45</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col10\" class=\"data row5 col10\" >0.29</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col11\" class=\"data row5 col11\" >0.39</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row5_col12\" class=\"data row5 col12\" >-0.18</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col0\" class=\"data row6 col0\" >0.00</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col1\" class=\"data row6 col1\" >0.34</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col2\" class=\"data row6 col2\" >0.99</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col3\" class=\"data row6 col3\" >-0.28</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col4\" class=\"data row6 col4\" >0.65</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col5\" class=\"data row6 col5\" >0.49</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col6\" class=\"data row6 col6\" >0.92</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col7\" class=\"data row6 col7\" >0.62</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col8\" class=\"data row6 col8\" >1.68</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col9\" class=\"data row6 col9\" >1.54</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col10\" class=\"data row6 col10\" >0.79</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col11\" class=\"data row6 col11\" >0.44</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row6_col12\" class=\"data row6 col12\" >0.58</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "            <tr>\n",
       "                        <th id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col0\" class=\"data row7 col0\" >10.02</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col1\" class=\"data row7 col1\" >3.81</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col2\" class=\"data row7 col2\" >2.39</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col3\" class=\"data row7 col3\" >3.55</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col4\" class=\"data row7 col4\" >2.85</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col5\" class=\"data row7 col5\" >3.48</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col6\" class=\"data row7 col6\" >1.14</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col7\" class=\"data row7 col7\" >3.95</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col8\" class=\"data row7 col8\" >1.68</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col9\" class=\"data row7 col9\" >1.80</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col10\" class=\"data row7 col10\" >1.62</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col11\" class=\"data row7 col11\" >0.45</td>\n",
       "                        <td id=\"T_3047e8e4_f29a_11ea_b9ca_0cc47af5a3b3row7_col12\" class=\"data row7 col12\" >3.63</td>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "            </tr>\n",
       "    </tbody></table>"
      ],
      "text/plain": [
       "<pandas.io.formats.style.Styler at 0x15444ecdbf10>"
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: 451.5788 - mae: 19.3591 - mse: 451.5788 - val_loss: 329.1448 - val_mae: 16.0309 - val_mse: 329.1448\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 2/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 211.5096 - mae: 12.2218 - mse: 211.5096 - val_loss: 108.3333 - val_mae: 8.4033 - val_mse: 108.3333\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 3/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 70.3440 - mae: 6.3771 - mse: 70.3440 - val_loss: 48.6247 - val_mae: 5.4254 - val_mse: 48.6247\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 4/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 40.6460 - mae: 4.6686 - mse: 40.6460 - val_loss: 31.8544 - val_mae: 4.3864 - val_mse: 31.8544\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 5/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 31.5112 - mae: 3.9835 - mse: 31.5112 - val_loss: 25.2733 - val_mae: 3.8291 - val_mse: 25.2733\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 6/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 26.0028 - mae: 3.5552 - mse: 26.0028 - val_loss: 21.2025 - val_mae: 3.5126 - val_mse: 21.2025\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 7/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 22.9040 - mae: 3.2894 - mse: 22.9040 - val_loss: 18.7219 - val_mae: 3.3630 - val_mse: 18.7219\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 8/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 20.7030 - mae: 3.1073 - mse: 20.7030 - val_loss: 17.1645 - val_mae: 3.1364 - val_mse: 17.1645\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 9/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 18.8492 - mae: 2.9549 - mse: 18.8492 - val_loss: 15.9556 - val_mae: 3.0417 - val_mse: 15.9556\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 10/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 17.3627 - mae: 2.8545 - mse: 17.3627 - val_loss: 14.5636 - val_mae: 2.8940 - val_mse: 14.5636\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 11/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 16.5493 - mae: 2.7485 - mse: 16.5493 - val_loss: 13.5443 - val_mae: 2.8097 - val_mse: 13.5443\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 12/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 15.1774 - mae: 2.6100 - mse: 15.1774 - val_loss: 12.8342 - val_mae: 2.7474 - val_mse: 12.8342\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 13/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 14.5047 - mae: 2.5353 - mse: 14.5047 - val_loss: 12.5044 - val_mae: 2.6996 - val_mse: 12.5044\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 14/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 13.9094 - mae: 2.5047 - mse: 13.9094 - val_loss: 13.7044 - val_mae: 2.8269 - val_mse: 13.7044\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 15/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 13.8116 - mae: 2.4839 - mse: 13.8116 - val_loss: 11.5988 - val_mae: 2.6134 - val_mse: 11.5988\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 16/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 13.2807 - mae: 2.4504 - mse: 13.2807 - val_loss: 11.7794 - val_mae: 2.6727 - val_mse: 11.7794\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 17/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 13.0417 - mae: 2.4619 - mse: 13.0417 - val_loss: 11.1711 - val_mae: 2.5612 - val_mse: 11.1711\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 18/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 12.7004 - mae: 2.4158 - mse: 12.7004 - val_loss: 11.2262 - val_mae: 2.5638 - val_mse: 11.2262\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 19/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 12.3811 - mae: 2.3505 - mse: 12.3811 - val_loss: 11.1829 - val_mae: 2.5709 - val_mse: 11.1829\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 20/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 12.1518 - mae: 2.3144 - mse: 12.1518 - val_loss: 11.8039 - val_mae: 2.6264 - val_mse: 11.8039\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 21/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 12.0618 - mae: 2.3069 - mse: 12.0618 - val_loss: 10.5117 - val_mae: 2.4977 - val_mse: 10.5117\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 22/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 11.7215 - mae: 2.2730 - mse: 11.7215 - val_loss: 10.8222 - val_mae: 2.5470 - val_mse: 10.8222\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 23/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 11.4063 - mae: 2.2664 - mse: 11.4063 - val_loss: 10.9130 - val_mae: 2.5783 - val_mse: 10.9130\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 24/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 11.2792 - mae: 2.2543 - mse: 11.2792 - val_loss: 10.6224 - val_mae: 2.5127 - val_mse: 10.6224\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 25/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.9162 - mae: 2.2524 - mse: 10.9162 - val_loss: 10.2785 - val_mae: 2.4690 - val_mse: 10.2785\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 26/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.9697 - mae: 2.2395 - mse: 10.9697 - val_loss: 10.1341 - val_mae: 2.4756 - val_mse: 10.1341\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 27/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.9254 - mae: 2.2110 - mse: 10.9254 - val_loss: 9.9579 - val_mae: 2.4534 - val_mse: 9.9579\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 28/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.6250 - mae: 2.1981 - mse: 10.6250 - val_loss: 9.8628 - val_mae: 2.4531 - val_mse: 9.8628\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 29/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.4390 - mae: 2.2266 - mse: 10.4390 - val_loss: 11.0650 - val_mae: 2.5976 - val_mse: 11.0650\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 30/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.2351 - mae: 2.2149 - mse: 10.2351 - val_loss: 11.3110 - val_mae: 2.6028 - val_mse: 11.3110\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 31/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.9756 - mae: 2.1411 - mse: 9.9756 - val_loss: 10.5442 - val_mae: 2.5424 - val_mse: 10.5442\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 32/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 10.0065 - mae: 2.1846 - mse: 10.0065 - val_loss: 10.5039 - val_mae: 2.5381 - val_mse: 10.5039\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 33/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.8145 - mae: 2.1732 - mse: 9.8145 - val_loss: 10.6075 - val_mae: 2.5167 - val_mse: 10.6075\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 34/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.7928 - mae: 2.1442 - mse: 9.7928 - val_loss: 9.6075 - val_mae: 2.4228 - val_mse: 9.6075\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 35/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.5274 - mae: 2.1159 - mse: 9.5274 - val_loss: 10.1010 - val_mae: 2.5094 - val_mse: 10.1010\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 36/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.5454 - mae: 2.1321 - mse: 9.5454 - val_loss: 9.4754 - val_mae: 2.4009 - val_mse: 9.4754\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 37/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.6166 - mae: 2.0920 - mse: 9.6166 - val_loss: 9.1801 - val_mae: 2.3680 - val_mse: 9.1801\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 38/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.4989 - mae: 2.1062 - mse: 9.4989 - val_loss: 9.4729 - val_mae: 2.4064 - val_mse: 9.4729\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 39/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.1417 - mae: 2.0769 - mse: 9.1417 - val_loss: 10.1403 - val_mae: 2.4911 - val_mse: 10.1403\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 40/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.9499 - mae: 2.0397 - mse: 8.9499 - val_loss: 10.0046 - val_mae: 2.5014 - val_mse: 10.0046\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 41/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.1057 - mae: 2.0517 - mse: 9.1057 - val_loss: 10.0337 - val_mae: 2.4706 - val_mse: 10.0337\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 42/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 9.0834 - mae: 2.0991 - mse: 9.0834 - val_loss: 10.8307 - val_mae: 2.5410 - val_mse: 10.8307\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 43/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.8040 - mae: 2.0658 - mse: 8.8040 - val_loss: 9.1554 - val_mae: 2.3578 - val_mse: 9.1554\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 44/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.9272 - mae: 2.0131 - mse: 8.9272 - val_loss: 9.7690 - val_mae: 2.4255 - val_mse: 9.7690\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 45/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.5831 - mae: 2.0336 - mse: 8.5831 - val_loss: 12.8255 - val_mae: 2.7414 - val_mse: 12.8255\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 46/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.5223 - mae: 2.0492 - mse: 8.5223 - val_loss: 11.6562 - val_mae: 2.6286 - val_mse: 11.6562\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 47/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.3589 - mae: 1.9880 - mse: 8.3589 - val_loss: 9.3114 - val_mae: 2.3853 - val_mse: 9.3114\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 48/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.6072 - mae: 2.0118 - mse: 8.6072 - val_loss: 9.1889 - val_mae: 2.3580 - val_mse: 9.1889\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 49/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.4583 - mae: 1.9986 - mse: 8.4583 - val_loss: 9.4660 - val_mae: 2.3914 - val_mse: 9.4660\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 50/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.1425 - mae: 1.9699 - mse: 8.1425 - val_loss: 9.7014 - val_mae: 2.4073 - val_mse: 9.7014\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 51/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.0828 - mae: 1.9531 - mse: 8.0828 - val_loss: 10.8350 - val_mae: 2.5489 - val_mse: 10.8350\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 52/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 8.1485 - mae: 1.9390 - mse: 8.1485 - val_loss: 9.5865 - val_mae: 2.3963 - val_mse: 9.5865\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 53/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.8928 - mae: 1.9150 - mse: 7.8928 - val_loss: 9.2900 - val_mae: 2.3577 - val_mse: 9.2900\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 54/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.9045 - mae: 1.9448 - mse: 7.9045 - val_loss: 8.8513 - val_mae: 2.3248 - val_mse: 8.8513\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 55/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.9761 - mae: 1.9431 - mse: 7.9761 - val_loss: 8.9354 - val_mae: 2.3062 - val_mse: 8.9354\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 56/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.7639 - mae: 1.9100 - mse: 7.7639 - val_loss: 9.7039 - val_mae: 2.4130 - val_mse: 9.7039\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 57/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.5450 - mae: 1.8917 - mse: 7.5450 - val_loss: 9.1465 - val_mae: 2.3433 - val_mse: 9.1465\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 58/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.5763 - mae: 1.9056 - mse: 7.5763 - val_loss: 9.8393 - val_mae: 2.4155 - val_mse: 9.8393\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 59/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.4021 - mae: 1.9015 - mse: 7.4021 - val_loss: 10.1463 - val_mae: 2.4950 - val_mse: 10.1463\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 60/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.2389 - mae: 1.8413 - mse: 7.2389 - val_loss: 10.2749 - val_mae: 2.4886 - val_mse: 10.2749\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 61/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.4364 - mae: 1.8745 - mse: 7.4364 - val_loss: 8.7876 - val_mae: 2.2892 - val_mse: 8.7876\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 62/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.1792 - mae: 1.8195 - mse: 7.1792 - val_loss: 9.3803 - val_mae: 2.3491 - val_mse: 9.3803\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 63/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.0171 - mae: 1.8352 - mse: 7.0171 - val_loss: 9.7288 - val_mae: 2.3988 - val_mse: 9.7288\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 64/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.1242 - mae: 1.8721 - mse: 7.1242 - val_loss: 8.7878 - val_mae: 2.3109 - val_mse: 8.7878\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 65/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.0037 - mae: 1.8703 - mse: 7.0037 - val_loss: 8.6845 - val_mae: 2.2934 - val_mse: 8.6845\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 66/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 7.0722 - mae: 1.8259 - mse: 7.0722 - val_loss: 8.8746 - val_mae: 2.3361 - val_mse: 8.8746\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 67/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.9270 - mae: 1.8207 - mse: 6.9270 - val_loss: 8.7587 - val_mae: 2.2841 - val_mse: 8.7587\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 68/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.7002 - mae: 1.8467 - mse: 6.7002 - val_loss: 8.4595 - val_mae: 2.2586 - val_mse: 8.4595\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 69/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.7169 - mae: 1.8021 - mse: 6.7169 - val_loss: 8.4883 - val_mae: 2.2706 - val_mse: 8.4883\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 70/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.6936 - mae: 1.7833 - mse: 6.6936 - val_loss: 8.5668 - val_mae: 2.2511 - val_mse: 8.5668\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 71/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.5341 - mae: 1.7929 - mse: 6.5341 - val_loss: 9.7375 - val_mae: 2.4311 - val_mse: 9.7375\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 72/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.6987 - mae: 1.7862 - mse: 6.6987 - val_loss: 9.8922 - val_mae: 2.4472 - val_mse: 9.8922\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 73/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.4978 - mae: 1.7531 - mse: 6.4978 - val_loss: 8.9721 - val_mae: 2.3103 - val_mse: 8.9721\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 74/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.4459 - mae: 1.7324 - mse: 6.4459 - val_loss: 8.7818 - val_mae: 2.2645 - val_mse: 8.7818\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 75/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.3698 - mae: 1.7204 - mse: 6.3698 - val_loss: 9.4654 - val_mae: 2.3729 - val_mse: 9.4654\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 76/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.2865 - mae: 1.7553 - mse: 6.2865 - val_loss: 8.8909 - val_mae: 2.2826 - val_mse: 8.8909\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 77/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.1698 - mae: 1.7091 - mse: 6.1698 - val_loss: 8.6908 - val_mae: 2.2759 - val_mse: 8.6908\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 78/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.0638 - mae: 1.7480 - mse: 6.0638 - val_loss: 8.6755 - val_mae: 2.2850 - val_mse: 8.6755\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 79/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 6.1423 - mae: 1.6853 - mse: 6.1423 - val_loss: 8.8553 - val_mae: 2.3140 - val_mse: 8.8553\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 80/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.8542 - mae: 1.6967 - mse: 5.8542 - val_loss: 8.2810 - val_mae: 2.2025 - val_mse: 8.2810\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 81/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.8843 - mae: 1.6755 - mse: 5.8843 - val_loss: 8.4707 - val_mae: 2.2524 - val_mse: 8.4707\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 82/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.8827 - mae: 1.6963 - mse: 5.8827 - val_loss: 10.3967 - val_mae: 2.5261 - val_mse: 10.3967\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 83/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.6607 - mae: 1.6552 - mse: 5.6607 - val_loss: 9.5903 - val_mae: 2.3952 - val_mse: 9.5903\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 84/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.7355 - mae: 1.6234 - mse: 5.7355 - val_loss: 8.7292 - val_mae: 2.2675 - val_mse: 8.7292\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 85/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.7740 - mae: 1.7079 - mse: 5.7740 - val_loss: 9.4493 - val_mae: 2.3782 - val_mse: 9.4493\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 86/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.7540 - mae: 1.6351 - mse: 5.7540 - val_loss: 8.6225 - val_mae: 2.2316 - val_mse: 8.6225\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 87/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.5124 - mae: 1.6341 - mse: 5.5124 - val_loss: 8.8343 - val_mae: 2.2823 - val_mse: 8.8343\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 88/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.6552 - mae: 1.6730 - mse: 5.6552 - val_loss: 8.3112 - val_mae: 2.2041 - val_mse: 8.3112\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 89/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.4106 - mae: 1.6177 - mse: 5.4106 - val_loss: 8.5562 - val_mae: 2.2234 - val_mse: 8.5562\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 90/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.4110 - mae: 1.6485 - mse: 5.4110 - val_loss: 9.5077 - val_mae: 2.3605 - val_mse: 9.5077\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 91/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.4161 - mae: 1.5899 - mse: 5.4161 - val_loss: 9.7760 - val_mae: 2.3782 - val_mse: 9.7760\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 92/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.1645 - mae: 1.5868 - mse: 5.1645 - val_loss: 8.1012 - val_mae: 2.1843 - val_mse: 8.1012\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 93/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.2931 - mae: 1.5712 - mse: 5.2931 - val_loss: 9.1443 - val_mae: 2.2906 - val_mse: 9.1443\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 94/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.2615 - mae: 1.6000 - mse: 5.2615 - val_loss: 10.1967 - val_mae: 2.4784 - val_mse: 10.1967\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 95/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.1850 - mae: 1.5962 - mse: 5.1850 - val_loss: 7.9114 - val_mae: 2.1317 - val_mse: 7.9114\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 96/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.2191 - mae: 1.6203 - mse: 5.2191 - val_loss: 9.0595 - val_mae: 2.3092 - val_mse: 9.0595\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 97/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 5.0688 - mae: 1.5832 - mse: 5.0688 - val_loss: 8.2681 - val_mae: 2.1804 - val_mse: 8.2681\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 98/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.9360 - mae: 1.5502 - mse: 4.9360 - val_loss: 8.9906 - val_mae: 2.3023 - val_mse: 8.9906\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 99/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.9622 - mae: 1.5618 - mse: 4.9622 - val_loss: 8.1479 - val_mae: 2.1630 - val_mse: 8.1479\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Epoch 100/100\n",
      "36/36 [==============================] - 0s 3ms/step - loss: 4.9163 - mae: 1.5291 - mse: 4.9163 - val_loss: 8.4146 - val_mae: 2.2388 - val_mse: 8.4146\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": [