Überanpassung bei linearer Regression
Ich fange gerade erst mit maschinellem Lernen an und habe Probleme zu verstehen, wie eine Überanpassung in einem linearen Regressionsmodell auftreten kann.
Wenn man bedenkt, dass wir nur zwei Merkmalsvariablen zum Trainieren eines Modells verwenden, wie kann eine flache Ebene möglicherweise an eine Reihe von Datenpunkten angepasst werden?
Ich gehe davon aus, dass die lineare Regression nur eine Linie verwendet, um die lineare Beziehung zwischen zwei Variablen zu beschreiben, und eine flache Ebene, um die Beziehung zwischen drei Variablen zu beschreiben. Ich habe Probleme zu verstehen (oder mir eher vorzustellen), wie eine Überanpassung in einer Linie oder einer Ebene auftreten kann.
Antworten
Bei der linearen Regression tritt eine Überanpassung auf, wenn das Modell "zu komplex" ist. Dies geschieht normalerweise, wenn im Vergleich zur Anzahl der Beobachtungen eine große Anzahl von Parametern vorhanden ist. Ein solches Modell lässt sich nicht gut auf neue Daten übertragen. Das heißt, es funktioniert gut mit Trainingsdaten, aber schlecht mit Testdaten.
Eine einfache Simulation kann dies zeigen. Hier benutze ich R:
> set.seed(2)
> N <- 4
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
>
> (m0 <- lm(Y ~ X)) %>% summary()
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.2393 1.8568 -0.129 0.909
X 1.0703 0.6780 1.579 0.255
Residual standard error: 1.516 on 2 degrees of freedom
Multiple R-squared: 0.5548, Adjusted R-squared: 0.3321
F-statistic: 2.492 on 1 and 2 DF, p-value: 0.2552
Beachten Sie, dass wir eine gute Schätzung des wahren Werts für den Koeffizienten von X erhalten. Beachten Sie das angepasste R-Quadrat von 0,3321, das ein Hinweis auf die Modellanpassung ist.
Jetzt passen wir ein quadratisches Modell an:
> (m1 <- lm(Y ~ X + I(X^2) )) %>% summary()
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -4.9893 2.7654 -1.804 0.322
X 5.8202 2.5228 2.307 0.260
I(X^2) -0.9500 0.4967 -1.913 0.307
Residual standard error: 0.9934 on 1 degrees of freedom
Multiple R-squared: 0.9044, Adjusted R-squared: 0.7133
F-statistic: 4.731 on 2 and 1 DF, p-value: 0.3092
Jetzt haben wir ein viel höheres angepasstes R-Quadrat: 0,7133, was uns zu der Annahme führen könnte, dass das Modell viel besser ist. In der Tat erhalten wir, wenn wir die Daten und den vorhergesagten Wert beider Modelle zeichnen:
> fun.linear <- function(x) { coef(m0)[1] + coef(m0)[2] * x }
> fun.quadratic <- function(x) { coef(m1)[1] + coef(m1)[2] * x + coef(m1)[3] * x^2}
>
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point() + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)
Auf den ersten Blick sieht das quadratische Modell also viel besser aus.
Wenn wir nun neue Daten simulieren, aber dasselbe Modell verwenden, um die Vorhersagen zu zeichnen, erhalten wir
> set.seed(6)
> N <- 4
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point() + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)
Offensichtlich ist das quadratische Modell nicht gut, während das lineare Modell immer noch vernünftig ist. Wenn wir jedoch mehr Daten mit einem erweiterten Bereich unter Verwendung des ursprünglichen Startwerts simulieren, sodass die anfänglichen Datenpunkte dieselben sind wie in der ersten Simulation, die wir finden:
> set.seed(2)
> N <- 10
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point() + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)
Natürlich funktioniert das lineare Modell immer noch gut, aber das quadratische Modell ist außerhalb des ursprünglichen Bereichs hoffnungslos. Dies liegt daran, dass wir bei der Anpassung der Modelle zu viele Parameter (3) im Vergleich zur Anzahl der Beobachtungen (4) hatten.
Bearbeiten: Um die Abfrage in den Kommentaren zu dieser Antwort zu einem Modell zu beantworten, das keine Begriffe höherer Ordnung enthält.
Die Situation ist dieselbe: Wenn sich die Anzahl der Parameter der Anzahl der Beobachtungen nähert, wird das Modell überpasst. Ohne Terme höherer Ordnung tritt dies auf, wenn sich die Anzahl der Variablen / Merkmale im Modell der Anzahl der Beobachtungen nähert.
Auch dies können wir mit einer Simulation leicht demonstrieren:
Hier simulieren wir zufällige Datendaten aus einer Normalverteilung, so dass wir 7 Beobachtungen und 5 Variablen / Merkmale haben:
> set.seed(1)
> n.var <- 5
> n.obs <- 7
>
> dt <- as.data.frame(matrix(rnorm(n.var * n.obs), ncol = n.var))
> dt$Y <- rnorm(nrow(dt))
>
> lm(Y ~ . , dt) %>% summary()
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.6607 0.2337 -2.827 0.216
V1 0.6999 0.1562 4.481 0.140
V2 -0.4751 0.3068 -1.549 0.365
V3 1.2683 0.3423 3.705 0.168
V4 0.3070 0.2823 1.087 0.473
V5 1.2154 0.3687 3.297 0.187
Residual standard error: 0.2227 on 1 degrees of freedom
Multiple R-squared: 0.9771, Adjusted R-squared: 0.8627
Wir erhalten ein angepasstes R-Quadrat von 0,86, was auf eine hervorragende Modellanpassung hinweist. Auf rein zufälligen Daten. Das Modell ist stark überpasst. Zum Vergleich, wenn wir die Anzahl der Beobachtungen auf 14 verdoppeln:
> set.seed(1)
> n.var <- 5
> n.obs <- 14
> dt <- as.data.frame(matrix(rnorm(n.var * n.obs), ncol = n.var))
> dt$Y <- rnorm(nrow(dt))
> lm(Y ~ . , dt) %>% summary()
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.10391 0.23512 -0.442 0.6702
V1 -0.62357 0.32421 -1.923 0.0906 .
V2 0.39835 0.27693 1.438 0.1883
V3 -0.02789 0.31347 -0.089 0.9313
V4 -0.30869 0.30628 -1.008 0.3430
V5 -0.38959 0.20767 -1.876 0.0975 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7376 on 8 degrees of freedom
Multiple R-squared: 0.4074, Adjusted R-squared: 0.03707
F-statistic: 1.1 on 5 and 8 DF, p-value: 0.4296
..adjusted R squared fällt auf nur 0,037
Eine Überanpassung tritt auf, wenn das Modell bei den Zugdaten eine gute Leistung erbringt, bei den Testdaten jedoch nicht. Dies liegt daran, dass die Best-Fit-Linie Ihres linearen Regressionsmodells keine verallgemeinerte ist. Dies kann auf verschiedene Faktoren zurückzuführen sein. Einige der häufigsten Faktoren sind
- Ausreißer in den Zugdaten.
- Zug- und Testdaten stammen aus verschiedenen Verteilungen.
Stellen Sie daher vor dem Erstellen des Modells sicher, dass Sie diese Faktoren überprüft haben, um ein verallgemeinertes Modell zu erhalten.
Große Anzahl von Parametern im Vergleich zu Datenpunkten
Im Allgemeinen besteht ein Aspekt der Überanpassung darin, "Informationen aus dem Wissen heraus zu erfinden", wenn Sie eine vergleichsweise große Anzahl von Parametern aus einer begrenzten Anzahl tatsächlicher Beweisdatenpunkte bestimmen möchten.
Für eine einfache lineare Regression y = ax + bgibt es zwei Parameter, so dass für die meisten Datensätzen wäre es unter parametrisiert, nicht overparametrised. Betrachten wir jedoch den (entarteten) Fall von nur zwei Datenpunkten. In dieser Situation finden Sie immer eine perfekte lineare Regressionslösung. Ist diese Lösung jedoch unbedingt sinnvoll? Möglicherweise nicht. Wenn Sie die lineare Regression von zwei Datenpunkten als ausreichende Lösung betrachten, wäre dies ein Paradebeispiel für eine Überanpassung.
Hier ist ein schönes Beispiel für eine Überanpassung mit einer linearen Regression von Randall Munroe von xkcd , die dieses Problem veranschaulicht: