Skip to content
Snippets Groups Projects
03-Polynomial-Regression.ipynb 102 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, 14:37:53\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, datasets_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.72764912  0.98943671 -1.35996255 -0.59821279  0.55493901 -0.05695086\n",
      "  1.27311346] 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": "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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        :      mean=     -0.5952  std=     +2.6702    min=     -4.8862    max=     +4.9493\n",
      "Y        :      mean=  +2815.2925  std=  +6073.0151    min=  -4754.3695    max= +32860.4436\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.6070    max=     +2.0764\n",
      "Y_norm   :      mean=     -0.0000  std=     +1.0000    min=     -1.2464    max=     +4.9473\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.11053929e-02 -6.66133815e-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.08547487  0.39121188 -0.63984971 -0.24422651  0.42060192 -0.46289742]\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsIAAAFrCAYAAADb6e9iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXhU5dnH8e/MZCMECFsSpViEgCCIigZwwX2pW90XxLZqV0/tXttq27eLra1d3i62p2+1rbaVunRxq/uGKCjEBRGUJSCCIAkQkhBCksnMef94JplJyDIzmZkzy+9zXbnmnDOTmTvDMHPPc+7nfjyO4yAiIiIikmu8bgcgIiIiIuIGJcIiIiIikpOUCIuIiIhITlIiLCIiIiI5SYmwiIiIiOQkVxJhy7Icy7LUrkJEREREXJPn8uMrGRYRERGRZPP0dlClESIiIiKSk5QIi4iIiEhOUiIsIiIiIjlJibCIiIiI5CQlwiIiIiKSk5QIi4iIiEhOUiIsIiIiIjlJibCIiIiI5CQlwiIiIiKSk5QIi4iIiEhOcnuJZRERERHJYoGgQ3VNHRu2NzGpYjhVlWX4vL2ueJxySoRFREREJCkCQYebFi5jzdYG2vwBCvN9TB1Xyi0L5qRFMqzSCBERERFJiuqaOtZsbaDVH8ABWv0B1mxtoLqmzu3QACXCIiIiIpIkG7Y30eYPdDvW5g+wsbbJpYi6UyIsIiIiIkkxqWI4hfm+bscK831MLB/uUkTdKREWERERkaSoqixj6rhSivJ9eICiUI1wVWWZ26EBmiwnIiIiIkni83q4ZcEcqmvq2FjbxMRydY0QERERkRzh83qYO6WcuVPK3Q5lPyqNEBEREZGcpERYRERERHKSEmERERERyUlKhEVEREQkJykRFhEREZGcpERYRERERHKSEmERERERyUlKhEVEREQkJykRFhEREZGcpERYRERERHKSEmERERERyUlKhEVEREQkJykRFhEREZGcpERYRERERHKSEmERERERyUlKhEVEREQkJykRFhEREZGcpERYRERERHKSEmERERERyUlKhEVEREQkJykRFhEREZGcpERYRERERHKSEmERERERyUlKhEVEREQkJykRFhEREZGcpERYRERERHKSEmERERERyUlKhEVEREQkJykRFhEREZGcpERYRERERJLruYdhxSvQ2uJ2JN3kuR2AiIiIiGSx9jb455/A3w4+H/x8IQwvdTsqQCPCIiIiIpJM61eZJBhg7IFpkwSDEmERERERSabVr4e3p89yL45eKBEWERERkeRZ/Vp4W4mwiIiIiOSEhl2wdZPZ9uXBIYe7Gk5PSoRFREREJDnefiO8PXk6FBa5F0svlAiLiIiISHJElkUcml5lEaBEWERERESSIRiEt9N3ohwoERYRERGRZHh/I+xpNNvDRsD4Se7G0wslwiIiIiKSeJFt0w6dBd70SzvTLyIRERERyXw9E+E0pERYRERERBKrrRVqVof307A+GJQIi4iIiEiirV0JHX6zPW4ClI52NZy+KBEWERERkcTq1i3iKPfiGIASYRERERFJrNXp3TatkxJhEREREUmc+h3wwWaznZcPk2e4G08/lAiLiIiISOJElkVMOQwKCt2LZQBKhEVEREQkcTKkLAKUCIuIiIhIogQDGTNRDpQIi4iIiEiivFcDe/eY7REjTeu0NKZEWEREREQSo9tqckeBx+NeLFFQIiwiIiIiifF25tQHgxJhEREREUmE1hbY8HZ4/1AlwiIiIiKSC955EwIBs33QJBhe6m48UVAiLCIiIiKDt3JZeHvG0e7FEQMlwiIiIiIyOMEgrFwe3j98jnuxxECJsIiIiIgMzuYN0FhvtktGwMGHuBtPlJQIi4iIiMjgRJZFHHY0eH3uxRIDJcIiIiIiMjiRifDMzCiLACXCIiIiIjIYDbtg03qz7fNlRP/gTkqERURERCR+b1WHtyfPgOIS92KJkRJhEREREYlfZLeImbPdiyMOSoRFREREJD7+9u7LKmdQfTAoERYRERGReK1dCW2tZrt8HFR8yN14YqREWERERETik8FlEaBEWERERETi4TgZ2zatkxJhEREREYndtvdgZ63ZHlIMk6e7G08clAiLiIiISOwiyyKmHwV5+e7FEqc8twMQERERkQzUoywiEHSorqljw/YmJlUMp6qyDJ/X4158UVAiLCIiIiKxaW6CmnfMtsdDYPpR3LRwGWu2NtDmD1CY72PquFJuWTAnrZNhlUaIiIiISGxWvQpO0GxPnEp1bTtrtjbQ6g/gAK3+AGu2NlBdU+dqmANRIiwiIiIiselRFrFhexNt/kC3m7T5A2ysbUpxYLFRaYSIiIiIRK+jA1a9Ft6fOZtJ+4ZSmO+jNSIZLsz3MbF8uAsBRk8jwiIiIiISvQ1vQ0uz2R41Fj50MFWVZUwdV0pRvg8PUBSqEa6qLHM11IFoRFhEREREovfGy+Htw2aDx4PPA7csmEN1TR0ba5uYWK6uESIiIiKSTRwHXl8S3p91bNemz+th7pRy5k4pdyGw+Kg0QkRERESi8956qA91gigugUNmuhvPICkRFhEREZHoRI4GHz43I1eTi6REWEREREQG5jjw2kvh/VnHuRdLgigRFhEREZGBbXsParea7cIimD7L3XgSQImwiIiIiAwssizisCooKHQvlgRRIiwiIiIiA+vWLSLzyyJAibCIiIiIDKRuG2zZaLbz8mHmbHfjSRAlwiIiIiLSvzeWhrcPnQVFxe7FkkBKhEVERESkf1nWLaKTEmERERER6dvunbBxjdn2euGIue7Gk0BKhEVERESkb5FlEYfMhJLh7sWSYEqERURERKRv3bpFHO9eHEmgRFhEREREerenEda+ZbY9HjjyGHfjSTAlwiIiIiLSuxUvgxM02xOnQelod+NJMCXCIiIiItK7yLKIo7KnW0QnJcIiIiIisr+WvfDOivD+kUqERURERCQXvLUcOvxm+6BKGFvhbjxJoERYRERERPZXvTi8PetY9+JIojy3A0ilQNChuqaODdubmFQxnKrKMnxej9thiYiIiKSXvXtg1avh/aoT3YsliXImEQ4EHW5auIw1Wxto8wcozPcxdVwptyyYo2RYREREJNLrS8JlERMmQ/k4d+NJkpwpjaiuqWPN1gZa/QEcoNUfYM3WBqpr6twOTURERCS9LFsU3p59smthJFvOJMIbtjfR5g90O9bmD7CxtsmliERERETSUMMuWPum2fZ4YHZ2lkVADiXCkyqGU5jv63asMN/HxPLsWS9bREREZNCqF4PjmO1DZmbdIhqRciYRrqosY+q4UoryfXiAolCNcFVlmduhiYiIiKSP5YvC27NPciuKlMiZyXI+r4dbFsyhuqaOjbVNTCxX1wgRERGRbmq3wbtrzbYvD2Yd7248SZYziTCYZHjulHLmTil3OxQRERGR9FO9KLx92NFQMsy1UFIhZ0ojRERERKQfjgOvPB/ez/KyCFAiLCIiIiIAWzbC9i1mu7AIDp/rbjwpoERYRERERLpPkjviGJMMZzklwiIiIiK5LhjsngjPOcmtSFIqpybLdfG3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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=[-4.55976953e-01  1.99082819e+00  4.88496064e+00 -3.07017812e+01\n",
      " -1.43634083e+01  2.05930027e+02 -3.68055594e+01 -7.87334691e+02\n",
      "  3.82735746e+02  1.88910133e+03 -1.23488556e+03 -2.95074672e+03\n",
      "  2.20505209e+03  3.01081364e+03 -2.39174104e+03 -1.95764170e+03\n",
      "  1.58154759e+03  7.62716254e+02 -6.07072856e+02 -1.55526838e+02\n",
      "  1.21500542e+02  1.07671548e+01 -1.02368152e+01  4.52769902e-01\n",
      " -3.38112335e-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
}