Régression linéaire

Motivation

Analyse

La régression linéaire consiste à déterminer une fonction linéaire (et donc continue sur `RR`) capable de :

Exemple de régression linéaire à partir de points
Exemple de régression linéaire à partir de points

Si l'on considère :

Ce type de régression consiste à déterminer la fonction hypothèse `h_Θ(x) = Θ_0 + x_1Θ_1 + x_2Θ_2 + ... + x_nΘ_n` dont les points sont les moins éloignés des valeurs réelles (connues du passé) pour espérer pouvoir en prédire des valeurs futures. Autrement dit déterminer les paramètres `Θ_0, Θ_1, ..., Θ_n` qui permettent à la fonction linéaire `h` d'avoir des points ayant une distance/différence minimale avec les points "réels" (connus).

`Θ_0` qui ne dépend pas d'une variable, est une constante appelée biais (bias) ou intersection (de la fonction avec l'axe des ordonnées en `h_Θ(0)`).

Les cas les plus courants ne requièrent cependant que 1 (`Θ_0 + xΘ_1`) ou 2 paramètres (`Θ_0 + x_1Θ_1 + x_2Θ_2`). S'il est besoin de représenter des fonctions plus complexes (typiquement si la fonction hypothèse ne correspond pas assez aux données ou en cas de surapprentissage), on recourra aux régression non-linéaires.

Conception

On cherche à trouver les `Θ` (`Θ_0, Θ_1`...) optimaux selon une méthode adaptée :

La méthode itérative consiste à fournir à l'algorithme de descente de gradient une fonction de coût `J(Θ)` permettant de calculer la différence entre `h` et `y` suivant de plus ou moins bons paramètres `Θ`.

Coût

Comme les erreurs peuvent être positives ou négatives et que nous ne sommes intéressés que par l'écart/distance, on élève cette erreur au carré afin de le garantir toujours positif n1On pourrait théoriquement utiliser une fonction de valeur absolue à la place mais cela transformerait le résultat. On annule/compense ensuite la mise au carré n2On parlera ici aussi de "fonction d'erreur carrée" (squared error function) des erreurs en multipliant par 1/2 (ce qui annulera la dérivée de `x^2` qui est `2x`) :

`J(Θ) = 1/(2m) sum_(i=1)^m (h_Θ(x^((i))) - y^((i)))^2`

ou en version vectorisée (en utilisant le calcul matriciel) :

`J(Θ) = 1/(2m) (XΘ - vec y)^T (XΘ - vec y)`

Vectorisation

Afin de gagner en performance et simplicité d'écriture on peut réécrire la formule d'hypothèse sous forme de multiplication de matrices `Θ` et `x` (une ligne de `X`). Afin de conserver la constante `Θ_0`, on définira `x_0` = 1 :

`Θ = [[Θ_0],[Θ_1],[Θ_2],[⋮],[Θ_n]]`, `x = [[x_0],[x_1],[x_2],[⋮],[x_n]]`

Cependant on ne peut multiplier une matrice `1 xx (n + 1)` que par une matrice `(n + 1) xx 1`, et il faut donc transposer `Θ` pour obtenir le calcul attendu :

`Θ^T = [Θ_0,Θ_1,Θ_2,...,Θ_n]`, `x = [[x_0],[x_1],[x_2],[⋮],[x_n]]`

Ainsi :

`h_Θ(x) = Θ^Tx`

`h_Θ(x) = x_0Θ_0 + x_1Θ_1 + x_2Θ_2 + ... + x_nΘ_n` (le calcul recherché)

Cependant au niveau de l'ensemble du training set `X` (ou design matrix), les `x^((i))` ne sont pas des vecteurs mais des lignes, de sorte qu'on doive plutôt y stocker des `(x^((i)))^T`s :

`X = [[(x^((0)))^T],[(x^((1)))^T],[⋮],[(x^((m)))^T]]`

Comme le vecteur `x` est déjà transposé de par sa notation en ligne, `Θ` ne doit plus l'être pour que leur multiplication s'opère. Cela reste équivalent car les 2 étant des vecteurs, `Θ^Tx = x^TΘ`.

Le calcul recherché peut alors être effectué pour toutes les lignes de la matrice en multipliant `X` par le vecteur `Θ` :

`h_Θ = [[(x^((0)))^TΘ],[(x^((1)))^TΘ],[⋮],[(x^((m)))^TΘ]]`

`h_Θ = XΘ`

Notes

Exemples

En ML, la régression linéaire permet de produire une fonction continue à partir de données connues, qui permet de prédire des valeurs probables pour d'autres valeurs de x ou y.