(Por que) os modelos superalimentados tendem a ter grandes coeficientes?

33

Imagino que quanto maior o coeficiente de uma variável, maior a capacidade do modelo de "girar" nessa dimensão, proporcionando uma oportunidade maior de ajustar o ruído. Embora eu ache que tenho um senso razoável da relação entre a variação no modelo e os coeficientes grandes, não tenho uma noção tão boa do por que eles ocorrem em modelos com excesso de ajuste. É incorreto dizer que eles são um sintoma de sobreajuste e que o encolhimento por coeficiente é mais uma técnica para reduzir a variação no modelo? A regularização por meio de retração de coeficiente parece operar com o princípio de que coeficientes grandes são o resultado de um modelo com excesso de ajuste, mas talvez eu esteja interpretando mal a motivação por trás da técnica.

Minha intuição de que grandes coeficientes são geralmente um sintoma de sobreajuste vem do seguinte exemplo:

Digamos que queríamos ajustar n pontos que estão todos no eixo x. Podemos facilmente construir um polinômio cujas soluções são os seguintes pontos: f(x)=(x-x1)(x-x2)....(x-xn-1)(x-xn) . Digamos que nossos pontos estejam em x=1,2,3,4. Esta técnica fornece todos os coeficientes> = 10 (exceto um coeficiente). À medida que adicionamos mais pontos (e, portanto, aumentamos o grau do polinômio), a magnitude desses coeficientes aumentará rapidamente.

Este exemplo é como atualmente estou conectando o tamanho dos coeficientes do modelo à "complexidade" dos modelos gerados, mas estou preocupado que este caso seja estéril para realmente ser um indicativo do comportamento do mundo real. Eu construí deliberadamente um modelo com excesso de ajustes (um OLS polinomial de 10º que se encaixa nos dados gerados a partir de um modelo de amostragem quadrática) e fiquei surpreso ao ver principalmente pequenos coeficientes no meu modelo:

set.seed(123)
xv = seq(-5,15,length.out=1e4)
x=sample(xv,20)
gen=function(v){v^2 + 7*rnorm(length(v))}
y=gen(x)
df = data.frame(x,y)

model = lm(y~poly(x,10,raw=T), data=df)
summary(abs(model$coefficients))
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
# 0.000001 0.003666 0.172400 1.469000 1.776000 5.957000


data.frame(sort(abs(model$coefficients)))
#                                   model.coefficients
# poly(x, 10, raw = T)10                  7.118668e-07
# poly(x, 10, raw = T)9                   3.816941e-05
# poly(x, 10, raw = T)8                   7.675023e-04
# poly(x, 10, raw = T)7                   6.565424e-03
# poly(x, 10, raw = T)6                   1.070573e-02
# poly(x, 10, raw = T)5                   1.723969e-01
# poly(x, 10, raw = T)3                   6.341401e-01
# poly(x, 10, raw = T)4                   8.007111e-01
# poly(x, 10, raw = T)1                   2.751109e+00
# poly(x, 10, raw = T)2                   5.830923e+00
# (Intercept)                             5.956870e+00

Talvez a conclusão deste exemplo seja que dois terços dos coeficientes são menores que 1 e, em relação aos outros coeficientes , existem três coeficientes extraordinariamente grandes (e as variáveis ​​associadas a esses coeficientes também são as mais próximas relacionados ao verdadeiro modelo de amostragem).

A regularização (L2) é apenas um mecanismo para diminuir a variação de um modelo e, assim, "suavizar" a curva para melhor se ajustar aos dados futuros, ou está tirando proveito de uma heurística derivada da observação de que modelos superdotados tendem a exibir grandes coeficientes? É uma afirmação precisa de que os modelos superalimentados tendem a exibir grandes coeficientes? Nesse caso, alguém talvez possa explicar um pouco o mecanismo por trás do fenômeno e / ou me direcionar para alguma literatura?

