Skip to content
Snippets Groups Projects
03-Polynomial-Regression.ipynb 94 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",
       "\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",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Version              : 0.4.0\n",
      "Run time             : Saturday 22 February 2020, 15:45:15\n",
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "TensorFlow version   : 2.0.0\n",
      "Keras version        : 2.2.4-tf\n"
     ]
    }
   ],
   "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",
    "ooo.init()"
   ]
  },
  {
   "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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Nombre de points : 100  a=[-0.87167753  1.76610157 -1.5797434   0.77278901 -1.03581256  1.20870761\n",
      "  1.12549131] 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": {
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 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "X        :      mean=     +0.4444  std=     +2.8560    min=     -4.8506    max=     +4.9948\n",
      "Y        :      mean=  -1918.5970  std=  +4018.7742    min= -15663.0729    max=  +7697.5273\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": {
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 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "X_norm   :      mean=     -0.0000  std=     +1.0000    min=     -1.8540    max=     +1.5933\n",
      "Y_norm   :      mean=     -0.0000  std=     +1.0000    min=     -3.4201    max=     +2.3928\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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Nombre de degrés : 1 a_hat=[-2.90278334e-02 -6.29052465e-17]\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "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 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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Nombre de degrés : 5 a_hat=[-0.00633816 -0.55313883 -0.12623462  0.67829195  0.12629161  0.36691953]\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "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 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": [
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
      "Nombre de degrés : 24 a_hat=[-2.12316577e+00 -6.91597507e+00  2.77684272e+01  1.03893090e+02\n",
      " -1.50202123e+02 -6.79701345e+02  4.21895164e+02  2.53839748e+03\n",
      " -5.95294613e+02 -5.96004033e+03  1.53557264e+02  9.13691399e+03\n",
      "  8.49288955e+02 -9.20441697e+03 -1.46513846e+03  5.98771133e+03\n",
      "  1.14599636e+03 -2.40885163e+03 -4.79737229e+02  5.50768446e+02\n",
      "  1.03516653e+02 -5.93457926e+01 -9.83903899e+00  1.62330659e+00\n",
      "  6.80542884e-01]\n"
Jean-Luc Parouty's avatar
Jean-Luc Parouty committed
     ]
    },
    {
     "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 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",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}