5 votos

Red elástica: Cómo mejorar inestable de la validación cruzada de lambda

Quiero sintonizar lambda de una red elástica. Es posible optimizar el lambda basado en una validación cruzada con el glmnet paquete. Sin embargo, me di cuenta de que la estimación de la lambda varía mucho, si puedo ejecutar la validación cruzada varias veces. Ver el código de abajo, para un reproducible ilustración de esta situación:

library("glmnet")

set.seed(1234)

# Some example data
N <- 1000
y <- rnorm(N, 5, 10)
x1 <- y + rnorm(N, 2, 10)
x2 <- y + rnorm(N, - 5, 20)
x3 <- y + rnorm(N, 10, 200)
x4 <- rnorm(N, 20, 50)
x5 <- rnorm(N, - 7, 200)
x6 <- rbinom(N, 1, exp(x1) / (exp(x1) + 1))
x7 <- rbinom(N, 1, exp(x2) / (exp(x2) + 1))
x8 <- rbinom(N, 1, exp(x3) / (exp(x3) + 1))
x9 <- rbinom(N, 1, exp(x4) / (exp(x4) + 1))
x10 <- rbinom(N, 1, exp(x5) / (exp(x5) + 1))

data <- data.frame(y, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)

# Estimate lambda.1se several times
est_lambda.1se <- numeric()

for(i in 1:1000) {
  # Tuning in glmnet
  mod_cv_test <- cv.glmnet(x = as.matrix(data[ , colnames(data) %in% "y" == FALSE]), 
                       y = y, alpha = 0.5, family = "gaussian")
  # Store lambda.1se
  est_lambda.1se[i] <- mod_cv_test$lambda.1se
}

# Distribution of the estimated lambdas
hist(est_lambda.1se, breaks = 50) # Could the median be taken?

enter image description here

En mi ejemplo, lambda oscila aproximadamente entre 1 y 2.3. Me pregunto si hay espacio para mejoras. Mi idea es coger el median de todas las carreras como mejor lambda. Sin embargo, me temo que este procedimiento resulta en problemas que no puedo ver ahora mismo.

Pregunta: ¿Cómo puede la optimización de lambda ser mejorado?

3voto

Paulius Puntos 369

Creo que lo que está preguntando es sobre cuán sensibles son los resultados a su elección de $\lambda$, por lo que sugerimos que investigar exactamente eso. Cuando estoy sintonizando una red elástica, si el tiempo de cálculo no es un tema que me gustaría hacer un mapa de calor de la CV pérdida como una función de la $\lambda_1$ $\lambda_2$ (o $\lambda$$\alpha$, dependiendo de tu software de parametrización). Esto exactamente me dice que la estabilidad de mi solución y puedo ver cómo mucho mejor mi optimizado punto es que un "random" con el punto. Usted también puede 'zoom in' hasta que el ruido de validación cruzada domina el incremento real en el rendimiento del modelo (esto es como hacer una heurística simple búsqueda). Frases como "esto $\lambda$ es grande' no son realmente significativas, es toda de datos dependiente, por lo que para su información la diferencia entre el $\lambda=1$ $\lambda=2$ puede ser totalmente insignificante, mientras que para otros conjuntos de datos que es una enorme diferencia.

He aquí un ejemplo del tipo de "mapa de calor" de la que estoy hablando, tomado de este artículo (el cual le sugiero que lea) por nuestro propio @DikranMarsupial:

heatmap

2voto

Denis Warburton Puntos 11

Buena pregunta!

Usted puede tratar de la train función en el caret paquete, fácilmente se puede sintonizar la alpha y lambda parámetros al mismo tiempo.

Lo que usted atrapado en esta situación de inestabilidad, diciendo que tal vez la caída en el mínimo local.

He de ejecutar este ejemplo varias veces, esto es lo que obtuve:

El mínimo local de lambda es 0.201, entonces yo uso esta nueva lambda seq(0.01,0.4,0.01), que tengo el 'global' mínimo es de 0.07!

Ejecutar el código de abajo, es muy impresionante! the first plot

eGrid <- expand.grid(alpha = (1:10) * 0.1, 
                 lambda = seq(0.01,0.4,0.01))

Control <- trainControl(method = "repeatedcv",repeats = 3,verboseIter =TRUE)

netFit <- train(x = as.matrix(data[ , colnames(data) %in% "y" == FALSE]), 
            y = y,
            method = "glmnet",
            tuneGrid = eGrid,
            trControl = Control)
plot(netFit)

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