David Marx
fonte
4
O que exatamente você quer dizer com coeficiente "grande"? Afinal, se apenas mudarmos as unidades nas quais expressamos a variável dependente (como de parsecs para femtômetros), podemos tornar os coeficientes arbitrariamente grandes ou pequenos em valor.
whuber
1
Eu não tenho uma boa resposta para isso. Meu entendimento era que atacar coeficientes "grandes" era uma heurística motivadora por trás da regularização de L2. Mas aumentar sinteticamente a magnitude dos coeficientes exigiria também a alteração da constante de regularização para compensar a magnitude diferente no modelo agora, não é? Eu não acho que a noção de "grande" aqui seja tão ambígua como você está fazendo parecer, mesmo que eu não possa caracterizá-la muito bem.
David Marx
@ DavidMarx: Eu não acho que a regularização de L2 persiga coeficientes "grandes", não é? Em vez disso, tende a empurrar coeficientes que provavelmente não eram comparativamente grandes a zero, em certo sentido, forçando você a escolher, em vez de encontrar um compromisso entre os dois.
Wayne
@wayne ah, acho que tive isso ao contrário. Eu tinha pensado que reduziu os coeficientes maiores ou reduziu todos os coeficientes proporcionalmente. Isso faria mais sentido se a regularização de L2 empurrasse as variáveis ​​com coeficientes menores para fora do modelo.
David Marx
1
Após 8 edições, acho que tenho a minha resposta em baixo. Sheesh.
Hong Ooi

Respostas:

15

No contexto da regularização, um coeficiente "grande" significa que a magnitude da estimativa é maior do que teria sido se uma especificação de modelo fixo tivesse sido usada. É o impacto de obter não apenas as estimativas, mas também a especificação do modelo, a partir dos dados.

Considere o que um procedimento como a regressão gradual fará para uma determinada variável. Se a estimativa de seu coeficiente for pequena em relação ao erro padrão, ela será descartada do modelo. Isso pode ocorrer porque o valor verdadeiro é realmente pequeno ou simplesmente devido a um erro aleatório (ou uma combinação dos dois). Se cair, não prestamos mais atenção. Por outro lado, se a estimativa for grande em relação ao seu erro padrão, ela será retida. Observe o desequilíbrio: nosso modelo final rejeitará uma variável quando a estimativa do coeficiente for pequena, mas a manteremos quando a estimativa for grande. Portanto, é provável que superestimemos seu valor.

Em outras palavras, o que significa excesso de ajuste é que você está exagerando o impacto de um determinado conjunto de preditores na resposta. Mas a única maneira de superestimar o impacto é se os coeficientes estimados forem muito grandes (e, inversamente, as estimativas para seus preditores excluídos são muito pequenas).

O que você deve fazer é incorporar ao seu experimento um procedimento de seleção de variáveis, por exemplo, regressão passo a passo step. Em seguida, repita seu experimento várias vezes, em diferentes amostras aleatórias e salve as estimativas. Você deve achar que todas as estimativas dos coeficientes a β 10β3β10 são sistematicamente grandes demais, quando comparadas com a não seleção de variáveis. Os procedimentos de regularização visam corrigir ou mitigar esse problema.

Aqui está um exemplo do que estou falando.

repeat.exp <- function(M)
{
    x <- seq(-2, 2, len=25)
    px <- poly(x, 10)
    colnames(px) <- paste0("x", 1:10)
    out <- setNames(rep(NA, 11), c("(Intercept)", colnames(px)))
    sapply(1:M, function(...) {
        y <- x^2 + rnorm(N, s=2)
        d <- data.frame(px, y)
        b <- coef(step(lm(y ~ x1, data=d), y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10, trace=0))
        out[names(b)] <- b
        out
    })
}

set.seed(53520)
z <- repeat.exp(M=1000)

# some time later...
rowMeans(abs(z), na.rm=TRUE)

(Intercept)          x1          x2          x3          x4          x5          x6          x7          x8          x9         x10 
   1.453553    3.162100    6.533642    3.108974    3.204341    3.131208    3.118276    3.217231    3.293691    3.149520    3.073062 

Compare isso com o que acontece quando você não usa a seleção de variáveis ​​e apenas encaixa tudo às cegas. Embora ainda exista algum erro nas estimativas de a β 10β3β10 , o desvio médio é muito menor.

repeat.exp.base <- function(M)
{
    x <- seq(-2, 2, len=25)
    px <- poly(x, 10)
    colnames(px) <- paste0("x", 1:10)
    out <- setNames(rep(NA, 11), c("(Intercept)", colnames(px)))
    sapply(1:M, function(...) {
        y <- x^2 + rnorm(N, s=2)
        d <- data.frame(px, y)
        b <- coef(lm(y ~ ., data=d))
        out[names(b)] <- b
        out
    })
}

set.seed(53520)
z2 <- repeat.exp.base(M=1000)

rowMeans(abs(z2))
(Intercept)          x1          x2          x3          x4          x5          x6          x7          x8          x9         x10 
   1.453553    1.676066    6.400629    1.589061    1.648441    1.584861    1.611819    1.607720    1.656267    1.583362    1.556168 

