Overfitting em regressão linear

Aug 27 2020

Estou apenas começando com o aprendizado de máquina e não consigo entender como o overfitting pode acontecer em um modelo de regressão linear.

Considerando que usamos apenas 2 variáveis ​​de recursos para treinar um modelo, como um plano plano pode ser super ajustado a um conjunto de pontos de dados?

Eu suponho que a regressão linear usa apenas uma linha para descrever a relação linear entre 2 variáveis ​​e um plano plano para descrever a relação entre 3 variáveis. Tenho dificuldade em entender (ou melhor, imaginar) como o overfitting em uma linha ou plano pode acontecer?

Respostas

20 RobertLong Aug 27 2020 at 17:18

Na regressão linear, o overfitting ocorre quando o modelo é "muito complexo". Isso geralmente acontece quando há um grande número de parâmetros em comparação com o número de observações. Esse modelo não generalizará bem para novos dados. Ou seja, ele terá um bom desempenho nos dados de treinamento, mas pouco nos dados de teste.

Uma simulação simples pode mostrar isso. Aqui eu uso 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

Observe que obtemos uma boa estimativa do valor verdadeiro para o coeficiente de X. Observe o R-quadrado ajustado de 0,3321 que é uma indicação do ajuste do modelo.

Agora ajustamos um modelo quadrático:

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

Agora temos um R-quadrado ajustado muito maior: 0,7133 o que pode nos levar a pensar que o modelo é muito melhor. Na verdade, se plotarmos os dados e o valor previsto de ambos os modelos, obteremos:

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

Portanto, à primeira vista, o modelo quadrático parece muito melhor.

Agora, se simularmos novos dados, mas usarmos o mesmo modelo para plotar as previsões, obteremos

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

Claramente, o modelo quadrático não está indo bem, enquanto o modelo linear ainda é razoável. No entanto, se simularmos mais dados com um intervalo estendido, usando a semente original, de modo que os pontos de dados iniciais sejam os mesmos da primeira simulação, encontramos:

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

Claramente, o modelo linear ainda tem um bom desempenho, mas o modelo quadrático é inútil fora da faixa original. Isso ocorre porque quando ajustamos os modelos, tínhamos muitos parâmetros (3) em comparação com o número de observações (4).


Editar: Para abordar a consulta nos comentários a esta resposta, sobre um modelo que não inclui termos de ordem superior.

A situação é a mesma: se o número de parâmetros se aproximar do número de observações, o modelo será sobreajustado. Sem termos de ordem superior, isso ocorrerá quando o número de variáveis ​​/ recursos no modelo se aproximar do número de observações.

Novamente, podemos demonstrar isso facilmente com uma simulação:

Aqui, simulamos dados de dados aleatórios de uma distribuição normal, de modo que temos 7 observações e 5 variáveis ​​/ recursos:

> 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 

Obtemos um R-quadrado ajustado de 0,86, o que indica um excelente ajuste do modelo. Em dados puramente aleatórios. O modelo está extremamente ajustado. Em comparação, se dobrarmos o número de observações para 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

..R quadrado ajustado cai para apenas 0,037

4 Dhanushkumar Aug 28 2020 at 00:10

O overfitting acontece quando o modelo tem um bom desempenho nos dados do trem, mas não nos dados de teste. Isso ocorre porque a linha de melhor ajuste por seu modelo de regressão linear não é generalizada. Isso pode ser devido a vários fatores. Alguns dos fatores comuns são

  • Outliers nos dados do trem.
  • Os dados de trem e teste são de distribuições diferentes.

Portanto, antes de construir o modelo, certifique-se de verificar esses fatores para obter um modelo generalizado.

2 Peteris Aug 29 2020 at 00:22

Grande número de parâmetros em comparação com pontos de dados

Em geral, um aspecto do overfitting é tentar "inventar informações a partir do conhecimento", quando você deseja determinar um número comparativamente grande de parâmetros a partir de uma quantidade limitada de pontos de dados de evidência reais.

Para uma regressão linear simples y = ax + b, existem dois parâmetros, portanto, para a maioria dos conjuntos de dados que seria sob parametrizado, não overparametrised. No entanto, vamos examinar o caso (degenerado) de apenas dois pontos de dados. Nessa situação, você sempre pode encontrar uma solução de regressão linear perfeita - no entanto, essa solução é necessariamente significativa? Possivelmente não. Se você tratar a regressão linear de dois pontos de dados como uma solução suficiente, isso seria um excelente exemplo de sobreajuste.

Aqui está um bom exemplo de overfitting com uma regressão linear de Randall Munroe da fama xkcd que ilustra esse problema: