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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "<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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "</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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "<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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "</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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "                        <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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
       "<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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "x_test / loss      : 8.4146\n",
      "x_test / mae       : 2.2388\n",
      "x_test / mse       : 8.4146\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    }
   ],
   "source": [
    "score = model.evaluate(x_test, y_test, verbose=0)\n",
    "\n",
    "print('x_test / loss      : {:5.4f}'.format(score[0]))\n",
    "print('x_test / mae       : {:5.4f}'.format(score[1]))\n",
    "print('x_test / mse       : {:5.4f}'.format(score[2]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.2 - Training history\n",
    "What was the best result during our training ?"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "min( val_mae ) : 2.1317\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    }
   ],
   "source": [
    "print(\"min( val_mae ) : {:.4f}\".format( min(history.history[\"val_mae\"]) ) )"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "data": {
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "image/png": "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\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "image/png": "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\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "image/png": "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Cg4x55zjIx/5CIsXL2bJkiXccccdAGzYsIHTTjuNY489lsWLF/PII49QKpW46KKL+srecMMNda69iIjEjWZV7KM3feGecXvt+z9zzl7L3HXXXSxdupRnnnmGjo4OTjzxRE477TRuv/123vSmN/GpT32KUqlEV1cXS5cuZd26dfzhD38AYPv27eNWdxERmZjU4hBzv/nNb7jgggtIJpPMmTOHv/iLv+CJJ57gxBNP5Pvf/z7XXHMNy5Yto729nUMOOYSVK1dy+eWXc9999zF58uR6V19ERGJGwSHmnIu+cedpp53Gww8/zIIFC3jPe97DrbfeyrRp03jmmWc4/fTTufHGG7n44otrXFsREYk7dVXso2q6EwC27MqzZZdf02B6WxMzJ7eMyfc/7bTT+M53vsN73/tetm7dysMPP8zXvvY11qxZw4IFC7jkkkvo7Ozk6aef5i1veQuZTIbzzjuPQw89lIsuumhM6iAiIvsPBYcaCS9pEN1GMDp//dd/zWOPPcYxxxyDmfHVr36VuXPn8oMf/ICvfe1rpNNp2trauPXWW1m3bh3ve9/7KJfLAFx77bVjWBMREdkf2FBN3QLZbNYB5HK5AfuXL1/OkUceOaLX2ra7h807uwGYOqmJ2VPGpsWh0Y3mWomISF0Nu3qfxjjUyIAWB4U1ERGJKQWHGgkvv6zYICIicaXgUCPhdh81OIiISFwpONSIuipERGQiUHCoEXVViIjIRKDgUCMDuyoUHUREJJ4UHGpkYFdF/eohIiKyLxQcaqSeXRVtbW1DHlu9ejWLFy+uYW1ERCTOFBxqRF0VIiIyEWjJ6X118ZurKtYMHD7S1/7efZG7P/axj3HggQeSzWYBuOaaazAzHn74YbZt20ahUOCLX/wi55577oi+XT6f54Mf/CBPPvkkqVSK66+/njPOOINnn32W973vffT29lIul/nZz37G/Pnzeec738natWsplUp85jOf4W//9m9H+g5FRCRmFBxi6Pzzz+fKK6/sCw533nkn9913H1dddRWTJ0+mo6ODk08+mbe97W0Dukj25sYbbwRg2bJlPPfcc5x99tmsWLGCm266iQ9/+MO8+93vpre3l1KpxL333sv8+fO55557ANixY8fYv1EREWk46qqIoeOOO45XXnmF9evX88wzzzBt2jTmzZvHJz/5SY4++mjOOuss1q1bx6ZN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\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ooo.plot_history(history, plot={'MSE' :['mse', 'val_mse'],\n",
    "                                'MAE' :['mae', 'val_mae'],\n",
    "                                'LOSS':['loss','val_loss']})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 7 - Restore a model :"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7.1 - Reload model"
   ]
  },
  {
   "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",
      "Loaded.\n"
     ]
    }
   ],
   "source": [
    "loaded_model = tf.keras.models.load_model('./run/models/best_model.h5')\n",
    "loaded_model.summary()\n",
    "print(\"Loaded.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7.2 - Evaluate it :"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "x_test / loss      : 7.9114\n",
      "x_test / mae       : 2.1317\n",
      "x_test / mse       : 7.9114\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    }
   ],
   "source": [
    "score = loaded_model.evaluate(x_test, y_test, verbose=0)\n",
    "\n",
    "print('x_test / loss      : {:5.4f}'.format(score[0]))\n",
    "print('x_test / mae       : {:5.4f}'.format(score[1]))\n",
    "print('x_test / mse       : {:5.4f}'.format(score[2]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7.3 - Make a prediction"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [],
   "source": [
    "my_data = [ 1.26425925, -0.48522739,  1.0436489 , -0.23112788,  1.37120745,\n",
    "       -2.14308942,  1.13489104, -1.06802005,  1.71189006,  1.57042287,\n",
    "        0.77859951,  0.14769795,  2.7585581 ]\n",
    "real_price = 10.4\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "\n",
    "my_data=np.array(my_data).reshape(1,13)"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Prediction : 9.28 K$   Reality : 10.40 K$\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    }
   ],
   "source": [
    "predictions = loaded_model.predict( my_data )\n",
    "print(\"Prediction : {:.2f} K$   Reality : {:.2f} K$\".format(predictions[0][0], real_price))"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "---\n",
    "<img width=\"80px\" src=\"../fidle/img/00-Fidle-logo-01.svg\"></img>"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}