Surajustement dans la régression linéaire

Aug 27 2020

Je ne fais que commencer avec l'apprentissage automatique et j'ai du mal à comprendre comment le surajustement peut se produire dans un modèle de régression linéaire.

Étant donné que nous n'utilisons que 2 variables de caractéristiques pour entraîner un modèle, comment un plan plat peut-il être surajusté à un ensemble de points de données?

Je suppose que la régression linéaire n'utilise qu'une ligne pour décrire la relation linéaire entre 2 variables et un plan plat pour décrire la relation entre 3 variables, j'ai du mal à comprendre (ou plutôt à imaginer) comment le surajustement dans une ligne ou un plan peut se produire?

Réponses

20 RobertLong Aug 27 2020 at 17:18

Dans la régression linéaire, le surajustement se produit lorsque le modèle est «trop complexe». Cela se produit généralement lorsqu'il y a un grand nombre de paramètres par rapport au nombre d'observations. Un tel modèle ne se généralisera pas bien aux nouvelles données. Autrement dit, il fonctionnera bien sur les données d'entraînement, mais mal sur les données de test.

Une simple simulation peut le montrer. Ici, j'utilise 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

Notez que nous obtenons une bonne estimation de la valeur réelle du coefficient de X. Notez le R-carré ajusté de 0,3321 qui est une indication de l'ajustement du modèle.

Maintenant, nous ajustons un modèle quadratique:

> (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

Nous avons maintenant un R-carré ajusté beaucoup plus élevé: 0,7133, ce qui peut nous amener à penser que le modèle est bien meilleur. En effet, si nous traçons les données et la valeur prédite des deux modèles, nous obtenons:

> 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)

Donc, à première vue, le modèle quadratique est beaucoup mieux.

Maintenant, si nous simulons de nouvelles données, mais utilisons le même modèle pour tracer les prédictions, nous obtenons

> 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)

Il est clair que le modèle quadratique ne se porte pas bien, alors que le modèle linéaire est toujours raisonnable. Cependant, si nous simulons plus de données avec une plage étendue, en utilisant la graine d'origine, de sorte que les points de données initiaux soient les mêmes que dans la première simulation, nous trouvons:

> 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)

Il est clair que le modèle linéaire fonctionne toujours bien, mais le modèle quadratique est sans espoir en dehors de la plage d'origine. En effet, lorsque nous avons ajusté les modèles, nous avions trop de paramètres (3) par rapport au nombre d'observations (4).


Modifier: pour répondre à la requête dans les commentaires de cette réponse, à propos d'un modèle qui n'inclut pas de termes d'ordre supérieur.

La situation est la même: si le nombre de paramètres se rapproche du nombre d'observations, le modèle sera surajusté. En l'absence de termes d'ordre supérieur, cela se produira lorsque le nombre de variables / caractéristiques dans le modèle s'approche du nombre d'observations.

Encore une fois, nous pouvons le démontrer facilement avec une simulation:

Ici, nous simulons des données aléatoires à partir d'une distribution normale, de sorte que nous ayons 7 observations et 5 variables / caractéristiques:

> 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 

Nous obtenons un R-carré ajusté de 0,86 qui indique un excellent ajustement du modèle. Sur des données purement aléatoires. Le modèle est gravement sur-équipé. Par comparaison si on double le nombre d'observations à 14:

> 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 au carré tombe à seulement 0,037

4 Dhanushkumar Aug 28 2020 at 00:10

Le surajustement se produit lorsque le modèle fonctionne bien sur les données du train mais ne fonctionne pas bien sur les données de test. En effet, la ligne de meilleur ajustement de votre modèle de régression linéaire n'est pas généralisée. Cela peut être dû à divers facteurs. Certains des facteurs communs sont

  • Outliers dans les données de train.
  • Les données de formation et de test proviennent de distributions différentes.

Donc, avant de créer le modèle, assurez-vous d'avoir vérifié ces facteurs pour obtenir un modèle généralisé.

2 Peteris Aug 29 2020 at 00:22

Grand nombre de paramètres par rapport aux points de données

En général, un aspect du surajustement consiste à essayer «d'inventer des informations à partir de la connaissance» lorsque vous souhaitez déterminer un nombre comparativement élevé de paramètres à partir d'une quantité limitée de points de données de preuve réels.

Pour une régression linéaire simple, y = ax + bil y a deux paramètres, donc pour la plupart des ensembles de données, elle serait sous- paramétrée, pas sur-paramétrée. Cependant, regardons le cas (dégénéré) de seulement deux points de données. Dans cette situation, vous pouvez toujours trouver une solution de régression linéaire parfaite - cependant, cette solution est-elle nécessairement significative? Peut-être pas. Si vous considérez la régression linéaire de deux points de données comme une solution suffisante, ce serait un excellent exemple de surajustement.

Voici un bel exemple de surajustement avec une régression linéaire par Randall Munroe de renommée xkcd qui illustre ce problème: