{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "# <!-- TITLE --> Linear regression with direct resolution\n", "<!-- DESC --> Direct determination of linear regression \n", "<!-- AUTHOR : Jean-Luc Parouty (CNRS/SIMaP) -->\n", "\n", "## Objectives :\n", " - Just one, the illustration of a direct resolution :-)\n", "\n", "## What we're going to do :\n", "\n", "Equation : $ Y = X.\\theta + N$ \n", "Where N is a noise vector\n", "and $\\theta = (a,b)$ a vector as y = a.x + b" ] }, { "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", "\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.2.9\n", "Run time : Tuesday 18 February 2020, 16:02:39\n", "TensorFlow version : 2.0.0\n", "Keras version : 2.2.4-tf\n" ] } ], "source": [ "import numpy as np\n", "import math\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 - Retrieve a set of points" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# ---- Paramètres\n", "nb = 100 # Nombre de points\n", "xmin = 0 # Distribution / x\n", "xmax = 10\n", "a = 4 # Distribution / y\n", "b = 2 # y= a.x + b (+ bruit)\n", "noise = 7 # bruit\n", "\n", "theta = np.array([[a],[b]])\n", "\n", "# ---- Vecteur X (1,x) x nb\n", "# la premiere colonne est a 1 afin que X.theta <=> 1.b + x.a\n", "\n", "Xc1 = np.ones((nb,1))\n", "Xc2 = np.random.uniform(xmin,xmax,(nb,1))\n", "X = np.c_[ Xc1, Xc2 ]\n", "\n", "# ---- Noise\n", "# N = np.random.uniform(-noise,noise,(nb,1))\n", "N = noise * np.random.normal(0,1,(nb,1))\n", "\n", "# ---- Vecteur Y\n", "Y = (X @ theta) + N\n", "\n", "# print(\"X:\\n\",X,\"\\nY:\\n \",Y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Show it" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 864x432 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "width = 12\n", "height = 6\n", "\n", "fig, ax = plt.subplots()\n", "fig.set_size_inches(width,height)\n", "ax.plot(X[:,1], Y, \".\")\n", "ax.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n", "ax.set_xlabel('x axis')\n", "ax.set_ylabel('y axis')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 3 - Direct calculation of the normal equation\n", "\n", "\n", "We'll try to find an optimal value of $\\theta$, minimizing a cost function. \n", "The cost function, classically used in the case of linear regressions, is the **root mean square error** (racine carré de l'erreur quadratique moyenne): \n", "\n", "$RMSE(X,h_\\theta)=\\sqrt{\\frac1n\\sum_{i=1}^n\\left[h_\\theta(X^{(i)})-Y^{(i)}\\right]^2}$ \n", "\n", "With the simplified variant : $MSE(X,h_\\theta)=\\frac1n\\sum_{i=1}^n\\left[h_\\theta(X^{(i)})-Y^{(i)}\\right]^2$\n", "\n", "The optimal value of regression is : $ \\hat{ \\theta } =( X^{-T} .X)^{-1}.X^{-T}.Y$\n", "\n", "Démontstration : https://eli.thegreenplace.net/2014/derivation-of-the-normal-equation-for-linear-regression" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Theta :\n", " [[4]\n", " [2]] \n", "\n", "theta hat :\n", " [[6.81242007]\n", " [1.56836316]]\n" ] } ], "source": [ "theta_hat = np.linalg.inv(X.T @ X) @ X.T @ Y\n", "\n", "print(\"Theta :\\n\",theta,\"\\n\\ntheta hat :\\n\",theta_hat)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Show it" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 864x432 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Xd = np.array([[1,xmin], [1,xmax]])\n", "Yd = Xd @ theta_hat\n", "\n", "fig, ax = plt.subplots()\n", "fig.set_size_inches(width,height)\n", "ax.plot(X[:,1], Y, \".\")\n", "ax.plot(Xd[:,1], Yd, \"-\")\n", "ax.tick_params(axis='both', which='both', bottom=False, left=False, labelbottom=False, labelleft=False)\n", "ax.set_xlabel('x axis')\n", "ax.set_ylabel('y axis')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "" ] } ], "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 }