From 8c2e3d052115036a385cef9d3c8e6aa5c9770423 Mon Sep 17 00:00:00 2001 From: Cyrille BERTELLE <cyrille.bertelle@univ-lehavre.fr> Date: Tue, 17 Nov 2020 12:38:21 +0100 Subject: [PATCH] Replace m2iwocs-apa-chap3-regression-polynomiale.ipynb --- ...ocs-apa-chap3-regression-polynomiale.ipynb | 58 ++++++++++++++++--- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/m2iwocs-apa-chap3-regression-polynomiale.ipynb b/m2iwocs-apa-chap3-regression-polynomiale.ipynb index 05be04d..2833308 100644 --- a/m2iwocs-apa-chap3-regression-polynomiale.ipynb +++ b/m2iwocs-apa-chap3-regression-polynomiale.ipynb @@ -59,7 +59,7 @@ "\n", "Si maintenant, nous disposons de données qui ne présentent pas cette propriété de linéarité, il faut alors trouver d'autres modèles ou hypothèses pour réussir à dégager des relations comme illustrées dans la figure suivante.\n", "\n", - "<img src=\"images/tds-regpol1.png\" width=\"500\"/>" + "<img src=\"tds-regpol1.png\" width=\"500\"/>" ] }, { @@ -112,10 +112,13 @@ "source": [ "Ainsi nous allons pouvoir formuler à partir d'un jeu de données (X,y) des hypothèses de la forme suivante :\n", "- si X n'est composé que d'une seule variable explicative (régression univariée), l'hypothèse à base d'un polynome de degré $k$ s'écrit de la manière suivante :\n", + "\n", "$$\n", "h(X) = \\theta_0 + \\Theta_1 X_1 + \\Theta_2 X_1^2 + \\Theta_3 X_1^3 + \\dots = \\theta_0 + \\sum_{j=1}^k \\theta_j X_1^j\n", "$$\n", + "\n", "- si X est composé de plusieurs variables explicatives (régression multivariée), par exemple ici 2, l'hypothèse à base d'un polynome de degré $k$ s'écrit de la manière suivante :\n", + "\n", "$$\n", "h(X) = \\theta_0 + \\sum_{j=1}^k \\left( \\theta_{1,j} X_1^j + \\theta_{2,j} X_2^j \\right)\n", "$$\n", @@ -239,14 +242,18 @@ "source": [ "Le programme se termine par le calcul de 2 indicateurs : \n", "- `rmse` - Root of Mean Squared Error - correspond la distance entre les valeurs prédites, $\\{h(x_i), 0 \\leq i \\leq n\\}$ et les valeurs des données $\\{y_i, 0 \\leq i \\leq n\\}$, c'est à dire \n", + "\n", "$$\n", "\\sqrt{\\frac{1}{n}\\sum_{i=1}^{n}(h(x_i)-y_i)^2} \n", "$$\n", + "\n", "Cet indicateur mesure ainsi la proximité de la courbe de régression (de l'hypothèse) avec les données. Sa valeur numérique dépend de l'ordre de grandeur des données. Il permet donc de comparer deux ou plusieurs hypothèses.\n", "- `r2` ou `r2_score`, appelé *coefficient de détermination* va permettre d'évaluer la qualité de la prédiction :\n", + "\n", "$$\n", "1-\\frac{\\sum_{i=1}^n (h(x_i)-y_i)^2}{\\sum_{i=1}^n (\\overline{y}-y_i)^2}\n", "$$\n", + "\n", "avec $\\overline{y} = \\frac{1}{n}\\sum_{i=1}^n y_i$.\n", "Sa valeur numérique est comprise entre 0 et 1. Si il vaut 1, la régression est parfaite par rapport au jeu de données. Si il vaut 0, la régression n'est pas du tout pertinente pour le jeu de données." ] @@ -256,14 +263,17 @@ "metadata": {}, "source": [ "Nous allons maintenant passer à une hypothèse basée sur une régression basée sur un polynome d'ordre k :\n", + "\n", "$$\n", "h(x) = \\theta_0 + \\sum_{j=1}^k \\theta_j x^j\n", "$$\n", + "\n", "Cette expression reste linéaire par rapport aux coefficients à calculer, $\\theta_j$. \n", "\n", "La manière de traiter le problème avec la bibliothèque `sklearn`est la suivante.\n", "\n", "Pour simplifier l'explication, nous allons nous placer dans le cas d'un jeu de données de la forme $(x_i, y_i)$ avec la recherche d'un modèle/hypothèse univarié de regression polynomiale de degré 3 :\n", + "\n", "$$\n", "h(x) = \\theta_0 + \\theta_1 x + \\theta_2 x^2 + \\theta_3 x^3\n", "$$\n", @@ -273,9 +283,11 @@ "`poly = PolynomialFeatures(degree=3)`\n", "\n", "Ensuite on transforme ou réécrit le modèle précédent sous la forme linéaire suivante : \n", + "\n", "$$\n", "h(t,u,v,w) = \\theta_0 t + \\theta_1 u + \\theta_2 v + \\theta_3 w\n", "$$\n", + "\n", "avec $t=1$, $u=x$, $v=x^2$ et $w=x^3$\n", "\n", "On a alors transformé un modèle polynomial de degré 3, à 1 variable explicative $(x)$ en un modèle linéaire à 4 variables explicatives $(t,u,v,w)$.\n", @@ -599,12 +611,24 @@ "\n", "*Rappels* des définitions de la moyenne et de la variance :\n", "- la moyenne sa calcule ainsi\n", - "$$\\mu(\\epsilon) = \\frac{1}{n} \\sum_{i=1}^{n} \\epsilon_i$$\n", + "\n", + "$$\n", + "\\mu(\\epsilon) = \\frac{1}{n} \\sum_{i=1}^{n} \\epsilon_i\n", + "$$\n", + "\n", "- la variance notée $V(x)$ ou $\\sigma^2$, est la moyenne des carrés des écarts à la moyenne \n", - "$$\\sigma^2 = V(x) = \\frac{1}{n}\\sum_{i=1}^{n}(x_i - \\mu(x))^2$$ \n", + "\n", + "$$\n", + "\\sigma^2 = V(x) = \\frac{1}{n}\\sum_{i=1}^{n}(x_i - \\mu(x))^2\n", + "$$ \n", + "\n", "On peut montrer que \n", - "$$\\sigma^2 = V(x) = \\left( \\frac{1}{n}\\sum_{i=1}^n x_i^2 \\right) - \\mu(x)^2 = \\mu(x^2) - \\mu(x)^2$$\n", - "- $\\sigma$ est appelé l'écart-type, c'est donc la racine carrée de la variance, $\\sigma = \\sqrt{V(x)}$. Il permet de mesurer la dispersion des valeurs $x_i$ autour de la moyenne $\\mu(x)$.\n", + "\n", + "$$\n", + "\\sigma^2 = V(x) = \\left( \\frac{1}{n}\\sum_{i=1}^n x_i^2 \\right) - \\mu(x)^2 = \\mu(x^2) - \\mu(x)^2\n", + "$$\n", + "\n", + "- $\\sigma$ est appelé l'écart-type, c'est donc la racine carrée de la variance, $\\sigma = \\sqrt{V(x)}$. Il permet de mesurer la dispersion des valeurs $x_i$ autour de la moyenne $\\mu(x)$.\n", "\n", "A partir du jeu de données $\\{(x_i, y_i); 1 \\leq i \\leq n\\}$, on va construire un ensemble $S$ de $m$ échantillons, que l'on appelle aussi échantillons d'apprentissage, et qui correspondent à des extractions de ce jeu de données de taille inférieure à $n$. Pour chaque échantillon de données, on note $x^p$, l'échantillon $p$ des données d'entrée (attention à la notation, ce n'est pas une élévation à la puissance mais un indice supérieur), on calcule l'hypothèse $h_{x^p}(x))$. Il faut comprendre ici que pour les modèles de regression polynomiale, l'hypothèse est indépendante de l'échantillon : il s'agit notamment de choisir le degré du polynome. Par contre le calcul des coefficients du polynome pour le degré choisit, va dépendre du jeu de données.\n", "\n", @@ -615,29 +639,42 @@ "Une espérance mathématique est un calcul de moyenne pondérée ou la pondération est une probabilité affectée à chaque terme de la moyenne ; la somme des probalités étant égale à 1. Ici, si l'on considère que chaque échantillon a la même importance (ou même probabilité d'apparaître ou d'exister), l'espérance sera calculée comme une moyenne simple.\n", "\n", "On calcule déjà une fonction $G(t)$ par\n", + "\n", "$$\n", "G(t) = \\frac{1}{m}\\sum_{x_p \\in S} h_{x_p}(t)\n", "$$\n", + "\n", "où l'on rappelle que $m$ est le nombre d'échantillons $x_p$ dans $S$.\n", "\n", "Puis l'espérance de l'hypothèse $h$ pour le jeu de données dont les valeurs d'entrée sont $x = {x_i, 1 \\leq i \\leq n}$ \n", + "\n", "$$\n", "E_S[h(x)] = \\frac{1}{n}\\sum_{i=1}^{n} G(x_i)\n", "$$\n", "\n", "Une fois effectués ces rappels et ces notations (parfois imprécises dans la littérature), on va donner des expressions du biais et de la variance \n", "\n", - "- le biais se calcule par $$B(h(x))= E[(h-f)(x)]$$, \n", - "- la variance se calcule par $$Var(h(x))=E[h^2(x)]-(E[h(x)])^2$$\n", + "- le biais se calcule par \n", + "\n", + "$$\n", + "B(h(x))= E[(h-f)(x)]\n", + "$$ \n", + "\n", + "- la variance se calcule par \n", + "\n", + "$$\n", + "Var(h(x))=E[h^2(x)]-(E[h(x)])^2\n", + "$$\n", "\n", "On définit ensuite l'*erreur de prédiction attendue* par\n", + "\n", "$$\n", "Err(h(x)) = B^2(h(x)) + Var(h(x)) + \\sigma^2\n", "$$\n", "\n", "On rappelle que l'on a fait l'hypothèse qu'il existait une fonction $f(x)$ telle que $y_i = f(x_i) + \\epsilon_i$, où $\\epsilon_i$ est un bruit dont la variance est notée $\\sigma^2$. \n", "\n", - "$f(x)$ n'étant pas une fonction connue, on ne pourra pas calculer directement le biais qui mesure l'écart entre l'hypothèse et les données au sens \"classique\". Par contre, il est assez bien estimé par les indicateurs que nous avons utilisés lors des tracés des régression polynomiale, à savoir `rmse`et `r2`. Il faut simplement se rappeler que l'hypothèse de l'existance de $f$ signifie qu'il y a un bruit et que ces indicateurs ne visent donc pas à être trop petits si le bruit est important.\n", + " $f(x)$ n'étant pas une fonction connue, on ne pourra pas calculer directement le biais qui mesure l'écart entre l'hypothèse et les données au sens \"classique\". Par contre, il est assez bien estimé par les indicateurs que nous avons utilisés lors des tracés des régression polynomiale, à savoir `rmse`et `r2`. Il faut simplement se rappeler que l'hypothèse de l'existance de $f$ signifie qu'il y a un bruit et que ces indicateurs ne visent donc pas à être trop petits si le bruit est important.\n", "\n", "La Variance peut par contre être évaluée, à condition de mettre en place un échantillonage $S$. Elle mesure la dispersion des fonctions hypothèses liées à un échantillon à la moyenne de ces fonctions hypothèses pour tous les échantillons. En cas de sur-apprentissage, cette dispersion peut être grande comme cela a été expliqué dans les exemples précédents. \n", "\n", @@ -676,10 +713,13 @@ "**Régression ridge**\n", "\n", "La fonction de pénalisation se base sur l'utilisation de la norme $L_2$ du vecteur $\\theta$. Appelée aussi norme euclidienne, elle correspond aux métriques et notamment aux distances usuelles en géométrie. Par exemple, un cercle de rayon $r$, centré sur l'origine correspond à tous les points de coordonnées $(x,y)$ dont la norme $L_2$ vaut $r$. C'est aussi la norme utilisée dans le critère des moindres carrées. La fonction de pénalisation s'écrit :\n", + "\n", "$$\n", "P_r(\\lambda, \\theta) = \\lambda \\sum_{j=0}^{n}\\theta_j^2\n", "$$\n", + "\n", "et donc la fonction coût \"pénalisée\" s'écrit\n", + "\n", "$$\n", "J(\\theta) = \\frac{1}{2m}\\sum_{i=1}^{m}\\left(h_\\theta(x_i)-y_i\\right)^2+\\lambda \\sum_{j=0}^{n}\\theta_j^2\n", "$$\n", @@ -687,6 +727,7 @@ "**Régression lasso**\n", "\n", "La fonction de pénalisation lasso (Least Absolute Shrinkage and Selection Operator) est identique mais se base sur la norme $L_1$ :\n", + "\n", "$$\n", "P_l(\\lambda, \\theta) = \\lambda \\sum_{j=0}^{n} \\lvert \\theta_j \\rvert\n", "$$\n", @@ -694,6 +735,7 @@ "**Régression ElasticNet**\n", "\n", "La fonction de pénalisation est une composition des deux précédentes, en ajoutant un nouveau paramètre $\\alpha$ mesurant l'importance donnée à l'une des deux fonctions de pénalisation précédente par rapport à l'autre.\n", + "\n", "$$\n", "P_e(\\lambda, \\theta) = \\lambda \\sum_{j=0}^{n} \\left( \\alpha \\theta_j^2 + (1-\\alpha) \\lvert \\theta_j \\rvert \\right)\n", "$$\n", -- GitLab