41 votos

(¿Por qué) los modelos sobreajustados tienden a tener coeficientes grandes?

Imagino que cuanto mayor es el coeficiente de una variable, más capacidad tiene el modelo de "oscilar" en esa dimensión, lo que proporciona una mayor oportunidad de ajustar el ruido. Aunque creo que tengo una idea razonable de la relación entre la varianza del modelo y los coeficientes grandes, no tengo una idea tan clara de por qué se producen en los modelos de sobreajuste. ¿Es incorrecto decir que son un síntoma de sobreajuste y que la reducción de coeficientes es más bien una técnica para reducir la varianza del modelo? La regularización a través de la reducción de coeficientes parece funcionar según el principio de que los coeficientes grandes son el resultado de un modelo sobreajustado, pero quizás estoy interpretando mal la motivación de la técnica.

Mi intuición de que los coeficientes grandes suelen ser un síntoma de sobreajuste proviene del siguiente ejemplo:

Digamos que queremos encajar $n$ puntos que se sitúan en el eje x. Podemos construir fácilmente un polinomio cuyas soluciones son estos puntos: $f(x) = (x-x_1)(x-x_2)....(x-x_{n-1})(x-x_n)$ . Digamos que nuestros puntos están en $x=1,2,3,4$ . Esta técnica da todos los coeficientes >= 10 (excepto un coeficiente). A medida que añadimos más puntos (y por tanto aumentamos el grado del polinomio) la magnitud de estos coeficientes aumentará rápidamente.

Este ejemplo es la forma en que actualmente estoy conectando el tamaño de los coeficientes del modelo con la "complejidad" de los modelos generados, pero me preocupa que este caso sea demasiado estéril para ser realmente indicativo del comportamiento del mundo real. Construí deliberadamente un modelo sobreajustado (un ajuste OLS polinómico de 10º grado sobre datos generados a partir de un modelo de muestreo cuadrático) y me sorprendió ver coeficientes mayoritariamente pequeños en mi 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

Tal vez la conclusión de este ejemplo sea que dos tercios de los coeficientes son inferiores a 1, y en relación con los demás coeficientes En el caso de la muestra, hay tres coeficientes que son inusualmente grandes (y las variables asociadas a estos coeficientes también resultan ser las más relacionadas con el verdadero modelo de muestreo).

¿Es la regularización (L2) sólo un mecanismo para disminuir la varianza de un modelo y, por tanto, "suavizar" la curva para que se ajuste mejor a los datos futuros, o se aprovecha de una heurística derivada de la observación de que los modelos sobreajustados tienden a presentar coeficientes grandes? ¿Es una afirmación exacta que los modelos sobreajustados tienden a presentar coeficientes grandes? Si es así, ¿podría alguien explicar un poco el mecanismo que hay detrás del fenómeno y/o dirigirme a alguna bibliografía?

5 votos

¿Qué quiere decir exactamente con un coeficiente "grande"? Al fin y al cabo, si nos limitamos a cambiar las unidades en las que expresamos la variable dependiente (como por ejemplo, de parsecs a femtómetros) podemos hacer que los coeficientes tengan un valor arbitrariamente grande o pequeño.

2 votos

No tengo una buena respuesta para eso. Tenía entendido que atacar los coeficientes "grandes" era una heurística que motivaba la regularización L2. Pero aumentar sintéticamente la magnitud de los coeficientes requeriría también cambiar la constante de regularización para compensar la diferente magnitud en el modelo ahora, ¿no? No creo que la noción de "grande" aquí sea tan ambigua como la haces parecer, aunque no pueda caracterizarla muy bien.

0 votos

@DavidMarx: No creo que la regularización L2 vaya a por los coeficientes "grandes", ¿verdad? Más bien tiende a empujar a cero los coeficientes que probablemente no eran comparativamente grandes, en cierto sentido forzándote a elegir en lugar de encontrar un compromiso entre los dos.

17voto

Factor Mystic Puntos 12465

En la regularización contexto de una "gran" coeficiente significa que la estimación de la magnitud es mayor de lo que hubiera sido, si un fijo especificación del modelo ha sido utilizado. Es el impacto de la obtención no sólo de las estimaciones, sino también la especificación del modelo, a partir de los datos.

Considerar lo que es un procedimiento de regresión paso a paso como se hace para una variable dada. Si la estimación de su coeficiente es pequeño en relación con el error estándar, que se te quita de la modelo. Esto podría ser debido a que el valor verdadero es realmente pequeño, o simplemente porque del error aleatorio (o una combinación de los dos). Si se cae, entonces ya no paga ninguna atención. Por otro lado, si la estimación es grande en relación con su error estándar, será retenida. Aviso el desequilibrio: nuestro modelo final va a rechazar una variable cuando el coeficiente estimado es pequeño, pero la mantendremos cuando la estimación es grande. Por lo tanto estamos propensos a sobreestimar su valor.

Dicho de otra manera, lo que el sobreajuste significa es que usted está exagerando el impacto de un conjunto de predictores de la respuesta. Pero la única manera que usted puede exagerar el impacto es si los coeficientes estimados son demasiado grandes (y a la inversa, las estimaciones para su excluidos los predictores son demasiado pequeños).

