Skip to content
Snippets Groups Projects
03-Polynomial-Regression.ipynb 107 KiB
Newer Older
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width=\"800px\" src=\"../fidle/img/00-Fidle-header-01.svg\"></img>\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "\n",
    "# <!-- TITLE --> [POLR1] - Complexity Syndrome\n",
    "<!-- DESC --> Illustration of the problem of complexity with the polynomial regression\n",
    "<!-- AUTHOR : Jean-Luc Parouty (CNRS/SIMaP) -->\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "\n",
    "## Objectives :\n",
    " - Visualizing and understanding under and overfitting\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    " \n",
    "## What we're going to do :\n",
    "\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "We are looking for a polynomial function to approximate the observed series :  \n",
    "$ y = a_n\\cdot x^n + \\dots + a_i\\cdot x^i + \\dots + a_1\\cdot x + b $  \n",
    "\n",
    "\n",
    "## Step 1 - Import and init"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "execution_count": 1,
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "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, 10:55:05\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 numpy as np\n",
    "import math\n",
    "import random\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import sys\n",
    "\n",
    "sys.path.append('..')\n",
    "import fidle.pwk as ooo\n",
    "\n",
    "place, dataset_dir = ooo.init()"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 2 - Preparation of learning data :"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "execution_count": 2,
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nombre de points : 100  a=[ 1.41826956 -0.83144866 -1.51327976  1.94373982  0.40779941  0.27072661\n",
      " -0.33499448] deg=7 bruit=2000\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "data": {
      "text/markdown": [
       "#### Before normalization :"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Données d'aprentissage brute :\n",
      "(100 points visibles sur 100)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAFrCAYAAAA0K4RcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dfZBlaV0f8G/33XZGKYYFZHpklODM7LgiaFDHGZFFfEm0yiC+IMiORTTlSzwhmGgqyGrK1wxlfCkt9RiiRAKMoCG4amlKiyhsgMykVVB5GWZ7BkQGpxtYhtZYM/Tevvmju+F2T7/dvm/n3PP5VG3N9u2+fZ97+/Tt73nO7/k9U51OJwAA0ETT4x4AAACMizAMAEBjCcMAADSWMAwAQGMJwwAANNZYwnBRFJ2iKLSxAABgrO4Y8+MLxAAADNvUdp9QJgEAQGMJwwAANJYwDABAYwnDAAA0ljAMAEBjCcMAADSWMAwAQGMJwwAANJYwDABAYwnDAAA01ri3YwYAYIK1VzqZm1/MletLOX7kUE6dOJzW9La7I4+cMAwAwFC0Vzq57/zFXLp2I7eW2zkw08rdR+/MubOnKxOIlUkAADAUc/OLuXTtRm4ut9NJcnO5nUvXbmRufnHcQ/sEYRgAgKG4cn0pt5bbG267tdzO1YWlMY3odsIwAABDcfzIoRyYaW247cBMK8dmD41pRLcThgEAGIpTJw7n7qN35uBMK1NJDq7VDJ86cXjcQ/uERi2gq/pqRgCASdKansq5s6czN7+YqwtLOTZbvfzVmDBch9WMAACTpjU9lTMnZ3Pm5Oy4h7KlxpRJbLWa8R3vfyivfuBy2iudcQ8PAGAitVc6uXB5IecfeDAXLi9ULnc1ZmZ4q9WMD6908ltvuZJ3/c1HzRADAAxYHa7MN2ZmeKvVjMlqIK5avzsAgEmgz3CFrK9mvGOLs5Cq9bsDAJgE+gxXyPpqxud+2fHbAnHV+t0BAEwCfYYrpjU9lW97xsk8+QmPqXS/OwCASaDPcAXVod8dAMAkqEPualwYTqrf7w4AYFJUPXc1Mgxvxe50AADNIwynHj3wAAAYvEYtoNtOHXrgAQAweMJw6tEDDwCAwROGU48eeAAADJ4wnHr0wAMAYPAsoEs9euABADB4wvCaqvfAAwBg8JRJAADQWMIwAACNJQwDANBYwjAAAI0lDAMA0FjCMAAAjSUMAwDQWMIwAACNJQwDANBYwjAAAI0lDAMA0FjCMAAAjSUMAwDQWMIwAACNJQwDANBYwjAAAI0lDAMA0FjCMAAAjSUMAwDQWMIwAACNJQwDANBYwjAAAI11x7gHAADA5GmvdDI3v5gr15dy/MihnDpxOK3pqXEP6zbCMAAAA9Ve6eS+8xdz6dqN3Fpu58BMK3cfvTPnzp6uXCBWJgEAwEDNzS/m0rUbubncTifJzeV2Ll27kbn5xXEP7TbCMAAAA3Xl+lJuLbc33HZruZ2rC0tjGtH2hGEAAAbq+JFDOTDT2nDbgZlWjs0eGtOIticMAwAwUKdOHM7dR+/MwZlWppIcXKsZPnXi8LiHdhsL6AAAGKjW9FTOnT2dufnFXF1YyrFZ3SQAAJhQ27VRO3NyNmdOzo57eDsShveoLr3yAABGqU5t1LYiDO9B3X/IAADD0t1GLVlto/aO9z+UVz9wOd/2jJOVz0oW0O1BnXrlAQCM0oN/+7FPBOF1D6908ltvuZL7zl9Me6UzppHtjTC8B3XqlQcAMCrtlU7ecun6lp97eKVTi8lDYXgPduqV117p5MLlhZx/4MFcuLxQ+bMfAIBBmZtfzN9+9B+2/XwdJg/VDO/Beq+8zTXDX3jscWqJAYDG2urqebeqbrTRTRjeg+165W1VML5+OaDqbUQAAPq1fvV8c81wUu2NNroJw3u0Va+8nWqJhWEAYNKdOnE4n/P4R+VdH7iR5fZKZlrTOfqYT8s9T/qMnDjyqFq0ohWG+7DV2VAdLgcAAAzM1FSmpj7xv3nUIw7k+U+/q/IheJ0FdH2o077bAACDNje/mPdcu5GPP7ySJPn4wyt5Tw06SHQzM9yHOu27DQAwaJNQMioM96ku+24DAAzaJJSMKpMAAGBfJqFk1MwwAAD7Mgklo8IwAAD7VveSUWUSAAA0ljAMAEBjCcMAADSWMAwAQGMJwwAANJYwDABAYwnDAAA0ljAMAEBj2XQDAKAB2iudzM0v5sr1pRw/Ur+d4oZFGAYAmHDtlU7uO38xl67dyK3ldg7MtHL30Ttz7uzpxgdiZRIAABNubn4xl67dyM3ldjpJbi63c+najczNL457aGMnDAMATLgr15dya7m94bZby+1cXVga04iqQxgGAJhwx48cyoGZ1obbDsy0cmz20JhGVB3CMADAhDt14nDuPnpnDs60MpXk4FrN8KkTh8c9tLGzgG4ErN4EAMapNT2Vc2dPZ25+MVcXlvLExz0ymUpe++b5xmcTYXjIrN4EAKqgNT2VMydnc+rEYdmkizKJIbN6EwCoEtlkI2F4yKzeBACqRDbZSBgeMqs3AYAqkU02EoaHzOpNAKBKZJONLKAbss2rN4/NNnvFJgAwXrLJRsLwCKyv3jxzcnbcQwEAkE26KJMAAKCxhGEAABpLGAYAoLGEYQAAGksYBgCgsYRhAAAaSxgGAKCx9BkesPZKJ3Pzi7lyfSnHjzS7iTUAQNUJwwPUXunkvvMXc+najdxabufA2vaG586eFogBACpImcQAzc0v5tK1G7m53E4nyc3ldi5du5G5+cVxDw0AgC0IwwN05fpSbi23N9x2a7mdqwtLYxoRAAA7EYYH6PiRQzkw09pw24GZVo7NHhrTiAAA2IkwPECnThzO3UfvzMGZVqaSHFyrGT514vC4hwYAwBYsoBug1vRUzp09nbn5xVxdWMqxWd0kAACqTBgesNb0VM6cnM2Zk7PjHgoAALtQJgEAQGMJwwAANJYwDABAYwnDAAA0lgV0NdBe6WRufjFXri/l+BEdKgAABkUYrrj2Sif3nb+YS9du5NZyOwfWehefO3taIAYA6JMyiYqbm1/MpWs3cnO5nU6Sm8vtXLp2I3Pzi+MeGgBA7QnDFXfl+lJuLbc33HZruZ2rC0tjGhEAwOQQhivu+JFDOTDT2nDbgZlWjs0eGtOIAAAmhzBccadOHM7dR+/MwZlWppIcXKsZPnXi8LiHBgBQexbQVVxreirnzp7O3Pxiri4s5disbhIAAIMiDNdAa3oqZ07O5szJ2XEPBQBgoiiTAACgsYRhAAAaSxgGAKCxhGEAABpLGAYAoLGEYQAAGqvv1mpFUXx6knuS/EOSN5Rl2d7lLgAAUAl7nhkuiuJ7i6K4WBTFY7pu+6Ik707yuiR/kOStRVE8YvDDrKf2SicXLi/k/AMP5sLlhbRXOuMeEgAAXXqZGX5ekk5Zlg913fbTSR6d5NeTzCb5uiT/MsnPDmyENdVe6eS+8xdz6dqN3Fpu58DaNsrnzp62exwAQEX0UjN8V5K/XP9grTziy5O8vCzL7yzL8llJ5pLcO9gh1tPc/GIuXbuRm8vtdJLcXG7n0rUbmZtfHPfQAABY00sYfmyS7iT3ZWv//nbXbf87yT/qd1CT4Mr1pdxa3lg+fWu5nasLS2MaEQAAm/UShh9K8uldH395kpUkb+26rZPk4ADGVXvHjxzKgZnWhtsOzLRybPbQmEYEAMBmvdQMvzvJs4qi+KEk7azWEM+VZdk91fnEJNcHN7z6OnXicO4+eudtNcOnThwe99AAAFjTSxj+hST3J/lAkoeTfFqSF69/siiKVpKnZ+NMcWO1pqdy7uzpzM0v5urCUo7NHsqpE4ctngMAqJA9l0mUZfm7We0U8c4k70ny78qyfHXXl3x1Vksk/nCgI6yx1vRUzpyczb333JUzJ2cFYQBg4LRy7c9UpzP6F6woik6SlGU58scGAJgUWrnu2bYvhu2YAQBqSivX/m1bM1wUxRPW/vdaWZbtro93VZbl+/seGQAAO9qpleuZk7NjGlW97LSA7n1ZbZX2uUkud328m84u3xcAgAFYb+V6sysQa+Xam51C6yuzGmw/tuljAAAqQCvX/llABwBQY+2Vjlauu9v2BVHOAABQY+utXNUI78+eu0kURXHPHr/u+/Y/HAAAGJ1eWqv9cVEUP7zdJ4uieHRRFL+T5Of6HxYAAAxfL2F4PsmPFUXxhqIojnR/oiiKpyV5e5JnZXXLZgAAqLxewvAXJXl1kq9M8raiKP5JkhRF8ZIkb0xyOMkLy7L85kEPEgAAhqHnbhJFUbwgyS8n+dQk70ryeVntQ/y8siz/co/fQzcJAABGZXDbMZdl+cokP7h23ycn+XCSZ+w1CAMAQFX0FIaLopguiuI/JvmFJH+f5K1JHpfkjUVRPGUI42us9konFy4v5PwDD+bC5YW0V+x3AgAwaL20VvusJA8keUmSv0ryxWVZPj3JDyW5K8nFoiiKoYyyYdorndx3/mJe+vq35VVvupyXvv5tue/8RYEYAGDAepkZfnuSpyX5lSRnyrK8nCRlWb40yTOTfCjJLxZF8fpBD7Jp5uYXc+najdxcbqeT5OZyO5eu3cjc/OK4hwYAMFF6CcPTSZ5TluW/KsvyVvcnyrJ8a5IvSPK7SZ49wPE10pXrS7m13N5w263ldq4uLI1pRAAAk6mX7ZifWpbl+7b7ZFmWN5J8Y1EUL+x7VA13/MihHJhp5WZXID4w08qx2UNjHBUAwOTZ88zwTkF409f90r5HQ5Lk1InDufvonTk408pUkoMzrdx99M6cOnF43EMDAJgovcwMMyKt6amcO3s6c/OLubqwlGOzh3LqxOG0prdtkQcAwD70FIaLophK8pwkX5PkaJIDW3xZpyzLrxrA2BqtNT2VMydnc+bk7LiHAgAwsfYchouiOJDkD7LaOWIqSScbd/PodN0OAACV10s3iRcn+YokP5nVjTamkvxokscnuTfJ3yR5bZJPGewQAQBgOHopk/iWJH9eluWPJMn6/hplWV5P8tqiKP5vVnsR/5skPzvgcU609konc/OLuXJ9KcePDLc+eJSPBQBQdb2E4eNJfrXr406SmfUPyrK8WhTF7yf59gjDe7a+29ylazdya7mdA2udI86dPT3wkDrKxwIAqINeyiSWk9zs+vjvslou0e2vkxzrd1BNMsrd5uxsBwCwUS9h+ANZ7SCx7nKSL930NU9N8lC/g2qSUe42Z2c7AICNeimTeEuSr+76+P4kP1kUxcuTvD6rXSa+OslvDGx0DTDK3ebsbAcAsFEvM8O/keQ9RVE8ce3jn08yl+Q7kvxukh9IciXJDw5ygJNulLvN2dkOAGCjqU5n/22Bi6K4I8mzk5xI8r4kv1eW5T/s4X6dJCnLct+PPUnWOzyMYre5UT4WAEBFbBt2+grD+yUMAwAwQtuG4V7KJAAAYKL0soAOAIAxs4HWYAnDAAA1YQOtwVMmAQBQEzbQGjxhGACgJmygNXjKJGpKvRAANI8NtAZvz2G4KIrDZVmag68A9UIA0EzrG2htzgA20Nq/XmaG/6YoivuTvKwsyz8e1oDYXXe9ULKxXujMydkxjw4AGJbW9FTOnT1tA60B6iUMX07yLUmeUxTFlSQvS/KKsiw/MpSRsa2t6oVuLrfzpnd+UNkEAEy41vRUzpycNQE2IHteQFeW5VOSPD3Jq5IcTfLTST5QFMX5oiieMaTxsYX1eqFuU1PJmy9dz6vedDkvff3bct/5i2mvjH53QQCAOtnXdsxFUTwqyQuSfHeSz0vSyerM8X9O8sqyLD+6y/1tx9yHzTXDd7Sm015ZSXf2PTjTyku+6anOGgEAdtiOeV9huFtRFE9L8l1JnpvkYJJbSX4ryS+VZfmn29xHGO7TejeJqwtLef+H/z5vfMcH0/2TnErygmeezL333DWuIQIAVMW2YXgQfYY/kuSjSW6uPdCnZHXW+GJRFPcXRfGYATwGm6zXC917z1155uc9/rayCW1WAAB2t68+w0VRzCT55iTfk+QZWQ3Bl5P8RJJXJPnHSf59kq9P8stJnj+AsbINbVYAAPanpzBcFMWJrNYJf3uSxyZpJ7k/SVmW5f/q+tI3JnljURSvS/K1Axkp29JmBQDqwaZZ1dPLphtvSPIVWZ0F/mBWZ4H/S1mWH9zhbn+W5Bv7GiF70oQ2K95AAKgzm2ZVUy8zw1+Z5E+SlEnuL8uyvcvXJ8nvZTU4Q1+8gQBQdzbNqqZewvDnlmX5nl6+eVmW70jyjt6GBLfzBgJA3W21adat5XauLiz5WzZGvWy60VMQhkHa6Q0EAOpgq02zdH8av0G0VoOh8wYCQN2td386ONPKVFY3yNL9afz21VqNeqrzAjTt4wCoO92fqkkYboi6L0DzBgLAJGhC96e6EYYbYhIWoHkDAQAGTc1wQ1iABgBwO2G4ISxAAwC4nTDcEFawAgDcTs1wQzRxAVqdu2cAAKMhDDdIkxag1b17BgAwGsokmEjd3TM62dg9AwBgnTDMRNI9AwDYC2USTKT17hk3uwKx7hkAk8kaEfohDDORbN8M0AzWiNAvYZiJ1MTuGQBNNAk7rDJewjATq0ndMwCaaqc1It7/2QsL6ACA2rLDKv0Shqm09konFy4v5PwDD+bC5YW0VzrjHhIAFWKHVfqlTILKsigCgN1YI0K/hGEqy6IIAPbCGhH6oUyCyrJxBkw2ZVBAFZgZprJsnAGTSxkUUBVmhhmJ/cwAWRQBk6u7DKqTjWVQMAquTLDOzDBDt98ZIIsiYHLpDcs4uTJBNzPDDF0/M0DriyLuveeunDk5600KJoTesIyTKxN0E4YZOgvhgM2UQTFO/i7RTZkEQ2chHLCZMqjttVc6mZtfzJXrSzl+xOsyDP4u0U0YZujWZ4A212aZAYJm0xv2dmpZR8PfJboJwwydGSBglOo8s2qzodHwd4luwjAjYQaomeocSqiunY6rus+s6rIxOv4usU4YBoai7qGEatrtuKr7zKpaVhg93SSAodC6iGHY7biqe5cAXTZGw4YbdDMzDAyFy730Yq8lNbsdV3WfWVXLOnyuWrGZMAwMRd1DCaPTSzjZ7biahC4BalmHq+6lNAyeMAwMxSSEEkajl3Cy23FlZpXduGrFZsIwMBRCCXvVSzjZy3FlZpWduGrFZsIwQ6GlFkl9Qonjdbx6DSd1Oa6oJlet2EwYZuAsTqBO6nq8TlKAF07Yi0Ed865asZkwzMBZnECd1PF4rWuA345wwm4Gfcy7ukA3fYYZuLr3+aRZ6ni8TmIP5/Vwcu89d+XMyVlBeIyq2IN3Eo95qsPMMANncQLDNOjygDoer1bDMyxbzcB+zuMflW84/dl578LfDbUkZ6ffbcc8wyQMM3Dq/5ppFDWswygP2OvxWqUa3ToGeOphq7Khv3z/Q3n3tRtZfnhlaCU5u/1uO+YZJmGYgVP/1zyjqmEdRn3vXo7XqtXoOuFkWLaage10ko8/vJJkeDX1u/1ub3XMf87RO7Oy0sn5Bx4c+wkq9SYMMxQWJ+xflWYg92pUi9CGdal0t+N1WM9vvz9rJ5wMy1YzsJvt93eunzKIzcf8Ew8/MvdffG9+6v63V+IElXoThqFCqjYDuVejqucb16XSYTy/fn/W6wH+1InDmZtfzGvfPD/Wk6c6nsRxu80zsHe0ptNeWUn3Grr9/M4Nogyi+6T1wuWFvOeDH6tVFxiqSxiGCqljm69kdCF1XOUBw3h+g/hZV+XkqSrjoH+3zcA+7pG5f+59eU+fv3P7KYPY6XEsqGOQhGGokLq+wY8qpI6rPGAYz28QP+uqnDxVZRwMxuayodMnZ/v+ndvpeF+/uvHkJzwmT/qsR6c1PZ0Tu1xdsKCOQRKGoULq+gY/ypA6jnr0YTy/Qfysh3ny1EvZQ11P4tibQfzObXe8P/Fxj9zyqsLzn35ix98vi0gZJGEYKqTOb/CTvmhy0M9vED/rYZ089Vr2UIWTODXL1bbd8Z6p7OuqgkWkDJIwDBXiDb45BvGzHtbJU69lD+M+iVOzXH3bHe+vffP8vq8qTPoJOKMjDEPFeINvjn5/1sM6eeq17GHcJ3Fqluthq+O9ClcVQBiGCTSJl4wn8TkNwjBOnvYTUMZ5Eqdmub7GfVUBEmEYJs4kXjKexOdUZeMIKP2c7Jhd3J8qnGCO+6oCJMIwTJxJvGQ8ic+pykYdUPo92TG72LsqnWAqDWPchGGYMJN4yXgSn1PVjTKg9HuyY3axd04w4ZOEYZgA3Zc7H15ZmbhLxi6D78/6cfHg334sK51OpqemctdnPKpyQXEQJztmF3vjBBM+SRiGmtt8ufNT7pjOzB3TOZjWxFwydhm8d+vHxbs/8NHcenjlE7cfrGC9tZOd0fOawycJw1Bzmy93rgefb/7SY5lpTU/EJWOXwXu3flx0B+GkmpfDneyMntccPkkYpvaqsCJ6nLa63Pnxh1cy05rOvffcNaZRDZ7L4L3Z6rhYV7XL4U52Rs9rDp8kDFNrVVoRPS4ud7KVrY6Ldb0cH6M62XSyM3pec1glDFNrVkS73MnW1o+L7WqG93J8ONlkUjT9CiI7E4aptV5XRE/iG6LLnWyl+7iYv/6xtFc6aU1P50QPx72TTSaBkzp2IwxTa72UCEzyG6LLnWyl3+NC+y0mgZM6djM97gFAP9YvBR+caWUqO18C7n5D7GTjGyJwu/WTzW7q0ambnU7qIDEzTM31UiJglgt6ox6dSWCRMbsRhqm9vV4K9oY4GfZT973TfSaxjnxQ1KMzCZzUsRthmNrba5jxhlh/+6n73uk+SSa2jnxQqlyP7kRmOCbtdXVSx26EYWqtl3DkDbH+9rMQZqf7JLGwpqYmeUHsOE3q61rlkzrGzwI6aq3XRXHrb4j33nNXzpycrc2be3ulkwuXF3L+gQdz4fJC2iudcQ9pLPazEGan+1hYU18WxN5uEO8TXleayMwwtdbPori6XAqs2kxNv6/bXu+/1dftp+57t/uoI6+unY4VC2I3GtT7hNeVJhKGqbX9LoqrWsDcSZV6ZPb7uu3l/u2VTi4+uJCX/dG78pG/u5Xl9sonWub9xPO/pOe6791qxdWRV9Nux4oFsRsN6n3C60oTCcPU2n4XxVUpYO6mSjM1/b5uu92/vdLJS85fzDvf/1Ae7rrEu/51f371Qz3Xfe9WK66OvJp2O1YsiN1oUO8TXleaSBim1va7KK5KATPZ+XJwlWZq+n3ddrv/xQcX8ld//ZFsVerY/XW9LoTZafGMhTXVtNuxYkHsRoN6n/C60kTCMLW3nzBTpYC52+XgKs3U9Pu67Xb/B971t1sG4V4fh/rby7HmROaTenmf2K1u3+tK0wjDNFKVAuZul4OrNFPT7+u22/23e0bTU3GptmGq9DtaB3t9n6jTegkYlalOZ/Qtmoqi6CRJWZYjf2xYtz47Mu6Aef6BB/OqN11O92/iVJIXPPNk7r3nrpGPZzf9vm473f+tl67nx1/3Z9n8tvStTz+eF3z55/hj3TBV+R2dJBcuL+Slr3/bhhn3gzOtvOSbnmommEm37ZuHmWEaqyqXAqtUsrEX/b5uO93/9MnZfP4THpN3feBGltsrmWlN50mfeacg3FBV+R2dJFVbLwFVIAzDmLkc/Emt6am89NvOmA2klsbZu3yvj12Xk++69IFnMgjDMGZVqgmuArOB1NE4a3F7eew6nHyra2bUhGGoAAEQ6m3Yvct3mint5bHrcPJdpz7wTAZhGAD6NMxa3N1mSnt97KqffKtrZtSmxz0AaJL2SicXLi/k/AMP5sLlhbS3a6oL1Mp6LW63QdXids+UdrJxpnTYjz0Ok/Z8qD4zwzAi6uBgcg2zFne3mdI61AH3YtKeD9UnDMOIjKIObtJWYE/a82FyDbMWd7cOEHWoA+7FpD0fqk8YhhEZdh3cpM08T9rzqRInGcMxrFrcvcyU9vPYVTweql7XzGQRhmFEht3fc9JWYE/a86kKJxn1M8yZUscDWEAHI7M+u3NwppWprG6BOsg6uJ1mnuto0p5PVey2GItqWp8pvfeeu3Lm5OzAgqrjAcwMw8gMuw6uLjtL7dWkPZ+q0LaKbo4HEIZhpIZZBzdpK7An7flUhZMMujkeQBiGiTFpK7An7flUhZMMujkeIJnqdEbf9L8oik6SlGU58scGaLr17gFOMkgcDzTGtge1mWGAhtG2im6OB5pOGAZgKKrYvxZgM2EYgIHTvxaoC32GARg4/WuBuhCGARg4m6YAdSEMAzBw6/1ru+lfC1SRMAzAwA17+3GAQbGADgbEynn4JJumAHUhDMMAWDkPt9O/FqgDZRIwAFbOM2naK51cuLyQ8w88mAuXF9JeGf1upQCjYGYYBmCnlfNmxagbVzqAJjEzDANg5TyTxJUOoEmEYRgAK+eZJHoEA02iTAIGwMp5Jsn6lY6bXYHYlQ5gUgnDMCBWzjMp1q90bK4ZdqUDmETCMAAbuNIBNIkwDMBtXOkAmsICOgAAGksYBgCgsYRhAAAaSxgGAKCxhGEAABpLGAYAoLGEYQAAGkufYQD61l7pZG5+MVeuL+X4EZt0APUhDAPQl/ZKJ/edv3jb9s3nzp4WiIHKUyYBQF/m5hdz6dqN3Fxup5Pk5nI7l67dyNz84riHBrArYRiAvly5vpRby+0Nt91abufqwtKYRgSwd8IwAH05fuRQDsy0Ntx2YKaVY7OHxjQigL0ThgHoy6kTh3P30TtzcKaVqSQH12qGT504PO6hAezKAjoA+tKansq5s6czN7+YqwtLOTarmwRQH8IwAH1rTU/lzMnZnDk5O+6hAPREmQQAAI0lDAMA0FjCMAAAjSUMAwDQWMIwAACNJQwDANBYwjAAAI0lDAMA0FjCMAAAjTXWHeiKohjnwwMA0Aydsiy33CPezDAAAI011el0xj0GAAAYCzPDAAA0ljAMAEBjjXUBHQCjUxTFK5L88ySfXZbl+8Y7GoBqMDMMAEBjCcMAzfGSJJ+b5Nq4BwJQFbpJAADQWGqGAfpQFMX9SZ6d5EVlWf7ips/9RJIfTvLysiy/cw/f6yuSPD/J05N8ZpKZJFeS/PckP1WW5c2ur/3sJG9LspLkqWVZ/nXX5x6R5E+TnEzylWVZvgRBF5wAAAQhSURBVGnt9ldki5rhoii+Psn3JXlSksck+UiSB5P8ZlmWZQ8vB0DtKJMA6M+/SPL+JD9dFMVT128siuKrktyX5F1JXrTH7/XiJP80yduTvCzJryX5eJIfTfI/i6JorX9hWZbvTfKdSR6d5DVFUXRPbpRJ7k7y4+tBeDtFUXx3kt/JahD+vSQ/m+QPknxqku/Y47gBasvMMEAfyrJ8qCiK5yd5U5LfLIriC5N8WpJXJ7mV5LllWf7DHr9dkeS9ZVluqF/rmmF+TpLf7Hrs1xVF8StJvjfJTyR5SVEUL0jygiRvXLttN9+T1cD9BWVZLm563E/f47gBasvMMECfyrJ8a5L/kOSurM7ovjrJkayWTryzh+9zdXMQXvPza/9+zRaf+/4kf5HkxUVRvDCrs8IfSnK2LMuVPT70w0mWtxjPh/d4f4DaMjMMMBg/leSZSe5d+/g1ZVn+Wi/fYK3W9/uSfGNW630fmWSq60uObr5PWZY3i6J4XlZrhH8xSSfJc8qy/OAeH/Z8Vksj3lkUxW9mdYb7LWVZfqiXsQPUlZlhgAFYm9H97a6bfn67r91KURQzSf44yX9McjCr5RAvTfJja/8lyYFt7n45yV+u/f+7kvzRXh+3LMufy+qiuvdntbb5t5MsFEXxJ0VRfHEvzwGgjoRhgAEoiuKuJD+T5KNZ7fDwa0VRHOzhWzw7yZck+W9lWT6lLMvvLsvyh8qy/NGsll7s5AeTPC3Jh5N8Xlb7Ce9ZWZavLMvyTJLHJvm6JC9P8owkf1gUxeFevhdA3QjDAH0qiuJAVmdyH5HkW7M6o/uU9DY7fGLt3/+xxee+fIfHflqSH0/yniRPXvv3x4qieHoPj50kKcvyRlmWf1CW5XcleUVW26zd0+v3AagTYRigfz+T5KlJ/lNZln+U5EeSvCXJ9xRF8dw9fo/3rf37zO4bi6I4ltV65NsURfHoJK9J0k7yrWVZLiR5XlYXxL2mKIrH7vagRVF87aa2bOvWZ4T32gkDoJYsoAPoQ1EU35DkhUkuZrX9WcqybK+1W3t7kl8tiuJPy7K8usu3+r0k80m+vyiKp2R1Q40nJPlnSX5/7f83+69rt7+oLMu3rz32XxRF8QNJfinJryf5+l0e97VJbhZF8easBvKprM4Gn0ryZ0nesMv9AWrNzDDAPhVF8YSsBtKPJXl+WZYPr3+uLMu/yeqGHIeSvLYoik/Z6XuVZfn/knxlkt/Iat3vi5J8flZ7BX/bFo/9r5N8Q5Lf3bzzXVmWv5zVhXDPKori3+7yNH4wyf9J8oVZ7XP8HVnd+e7FSb6iLMvbWq4BTJKpTmerlpYAADD5zAwDANBYwjAAAI0lDAMA0FjCMAAAjSUMAwDQWMIwAACNJQwDANBYwjAAAI0lDAMA0FjCMAAAjfX/ATZWJlt7MTQBAAAAAElFTkSuQmCC\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X        :      mean=     +0.0445  std=     +2.9239    min=     -4.8617    max=     +4.9884\n",
      "Y        :      mean=  +3580.6573  std=  +6410.2282    min=  -5081.2711    max= +20616.3219\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "data": {
      "text/markdown": [
       "#### After normalization :"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Données d'aprentissage normalisées :\n",
      "(100 points visibles sur 100)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_norm   :      mean=     -0.0000  std=     +1.0000    min=     -1.6779    max=     +1.6908\n",
      "Y_norm   :      mean=     +0.0000  std=     +1.0000    min=     -1.3513    max=     +2.6576\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    }
   ],
   "source": [
    "# ---- Parameters\n",
    "\n",
    "n         = 100\n",
    "\n",
    "xob_min   = -5\n",
    "xob_max   = 5\n",
    "\n",
    "deg       =  7\n",
    "a_min     = -2\n",
    "a_max     =  2\n",
    "\n",
    "noise     =  2000\n",
    "\n",
    "# ---- Train data\n",
    "#      X,Y              : data\n",
    "#      X_norm,Y_norm    : normalized data\n",
    "\n",
    "X = np.random.uniform(xob_min,xob_max,(n,1))\n",
    "# N = np.random.uniform(-noise,noise,(n,1))\n",
    "N = noise * np.random.normal(0,1,(n,1))\n",
    "\n",
    "a = np.random.uniform(a_min,a_max, (deg,))\n",
    "fy = np.poly1d( a )\n",
    "\n",
    "Y = fy(X) + N\n",
    "\n",
    "# ---- Data normalization\n",
    "#\n",
    "X_norm = (X - X.mean(axis=0)) / X.std(axis=0)\n",
    "Y_norm = (Y - Y.mean(axis=0)) / Y.std(axis=0)\n",
    "\n",
    "# ---- Data visualization\n",
    "\n",
    "width = 12\n",
    "height = 6\n",
    "nb_viz = min(2000,n)\n",
    "\n",
    "def vector_infos(name,V):\n",
    "    m=V.mean(axis=0).item()\n",
    "    s=V.std(axis=0).item()\n",
    "    print(\"{:8} :      mean={:+12.4f}  std={:+12.4f}    min={:+12.4f}    max={:+12.4f}\".format(name,m,s,V.min(),V.max()))\n",
    "\n",
    "\n",
    "print(\"Nombre de points : {}  a={} deg={} bruit={}\".format(n,a,deg,noise))\n",
    "\n",
    "ooo.display_md('#### Before normalization :')\n",
    "print(\"\\nDonnées d'aprentissage brute :\")\n",
    "print(\"({} points visibles sur {})\".format(nb_viz,n))\n",
    "plt.figure(figsize=(width, height))\n",
    "plt.plot(X[:nb_viz], Y[:nb_viz], '.')\n",
    "plt.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n",
    "plt.xlabel('x axis')\n",
    "plt.ylabel('y axis')\n",
    "plt.show()\n",
    "vector_infos('X',X)\n",
    "vector_infos('Y',Y)\n",
    "\n",
    "ooo.display_md('#### After normalization :')\n",
    "print(\"\\nDonnées d'aprentissage normalisées :\")\n",
    "print(\"({} points visibles sur {})\".format(nb_viz,n))\n",
    "plt.figure(figsize=(width, height))\n",
    "plt.plot(X_norm[:nb_viz], Y_norm[:nb_viz], '.')\n",
    "plt.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n",
    "plt.xlabel('x axis')\n",
    "plt.ylabel('y axis')\n",
    "plt.show()\n",
    "vector_infos('X_norm',X_norm)\n",
    "vector_infos('Y_norm',Y_norm)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 3 - Polynomial regression with NumPy\n",
    "### 3.1 - Underfitting"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "execution_count": 3,
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [],
   "source": [
    "def draw_reg(X_norm, Y_norm, x_hat,fy_hat, size):\n",
    "    plt.figure(figsize=size)\n",
    "    plt.plot(X_norm, Y_norm, '.')\n",
    "\n",
    "    x_hat = np.linspace(X_norm.min(), X_norm.max(), 100)\n",
    "\n",
    "    plt.plot(x_hat, fy_hat(x_hat))\n",
    "    plt.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n",
    "    plt.xlabel('x axis')\n",
    "    plt.ylabel('y axis')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "execution_count": 4,
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nombre de degrés : 1 a_hat=[ 5.53720655e-03 -1.11022302e-17]\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "data": {
      "image/png": "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\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "reg_deg=1\n",
    "\n",
    "a_hat   = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
    "fy_hat  = np.poly1d( a_hat )\n",
    "\n",
    "print(\"Nombre de degrés : {} a_hat={}\".format(reg_deg, a_hat))\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], X_norm,fy_hat, (width,height))"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2 - Good fitting"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "execution_count": 5,
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nombre de degrés : 5 a_hat=[-0.01689547  0.55290739  0.00810945 -0.50055836  0.00632176 -0.53347921]\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "data": {
      "image/png": "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\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "reg_deg=5\n",
    "\n",
    "a_hat   = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
    "fy_hat  = np.poly1d( a_hat )\n",
    "\n",
    "print(\"Nombre de degrés : {} a_hat={}\".format(reg_deg, a_hat))\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], X_norm,fy_hat, (width,height))"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3 - Overfitting"
   ]
  },
  {
   "cell_type": "code",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "execution_count": 6,
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nombre de degrés : 24 a_hat=[-1.41154188e-01  5.08303504e-01  2.13232647e+00 -9.51485222e+00\n",
      " -1.23788649e+01  7.81408309e+01  2.96969938e+01 -3.68810764e+02\n",
      "  1.25166932e+01  1.10158656e+03 -2.62830614e+02 -2.16238513e+03\n",
      "  7.25200748e+02  2.80702139e+03 -1.03329926e+03 -2.36528631e+03\n",
      "  8.45637854e+02  1.23558721e+03 -3.86361688e+02 -3.67187064e+02\n",
      "  8.75065204e+01  5.27713214e+01 -7.69147086e+00 -2.46491363e+00\n",
      " -3.88558688e-01]\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "data": {
      "image/png": "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\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "reg_deg=24\n",
    "\n",
    "a_hat   = np.polyfit(X_norm.reshape(-1,), Y_norm.reshape(-1,), reg_deg)\n",
    "fy_hat  = np.poly1d( a_hat )\n",
    "\n",
    "print(\"Nombre de degrés : {} a_hat={}\".format(reg_deg, a_hat))\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
    "draw_reg(X_norm[:nb_viz],Y_norm[:nb_viz], X_norm,fy_hat, (width,height))"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\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
}