Comprendre la régression linéaire, la régression Ridge, LASSO et Elastic-Net avec des formules mathématiques et les implémenter avec scicit-learn.
On suppose que vous avez déjà appris l'intégration différentielle, l'algèbre linéaire et les statistiques.
La régression prévoit la valeur d'une ou de plusieurs variables cibles $ y $ à partir d'une valeur d'entrée constituée d'une ou plusieurs variables explicatives $ x $.
Tout d'abord, considérons une régression simple avec une variable explicative $ x $ et une variable objective $ y $. En supposant que les paramètres sont $ a et b $, la valeur estimée $ \ hat {y} $ peut être exprimée par une fonction linéaire comme suit.
\hat{y} = a x + b
Dans le problème de régression, $ a et b $ sont ajustés pour prédire $ y $, donc nous visons à ce que la différence entre $ \ hat {y} $ et $ y $ soit nulle.
La première chose qui me vient à l'esprit est la différence
Par conséquent, la formule à résoudre peut être exprimée comme suit. Où $ n $ représente le nombre total de données.
L = \sum^n_{i=1} \{y_i - (ax_i + b) \}^2
Nous voulons trouver la valeur minimale de $ L $, donc nous la différencions par $ a et b $.
\begin{align}
\frac{\partial L}{\partial a} &= \frac{\partial}{\partial a} \sum^n_{i=1} (y_i - ax_i - b)^2 \\
&= \sum^n_{i=1} \{ 2 \cdot (-x_i) \cdot (y_i - ax_i - b) \} \\
&= 2 \left\{ a \sum^n_{i=1} x^2_i + b \sum^n_{i=1} x_i - \sum^n_{i=1} x_iy_i \right\}\\
\frac{\partial L}{\partial b} &= \frac{\partial}{\partial b} \sum^n_{i=1} (y_i - ax_i - b)^2 \\
&= \sum^n_{i=1} \{ 2 \cdot (-1) \cdot (y_i - ax_i - b) \} \\
&= 2 \left\{ a \sum^n_{i=1} x_i + nb - \sum^n_{i=1} y_i \right\} \\
\end{align}
La résolution des différentiels pour $ a et b $ comme 0 donne les équations simultanées suivantes.
a \sum^n_{i=1} x^2_i + b \sum^n_{i=1} x_i - \sum^n_{i=1} x_iy_i = 0 \\
a \sum^n_{i=1} x_i + nb - \sum^n_{i=1} y_i = 0
Je vais résoudre ça. Premièrement, si vous transformez la formule ci-dessous pour $ b $,
b = \frac{1}{n} \sum^n_{i=1}y_i - a \frac{1}{n} \sum^n_{i=1} x_i
ici,
\frac{1}{n} \sum^n_{i=1}y_i = \bar{y}, \frac{1}{n} \sum^n_{i=1} x_i = \bar{x}
Si tu le dis
b = \bar{y} - a \bar{x}
Puis divisez l'autre expression par $ n $ puis remplacez-la
a = \frac{ \frac{1}{n} \sum^n_{i=1} x_iy_i - \bar{x} \bar{y} }{ \frac{1}{n} \sum^n_{i=1} x^2_i - \bar{x}^2 }
Ici, le dénominateur et la molécule peuvent être transformés comme suit.
\begin{align}
\frac{1}{n} \sum^n_{i=1} x^2_i - \bar{x}^2 &= \frac{1}{n} \sum^n_{i=1} x^2_i - 2\bar{x}^2 + \bar{x}^2 \\
&= \frac{1}{n} \sum^n_{i=1} x^2_i - 2 \bar{x} \frac{1}{n} \sum^n_{i=1} \bar{x} + \bar{x}^2 \\
&= \frac{1}{n} \left\{ \sum^n_{i=1} x^2_i - 2 \bar{x} \sum^n_{i=1} x_i + n \bar{x}^2 \right\} \\
&= \frac{1}{n} \sum^n_{i=1} \left( x^2_i - 2 \bar{x}x_i + \bar{x}^2 \right) \\
&= \frac{1}{n} \sum^n_{i=1} \left( x_i - \bar{x} \right)^2 \\
\frac{1}{n} \sum^n_{i=1} x_iy_i - \bar{x}\bar{y} &= \frac{1}{n} \sum^n_{i=1} x_iy_i - 2\bar{x}\bar{y} + \bar{x}\bar{y} \\
&= \frac{1}{n} \left( \sum^n_{i=1}x_iy_i - 2n \bar{x}\bar{y} + n \bar{x}\bar{y} \right) \\
&= \frac{1}{n} \left( \sum^n_{i=1} x_iy_i - n \frac{1}{n} \sum^n_{i=1}x_i \bar{y} - n \frac{1}{n} \sum^n_{i=1} y_i \bar{x} - n\bar{x}\bar{y} \right) \\
&= \frac{1}{n} \sum^n_{i=1} \left( x_iy_i - \bar{y}x_i - \bar{x}y_i + \bar{x}\bar{y} \right) \\
&= \frac{1}{n} \sum^n_{i=1} \left\{ (x_i - \bar{x} )( y_i - \bar{y} ) \right\} \\
\end{align}
Donc,
a = \frac{\frac{1}{n} \sum^n_{i=1} \left\{ (x_i - \bar{x} )( y_i - \bar{y} ) \right\}}{\frac{1}{n} \sum^n_{i=1} \left( x_i - \bar{x} \right)^2} = \frac{Cov[x, y]}{\mathbb{V}[x]}
Où $ Cov [x, y] $ représente la covariance et $ \ mathbb {V} [x] $ représente la variance. Par conséquent, il a été constaté que la régression simple peut être obtenue par la formule suivante.
y = \frac{Cov[x, y]}{\mathbb{V}[x]} x + \left( \bar{y} - \frac{Cov[x, y]}{\mathbb{V}[x]} \bar{x} \right)
Ensuite, considérez plusieurs régressions avec deux variables explicatives ou plus. Si la variable explicative $ x = (x_1, x_2, ..., x_m) $, la variable objectif $ y $, et le paramètre est $ w = (w_0, w_1, ..., w_m) $, la valeur estimée est $ \ hat { y} $ peut être exprimé comme suit.
\hat{y}(w, x) = w_0 + w_1x_1 + \cdots + w_mx_m
$ w_0 $ représente la section $ b $ en régression simple, et en introduisant la variable pseudo-explicative $ x_0 = 1 $ correspondant à $ w_0 $, l'équation ci-dessus peut être représentée par un vecteur.
\hat{y}(w, x) = w_0x_0 + w_1x_1 + \cdots + w_mx_m = {\bf x}^T {\bf w} \\
{\bf x}^T = (1, x_1, ..., x_m),
{\bf w} =
\begin{pmatrix}
w_0 \\
w_1 \\
\vdots \\
w_m
\end{pmatrix}
De plus, puisque $ x $ existe pour le nombre de données $ n $, nous utiliserons la matrice $ \ bf {X} $ avec la direction des lignes comme nombre de données et la direction des colonnes comme variables explicatives.
\hat{y} = {\bf X} {\bf w} \\
{\bf X} =
\begin{pmatrix}
1 & x_{11} & \cdots & x_{1m} \\
\vdots & & \ddots & \vdots \\
1 & x_{n1} & \cdots & x_{nm}
\end{pmatrix}
Trouvez la valeur minimale du paramètre $ w $ en utilisant la méthode des moindres carrés comme dans la régression simple. La notation en gras est arrêtée par souci de simplicité.
\min_w || Xw - y ||^2
Quand cela est transformé,
\begin{align}
L &= || Xw - y ||^2 \\
&= (Xw - y)^T(Xw - y) \\
&= (w^TX^T - y^T)(Xw - y) \\
&= w^TX^TXw - w^TX^Ty - y^TXw + y^Ty \\
&= w^TX^TXw - 2w^TX^Ty + y^Ty
\end{align}
Donc, si vous différenciez pour $ w $ et trouvez 0,
\frac{\partial L}{\partial w} = 2X^TXw - 2X^Ty = 0 \\
w = (X^TX)^{-1}X^Ty
Par conséquent, nous avons constaté que le paramètre $ w $ peut être obtenu à partir des données. Cependant, si $ X ^ TX $ n'a pas de matrice inverse, aucune solution ne peut être déterminée.
La régression Ridge est une régression linéaire plus un terme L2 pour le paramètre $ w $. La formule à résoudre est la suivante.
\min_w ||Xw - y||^2 + \alpha||w||^2_2
Si cela est différencié par rapport à $ w $ et résolu par 0,
\frac{\partial L}{\partial w} = 2X^TXw - 2X^Ty + 2 \alpha w = 0 \\
w = (X^TX + \alpha I)^{-1} X^T y
Où $ I $ représente une matrice unitaire.
En régression linéaire, nous n'avons pas pu déterminer la solution si $ X ^ TX $ n'avait pas de matrice inverse, mais en régression Ridge, nous pouvons garantir qu'elle a une matrice inverse en ajoutant le terme L2.
Avoir une matrice inverse s'appelle régularité, et cela s'appelle régularisation car elle a toujours une matrice inverse en ajoutant le terme L2.
De plus, l'ajout d'un terme L2 pour le paramètre $ w $ est appelé atténuation du poids. Pour voir l'effet, calculons ici un exemple concret. Puisque le terme L2 ne fonctionne que sur la partie réelle $ (X ^ TX + \ alpha I) ^ {-1} $, considérons le cas où deux variables explicatives sont obtenues comme suit. La première colonne correspond à la section, c'est donc une variable pseudo-explicative.
X =
\begin{pmatrix}
1 & 2 & 3 \\
1 & 4 & 5 \\
1 & 3 & 2 \\
\end{pmatrix}
A ce moment, $ X ^ TX $ est obtenu comme suit, et la matrice inverse est la suivante.
X^TX =
\begin{pmatrix}
3 & 9 & 10 \\
9 & 29 & 32 \\
10 & 32 & 38 \\
\end{pmatrix}
,
(X^TX)^{-1} =
\begin{pmatrix}
4.875 & -1.375 & -0.125 \\
-1.375 & 0.875 & -0.375 \\
-0.125 & -0.375 & 0.375
\end{pmatrix}
Ici, lorsque le coefficient du terme L2 est $ \ alpha = 1 $ (la première ligne et la première colonne sont des variables pseudo-explicatives, donc 0).
\alpha I =
\begin{pmatrix}
0 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{pmatrix}
À $ X ^ TX $
X^TX + \alpha I =
\begin{pmatrix}
3 & 9 & 10 \\
9 & 30 & 32 \\
10 & 32 & 39 \\
\end{pmatrix}
,
(X^TX + \alpha I)^{-1} =
\begin{pmatrix}
3.744 & -0.795 & -0.308 \\
-0.795 & 0.436 & -0.154 \\
-0.308 & -0.154 & 0.231
\end{pmatrix}
Vous pouvez voir que la valeur est certainement plus petite et a pour effet d'amortir le poids.
LASSO La régression linéaire plus le terme L1 pour le paramètre $ w $ est appelée LASSO (Least Absolute Shrinkage and Selection Operator) [1]. La formule à résoudre est la suivante.
\min_w \frac{1}{2}|| Xw - y ||^2 + \alpha ||w||_1
Étant donné que la formule ci-dessus contient des valeurs absolues, il est nécessaire de séparer les cas. Alors d'abord, pensons à $ w_0 $.
Considérant que la régularisation ne fonctionne pas pour la section $ w_0 $
L_0 = \frac{1}{2} \left\{ \sum^n_{i=1} \left( w_0 + \sum^m_{j=1} x_{ij} w_j - y_i \right) \right\}^2
Comme précédemment, si $ L_0 $ est différencié par rapport à $ w_0 $ et résolu comme 0,
\frac{\partial L_0}{\partial w_0} = \sum^n_{i=1} \left( w_0 + \sum^m_{j=1} x_{ij} w_j - y_i \right) = 0 \\
w_0 = \frac{1}{n} \sum^n_{i=1} \left( y_i - \sum^m_{j=1} x_{ij} w_j \right)
Ensuite, considérons $ w_1, ..., w_m $. Puisqu'il contient des valeurs absolues, il est divisé en différentiels droit et gauche pour $ w_k $.
\frac{\partial L}{\partial w^+_k} = \sum^n_{i=1} \left( w_0 + \sum^m_{j=1} x_{ij} w_j - y_i \right)x_{ik} + \alpha \\
\frac{\partial L}{\partial w^-_k} = \sum^n_{i=1} \left( w_0 + \sum^m_{j=1} x_{ij} w_j - y_i \right)x_{ik} - \alpha
Si vous le résolvez comme 0 comme avant,
w_k = \left\{
\begin{array}{ll}
\frac{\sum^n_{i=1} \left( y_i - w_0 - \sum^m_{j=1, (j \neq k)} x_{ij} w_j \right)x_{i} - \alpha}{\sum^n_{i=1} x^2_{ik}} & (w_k > 0) \\
\frac{\sum^n_{i=1} \left( y_i - w_0 - \sum^m_{j=1, (j \neq k)} x_{ij} w_j \right)x_{i} + \alpha}{\sum^n_{i=1} x^2_{ik}} & (w_k < 0)
\end{array}
\right.
Ce sera. Cependant, $ w_k $ dans la formule ci-dessus a une condition, et si la condition n'est pas remplie, $ w_k $ est mis à 0.
w_k = \left\{
\begin{array}{ll}
\frac{\sum^n_{i=1} \left( y_i - w_0 - \sum^m_{j=1, (j \neq k)} x_{ij} w_j \right)x_{ik} - \alpha}{\sum^n_{i=1} x^2_{ik}} & \left(\sum^n_{i=1} \left( y_i - w_0 - \sum^m_{j=1, (j \neq k)} x_{ij} w_j \right)x_{ik} > \alpha \right) \\
0 & \left( -\alpha \leq \sum^n_{i=1} \left( y_i - w_0 - \sum^m_{j=1, (j \neq k)} x_{ij} w_j \right)x_{ik} \leq \alpha \right) \\
\frac{\sum^n_{i=1} \left( y_i - w_0 - \sum^m_{j=1, (j \neq k)} x_{ij} w_j \right)x_{ik} + \alpha}{\sum^n_{i=1} x^2_{ik}} & \left( \sum^n_{i=1} \left( y_i - w_0 - \sum^m_{j=1, (j \neq k)} x_{ij} w_j \right)x_{ik} < - \alpha \right)
\end{array}
\right.
Vous pouvez également définir une fonction de seuil souple comme suit:
S(z, \alpha) = \left\{
\begin{array}{ll}
z - \alpha & (z > \alpha) \\
0 & (-\alpha \leq z \leq \alpha) \\
z + \alpha & (z < -\alpha)
\end{array}
\right. \\
z = \sum^n_{i=1} \left( y_i - w_0 - \sum^m_{j=1, (j \neq k)} x_{ij} w_j \right)x_{ik} \\
LASSO dans scikit-learn est implémenté par la méthode de descente de coordonnées. Dans la méthode de descente de coordonnées, une solution approximative est obtenue en substituant 0 à la variable explicative et en appliquant la fonction de seuil souple à toutes les variables explicatives une par une.
LASSO obtient des représentations éparses et une sélection de caractéristiques en définissant de nombreux paramètres sur 0, mais si le nombre de données $ n $ est inférieur à la variable explicative $ m $ ($ n <m $), jusqu'au nombre de données. Il est à noter que seules les fonctionnalités peuvent être sélectionnées.
De plus, s'il existe une forte corrélation entre les variables explicatives, une seule d'entre elles sera sélectionnée, il est donc judicieux de rendre les variables explicatives non corrélées et de normaliser les caractéristiques d'entrée à une moyenne de 0 et une variance de 1.
Elastic-Net La régression linéaire plus les termes L1 et L2 pour les paramètres est appelée Elastic-Net [2]. La formule à résoudre est la suivante.
\min_w \frac{1}{2}||Xw - y||^2 + \alpha \rho ||w||_1 + \frac{\alpha(1 - \rho)}{2} ||w||^2_2
Elastic-Net améliore les lacunes de LASSO en ajoutant un terme L2 ainsi qu'un terme L1.
Elastic-Net dans scikit-learn est implémenté par la méthode de descente de coordonnées comme LASSO.
La figure ci-dessous montre l'ellipse orange avec deux variables explicatives.
Dans la contrainte L1, $ w_1 $ vaut 0, et de nombreux paramètres sont 0 de cette façon pour obtenir une solution creuse.
Puisque scikit-learn fournit un ensemble de données sur le diabète comme ensemble de données pour les problèmes de régression, nous allons l'utiliser.
Le nombre de données | Nombre de fonctionnalités | Valeur cible |
---|---|---|
442 | 10 | [25, 346] |
Les évaluations quantitatives des modèles de régression comprennent l'erreur quadratique moyenne et le score R2.
Mean Squared Error L'erreur quadratique moyenne (MSE) trouve l'erreur quadratique moyenne entre $ \ hat {y} $ et les données de test $ y $ prédites à l'aide de paramètres estimés à partir des données d'entraînement.
MSE = \frac{1}{n} \sum^n_{i=1} (y_i - \hat{y}_i)^2
Plus le MSE est petit, plus le modèle est précis.
R2 Score Le score R2 (coefficient de détermination) indique dans quelle mesure les variables explicatives expliquent la variable objective. En supposant que la valeur prédite à l'aide des paramètres estimés à partir des données d'entraînement est $ \ hat {y} $ et que la valeur des données de test est $ y $, le score R2 peut être calculé à partir de la formule suivante.
R^2 = 1 - \frac{SS_{residual}}{SS_{total}} \\
SS_{residual} = \sum^n_{i=1} (y_i - \hat{y}_i)^2,
SS_{total} = \sum^n_{i=1} (y_i - \bar{y})^2
Le score R2 a une valeur de [0, 1], et plus il est proche de 1, plus la précision du modèle est élevée.
・ Processeur Intel (R) Core (TM) i7-6700K 4,00 GHz
・ Windows 10 Professionnel 1909 ・ Python 3.6.6 ・ Scikit-learn 0.23.0
Le programme implémenté est publié sur GitHub.
linear_regression.py
Le résultat de l'exécution est le suivant.
Linear Regression
Mean Squared Error: 3424.32
R2 score: 0.33
Ridge Regression
Mean Squared Error: 3427.67
R2 score: 0.33
LASSO
Mean Squared Error: 3434.59
R2 score: 0.33
Elastic-Net
Mean Squared Error: 3295.57
R2 score: 0.36
Parmi ceux-ci, Elastic-Net semble être plus précis que les autres modèles.
1.1.1 Ordinary Least Squares 1.1.2 Ridge Regression and Classification 1.1.3 Lasso 1.1.5 Elastic-Net