Lo que usted debe hacer es incorporar en su experimento de una variable de un procedimiento de selección, por ejemplo, la regresión paso a paso a través de la step. A continuación, repetir el experimento varias veces, en diferentes muestras aleatorias, y guardar las estimaciones. Usted debe saber que todas las estimaciones de los coeficientes $\beta_3$ $\beta_{10}$son sistemáticamente demasiado grande, cuando en comparación a no utilizar la variable de selección. El procedimiento de regularización objetivo de corregir o mitigar este problema.

He aquí un ejemplo de lo que estoy hablando.

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 

Esto contrasta con lo que ocurre cuando no se utiliza la variable de selección, y acaba de encajar todo a ciegas. Mientras que todavía hay un poco de error en las estimaciones de $\beta_3$$\beta_{10}$, la desviación media es mucho 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 

También, tanto en la L1 y la L2 de regularización hacer la suposición implícita de que todas sus variables, y por lo tanto los coeficientes, están en las mismas unidades de medida, es decir, un cambio de unidad en $\beta_1$ es equivalente a un cambio de unidad en $\beta_2$. De ahí el habitual paso de la normalización de las variables antes de aplicar cualquiera de estas técnicas.

0 votos

Estoy un poco confundido con tu ejemplo modificado. Dices que "Deberías encontrar que todas las estimaciones de los coeficientes 3 a 10 son sistemáticamente demasiado grandes, cuando se comparan con las que no utilizan la selección de variables", pero parece que obtuviste valores más grandes en tu primer experimento (con step ) que en tu segundo experimento (ajustando "a ciegas" los valores). ¿No es esto contrario a lo que usted sugería que debía ocurrir?

0 votos

Además, usted y otros aquí han sugerido que debería normalizar las variables en mi ejemplo. Entiendo el razonamiento, pero no conozco una buena manera de hacerlo. ¿Debo mejorar mis datos de muestra para incluir columnas para cada potencia de X y estandarizar esos valores? O hay una manera de estandarizar las variables directamente en la fórmula de mi modelo donde llamo a poly (Supongo que no)?

0 votos

? Se obtienen mayores desviaciones absolutas cuando se utiliza el paso a paso, en comparación con la no utilización del paso a paso. No estoy seguro de lo que está preguntando. En cuanto a la estandarización: no es necesaria si se hace como he publicado, es decir, haciendo una comparación entre el enfoque escalonado y el no escalonado. Cada variable se está comparando de un tratamiento a otro, en lugar de con las otras variables.

7voto

kjetil b halvorsen Puntos 7012

Una respuesta muy simple sin mirar sus detalles: Cuando se hace un sobreajuste, los estimadores de los parámetros tienden a obtener grandes varianzas, y con grandes varianzas los valores grandes son justo lo que se debe esperar.

0 votos

Si te entiendo bien, esto explicaría por qué el modelo predeciría valores "grandes", no por qué el modelo estaría compuesto por coeficientes "grandes".

1 votos

No, ¡eso está mal! Al menos algunos de los estimadores de los coeficientes individuales tendrán grandes varianzas, por lo que los valores estimados de esos coeficientes tenderán a ser grandes. (por supuesto, incluso cuando se sobreajusta, algunos coeficientes podrían ser estables, pero no todos). Además, para mantener la propiedad de insesgadez de la predicción, tenderá a haber algunas covarianzas negativas grandes entre los estimadores de coeficientes independientes.

2 votos

Sin embargo, esto no responde del todo a la pregunta. Si sólo se tratara de un problema de grandes varianzas, entonces se obtendrían estimaciones pequeñas con la misma frecuencia que las grandes (de manera informal). El problema es cuando asumimos que las estimaciones pequeñas (en relación con sus errores estándar) son "poco importantes" y eliminamos esas variables del modelo. Como resultado, las únicas estimaciones que quedan son las grandes.

-1voto

JanithaR Puntos 141

David. Creo que el problema de tu ejemplo es que no has normalizado los datos ( es decir, X^10>> X.

Así que David tiene razón en que encoge más los coeficientes grandes (por lo que puedes acabar con muchos coeficientes pequeños, mientras que la regularización L1 podría darte uno grande y el resto cero)

así que básicamente está encapsulando que los pequeños cambios deberían tener pequeños efectos (y, por supuesto, volvemos a la cuestión de lo pequeño que es lo pequeño, la normalización de los datos, etc.). Pero la clave está en las dimensiones superiores, donde entra en juego la correlación: Imagínese que tiene dos variables x,y que están muy correlacionadas (ambas normalizadas a la varianza 1), entonces su diferencia será pequeña = "ruido" - penalizar los pesos grandes evitará que se ajuste a este ruido (y obtener coeficientes muy grandes que casi se cancelan para y y x).

El ejemplo sigue siendo válido para cualquier relación lineal (y=mx)

busque la regresión de cresta

1 votos

David ¿por qué no vuelves a hacer el ejemplo normalizando todas las variables x,x^2, ...,x^n a media cero y desviación estándar 1, y luego ves los resultados que obtienes... no es muy sorprendente que tus coeficientes sean pequeños cuando tus variables de entrada son grandes

-1voto

Emily Blow Puntos 101

overfitting demo

Esta imagen es de mi nota del curso de DL de Andrew Ng, por favor, hágame saber si tiene alguna pregunta

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X