[PYTHON] Ridge et Lasso

Bonjour. Hier, j'ai parlé de la méthode typique du carré minimum (MCO), qui est un modèle typique de régression linéaire. Cette fois, j'écrirai sur la régression Ridge et la régression Lasso.

Préparation

La régression avec un modèle linéaire utilise littéralement une fonction linéaire pour prédire la variable objective. Et la variable objective pourrait être exprimée par la formule suivante.

y' = w_1x_1 + w_2x_2 + \dots + w_mx_m (x_1, x_2, \dots, x_m:Variable explicative, y':Valeur prédite, w_1,w_2, \dots, w_m :Coefficient de régression)

Si vous l'écrivez avec la section ajoutée,

y' = w_0x_0 + w_1x_1 + w_2x_2 + \dots + w_mx_m (w_0,Section: x_0 = 1)

Lorsqu'il est écrit en vecteur,

y' = {\bf x^T}{\bf w}

Puisqu'il n'y a pas toujours un seul vecteur (variable explicative) de x, x se présente sous la forme d'une matrice. En d'autres termes

\left(
    \begin{array}{cccc}
      y_{1} \\
      y_{2} \\
      y_{3} \\
      \vdots \\
      y_{n}
      
    \end{array}
  \right)
  
= \left(
    \begin{array}{cccc}
      1 & x_{11} & x_{21} & \ldots & x_{m1} \\
      1 & x_{12} & x_{22} & \ldots & x_{m2} \\
      \vdots & \vdots & \vdots & \ddots & \vdots \\
      1 & x_{1n} & x_{2n} & \ldots & x_{mn}
    \end{array}
  \right)
\left(
    \begin{array}{cccc}
      w_{1} \\
      w_{2} \\
      w_{3} \\
      \vdots \\
      w_{m}
      
    \end{array}
  \right)
\\
y = {\bf Xw} \dots (1)

Méthode du carré minimum

L = \sum_{i=1}^{n}(y_i - y'_i)^2 

Les paramètres sont déterminés de manière à minimiser cette fonction de perte (erreur) L. Je vais omettre une explication détaillée, mais si vous transformez cette équation et utilisez l'équation (1)

L = (y - {\bf Xw})^{T}(y - {\bf Xw})

Peut être écrit.

C'est la méthode des moindres carrés. Cependant, avec cette formule, le paramètre ** w ** devient grand, ce qui facilite le surapprentissage.

Ce L plus le ** terme de normalisation ** est la régression Ridge et Lasso décrite ci-dessous.

Lorsqu'il est écrit dans une formule

L = (y - {\bf Xw})^{T}(y - {\bf Xw}) + a \times (L_norme p)

a est appelé un paramètre élevé et est un scalaire pour contrôler la force de la normalisation. En d'autres termes, plus il est grand, plus la normalisation peut être forte. Cependant, s'il est trop fort, cela entraînera une conformité insuffisante, alors soyez prudent.

ici Régression ** Lasso ** pour la norme L1 Pour la norme L2, il s'agit d'une régression ** Ridge **. C'est plus intéressant.

Pour les normes L1 et L2, ici

Tout simplement La norme L1 est appelée la ** distance de Manhattan ** et est la somme des valeurs absolues des différences entre les composantes vectorielles. La norme L2 est appelée la ** distance euclidienne ** et est la racine carrée de la somme des carrés des différences entre les composantes vectorielles.

Retour de crête

La régression Ridge est l'une des régressions du modèle linéaire. Comme mentionné ci-dessus, la régression de crête a une racine carrée pour la normalisation, de sorte que chaque composante du paramètre ** w ** peut être lissée dans son ensemble. Raison, Dans l'itinéraire, il est plus facile de minimiser le plus grand nombre plus proche de 0.

Si vous écrivez dans des formules mathématiques

L = (y - {\bf Xw})^{T}(y - {\bf Xw}) + a ||{\bf w}||_2^2

Retour au lasso

La régression au lasso est également l'une des régressions utilisant un modèle linéaire. Étant donné que la partie du terme de régularisation de la régression Lasso n'est que la somme des valeurs absolues, certaines variables sont souvent 0. Si vous écrivez dans des formules mathématiques

L = \frac{1}{2}(y - {\bf Xw})^{T}(y - {\bf Xw}) + a ||{\bf w}||_1

Résumé

Les mathématiques sont vraiment difficiles, n'est-ce pas? J'ai aussi quelques places. Mais la chose la plus importante à dire est La différence entre les régressions Lasso et Ridge est ** la différence entre les normes L1 et L2 **. Si vous maintenez les normes L1 et L2 enfoncées, vous pouvez voir les caractéristiques de chaque régression. Je n'ai pas encore assez étudié, mais je ferai de mon mieux ...

Postscript (exemple de code)


from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split

import mglearn
import numpy as np
import matplotlib.pyplot as plt


X, y = mglearn.datasets.make_wave(n_samples=40)
x_for_graph = np.linspace(-3, 3, 100)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

ridge = Ridge().fit(X_train, y_train)
lasso = Lasso().fit(X_train, y_train)

fig, ax = plt.subplots()

ax.scatter(X_train, y_train, marker='o')

ax.plot(x_for_graph, ridge.coef_ * x_for_graph + ridge.intercept_, label='Ridge')
ax.plot(x_for_graph, lasso.coef_ * x_for_graph + lasso.intercept_, label='Lasso')

ax.legend(loc='best')

print("Training set score for Ridge: {:.2f}".format(ridge.score(X_train, y_train)))
print("test set score: {:.2f}".format(ridge.score(X_test, y_test)))

print("Training set score for Lasso: {:.2f}".format(lasso.score(X_train, y_train)))
print("test set score: {:.2f}".format(lasso.score(X_test, y_test)))
plt.show()

résultat Figure_1.png

Training set score for Ridge: 0.69
test set score: 0.64
Training set score for Lasso: 0.40
test set score: 0.55

Il y a trop peu de variables dans les données. .. .. Lol

Recommended Posts

Ridge et Lasso
Différence entre la régression linéaire, la régression Ridge et la régression Lasso
Calcul d'estimation / prédiction au Lasso et Ridge du modèle linéaire généralisé
Comprendre et mettre en œuvre la régression des crêtes (régularisation L2)
À propos de _ et __