[PYTHON] Machine Learning: Supervision - Régression linéaire

Cible

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.

théorie

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 $.

Régression linéaire

Régression simple

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érencey - \hat{y}Cependant, il a des valeurs positives et négatives. Pour gérer uniquement les valeurs positives|y - \hat{y}|Il existe une méthode pour prendre la valeur absolue comme, mais ce n'est pas pratique car la valeur absolue doit être divisée en cas. Par conséquent, la méthode du carré minimum consiste à utiliser la méthode du carré.

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)

Régression multiple

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.

Retour de crête

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.

Géométrie des contraintes L1 et L2

La figure ci-dessous montre l'ellipse orange avec deux variables explicatives.||Xw - y||^2, Le losange bleu représente la contrainte L1 et le cercle la contrainte L2. Le point jaune, qui est l'intersection de l'ovale orange et de la figure bleue, représente la solution optimale.

linear_regression_lasso_ridge.png

Dans la contrainte L1, $ w_1 $ vaut 0, et de nombreux paramètres sont 0 de cette façon pour obtenir une solution creuse.

Ensemble de données sur les problèmes de régression

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]

Évaluation quantitative du modèle de régression

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.

la mise en oeuvre

Environnement d'exécution

Matériel

・ Processeur Intel (R) Core (TM) i7-6700K 4,00 GHz

Logiciel

・ Windows 10 Professionnel 1909 ・ Python 3.6.6 ・ Scikit-learn 0.23.0

Programme à exécuter

Le programme implémenté est publié sur GitHub.

linear_regression.py


résultat

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.

référence

1.1.1 Ordinary Least Squares 1.1.2 Ridge Regression and Classification 1.1.3 Lasso 1.1.5 Elastic-Net

  1. Robert Tibshirani. "Regression Shrinkage and Selection via the Lasso", Journal of the Royal Statistical Society: Series B (Methodological) Vol.58, No.1 (1996), p. 267-288.
  2. Hui Zou and Trevor Hastie. "Regularization and variable selection via the elastic net", Journal of the Royal Statistical Society: Series B (Statistical Methodology) Vol.67, No.2 (2005), p. 301-320.

Recommended Posts

Machine Learning: Supervision - Régression linéaire
Régression linéaire d'apprentissage automatique
Machine learning supervisé (classification / régression)
Les débutants en apprentissage automatique essaient la régression linéaire
Apprentissage automatique: analyse discriminante linéaire supervisée
Algorithme d'apprentissage automatique (généralisation de la régression linéaire)
Apprentissage automatique: supervisé - AdaBoost
Régression logistique d'apprentissage automatique
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
Apprendre avec un enseignant (retour) 1 Bases
Python: apprentissage supervisé (retour)
Algorithme d'apprentissage automatique (résumé de régression linéaire et régularisation)
EV3 x Python Machine Learning Partie 2 Régression linéaire
Comprendre l'apprentissage automatique ~ régression de crête ~.
Apprentissage automatique: forêt supervisée - aléatoire
Apprendre avec l'enseignant (retour) 2 édition avancée
Machine Learning: Supervisé - Support Vector Machine
Modèle d'empilage d'apprentissage automatique (retour)
Machine Learning: Supervisé - Arbre de décision
Algorithme d'apprentissage automatique (régression logistique)
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Apprentissage automatique
Régression linéaire
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Python: Application de l'apprentissage supervisé (retour)
Algorithme d'apprentissage automatique (analyse de régression multiple)
Algorithme d'apprentissage automatique (analyse de régression unique)
Classification et régression dans l'apprentissage automatique
<Subject> Machine learning Chapitre 3: Modèle de régression logistique
[Apprentissage automatique] Comprendre la régression linéaire simple à partir de scikit-learn et des mathématiques
Apprentissage automatique avec python (2) Analyse de régression simple
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
Apprentissage supervisé (classification)
[Memo] Apprentissage automatique
[Apprentissage automatique] Comprendre la régression multiple linéaire à partir de scikit-learn et des mathématiques
<Cours> Machine learning Chapitre 2: Modèle de régression non linéaire
Classification de l'apprentissage automatique
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
[Apprentissage automatique] Analyse de régression à l'aide de scicit learn
Exemple d'apprentissage automatique
(Apprentissage automatique) J'ai essayé de comprendre attentivement la régression linéaire bayésienne avec l'implémentation
Bases de l'apprentissage avec un enseignant Partie 1-Régression simple- (Remarque)
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
Bases de l'apprentissage avec un enseignant Partie 3-Régression multiple (mise en œuvre) - (Notes) -
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Régression linéaire avec statsmodels
Apprentissage automatique ⑤ Résumé AdaBoost
Machine de vecteur de support d'apprentissage automatique
Étudier l'apprentissage automatique ~ matplotlib ~
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Régression avec un modèle linéaire
Apprenez en quelque sorte le machine learning
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Python: apprentissage supervisé (classification)