diff --git a/TP1/TP1_ex1_sujet.ipynb b/TP1/TP1_ex1_sujet.ipynb index baab3a532a1b88bb5668185ce166d43ce0ad3c1e..0c2539c0021f026331b030e206817c5f8184a416 100755 --- a/TP1/TP1_ex1_sujet.ipynb +++ b/TP1/TP1_ex1_sujet.ipynb @@ -60,7 +60,7 @@ "# \"magic function\" Jupyter pour l'affichage des graphiques dans le carnet de manière interactive (zoom possible par exemple):\n", "# (voir plus loin)\n", "%matplotlib notebook\n", - "# si on veut supprimer les interactions (si elles ralentissent trop l'affichage par exemple), il faut faire:\n", + "# si on veut supprimer les interactions (si elles ralentissent trop l'affichage par exemple, ou si elles ne fonctionnent pas), il faut faire:\n", "# %matplotlib inline" ] }, @@ -103,7 +103,8 @@ "plt.ylabel(\"Y: distance d'arrêt (m)\")\n", "plt.grid()\n", "plt.xlim(0, 130)\n", - "plt.ylim(0, 100); # le ; final permet d'éviter un affichage intempestif dans le carnet" + "plt.ylim(0, 100)\n", + "plt.show()" ] }, { @@ -122,7 +123,7 @@ "$$ y_{pred} = a_0 + a_1 x$$\n", "\n", "Les valeurs de $a_0$ et $a_1$ sont estimées par la méthode des moindres carrés: on cherche les paramètres $a_0$ et $a_1$ qui minimisent\n", - "$$\\sum_{i=1}^n \\bigl\\lvert y_{data}[i] - a_0 - a_1 x_{data}[i]\\bigr\\lvert^2$$\n", + "$$\\sum_{i=1}^n \\bigl( y_{data}[i] - a_0 - a_1 x_{data}[i]\\bigr)^2$$\n", "sur l'ensemble des $n=20$ observations $(x_{data}[i],y_{data}[i])_{1\\leq i\\leq n}$." ] }, @@ -137,12 +138,12 @@ "# lorsqu'on crée un objet scikit-learn, on dispose de méthodes et attributs \n", "# voir les détails dans la documentation de LinearRegression: on ne se servira que de quelques uns d'entre eux\n", "\n", - "# On estime les paramètres a_0 et a_1: \n", + "# On estime les paramètres a_0 et a_1 à l'aide de la méthode fit: \n", "# (remarque: sklearn attend des données sous forme de vecteurs colonnes)\n", "lr.fit(X_data, Y_data) \n", "# de manière générale, la méthode fit permet l'apprentissage des paramètres du modèle \n", "# (ici, estimation par la méthodes des moindres carrés)\n", - "# Ils sont stockés dans les attributs suivants de l'objet lr:\n", + "# Les paramètres sont stockés dans les attributs suivants de l'objet lr:\n", "print(lr.intercept_) \n", "print(lr.coef_)" ] @@ -194,7 +195,8 @@ "plt.ylabel(\"Y: distance d'arrêt (m)\")\n", "plt.grid()\n", "plt.title('observations et régression linéaire')\n", - "plt.legend([\"observations\",\"droite de régression\"]);" + "plt.legend([\"observations\",\"droite de régression\"])\n", + "plt.show()" ] }, { @@ -343,7 +345,8 @@ "plt.ylabel(\"Y: distance d'arrêt (m)\")\n", "plt.grid()\n", "plt.title('régression')\n", - "plt.legend([\"observations\",\"régression linéaire\",\"modèle degré 2\",\"modèle degré 6\"]);" + "plt.legend([\"observations\",\"régression linéaire\",\"modèle degré 2\",\"modèle degré 6\"])\n", + "plt.show()" ] }, { @@ -387,7 +390,7 @@ "Une manière classique de contrer le surapprentissage est de contraindre les paramètres du modèle prédictif à prendre des valeurs \"pas trop grandes\" (on dit qu'on _régularise_ le modèle).\n", "\n", "Dans le cadre de la régression, au lieu d'estimer les paramètres $a_i$ par minimisation des moindres carrés, on peut chercher à minimiser:\n", - "$$\\sum_{i=1}^n \\left|y_{data}[i] - a_0 - \\sum_{j=1}^d a_j x_{data}[i]^j\\right|^2 + \\alpha \\sum_{j=1}^d a_j^2$$\n", + "$$\\sum_{i=1}^n \\left(y_{data}[i] - a_0 - \\sum_{j=1}^d a_j x_{data}[i]^j\\right)^2 + \\alpha \\sum_{j=1}^d a_j^2$$\n", "où $\\alpha$ est un paramètre positif, fixé _a priori_ par l'utilisateur (on parle d'_hyperparamètre_ car $\\alpha$ ne fait pas partie des paramètres estimés par minimisation de la fonction précédente).\n", "\n", "On voit apparaître un compromis entre l'adéquation aux données (mesurée par la MSE, premier terme de l'expression) et la valeur des paramètres $a_j$ (qui interviennent par le carré de la norme euclidienne du vecteur $(a_1,\\dots,a_d) $). On remarque que la régression linéaire classique correspond au cas particulier $\\alpha=0$.\n", @@ -508,7 +511,8 @@ "plt.ylabel(\"Y: distance d'arrêt (m)\")\n", "plt.grid()\n", "plt.title('régression ridge, d=6')\n", - "plt.legend([\"observations\",\"alpha=0\",\"alpha=0.1\",\"alpha=1\",\"alpha=10\",\"alpha=100\",\"alpha=1000\"]);" + "plt.legend([\"observations\",\"alpha=0\",\"alpha=0.1\",\"alpha=1\",\"alpha=10\",\"alpha=100\",\"alpha=1000\"])\n", + "plt.show()" ] }, { @@ -627,7 +631,8 @@ "plt.ylabel(\"Y: distance d'arrêt (m)\")\n", "plt.grid()\n", "plt.title('régression ridge')\n", - "plt.legend([\"observations\",\"modèle degré 1\",\"modèle degré 2\",\"modèle degré 6\"]);" + "plt.legend([\"observations\",\"modèle degré 1\",\"modèle degré 2\",\"modèle degré 6\"])\n", + "plt.show()" ] }, { @@ -756,7 +761,8 @@ "plt.ylabel(\"Y: distance d'arrêt (m)\")\n", "plt.grid()\n", "plt.title('Lasso')\n", - "plt.legend([\"observations\",\"régression linéaire\",\"Lasso modèle degré 2\",\"Lasso modèle degré 6\"]);" + "plt.legend([\"observations\",\"régression linéaire\",\"Lasso modèle degré 2\",\"Lasso modèle degré 6\"])\n", + "plt.show()" ] }, { @@ -832,9 +838,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.12.7" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 }