From e261a531bbf508ac3dde57abc2d713a8e997562d Mon Sep 17 00:00:00 2001 From: Matt Marcha Date: Wed, 19 Dec 2018 18:23:17 +0100 Subject: [PATCH] Prise de note cours 2 + mise au propre --- .../Exercice 1-checkpoint.ipynb} | 0 .../Exercice 2-checkpoint.ipynb} | 0 .../Exercices/TP1/Exercice 1.ipynb | 359 +++++++++++++++ .../Exercices/TP1/Exercice 2.ipynb | 426 ++++++++++++++++++ .../Exercice 1-checkpoint.ipynb | 326 ++++++++++++++ .../Exercices/TP2/Exercice 1.ipynb | 380 ++++++++++++++++ .../Exercices/TP2/Exercice 1.py | 138 ++++++ Archis Applications/Exercices/TP2/tp_2.pdf | Bin 0 -> 161016 bytes .../Introduction au Machine Learning.md | 49 +- 9 files changed, 1676 insertions(+), 2 deletions(-) rename Archis Applications/Exercices/{Exercice 1.ipynb => TP1/.ipynb_checkpoints/Exercice 1-checkpoint.ipynb} (100%) rename Archis Applications/Exercices/{Exercice 2.ipynb => TP1/.ipynb_checkpoints/Exercice 2-checkpoint.ipynb} (100%) create mode 100644 Archis Applications/Exercices/TP1/Exercice 1.ipynb create mode 100644 Archis Applications/Exercices/TP1/Exercice 2.ipynb create mode 100644 Archis Applications/Exercices/TP2/.ipynb_checkpoints/Exercice 1-checkpoint.ipynb create mode 100644 Archis Applications/Exercices/TP2/Exercice 1.ipynb create mode 100644 Archis Applications/Exercices/TP2/Exercice 1.py create mode 100644 Archis Applications/Exercices/TP2/tp_2.pdf diff --git a/Archis Applications/Exercices/Exercice 1.ipynb b/Archis Applications/Exercices/TP1/.ipynb_checkpoints/Exercice 1-checkpoint.ipynb similarity index 100% rename from Archis Applications/Exercices/Exercice 1.ipynb rename to Archis Applications/Exercices/TP1/.ipynb_checkpoints/Exercice 1-checkpoint.ipynb diff --git a/Archis Applications/Exercices/Exercice 2.ipynb b/Archis Applications/Exercices/TP1/.ipynb_checkpoints/Exercice 2-checkpoint.ipynb similarity index 100% rename from Archis Applications/Exercices/Exercice 2.ipynb rename to Archis Applications/Exercices/TP1/.ipynb_checkpoints/Exercice 2-checkpoint.ipynb diff --git a/Archis Applications/Exercices/TP1/Exercice 1.ipynb b/Archis Applications/Exercices/TP1/Exercice 1.ipynb new file mode 100644 index 0000000..2b98d49 --- /dev/null +++ b/Archis Applications/Exercices/TP1/Exercice 1.ipynb @@ -0,0 +1,359 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# On importe les librairies\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1 - Créer une fonction J(theta qui implémente J(theta). Quelle est la valeur de de J(4) ?" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "25" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def J(theta_i):\n", + " return (theta_i + 1)**2\n", + "\n", + "J(4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# On génère les points dans theta\n", + "theta = np.arange(-10.00, 10.00, 0.01)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3\n", + "Plot theta vs J(theta). When do we reach the minimum?" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# plot de J(theta)\n", + "plt.plot(theta,J(theta), label='Fitted line - closed form')\n", + "plt.xlabel('x')\n", + "plt.ylabel('J(x)')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.0" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "J_theta = [J(x) for x in theta]\n", + "# Valeur de theta à laquelle on obtien le plus petit J(theta)\n", + "round(theta[J_theta.index(min(J_theta))], 3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4\n", + "Create a function dJ_dtheta(x_i) which is computing the gradient\n", + "?" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# On calcule la fonction dérivée. D'après J(theta). Merci dcode.fr\n", + "def dJ_theta(x_i):\n", + " return 2 * (x_i + 1)\n", + "# Affichage de la valeur à 0\n", + "dJ_theta(-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(theta, dJ_theta(theta))\n", + "# dJ_t = [dJ_theta(x) for x in theta]\n", + "# plt.plot(theta, dJ_t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5\n", + "Create a function gradient_descent(theta_0, lr, nb_iters, df_dx, f) which returns the solution\n", + "of argmin f (θ). \n", + "x_0, lr, nb_iters, df_dx, f correspond respectively to the initial value of θ, the\n", + "θ\n", + "learning rate, the number of iterations allowed for solving the problem, the gradient of θ and the\n", + "function J(.).\n", + "\n", + "What is the solution θ̂ found by gradient descent to our problem? Note: assume that\n", + "x_0, lr, nb_iters = -7, 0.1, 100 while debugging" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def gradient_descent(theta_0, lr, nb_iters, dJ_t, J_theta):\n", + " # puis on reprend les étapes vues en cours\n", + " theta = theta_0\n", + " \n", + " for t in range(nb_iters): \n", + " # calcul de theta\n", + " theta = theta - lr * dJ_t(theta)\n", + "\n", + " return theta\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.0000000100978041" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# On appelle la fonction \n", + "gradient_descent(-7, 0.01, 1000, dJ_theta, J)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 6\n", + "Update your function gradient_descent for printing the optimization path (i.e. print the line between\n", + "θ t and θ t+1 and saving the figure at the end of the optimization process)." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.0000000100978041" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xd8VGW+x/HPL5NKOpCEhNCLNKmhKrIWVuyLupZVZG2Ia2Pd9a6uXq/ede91XdtaVkVQUFTUtevKWhZEUErovfcaamgJKc/9I6MXFUhIZnJmJt/36zWvZE7O5HzHvPLl+OSc5zHnHCIiEv6ivA4gIiKBoUIXEYkQKnQRkQihQhcRiRAqdBGRCKFCFxGJECp0EZEIoUIXEYkQKnQRkQgRXZsHa9iwoWvevHltHlJEJOzNmjVrh3Muo7L9arXQmzdvTn5+fm0eUkQk7JnZuqrspyEXEZEIoUIXEYkQKnQRkQihQhcRiRAqdBGRCKFCFxGJECp0EZEIERaFPnv9bp7/apXXMUREQlpYFPoHczbx8KdL+XTBFq+jiIiErLAo9D+e156uTdL4/dvzWLl9n9dxRERCUqWFbmbxZjbDzOaZ2SIze9C/fYyZrTGzuf5H12CFjIv28dzV3UmI9XHTq7PYX1warEOJiIStqpyhFwNnOOe6AF2BQWbWx/+1u5xzXf2PuUFLCWSnJvD0ld1Zu/Mgd709D+dcMA8nIhJ2Ki10V2G//2mM/+FJm/Zt1YC7B7Xj04VbeWHyai8iiIiErCqNoZuZz8zmAtuBz51z0/1f+rOZzTezJ8wsLmgpj3BD/xac1zmbRyYsZerKHbVxSBGRsFClQnfOlTnnugK5QC8z6wTcA7QDegL1gT8c7bVmNszM8s0sv6CgoMaBzYxHLulM68wkbntjDpv2HKrx9xQRiQQndJWLc24PMAkY5Jzb4h+OKQZeBnod4zUjnXN5zrm8jIxK52evksS4aJ6/ugclpeXcPG4WRSVlAfm+IiLhrCpXuWSYWZr/8wTgLGCpmWX7txnwC2BhMIP+WMuMJB67rAvzN+7lgQ8X1eahRURCUlXO0LOBiWY2H5hJxRj6x8BrZrYAWAA0BB4KXsyj+3nHRtxyeivGz9zA+Bnra/vwIiIhpdIl6Jxz84FuR9l+RlASnaA7B57E/I17uf+DRbTPTqFLkzSvI4mIeCIs7hQ9Hl+U8dQV3chIjuPmcbPYub/Y60giIp4I+0IHSE+M5YUhPdhx4DC3j59DaVm515FERGpdRBQ6QKfGqTz0i05MXbmTRz9b7nUcEZFaFzGFDnBZXhOu6t2U579axYSFmplRROqWiCp0gPsv6EDXJmn87q15LN+mmRlFpO6IuEKPi/bx/NU9SIyL5oax+ew+cNjrSCIitSLiCh2gUWo8zw/pwda9Rdz6xmz9kVRE6oSILHSA7k3T+Z+LT2bqyp089MkSr+OIiARdpTcWhbNLe+SydEsho6asoX12Mpf3bOp1JBGRoInYM/Tv3H1OO/q3ach97y8kf+0ur+OIiARNxBd6tC+KZ67sTm56PYaPm6XpdkUkYkV8oQOk1ovhxWt6UFxSzrBX8jl0WNPtikjkqROFDtA6M5mnruzG4i2F3PUPrUkqIpGnzhQ6wOntMvmPs9vx8fwt/H3SKq/jiIgEVERf5XI0wwe0ZOnWQh79bBlts5IZ2CHL60giIgFRp87QoWJN0r9c0pmTG6cyYvwcTQ8gIhGjzhU6QHyMjxeG9CAhNpobX8lnz0FNDyAi4a9OFjpAdmoCLwzpwZY9RdzyuqYHEJHwV2cLHaBHs3T+PLhiDvU/fbzY6zgiIjVSaaGbWbyZzTCzeWa2yMwe9G9vYWbTzWyFmb1pZrHBjxt4v8xrwo39WzD223WMmbrG6zgiItVWlTP0YuAM51wXoCswyMz6AH8BnnDOtQF2A9cHL2Zw3X1OewZ2yOK/P17MxKXbvY4jIlItlRa6q7Df/zTG/3DAGcA//NvHAr8ISsJa4Isy/nZFV9pnp3Dr67NZsqXQ60giIiesSmPoZuYzs7nAduBzYBWwxzlX6t9lI9D4GK8dZmb5ZpZfUFAQiMxBUS82mtFDe5IcH8P1Y2ayvbDI60giIiekSoXunCtzznUFcoFeQPuj7XaM1450zuU55/IyMjKqn7QWNEqNZ9TQPPYcKuEGzfkiImHmhK5ycc7tASYBfYA0M/vuTtNcYHNgo3mjU+NUnrqiGws27eW3b86lvFxzvohIeKjKVS4ZZpbm/zwBOAtYAkwELvXvNhT4IFgha9tZHbK477wOTFi0lUf+tczrOCIiVVKVuVyygbFm5qPiH4C3nHMfm9liYLyZPQTMAUYHMWetu+6U5qzZsZ/nv1pFi4b1tNqRiIS8SgvdOTcf6HaU7aupGE+PSGbGAxd0ZN3Og9z73kKapNejX+uGXscSETmmOn2naGWifVE8e1V3WmYkMnzcLFZu31/5i0REPKJCr0RKfAyjh/YkNjqK68bMZNcBTeQlIqFJhV4FTerXY+Q1eWwrLGLYK/kUl+pyRhEJPSr0KureNJ3HLutC/rrd3PX2fF3OKCIhp86tWFQT53fOYf2ugzwyYRnZafHcc87R7q8SEfGGCv0E3TygFZv3HOKFr1aTk5rA0H7NvY4kIgKo0E+YmfHghZ3YVljMAx8tIisljkGdsr2OJSKiMfTq8EUZT13Rja5N0rhj/Fzy1+7yOpKIiAq9uhJifYwe2pOctASuH5uva9RFxHMq9BqonxjL2Gt7EeMzhr40Q1PuioinVOg11LRBPV7+dS92HzzMtWNmsr+4tPIXiYgEgQo9AE7OTeXZq7qzdOs+bh43i5Kycq8jiUgdpEIPkNNPyuR/Lz6Zr1fs4A/vzMc53XgkIrVLly0G0GV5Tdiyp4gnvlhOTmoCvz/7JK8jiUgdokIPsNvPbM3WwkM8M3El2WnxXNW7mdeRRKSOUKEHmJnxp4sqbjz6z/cX0jApjrM7NvI6lojUARpDD4JoXxTP/KobnXPTuO2NOXyzaofXkUSkDlChB0m92GjGXNuT5g3qMeyVWSzYuNfrSCIS4aqySHQTM5toZkvMbJGZ3eHf/oCZbTKzuf7HucGPG17S6sXyynW9SU2IYejLM1hVoLtJRSR4qnKGXgr8zjnXHugD3GJmHfxfe8I519X/+GfQUoaxRqnxjLuhNwYMGTWdzXsOeR1JRCJUpYXunNvinJvt/3wfsARoHOxgkaRFw0TGXteLfUWlDBk9XcvYiUhQnNAYupk1B7oB0/2bbjWz+Wb2kpmlBzhbROnUOJVRQ/PYuPsQ1748Q1MEiEjAVbnQzSwJeAcY4ZwrBJ4DWgFdgS3AY8d43TAzyzez/IKCggBEDl+9WzbgmV91Z+HmQm56VWuTikhgVanQzSyGijJ/zTn3LoBzbptzrsw5Vw68CPQ62mudcyOdc3nOubyMjIxA5Q5bAztk8cglnZm6cicjxs+lTGuTikiAVOUqFwNGA0ucc48fsf3IZXoGAwsDHy8yXdIjl/88vwOfLtzKve8t0LwvIhIQVblT9BRgCLDAzOb6t/0RuNLMugIOWAvcFJSEEer6U1uw+8Bhnpm4kvTEWP4wqJ3XkUQkzFVa6M65KYAd5Uu6TLGGfvfztuw6eJjnJq0iNSGG4QNaeR1JRMKY5nLx0HfzvhQeKuHhT5dSL9bHNX2bex1LRMKUCt1jvijjicu7Ulxazv0fLCI+2sdlPZt4HUtEwpDmcgkBMf7JvPq3acgf3p3PB3M3eR1JRMKQCj1ExEX7GDkkj17N63PnW/OYsHCr15FEJMyo0ENIQqyP0b/uSefcVG57YzYTl233OpKIhBEVeohJiotmzLW9aJuVzPBXZ/HNSs2lLiJVo0IPQakJMbx6fW+aNajHDa/kk792l9eRRCQMqNBDVP3EWMbd0JtGKfFc+/JM5m/c43UkEQlxKvQQlpkcz2s39iYtMYYho2ewZEuh15FEJISp0ENcdmoCr9/Qh4QYH1ePms7K7fu8jiQiIUqFHgaa1K/H6zf2xsy4YuR0Vm7XUnYi8lMq9DDRMiOJ8cN6A3DFyGkqdRH5CRV6GGmdmfyjUtfwi4j8PxV6mPlhqWtMXUT+nwo9DKnUReRoVOhh6selvmKbSl2krlOhh7GKUu8DwJUvqtRF6joVephrnZmkUhcRoGqLRDcxs4lmtsTMFpnZHf7t9c3sczNb4f+YHvy4cjQqdRGBqp2hlwK/c861B/oAt5hZB+Bu4EvnXBvgS/9z8cgPS32apgkQqYMqLXTn3Bbn3Gz/5/uAJUBj4CJgrH+3scAvghVSqqZ1ZhJv3tSH6Kgorhg5TRN6idQxJzSGbmbNgW7AdCDLObcFKkofyAx0ODlxrTKSeOumviTHR3PVi9M19a5IHVLlQjezJOAdYIRzrsr/P29mw8ws38zyCwoKqpNRTlDTBvV466a+ZCTHMWT0DC2SIVJHVKnQzSyGijJ/zTn3rn/zNjPL9n89GzjqemnOuZHOuTznXF5GRkYgMksV5KQlMP6mPjStX49fj5nJxKVazk4k0lXlKhcDRgNLnHOPH/GlD4Gh/s+HAh8EPp7URGZyPG8M60PbrCSGvZrPhIVbvI4kIkFUlTP0U4AhwBlmNtf/OBd4GBhoZiuAgf7nEmLqJ8by2g19OLlxKre8PocP5m7yOpKIBEl0ZTs456YAdowvnxnYOBIM361Rev3YmYx4cy6HDpdxRa+mXscSkQDTnaJ1RGJcNGOu7cVpbTK4+90FvDx1jdeRRCTAVOh1SHyMj5HX9ODsjlk8+NFinvxiOc45r2OJSICo0OuYuGgfz/6qO5d0z+XJL1bwwIeLKC9XqYtEgkrH0CXyRPui+OulnamfGMOLX69hz6ESHv1lF2J8+vddJJyp0OuoqCjjj+e2p35iHH+ZsJS9h0p47qoeJMT6vI4mItWkU7I6zMy4+Wet+N+LT2by8gKuHj2dvQdLvI4lItWkQheu7NWUZ3/VnQUb93LZC9+yrbDI60giUg0qdAHgnJOzGXNtTzbuPsilz3/D2h0HvI4kIidIhS7f69e6IW8M68OB4jIuff5bFm3e63UkETkBKnT5gc65abx1U19ifcblL0xjygrN1CgSLlTo8hOtM5N45zf9yE1P4Ncvz+C9ORu9jiQiVaBCl6PKTk3greF96dm8Pr99cx5/n7RSd5WKhDgVuhxTSnwMY67ryYVdcnhkwjL+84OFlOmuUpGQpRuL5Ljion08eXlXctISeP6rVWzdW8zTV3bTDUgiIUhn6FKpqCjj7nPa8d8XdeTLpdv41ahp7Dpw2OtYIvIjKnSpsmv6Nue5q3qweHMhlzz3Det26lp1kVCiQpcTMqhTI16/sTe7Dx7m4r9/w+z1u72OJCJ+KnQ5YT2a1eedm/uRGBfNFSOn8dG8zV5HEhFU6FJNrTKSeP+WU+iSm8ptb8zh6S9X6LJGEY9VWuhm9pKZbTezhUdse8DMNv1o0WipY+onxjLuht4M7taYxz5fzu/emkdxaZnXsUTqrKqcoY8BBh1l+xPOua7+xz8DG0vCRVy0j8cv68KdA9vy7pxNDBk1Q1fAiHik0kJ3zk0GdtVCFglTZsbtZ7bhqSu7MXfjHgb/fSqrCvZ7HUukzqnJGPqtZjbfPySTHrBEErYu7JLDGzf2YX9RKYOfnco3qzSxl0htqm6hPwe0AroCW4DHjrWjmQ0zs3wzyy8oKKjm4SRc9GiWzvu3nEJWSjzXjJ7BuGnrvI4kUmdUq9Cdc9ucc2XOuXLgRaDXcfYd6ZzLc87lZWRkVDenhJEm9evxzm/6cWqbhtz3/kLue38BJWXlXscSiXjVKnQzyz7i6WBg4bH2lbopJT6G0UN7ctOAloybtp6rRk1n5/5ir2OJRLSqXLb4BvAtcJKZbTSz64FHzGyBmc0HTgd+G+ScEoZ8UcY957Tnycu7Mm/DHi58ZiqLNxd6HUskYllt3gySl5fn8vPza+14Ejrmb9zDsFdmsfdQCY9d1oVzT86u/EUiAoCZzXLO5VW2n+4UlVrROTeND289hXbZyfzmtdk8/tkyyjW3ukhAqdCl1mSmxDN+WB9+2SOXp/69kpvGzWJfUYnXsUQihgpdalVctI9HLu3M/ed34N9Lt3PRM1NZvm2f17FEIoIKXWqdmXHdqS14/YbeFBaV8otnp/LxfM3YKFJTKnTxTO+WDfjk9lNp1yiZW1+fw0MfL6ZU16uLVJsKXTyVlRLP+GF9Gdq3GaOmrOGqUdMp2Kfr1UWqQ4UunouNjuLBizrxxOVdmLdxD+c//bVWQhKpBhW6hIzB3XJ59+ZTiIv2cfkL3/Ly1DVaNEPkBKjQJaR0yEnho1tPZUDbDB78aDE3j5vN3kO6tFGkKlToEnJS68Xw4jV53Htue75Yso0Lnp7Cgo17vY4lEvJU6BKSzIwbT2vJmzf1pbSsnEue+4ZXvl2rIRiR41ChS0jr0SydT27vzymtG3D/B4u49fU5FOruUpGjUqFLyEtPjGX00J7cfU47JizaqiEYkWNQoUtYiIoyhg9oxZvD+nC4tJyLn5vKi5NXa4IvkSOo0CWs5DWvz6d39OeMdpn8+Z9LGPryDLbvK/I6lkhIUKFL2EmrF8vzV/fgz4M7MWPNLs7929dMXLbd61ginlOhS1gyM67q3YyPbjuVhklxXPvyTP77o8UUl5Z5HU3EMyp0CWtts5J5/5ZTGNq3GS9NXcPgZ79hhabjlTqqKmuKvmRm281s4RHb6pvZ52a2wv8xPbgxRY4tPsbHgxd1YtQ1eWwtLOK8p6cw6mv9wVTqnqqcoY8BBv1o293Al865NsCX/ucinjqrQxb/GnEap7VpyEOfLOHKF6exYddBr2OJ1JpKC905NxnY9aPNFwFj/Z+PBX4R4Fwi1ZKRHMeL1+TxyKWdWbS5kHP+9jVv5W/QHaZSJ1R3DD3LObcFwP8xM3CRRGrGzLgsrwmf3tGfjjkp/Mc/5nPjK7M0z7pEvKD/UdTMhplZvpnlFxQUBPtwIt9rUr8eb9zYh/vOa8/kFQWc/eRkJizc6nUskaCpbqFvM7NsAP/HY14E7Jwb6ZzLc87lZWRkVPNwItUTFWXc0L8ln9x2Kjlp8QwfN4s735qrKXklIlW30D8Ehvo/Hwp8EJg4IsHRJiuZ935zCref2YYP5m5m0JOTmbhUNyNJZKnKZYtvAN8CJ5nZRjO7HngYGGhmK4CB/uciIS3GF8WdA9vyzs39SIqL5toxMxkxfg67Dhz2OppIQFht/vU/Ly/P5efn19rxRI6luLSMZyeu4u8TV5KSEMN/XdCBC7vkYGZeRxP5CTOb5ZzLq2w/3SkqdVJctI87B7bl49tPpUl6AneMn8sNY/PZsveQ19FEqk2FLnVau0YpvPubU7jvvPZMXbWDgY9PZty0dbrLVMKSCl3qPJ//Sph/jTiNzrmp3Pf+Qq54cRprdhzwOprICVGhi/g1a5DIazf05i+XnMySLYUMenIyT325QjM4SthQoYscwcy4vGdTvrhzAGe1z+Lxz5cz6Mmv+XqFboqT0KdCFzmKrJR4nr2qO2Ov64VzjiGjZ3Dr67PZVqjVkSR0qdBFjmNA2wwmjDiN357Vls8Wb+PMx75i1NerKS0r9zqayE+o0EUqER/j446z2vD5b0+jR7N0HvpkCec/PYX8tT+ehFTEWyp0kSpq1iCRMdf25Pmru7P3UAmXPv8td709T4tUS8hQoYucADNjUKdsvrhzADed1pL3527ijEe/4rlJq3Q1jHhOhS5SDYlx0dxzbns+++0A+rRswF8mLGXg45OZsHCLFtMQz6jQRWqgRcNERg3N49XrexEfE8XwcbO58sVpLN5c6HU0qYNU6CIB0L9NBv+8vT9/uqgjy7bu4/ynv+aedxewY79WSZLao0IXCZBoXxRD+jZn0u9P59f9WvB2/gZ+9tdJPPPvFRw8XOp1PKkDVOgiAZZaL4b7L+jAhBGn0a9VAx79bDkD/jqJ16av0/XrElQqdJEgaZ2ZxMhr8njn5r40q1+Pe99byM+f0B9OJXhU6CJB1qNZfd4e3pcXr8nDF2UMHzebwX//humrd3odTSKMCl2kFpgZAztk8ekd/Xnkks5s3VvE5SOnMfSlGczbsMfreBIhtASdiAeKSsoY881anv9qFXsOlnBW+0xGnNWWTo1TvY4mIaiqS9DVqNDNbC2wDygDSis7oApd5If2FZUw9pu1jJy8msKiUs7umMWIs9rSPjvF62gSQmqz0POcczuqsr8KXeToCotKeGnKGkZ/vYZ9xaWcd3I2d5zVhrZZyV5HkxBQ1UKPro0wInJ8KfExjDirLdf2a8GoKat5acoaPlmwhbM7ZnHL6a3pnJvmdUQJAzU9Q18D7AYc8IJzbuRR9hkGDANo2rRpj3Xr1lX7eCJ1xe4Dh3l56hrGfLOWwqJS+rdpyC2nt6Z3i/qYmdfxpJbV1pBLjnNus5llAp8DtznnJh9rfw25iJyYfUUljJu2ntFTVrNj/2HymqVzy+mt+dlJGSr2OqRWCv1HB3wA2O+ce/RY+6jQRaqnqKSMN2du4IWvVrF5bxHtGiVz/aktuLBrDnHRPq/jSZBVtdCrfR26mSWaWfJ3nwM/BxZW9/uJyLHFx/gY2q85k+46nb9e2hnn4K5/zOfUv0zkmX+vYNeBw15HlBBQ7TN0M2sJvOd/Gg287pz78/FeozN0kcBwzjFl5Q5Gfb2Gr5YXEB8TxSXdc7nu1Ba0ykjyOp4EWK0PuVSFCl0k8JZv28dLU9bw7pxNHC4t58x2mVx/agv6tmqgcfYIoUIXqWN27C9m3LR1vPrtOnYeOEzrzCSu6t2Ui7vnkpoQ43U8qQEVukgdVVRSxkfzNjNu+nrmbdhDQoyPi7rmcHWfZppaIEyp0EWEhZv2Mm7aOj6Yu5lDJWV0aZLG1b2bckGXHOJjdHVMuFChi8j39h4q4d3ZGxk3bR2rCg6QEh/NBV1y+GVeE7rkpmqsPcSp0EXkJ5xzTFu9izdnrufThVspLi2nbVYSl/bIZXC3XDKS47yOKEehQheR4yosKuHjeVt4e9YG5qzfgy/KOP2kDC7tkcvPTsrUkEwIUaGLSJWt3L6Pt2dt5N3ZmyjYV0xyfDRnd2zEhV1y6NeqAdE+rYXjJRW6iJyw0rJypq7ayYdzN/PZoq3sKy6lQWIs556czYVdc+jRNJ2oKI231zYVuojUSFFJGZOWFfDRvM18sWQbxaXl5KTGc36XHM7u2IhuTdJU7rVEhS4iAbO/uJQvFm/jo3mb+Wp5AaXljozkOAZ2yOLnHbLo26qBJgkLIhW6iATF3kMlTFq2nc8WbWPSsu0cOFxGUlw0Pzspg7M7NmLASRmkxOvO1EBSoYtI0BWVlPHtqp38a9FWvliyjR37D+OLMro3TWNA2wwGtM2kY06KhmZqSIUuIrWqrNwxZ/1uJi0r4KvlBSzYtBeABomx9G/TkAEnZdC/TQYNk3St+4lSoYuIp3bsL+brFQVMXr6DycsL2Omfs71do2T6tGxAn5b16dWiAfUTYz1OGvpU6CISMsrLHYs2FzJ5RQHfrtpJ/rpdFJWUA3BSVjJ9Wtand8sG5DVPJzM53uO0oUeFLiIh63BpOQs27WHa6l1MW72T/LW7OVRSBkDjtAS6NU2jW9N0ujVNo2NOSp2/gkaFLiJho6SsnAWb9jJ73W7mbNjD3PV72LTnEACxvija56TQNTeVDjkpdMhOpU1WUp2amqCqhR5dG2FERI4nxhdF96bpdG+a/v22bYVFzFm/hzkbdjNn/R7+MWsjB76tOIv3RRmtM5LokJNC++xk2jVKoXVmEtmp8XV65sganaGb2SDgb4APGOWce/h4++sMXUSqq7zcsX7XQRZvKWTx5sLvP24tLPp+n3qxPlpmJNIqI+n/H5mJNEmvR2Jc+J6/Bn3Ixcx8wHJgILARmAlc6ZxbfKzXqNBFJNB27i9m2bZ9rC44wKqC/awqOMCq7fu/H7L5Tv3EWHLTE/yPejRJT6BxegJZKfFkJMfRIDEOX4heL18bQy69gJXOudX+A44HLgKOWegiIoHWICmOfklx9GvV8AfbDx4uZXXBAVbvOMDG3QfZsOsQG3cfZOmWfXyxZDuHS8t/sH+UVXyvjKQ4MpLjyEyOIz0xlpT4aFITYkjxP1ITYkiJjyEpLpr4mCjion3ERUeFxM1TNSn0xsCGI55vBHrXLI6ISGDUi42mU+PUo66jWl7u2LG/mA27D1Gwr4iCfcVs31dMgf+xfV8xy7buY/fBwxT/qPiPJTY6irjoKOJjfMT6ovBFGVEGUWZERRn/M/hkerWoH+i3+QM1KfSj/XP0k/EbMxsGDANo2rRpDQ4nIhIYUVFGZko8mSmVX/NeVFJGYVEJhYdK2XuohMJDJew9VMLBw2UUlZRRVFpGcUn59x+LS8soLi3HOSh3jrJyh3OQGBf8q3JqUugbgSZHPM8FNv94J+fcSGAkVIyh1+B4IiK1Lj7GR3yMj8xkr5NUribLkMwE2phZCzOLBa4APgxMLBEROVHVPkN3zpWa2a3Av6i4bPEl59yigCUTEZETUqMLM51z/wT+GaAsIiJSA1r5VUQkQqjQRUQihApdRCRCqNBFRCKECl1EJELU6nzoZlYArKvmyxsCOwIYx0t6L6EnUt4H6L2Eqpq8l2bOuYzKdqrVQq8JM8uvymxj4UDvJfREyvsAvZdQVRvvRUMuIiIRQoUuIhIhwqnQR3odIID0XkJPpLwP0HsJVUF/L2Ezhi4iIscXTmfoIiJyHGFV6Gb2ppnN9T/WmtlcrzPVhJndZmbLzGyRmT3idZ7qMLMHzGzTET+Xc73OVFNm9nszc2bWsPK9Q5OZ/cnM5vt/Jp+ZWY7XmarLzP5qZkv97+c9M0vzOlN1mNkv/b/r5WYWlKtdwqrQnXOXO+e6Oue6Au8A73qdqbrM7HQq1mDt7JzrCDzqcaSaeOK7n4t/Bs6wZWZNqFj4fL3XWWror865zv7flY+B+70OVAOfA52cc52pWJj+Ho/zVNdC4GJgcrAOEFaF/h0zM+Ay4A2vs9TAzcDDzrliAOfcdo/zSIUngP/gKMsphhPnXOERTxMJ4/fjnPvXA5NAAAACD0lEQVTMOVfqfzqNitXRwo5zbolzblkwjxGWhQ70B7Y551Z4HaQG2gL9zWy6mX1lZj29DlQDt/r/d/glM0v3Okx1mdmFwCbn3DyvswSCmf3ZzDYAVxHeZ+hHug741OsQoapGC1wEg5l9ATQ6ypfudc594P/8SsLg7Px474WK//bpQB+gJ/CWmbV0IXjZUSXv4zngT1ScAf4JeIyKX7qQVMl7+SPw89pNVH2V/a445+4F7jWze4Bbgf+q1YAnoCq/92Z2L1AKvFab2U5EFfsreMcPwf44LjOLBjYBPZxzG73OU11mNoGKIZdJ/uergD7OuQJPg9WAmTUHPnbOdfI4ygkzs5OBL4GD/k3fLXreyzm31bNgAWBmzYBPwvHn8h0zGwoMB850zh2sbP9QZmaTgN875/ID/b3DccjlLGBpOJe53/vAGQBm1haIJQwnITKz7COeDqbiDz9hxzm3wDmX6Zxr7pxrDmwEuodrmZtZmyOeXggs9SpLTZnZIOAPwIXhXubBFnJDLlVwBWEw3FIFLwEvmdlC4DAwNBSHW6rgETPrSsWQy1rgJm/jiN/DZnYSUE7FDKfDPc5TE88AccDnFddDMM05F3bvx8wGA08DGcAnZjbXOXd2QI8Rnh0iIiI/Fo5DLiIichQqdBGRCKFCFxGJECp0EZEIoUIXEYkQKnQRkQihQhcRiRAqdBGRCPF/Azb9Q3BajRgAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def gradient_descent(theta_0, lr, nb_iters, dJ_t, J_theta):\n", + " # puis on reprend les étapes vues en cours\n", + " theta = theta_0\n", + " \n", + " # on initialise les séries pour le plot\n", + " x = [theta]\n", + " y = [J_theta(theta)]\n", + " \n", + " for t in range(nb_iters): \n", + " # calcul de theta\n", + " theta = theta - lr * dJ_t(theta)\n", + " # ajout de la valeur au plot\n", + " x.append(theta)\n", + " y.append(J_theta(theta))\n", + " \n", + " # affichage du plot\n", + " plt.plot(x,y)\n", + " \n", + " return theta\n", + "\n", + "# On appelle la fonction \n", + "gradient_descent(-7, 0.01, 1000, dJ_theta, J)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 7\n", + "Assuming that you are setting nb_iters equals to 100 what is the solution θ̂ when varying nb_iters in\n", + "[-8, -1, 7] and lr in [0.1, 0.01, 0.001, -0.01, 0.8, 1.01]. Does the estimated solution always\n", + "the same? What are pros and cons about these hyperparameters and GD in general?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 8\n", + "Now assume the function J(θ) = sin(2θ + 1), what is the solution θ̂ given by GD?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Archis Applications/Exercices/TP1/Exercice 2.ipynb b/Archis Applications/Exercices/TP1/Exercice 2.ipynb new file mode 100644 index 0000000..4344cce --- /dev/null +++ b/Archis Applications/Exercices/TP1/Exercice 2.ipynb @@ -0,0 +1,426 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# On importe les librairies\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to estimate parameters of a simple linear regression (y i = wx i + b) by closed-form and GD. \n", + "\n", + "The loss function is defined on a data point by l(ŷ i , y i ) = (ŷ i − y i )² where the prediction is given by ŷ i = ŵx + b̂. The\n", + "P N\n", + "optimization problem we want to solve is min i=1 l(ŷ i , y i ). \n", + "\n", + "We assume the following data generation process:\n", + "w,b\n", + "Y ∼ wX + b + \\eta where X ∼ U[20; 40] and \\eta ∼ N (0, 1).\n", + "\n", + "# 1\n", + "\n", + "Generate N data points (x i , y i ) using the data generation process given above and store them into x vs\n", + "N\n", + "y. Note: N = 100 and start by first generating {x i } N\n", + "1 and then {y i } 1 . Do not forget to add noise!\n", + "\n", + "D'abord on va générer les x" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# On génère les x\n", + "list_x = np.random.uniform(20, 40, 100).tolist()\n", + "\n", + "# Pis les y\n", + "\n", + "def y(x):\n", + " w = 1.5\n", + " b = 5\n", + " return w * x + b + np.random.normal(0,1)\n", + "\n", + "list_y = [y(x) for x in list_x ]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2\n", + "Plot the data points x vs y." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(list_x, list_y, s=6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3\n", + "Estimate parameters of the simple linear regression by closed-form. Note: store these values into w_cf\n", + "and b_cf." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# D'abord, on doit transposer nos donner pour pouvoir les utiliser dans le calcul matriciel\n", + "# Donc on génère une liste de 1 qu'on va nsuit coller à notre liste de x\n", + "\n", + "list_1 = np.ones(len(list_x))\n", + "\n", + "\n", + "# Pis on colle les deux\n", + "\n", + "X = np.stack((list_1, list_x), axis=1)\n", + "\n", + "# Enfin, on fait notre calcul de ouf\n", + "\n", + "def B(y): \n", + " X_T = np.transpose(X)\n", + " prod = np.dot(X_T, X)\n", + " inv = np.linalg.inv(prod)\n", + " return np.dot(inv, np.dot(X_T,y))\n", + "\n", + "Y = np.asarray(list_y)\n", + "b_cf, w_cf = B(Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 8\n", + "Create a function loss(x_i, y_i, w, b) which is computing the regression loss on the full dataset.\n", + "What is the value of loss([1], [3], 1, 2) ?" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# On détermine la fonction de coût\n", + "\n", + "def loss(x_i, y_i, w, b):\n", + " return ((w * x_i) + b - y_i)**2\n", + "\n", + "loss(1, 3, 1, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def dl_dw(xi, yi, w, b):\n", + " return -2 * xi * ( yi - (w * xi + b))\n", + "\n", + "dl_dw(4, -1, 0, 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def dl_db(xi, yi, w, b):\n", + " return -2 * ( yi - (w * xi + b))\n", + "\n", + "dl_db(4, -1, 0, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 11\n", + "Implement a function update_w_and_b(x_i, y_i, w, b, lr) which is updating w and b according to the gradient compute on the full data points. What is the output of the following command of update_w_and_b([0], [3], 5, 3, 0.1) and why?" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5.0, 3.0)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def update_w_and_b(x, y, w, b, lr):\n", + " grad_w = 0\n", + " grad_b = 0\n", + " \n", + " N = len(y)\n", + " \n", + " for t in range(N):\n", + " grad_w += dl_dw(x[t], y[t], w, b)\n", + " grad_b += dl_db(x[t], y[t], w, b)\n", + " \n", + " # update\n", + " w -= (1 / float(N)) * grad_w * lr\n", + " b -= (1 / float(N)) * grad_b * lr\n", + " \n", + " return w, b\n", + " \n", + "update_w_and_b([0], [3], 5, 3, 0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 12 \n", + "Estimate parameters of the simple linear regression by gradient descent from a random initialization of\n", + "w and b and with a leanring rate equals to 0.001. Note: store these values into w_gd and b_gd." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "w_gd, b_gd = 2., 4.\n", + "\n", + "for i in range(5000):\n", + " # update w and b\n", + " w_gd, b_gd = update_w_and_b(list_x, list_y, w_gd, b_gd, 0.001)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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QaG3ouWe09LS6NWrF+3bt6dNmzasWrWqYL033niDFi1acPfdd3Pw4MGC15944omCekbbt2+nW7dudOjQgb59+3L27FkAunfvzoQJE+jUqRPNmzdn48aNZGVl8corr7B06VJiY2NZunRpid8lNjaWV155hQ8++ACA5ORkHnzwQTp27EjHjh0LSl9/9913xMbGEhsbS7t27UhNTQXg7bffpk2bNrRt25aJEycCcOTIEfr160eHDh3o0qULBw4cKPhO48eP54477qBJkyYF32/ixIls3LiR2NhY3n///Qr+VIRwHe500xrTWgRKqRZA4SNQE+AV4N/W18OB48BDWuvLldrY9hfhsp3rUNeIhQ7FV7Pbu3dvqeUeCpd7zsnJYcWKFYSGhnLhwgU6d+7MwIED2bFjB0uWLOGnn34iJyeH9u3b31TeOjs7m+eff55Vq1ZRp04dli5dyssvv8zcuXMBo8WxdetWVq9ezd/+9jfWrl3LpEmTSExMLDi4l6Z9+/a88847ALzwwgv8/ve/56677uLkyZP07duX/fv3M3nyZOLj47nzzjtJS0sjMDCQr776ipUrV7JlyxaqVKnCpUuXABg9ejTTp08nMjKSLVu2MHbsWL799lsAzp49y6ZNmzhw4AADBw5kyJAhvPnmm0yePNnpXVRCFJaelcuR5DSa1gku99m8O920xrREoLU+CMQCKKUswGlgBTARWKe1flMpNdH6fIJZcTjKuHHj2LRpE/7+/mzbtg24sdyz1pq//OUvfP/99/j4+HD69GnOnz/Pxo0beeCBB6hSpQpgVBIt6uDBg+zZs4fevXsDRuXR/LLRAIMHDwagQ4cOHD9+vELxFy41snbtWvbt21fw/OrVq6SmpnLnnXfyhz/8gUceeYTBgwfToEED1q5dy8iRIwvir1mzJmlpafz4448MHTq04DMyMzMLHt9///34+PjQunVrp97RTYiSVLZrJ/+mNRVNJI7kqDGCXsARrfUJpdQgoLv19QXABiqbCEo4czdLVFQUn3zyScHz+Ph4Lly4QFzc9bIehcs9L1q0iOTkZLZv346fnx/h4eFkZGQA2CwzXZjWmqioKDZv3mzz/fxichaLpcJlo3/66aeCWj55eXls3ryZoKCgG5aZOHEiAwYMYPXq1XTu3Jm1a9eitb4p/ry8PKpXr87OYu4WVLj4nTvUuhLeyVbX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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Affichage des résultats des deux techniques\n", + "\n", + "min_x, max_x = 20, 40\n", + "list_x = np.random.uniform(min_x, max_x, 100).tolist()\n", + "list_x.sort()\n", + "f = lambda x_i: 1.5 * x_i + 5\n", + "SCALE = 5\n", + "list_y = [f(x) + np.random.normal(0, SCALE, 1)[0] for x in list_x]\n", + "\n", + "plt.scatter(list_x, list_y, s=6, label='original data')\n", + "plt.plot([min_x, max_x], [b_cf + w_cf * min_x, b_cf + w_cf * max_x],\n", + " '-', markersize=3, color='blue', label='Closed-form')\n", + "plt.plot([min_x, max_x], [b_gd + w_gd * min_x, b_gd + w_gd * max_x],\n", + "'-', markersize=3, color='orange', label='Gradient Descent')\n", + "plt.xlabel('x')\n", + "plt.ylabel('y')\n", + "plt.legend(loc=0)\n", + "plt.show()\n", + "plt.clf()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "# Maintenant on voit comment régler ça en 3 lignes\n", + "\n", + "from sklearn.linear_model import LinearRegression\n", + "\n", + "\n", + "model = LinearRegression().fit(np.asarray(list_x).reshape(-1, 1), list_y)\n", + "w_sklearn, b_sklearn = model.coef_[0], model.intercept_\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Affichage des résultats des trois techniques\n", + "\n", + "min_x, max_x = 20, 40\n", + "list_x = np.random.uniform(min_x, max_x, 100).tolist()\n", + "list_x.sort()\n", + "f = lambda x_i: 1.5 * x_i + 5\n", + "SCALE = 5\n", + "list_y = [f(x) + np.random.normal(0, SCALE, 1)[0] for x in list_x]\n", + "\n", + "plt.scatter(list_x, list_y, s=6, label='original data')\n", + "plt.plot([min_x, max_x], [b_cf + w_cf * min_x, b_cf + w_cf * max_x],\n", + " '-', markersize=3, color='blue', label='Closed-form')\n", + "plt.plot([min_x, max_x], [b_gd + w_gd * min_x, b_gd + w_gd * max_x],\n", + "'-', markersize=3, color='orange', label='Gradient Descent')\n", + "plt.plot([min_x, max_x], [b_sklearn + w_sklearn * min_x, b_sklearn + w_sklearn * max_x],\n", + "'-', markersize=3, color='yellow', label='Sklearn')\n", + "plt.xlabel('x')\n", + "plt.ylabel('y')\n", + "plt.legend(loc=0)\n", + "plt.show()\n", + "plt.clf()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Archis Applications/Exercices/TP2/.ipynb_checkpoints/Exercice 1-checkpoint.ipynb b/Archis Applications/Exercices/TP2/.ipynb_checkpoints/Exercice 1-checkpoint.ipynb new file mode 100644 index 0000000..57a4822 --- /dev/null +++ b/Archis Applications/Exercices/TP2/.ipynb_checkpoints/Exercice 1-checkpoint.ipynb @@ -0,0 +1,326 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'data': array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,\n", + " 4.9800e+00],\n", + " [2.7310e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9690e+02,\n", + " 9.1400e+00],\n", + " [2.7290e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9283e+02,\n", + " 4.0300e+00],\n", + " ...,\n", + " [6.0760e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n", + " 5.6400e+00],\n", + " [1.0959e-01, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9345e+02,\n", + " 6.4800e+00],\n", + " [4.7410e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n", + " 7.8800e+00]]),\n", + " 'target': array([24. , 21.6, 34.7, 33.4, 36.2, 28.7, 22.9, 27.1, 16.5, 18.9, 15. ,\n", + " 18.9, 21.7, 20.4, 18.2, 19.9, 23.1, 17.5, 20.2, 18.2, 13.6, 19.6,\n", + " 15.2, 14.5, 15.6, 13.9, 16.6, 14.8, 18.4, 21. , 12.7, 14.5, 13.2,\n", + " 13.1, 13.5, 18.9, 20. , 21. , 24.7, 30.8, 34.9, 26.6, 25.3, 24.7,\n", + " 21.2, 19.3, 20. , 16.6, 14.4, 19.4, 19.7, 20.5, 25. , 23.4, 18.9,\n", + " 35.4, 24.7, 31.6, 23.3, 19.6, 18.7, 16. , 22.2, 25. , 33. , 23.5,\n", + " 19.4, 22. , 17.4, 20.9, 24.2, 21.7, 22.8, 23.4, 24.1, 21.4, 20. ,\n", + " 20.8, 21.2, 20.3, 28. , 23.9, 24.8, 22.9, 23.9, 26.6, 22.5, 22.2,\n", + " 23.6, 28.7, 22.6, 22. , 22.9, 25. , 20.6, 28.4, 21.4, 38.7, 43.8,\n", + " 33.2, 27.5, 26.5, 18.6, 19.3, 20.1, 19.5, 19.5, 20.4, 19.8, 19.4,\n", + " 21.7, 22.8, 18.8, 18.7, 18.5, 18.3, 21.2, 19.2, 20.4, 19.3, 22. ,\n", + " 20.3, 20.5, 17.3, 18.8, 21.4, 15.7, 16.2, 18. , 14.3, 19.2, 19.6,\n", + " 23. , 18.4, 15.6, 18.1, 17.4, 17.1, 13.3, 17.8, 14. , 14.4, 13.4,\n", + " 15.6, 11.8, 13.8, 15.6, 14.6, 17.8, 15.4, 21.5, 19.6, 15.3, 19.4,\n", + " 17. , 15.6, 13.1, 41.3, 24.3, 23.3, 27. , 50. , 50. , 50. , 22.7,\n", + " 25. , 50. , 23.8, 23.8, 22.3, 17.4, 19.1, 23.1, 23.6, 22.6, 29.4,\n", + " 23.2, 24.6, 29.9, 37.2, 39.8, 36.2, 37.9, 32.5, 26.4, 29.6, 50. ,\n", + " 32. , 29.8, 34.9, 37. , 30.5, 36.4, 31.1, 29.1, 50. , 33.3, 30.3,\n", + " 34.6, 34.9, 32.9, 24.1, 42.3, 48.5, 50. , 22.6, 24.4, 22.5, 24.4,\n", + " 20. , 21.7, 19.3, 22.4, 28.1, 23.7, 25. , 23.3, 28.7, 21.5, 23. ,\n", + " 26.7, 21.7, 27.5, 30.1, 44.8, 50. , 37.6, 31.6, 46.7, 31.5, 24.3,\n", + " 31.7, 41.7, 48.3, 29. , 24. , 25.1, 31.5, 23.7, 23.3, 22. , 20.1,\n", + " 22.2, 23.7, 17.6, 18.5, 24.3, 20.5, 24.5, 26.2, 24.4, 24.8, 29.6,\n", + " 42.8, 21.9, 20.9, 44. , 50. , 36. , 30.1, 33.8, 43.1, 48.8, 31. ,\n", + " 36.5, 22.8, 30.7, 50. , 43.5, 20.7, 21.1, 25.2, 24.4, 35.2, 32.4,\n", + " 32. , 33.2, 33.1, 29.1, 35.1, 45.4, 35.4, 46. , 50. , 32.2, 22. ,\n", + " 20.1, 23.2, 22.3, 24.8, 28.5, 37.3, 27.9, 23.9, 21.7, 28.6, 27.1,\n", + " 20.3, 22.5, 29. , 24.8, 22. , 26.4, 33.1, 36.1, 28.4, 33.4, 28.2,\n", + " 22.8, 20.3, 16.1, 22.1, 19.4, 21.6, 23.8, 16.2, 17.8, 19.8, 23.1,\n", + " 21. , 23.8, 23.1, 20.4, 18.5, 25. , 24.6, 23. , 22.2, 19.3, 22.6,\n", + " 19.8, 17.1, 19.4, 22.2, 20.7, 21.1, 19.5, 18.5, 20.6, 19. , 18.7,\n", + " 32.7, 16.5, 23.9, 31.2, 17.5, 17.2, 23.1, 24.5, 26.6, 22.9, 24.1,\n", + " 18.6, 30.1, 18.2, 20.6, 17.8, 21.7, 22.7, 22.6, 25. , 19.9, 20.8,\n", + " 16.8, 21.9, 27.5, 21.9, 23.1, 50. , 50. , 50. , 50. , 50. , 13.8,\n", + " 13.8, 15. , 13.9, 13.3, 13.1, 10.2, 10.4, 10.9, 11.3, 12.3, 8.8,\n", + " 7.2, 10.5, 7.4, 10.2, 11.5, 15.1, 23.2, 9.7, 13.8, 12.7, 13.1,\n", + " 12.5, 8.5, 5. , 6.3, 5.6, 7.2, 12.1, 8.3, 8.5, 5. , 11.9,\n", + " 27.9, 17.2, 27.5, 15. , 17.2, 17.9, 16.3, 7. , 7.2, 7.5, 10.4,\n", + " 8.8, 8.4, 16.7, 14.2, 20.8, 13.4, 11.7, 8.3, 10.2, 10.9, 11. ,\n", + " 9.5, 14.5, 14.1, 16.1, 14.3, 11.7, 13.4, 9.6, 8.7, 8.4, 12.8,\n", + " 10.5, 17.1, 18.4, 15.4, 10.8, 11.8, 14.9, 12.6, 14.1, 13. , 13.4,\n", + " 15.2, 16.1, 17.8, 14.9, 14.1, 12.7, 13.5, 14.9, 20. , 16.4, 17.7,\n", + " 19.5, 20.2, 21.4, 19.9, 19. , 19.1, 19.1, 20.1, 19.9, 19.6, 23.2,\n", + " 29.8, 13.8, 13.3, 16.7, 12. , 14.6, 21.4, 23. , 23.7, 25. , 21.8,\n", + " 20.6, 21.2, 19.1, 20.6, 15.2, 7. , 8.1, 13.6, 20.1, 21.8, 24.5,\n", + " 23.1, 19.7, 18.3, 21.2, 17.5, 16.8, 22.4, 20.6, 23.9, 22. , 11.9]),\n", + " 'feature_names': array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n", + " 'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# plot target VS CRIM\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mY\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/applications/anaconda3/lib/python3.7/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mshow\u001b[0;34m(*args, **kw)\u001b[0m\n\u001b[1;32m 251\u001b[0m \"\"\"\n\u001b[1;32m 252\u001b[0m \u001b[0;32mglobal\u001b[0m \u001b[0m_show\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 253\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_show\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 254\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 255\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/applications/anaconda3/lib/python3.7/site-packages/matplotlib/backend_bases.py\u001b[0m in \u001b[0;36mshow\u001b[0;34m(cls, block)\u001b[0m\n\u001b[1;32m 206\u001b[0m \u001b[0mblock\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 207\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mblock\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 208\u001b[0;31m \u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 209\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[0;31m# This method is the one actually exporting the required methods.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/applications/anaconda3/lib/python3.7/site-packages/matplotlib/backends/_backend_tk.py\u001b[0m in \u001b[0;36mmainloop\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1073\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mstaticmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1074\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1075\u001b[0;31m \u001b[0mTk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/applications/anaconda3/lib/python3.7/tkinter/__init__.py\u001b[0m in \u001b[0;36mmainloop\u001b[0;34m(n)\u001b[0m\n\u001b[1;32m 555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 556\u001b[0m \u001b[0;34m\"\"\"Run the main loop of Tcl.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 557\u001b[0;31m \u001b[0m_default_root\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 558\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 559\u001b[0m \u001b[0mgetint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "# plot target VS CRIM\n", + "plt.scatter(X[:,0], Y)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# c'est inexploitable, on log\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mY\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/applications/anaconda3/lib/python3.7/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mshow\u001b[0;34m(*args, **kw)\u001b[0m\n\u001b[1;32m 251\u001b[0m \"\"\"\n\u001b[1;32m 252\u001b[0m \u001b[0;32mglobal\u001b[0m \u001b[0m_show\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 253\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_show\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 254\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 255\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/applications/anaconda3/lib/python3.7/site-packages/matplotlib/backend_bases.py\u001b[0m in \u001b[0;36mshow\u001b[0;34m(cls, block)\u001b[0m\n\u001b[1;32m 206\u001b[0m \u001b[0mblock\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 207\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mblock\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 208\u001b[0;31m \u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 209\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[0;31m# This method is the one actually exporting the required methods.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/applications/anaconda3/lib/python3.7/site-packages/matplotlib/backends/_backend_tk.py\u001b[0m in \u001b[0;36mmainloop\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1073\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mstaticmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1074\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1075\u001b[0;31m \u001b[0mTk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/applications/anaconda3/lib/python3.7/tkinter/__init__.py\u001b[0m in \u001b[0;36mmainloop\u001b[0;34m(n)\u001b[0m\n\u001b[1;32m 555\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 556\u001b[0m \u001b[0;34m\"\"\"Run the main loop of Tcl.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 557\u001b[0;31m \u001b[0m_default_root\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmainloop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 558\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 559\u001b[0m \u001b[0mgetint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "# c'est inexploitable, on log \n", + "plt.scatter(np.log(X[:,0]), Y)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Archis Applications/Exercices/TP2/Exercice 1.py b/Archis Applications/Exercices/TP2/Exercice 1.py new file mode 100644 index 0000000..a2359f8 --- /dev/null +++ b/Archis Applications/Exercices/TP2/Exercice 1.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +""" +Exercice 1 du cours 2 de machine learning avec F.Baradel +""" +import matplotlib + +matplotlib.use("TkAgg") + +import matplotlib.pyplot as plt +import numpy as np + +from sklearn.datasets import load_boston +from sklearn.linear_model import LinearRegression + +boston = load_boston() + +boston + +X = boston['data'] +Y = boston['target'] +X.shape + +n_train = 300 + +crim = X[:, 0].copy() + +""" 4. Right now we will be using only the first features called CRIM for + modelling the target variable. Plot CRIM vs target with and without normalizing your data. + What do you observe? +""" +# plot target VS CRIM +plt.scatter(crim, Y) +plt.show() + +# c'est inexploitable, on log +plt.scatter(np.log(crim), Y) +plt.show() + +# C'est mieux +#on écrit la fonction de normalisation + +def normalize (y): + return (y - np.min(y)) / (np.max(y) - np.min(y)) + +"""5. Use LinearRegression() for modelling target with CRIM on the training set and compute the predicted +values for the validation set.""" + + + +model = LinearRegression().fit(crim[:n_train].reshape(-1, 1), Y[:n_train]) + + +w, b = model.coef_, model.intercept_ + +print(w, b) + + +""" 6. Plot the predictions and the actual ground-truth for the training and the validation set.""" +print("entrainement") +preds = model.predict(crim[:n_train].reshape(-1, 1)) +plt.scatter(crim[:n_train], preds, color="green") +plt.scatter(crim[:n_train], Y[:n_train], color="red") +plt.show() + +n_valid = 400 + +print("validation") +valids = model.predict(crim[n_train:n_valid].reshape(-1,1)) +plt.scatter(crim[n_train:n_valid], valids, color="green") +plt.scatter(crim[n_train:n_valid], Y[n_train:n_valid], color="orange") +plt.show() + +# On utilise maintenant le log . Je m'a planté et ait cru que c'était la normalisation d'ou les noms fallacieux. +# Ne pas oublier de caler l'exponentielle (réciproque de log) pour remettre valeur dans le bon champ + +print(" avec log") +normY = np.log(Y) + +model = LinearRegression().fit(crim[:n_train].reshape(-1, 1), normY[:n_train]) +print("entrainement") +normPreds = np.exp(model.predict(crim[:n_train].reshape(-1, 1))) +plt.scatter(crim[:n_train], normPreds, color="green") +plt.scatter(crim[:n_train], np.exp(normY[:n_train]), color="red") +plt.show() + +print("validation") +normValids = np.exp(model.predict(crim[n_train:n_valid].reshape(-1,1))) +plt.scatter(crim[n_train:n_valid], normValids, color="green") +plt.scatter(crim[n_train:n_valid], np.exp(normY[n_train:n_valid]), color="orange") +plt.show + + +""" +7. Implement a function which is computing the Root-Mean-Square-Error (RMSE). What is the RMSE on +the training set and on the validation set? + + On veut calculer un score, pour savoir si le modèle est bon ou non + on définit une fonction qui prend mes prédiciton,s mes valeurs, et retourne le mean square error +(ŷi-yi)² + à calculer sur le trainig set et le validation set + + Ensuite modéliser log(target) = w +b.CRIM et MSE train/val +""" + +def mse(preds, vals): + return np.mean((preds - vals)**2) + +mse(preds, Y[:n_train]) +mse(valids, Y[n_train:n_valid]) + +# meme chose avec log +mse(normPreds, Y[:n_train]) +mse(normValids, Y[n_train:n_valid]) + + +# Ensuite, faire la meme chose avec une deuxièm variabl du tableau X : ZN +crimZn = X[:, :2] + +model = LinearRegression().fit(crimZn[:n_train].reshape(-1, 2), Y[:n_train]) + + +w, b = model.coef_, model.intercept_ + +print(w, b) + +print("entrainement") +preds = model.predict(crim[:n_train].reshape(-1, 2)) +plt.scatter(crimZn[:n_train], preds, color="green") +plt.scatter(crimZn[:n_train], Y[:n_train], color="red") +plt.show() + +n_valid = 400 + +print("validation") +valids = model.predict(crim[n_train:n_valid].reshape(-1,1)) +plt.scatter(crim[n_train:n_valid], valids, color="green") +plt.scatter(crim[n_train:n_valid], Y[n_train:n_valid], color="orange") +plt.show() diff --git a/Archis Applications/Exercices/TP2/tp_2.pdf b/Archis Applications/Exercices/TP2/tp_2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..84edeb002af982e2b01f959e26dba71aea2a67cd GIT binary patch literal 161016 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�Tu)ixGNcx8P8K8=W^$mPhZ0#`X!t8%7PX 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�}b;tA@~{-{;bu-3yTX)@Pvd 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 aF?4cqclz8dMm7dk7ES;usi?dd;6DJvkiUKa literal 0 HcmV?d00001 diff --git a/Archis Applications/Introduction au Machine Learning.md b/Archis Applications/Introduction au Machine Learning.md index 3a039cd..bebc8ca 100644 --- a/Archis Applications/Introduction au Machine Learning.md +++ b/Archis Applications/Introduction au Machine Learning.md @@ -145,7 +145,7 @@ Comme dans la réalité on a beaucoup trop de données pour s'appuyer sur toutes ### Exemple -Nous sommes de charmants vendeurs de gales ambulants. On se pose la question : "Quand température est de $x$, combien je vais vendre de glace ?". On s'appuie sur plusieurs expériences de cas réels où on a vendu $y$ glaces alors que la température était de $x$. +Nous sommes de charmants vendeurs de glaces ambulants. On se pose la question : "Quand la température est de $x$, combien je vais vendre de glace ?". On s'appuie sur plusieurs expériences de cas réels où on a vendu $y$ glaces alors que la température était de $x$. On va résoudre le problème en partant du principe qu'on va vendre $wx + b$ glaces, où x est la température. Si $x = 0$ on va vendre $b$ glaces. $b$ est appelé l'intercepte, et $w$ la pente. @@ -160,4 +160,49 @@ Le chapeau indique la prédiction. Pour trouver le coût moyen (de tous les poin À la fin des exercies on mate un graph avec trois méthodes : closed-form, gradient descend et stochastic gradient descent. On remarque que les 3 sont très proches. -On voit ensuite comment faire une descente de gradient en 3 lignes de code : scikit-learn \ No newline at end of file +On voit ensuite comment faire une descente de gradient en 3 lignes de code : scikit-learn + +### Régression linéaire multivariée + +Même principe que linéaire, mais avec un nombre *p* de variables et un concept de vecteurs. + +## Overfitting + +La problématique en ML c'est de généraliser. Nous, humains, on peut généraliser et extrapoler vite (on voit deux chats on peut vite dire si ce qu'on voit ensuite est un chat ou non). En ML, y a besoin de beaucoup plus de données. + +Pour résumer la généralisation: + +On divise le dataset en 3 : donnés d’apprentissage, de validation et de test (genre 70%/15%/15%). On entraîne la machine uniquement avec les données d'apprentissage. Une fois qu'elle a suffisamment appris, on essaye ses déductions sur la base de validation (on donne x on demande de trouver ŷ (on connaît y nous, on peut donc comparer avec)). On retravaille ensuite l'algo sur les données d'apprentissage et puis on recommence la validation. Au bout d'un certain temps, on passe au test : on fait calculer le total des ŷ et on voit le pourcentage de réussite global, sans avoir accès aux ŷ trouvés. + +L'objectif, c'est d'éviter l'underfitting et l'overfitting. L'over c'est de trop coller aux données qu'on a, et l'under c'est d'en être trop éloigné. Donc la solution va consister à alterner entre l'un et l'autre pour se rapprocher d'un modèle optimal : "good fit". + +On va donc pour ça partir de fonctions complexes, et tâcher de simplifier ces fonctions. + +### Tips and tricks + +La normalisation : dans un wx + b, on tente de minimiser le w. Il y a normalisation L2 et normalisation L1. Pour la L2, on obtient toujours quelque chose de convexe. La L1, non. Donc la L1 est plutôt utile pour faire de la sélection de variable. + +Si on ajoute L1 et L2, c'est l'"Elastic Net". Qu'on ajoute L1, L2 ou L1+L2 à la fonction de coût, on obtient des résultats différents. Il faut aussi pondérer l'hyperparamètre C pour pas qu'il soit trop petit ou trop grand. + +#### Numerical and Categorical variable + +Il s'agit de regrouper des variables ou de changer leur type en leur assignant des nombres. Sur une variable constante par exemple (de 0 à n), on peut décréter que de x à x' on est dans la variable [1,0,0], de x'' à x''' [O,1,0] et tout le reste [0,0,1]. + +#### Normalisation, standardisation + +L'idée est de ne pas se retrouver à donner plus d'importance à un paramètre qui a un champ plus large que d'autres (genre l'age de 1 à 100 va valoir plus que la taille de 0 à 2) on ramène tout à "de 0 à 1". + +Formule de normalisation de j pour sa donnée x : $\bar x^j = \frac{x^j - min^j}{max^j - min^j}$ + +Le Z-score, normalise en fonction de la moyenne, non plus en fonction min et max : c'est plus robuste : $\hat x = \frac{x^j - \mu^j}{\sigma^j}$ + +#### Transformation de cible + +L'idée est, sur des paramètres difficiles à expliquer, d'arriver sur des données plus "jolies à voir", plus facilement exploitables pour nous. Dans l'exemple sur le PDF, on a juste appliqué la fonction log aux données. + +#### Interaction entre les variables + +Parfois il ne suffit pas de prendre les paramètres mais de regarder les relations entre eux : on appelle ça une interaction. Les interactions consistent à rajouter un terme (paramètre) qui est le produit des deux paramètres. + +$y = b +w_1.age + w_2 .taille +w_3.age.taille$ +