Verstehen Sie lineare Regression, Ridge-Regression, LASSO und Elastic-Net mit mathematischen Formeln und implementieren Sie sie mit scicit-learn.
Es wird davon ausgegangen, dass Sie bereits Differentialintegration, lineare Algebra und Statistik gelernt haben.
Regression ist die Vorhersage des Werts einer oder mehrerer Zielvariablen $ y $ aus einem Eingabewert, der aus einer oder mehreren erklärenden Variablen $ x $ besteht.
Betrachten Sie zunächst eine einfache Regression mit einer erklärenden Variablen $ x $ und einer objektiven Variablen $ y $. Unter der Annahme, dass die Parameter $ a und b $ sind, kann der geschätzte Wert $ \ hat {y} $ durch eine lineare Funktion wie folgt ausgedrückt werden.
\hat{y} = a x + b
Im Regressionsproblem werden $ a und b $ angepasst, um $ y $ vorherzusagen, daher streben wir an, dass die Differenz zwischen $ \ hat {y} $ und $ y $ Null ist.
Das erste, was mir in den Sinn kommt, ist der Unterschied
Daher kann die zu lösende Formel wie folgt ausgedrückt werden. Wobei $ n $ die Gesamtzahl der Daten darstellt.
L = \sum^n_{i=1} \{y_i - (ax_i + b) \}^2
Wir wollen den Mindestwert von $ L $ finden, also unterscheiden wir ihn durch $ a und 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}
Das Lösen der Differentiale für $ a und b $ als 0 ergibt die folgenden simultanen Gleichungen.
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
Ich werde das lösen. Wenn Sie die folgende Formel für $ b $ transformieren,
b = \frac{1}{n} \sum^n_{i=1}y_i - a \frac{1}{n} \sum^n_{i=1} x_i
Hier,
\frac{1}{n} \sum^n_{i=1}y_i = \bar{y}, \frac{1}{n} \sum^n_{i=1} x_i = \bar{x}
Wenn du sagst
b = \bar{y} - a \bar{x}
Teilen Sie dann den anderen Ausdruck durch $ n $ und ersetzen Sie ihn
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 }
Hier können der Nenner und das Molekül wie folgt transformiert werden.
\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}
Deshalb,
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]}
Dabei steht $ Cov [x, y] $ für Kovarianz und $ \ mathbb {V} [x] $ für Varianz. Daher wurde gefunden, dass die einfache Regression durch die folgende Formel erhalten werden kann.
y = \frac{Cov[x, y]}{\mathbb{V}[x]} x + \left( \bar{y} - \frac{Cov[x, y]}{\mathbb{V}[x]} \bar{x} \right)
Betrachten Sie als nächstes mehrere Regressionen mit zwei oder mehr erklärenden Variablen. Wenn die erklärende Variable $ x = (x_1, x_2, ..., x_m) $, die Zielvariable $ y $ und der Parameter $ w = (w_0, w_1, ..., w_m) $ ist, ist der geschätzte Wert $ \ hat { y} $ kann wie folgt ausgedrückt werden.
\hat{y}(w, x) = w_0 + w_1x_1 + \cdots + w_mx_m
$ w_0 $ repräsentiert den Abschnitt $ b $ in einfacher Regression, und durch Einführung der pseudo-erklärenden Variablen $ x_0 = 1 $, die $ w_0 $ entspricht, kann die obige Gleichung durch einen Vektor dargestellt werden.
\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}
Da $ x $ für die Anzahl der Daten $ n $ existiert, verwenden wir die Matrix $ \ bf {X} $ für die Zeilenrichtung als Anzahl der Daten und die Spaltenrichtung als erklärende Variablen.
\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}
Ermitteln Sie den Mindestwert für den Parameter $ w $ mithilfe der Methode der kleinsten Quadrate wie bei der einfachen Regression. Die fettgedruckte Notation wird der Einfachheit halber gestoppt.
\min_w || Xw - y ||^2
Wenn dies transformiert wird,
\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}
Wenn Sie also nach $ w $ differenzieren und 0 finden,
\frac{\partial L}{\partial w} = 2X^TXw - 2X^Ty = 0 \\
w = (X^TX)^{-1}X^Ty
Daher haben wir festgestellt, dass der Parameter $ w $ aus den Daten erhalten werden kann. Wenn jedoch $ X ^ TX $ keine inverse Matrix hat, kann keine Lösung bestimmt werden.
Die Ridge-Regression ist eine lineare Regression plus ein L2-Term für den Parameter $ w $. Die zu lösende Formel lautet wie folgt.
\min_w ||Xw - y||^2 + \alpha||w||^2_2
Wenn dies in Bezug auf $ w $ differenziert und als 0 gelöst wird,
\frac{\partial L}{\partial w} = 2X^TXw - 2X^Ty + 2 \alpha w = 0 \\
w = (X^TX + \alpha I)^{-1} X^T y
Wobei $ I $ eine Einheitsmatrix darstellt.
In der linearen Regression war es nicht möglich, eine Lösung zu bestimmen, wenn $ X ^ TX $ keine inverse Matrix hatte, aber in der Ridge-Regression kann die Hinzufügung des L2-Terms garantieren, dass es eine inverse Matrix hat.
Eine inverse Matrix wird als Regelmäßigkeit bezeichnet, und sie wird als Regularisierung bezeichnet, da sie durch Hinzufügen des L2-Terms immer eine inverse Matrix aufweist.
Das Hinzufügen eines L2-Terms für den Parameter $ w $ wird auch als Gewichtsdämpfung bezeichnet. Um den Effekt zu sehen, berechnen wir hier ein konkretes Beispiel. Da der L2-Term nur für den Realteil $ (X ^ TX + \ alpha I) ^ {-1} $ funktioniert, betrachten Sie den Fall, in dem zwei erklärende Variablen wie folgt erhalten werden. Die erste Spalte entspricht dem Abschnitt, ist also eine pseudo-erklärende Variable.
X =
\begin{pmatrix}
1 & 2 & 3 \\
1 & 4 & 5 \\
1 & 3 & 2 \\
\end{pmatrix}
Zu diesem Zeitpunkt wird $ X ^ TX $ wie folgt erhalten und die inverse Matrix ist wie folgt.
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}
Wenn hier der Koeffizient des L2-Terms $ \ alpha = 1 $ ist (die erste Zeile und die erste Spalte sind pseudo-erklärende Variablen, also 0).
\alpha I =
\begin{pmatrix}
0 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{pmatrix}
Zu $ 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}
Sie sehen, dass der Wert sicherlich kleiner ist und das Gewicht dämpft.
LASSO Die lineare Regression plus der L1-Term für den Parameter $ w $ heißt LASSO (Least Absolute Shrinkage and Selection Operator) [1]. Die zu lösende Formel lautet wie folgt.
\min_w \frac{1}{2}|| Xw - y ||^2 + \alpha ||w||_1
Da die obige Formel absolute Werte enthält, müssen Fälle getrennt werden. Denken wir also zuerst an $ w_0 $.
In Anbetracht dessen, dass die Regularisierung für Abschnitt $ w_0 $ nicht funktioniert
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
Wenn $ L_0 $ wie zuvor in Bezug auf $ w_0 $ differenziert und als 0 gelöst wird,
\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)
Als nächstes betrachten wir $ w_1, ..., w_m $. Da es absolute Werte enthält, wird es für $ w_k $ in rechte und linke Differentiale unterteilt.
\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
Wenn Sie es wie zuvor als 0 lösen,
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.
Es wird sein. $ W_k $ in der obigen Formel hat jedoch eine Bedingung, und wenn die Bedingung nicht erfüllt ist, wird $ w_k $ auf 0 gesetzt.
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.
Sie können eine weiche Schwellenwertfunktion auch wie folgt definieren:
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 in Scikit-Learn wird durch die Koordinatenabstiegsmethode implementiert. Bei der Methode des Koordinatenabfalls wird eine ungefähre Lösung erhalten, indem die erklärende Variable durch 0 ersetzt und die Funktion für den weichen Schwellenwert nacheinander auf alle erklärenden Variablen angewendet wird.
LASSO erhält eine spärliche Darstellung und Auswahl von Merkmalen, indem viele der Parameter auf 0 gesetzt werden. Wenn jedoch die Anzahl der Daten $ n $ kleiner als die erklärende Variable $ m $ ($ n <m $) ist, bis zur Anzahl der Daten. Es ist zu beachten, dass nur Funktionen ausgewählt werden können.
Wenn eine hohe Korrelation zwischen den erklärenden Variablen besteht, wird nur eine davon ausgewählt. Daher wird empfohlen, die erklärenden Variablen unkorreliert zu machen und die Eingabemerkmale auf durchschnittlich 0 und für die Varianz auf 1 zu standardisieren.
Elastic-Net Die lineare Regression plus die Terme L1 und L2 für die Parameter heißt Elastic-Net [2]. Die zu lösende Formel lautet wie folgt.
\min_w \frac{1}{2}||Xw - y||^2 + \alpha \rho ||w||_1 + \frac{\alpha(1 - \rho)}{2} ||w||^2_2
Elastic-Net verbessert die Mängel von LASSO durch Hinzufügen eines L2-Terms sowie eines L1-Terms.
Elastic-Net in Scikit-Learn wird durch die Koordinatenabstiegsmethode wie LASSO implementiert.
Die folgende Abbildung zeigt die orangefarbene Ellipse mit zwei erklärenden Variablen.
In der L1-Einschränkung ist $ w_1 $ 0, und viele der Parameter sind auf diese Weise 0, um eine spärliche Lösung zu erhalten.
Da scikit-learn einen Diabates-Datensatz als Datensatz für Regressionsprobleme bereitstellt, werden wir ihn verwenden.
Die Anzahl der Daten | Anzahl der Funktionen | Zielwert |
---|---|---|
442 | 10 | [25, 346] |
Quantitative Bewertungen von Regressionsmodellen umfassen den mittleren quadratischen Fehler und den R2-Score.
Mean Squared Error Der mittlere quadratische Fehler (MSE) ermittelt den durchschnittlichen quadratischen Fehler zwischen $ \ hat {y} $ und den Testdaten $ y $, die unter Verwendung von Parametern vorhergesagt wurden, die aus Trainingsdaten geschätzt wurden.
MSE = \frac{1}{n} \sum^n_{i=1} (y_i - \hat{y}_i)^2
Je kleiner die MSE ist, desto genauer ist das Modell.
R2 Score Der R2-Score (Bestimmungskoeffizient) gibt an, wie gut die erklärenden Variablen die Zielvariable erklären. Unter der Annahme, dass der unter Verwendung der aus den Trainingsdaten geschätzten Parametern vorhergesagte Wert $ \ hat {y} $ und der Wert der Testdaten $ y $ ist, kann der R2-Wert aus der folgenden Formel berechnet werden.
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
Der R2-Score hat den Wert [0, 1]. Je näher er an 1 liegt, desto genauer ist das Modell.
・ CPU Intel (R) Core (TM) i7-6700K 4,00 GHz
・ Windows 10 Pro 1909 ・ Python 3.6.6 ・ Scikit-Learn 0.23.0
Das implementierte Programm wird auf [GitHub] veröffentlicht (https://github.com/sho-watari/MachineLearning/blob/master/Supervised/linear_regression.py).
linear_regression.py
Das Ausführungsergebnis ist wie folgt.
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
Von diesen scheint Elastic-Net genauer zu sein als die anderen Modelle.
1.1.1 Ordinary Least Squares 1.1.2 Ridge Regression and Classification 1.1.3 Lasso 1.1.5 Elastic-Net
Recommended Posts