β1β2

Hong Ooi
fonte
Estou um pouco confuso com o seu exemplo modificado. Você diz que "Você deve achar que todas as estimativas dos coeficientes β3 a β10 são sistematicamente muito grandes, quando comparadas à não utilização da seleção de variáveis", mas parece que você obteve valores maiores no seu primeiro experimento (com step) do que no seu segundo experimento (valores de ajuste "cegos"). Isso não é contrário ao que você estava sugerindo que deveria acontecer?
David Marx
Além disso, você e outras pessoas aqui sugeriram que eu deveria padronizar as variáveis ​​no meu exemplo. Eu vejo o raciocínio, mas não conheço uma boa maneira de fazer isso. Devo aprimorar meus dados de amostra para incluir colunas para cada potência de X e padronizar esses valores? Ou existe uma maneira de padronizar as variáveis ​​diretamente na fórmula do modelo em que chamo poly(acho que não)?
David Marx
? Você obtém desvios absolutos maiores ao usar stepwise, comparado a não usar stepwise. Não tenho certeza do que você está perguntando. Quanto à padronização: é desnecessário se você fizer como eu publiquei, ou seja, fazer uma comparação entre a abordagem passo a passo e não passo a passo. Cada variável está sendo comparada de um tratamento para o outro, e não para as outras variáveis.
Hong Ooi
6

Uma resposta muito simples, sem examinar seus detalhes: quando você está ajustando demais, os estimadores de parâmetros tendem a obter grandes variações e, com grandes variações, grandes valores são exatamente o que você deve esperar!

kjetil b halvorsen
fonte
Se eu entendi corretamente, isso explicaria por que o modelo preveria valores "grandes", não por que o modelo seria composto por coeficientes "grandes".
David Marx
Não, isso está errado! Pelo menos alguns dos estimadores de coeficientes individuais terão grandes variações, portanto os valores estimados desses coeficientes tenderão a ser grandes. (de nossa parte, mesmo quando sobreajuste, alguns coeficientes podem ser estáveis, mas não todos). Além disso, para manter a propriedade de imparcialidade da previsão, haverá grandes covariâncias negativas entre os estimadores de coeficientes independentes.
Kjetil b halvorsen
1
Isso não responde totalmente à pergunta, no entanto. Se fosse apenas um problema de grandes variações, você obteria pequenas estimativas com a mesma frequência que as grandes (informalmente). O problema é quando assumimos que pequenas estimativas (relativas a seus erros padrão) são "sem importância" e eliminamos essas variáveis ​​do modelo. Como resultado, as únicas estimativas restantes serão as grandes.
Hong Ooi 14/07/2013
0

David. Acho que o problema com o seu exemplo é que você não normalizou seus dados (ou seja, X ^ 10 >> X.

Então, David está certo que diminui ainda mais os coeficientes maiores (para que você possa acabar com muitos coeficientes pequenos, enquanto a regularização L1 pode fornecer um grande e o restante zero)

então basicamente está encapsulando que pequenas mudanças devem ter pequenos efeitos (e, é claro, voltamos à questão de quão pequena é pequena - normalizando seus dados etc.). Mas o principal está nas dimensões mais altas, nas quais a correlação entra em jogo: imagine que você tem duas variáveis ​​x, y que são altamente correlacionadas (ambas normalizadas para a variação 1), então a diferença delas será pequena = "ruído" - penalizando grandes pesos, portanto, evite que você se ajuste a esse ruído (e obtenha coeficientes de cancelamento quase muito grandes para y e x).

O exemplo ainda vale para qualquer relação linear (y = mx)

procure regressão de cume

seanv507
fonte
1
david por que você não refaz o exemplo normalizando todas as variáveis ​​x, x ^ 2, ..., x ^ n para zero média e desvio padrão 1 e depois vê os resultados obtidos ... não é de surpreender que o seu coeficientes são pequenos quando suas variáveis de entrada são grandes
seanv507
0

demonstração de sobreajuste

Esta imagem é da minha anotação do curso de DL de Andrew Ng, por favor me avise se você tiver alguma dúvida

Pradi KL
fonte
1
Você poderia explicar por que você acha que esta nota sobre regularização de redes neurais responde à pergunta sobre tamanhos de coeficientes e ajuste excessivo?
whuber
todos os 3 estão sobreajustados, é exatamente o que a regularização tenta impedir e tenta penalizar o coeficiente alto devido à razão acima
Pradi KL