3 votos

¿Cómo interpretar todos los coeficientes cero en los resultados de cv.glmnet?

Estoy intentando utilizar un modelo lineal disperso para mis datos, entrada x(29*50), salida y(29*1). En R, el paquete de glmnet se puede utilizar.

En primer lugar, cv.glmnet() elige lambda y coeficientes (con error mínimo), aquí con el método cv leave-one-out, y luego lo grafica.

cv.fit = cv.glmnet(x,y,family="gaussian",nfolds=29)

plot(cv.fit)

el gráfico de mse frente a log(lambda) en el modelo cv

A continuación, imprime los coeficientes

coef(cv.fit,s="lambda.min")

Matriz dispersa 51 x 1 de clase "dgCMatrix"

              1

(Intercepción) 267.7241

cluster_0 .
cluster_1 .
cluster_2 .
cluster_3 .
cluster_4 .
...

cluster_47 .
cluster_48 .
cluster_49 .

Por último, para medir la capacidad de predicción del modelo, se calcula la precisión (definida como 1 menos el error absoluto medio dividido por el rango numérico de y)

py <- predict(cv.fit,newx=x,s="lambda.min")
py

V1 267.7241

V2 267.7241

...

v29 267.7241

ave_abs_error <- mean(abs(py-y))
n_range <- max(y)-min(y)
acc <- 1-ave_abs_error/n_range
acc

0.918365

Aunque el acc(0,918365) es muy alto, hay un problema grave. Como se ve en el gráfico anterior, lambda.min es muy grande (73,03439), y todos los coeficientes son cero (sólo con el valor de intercepción 267,7241), todas las predicciones py son las mismas que la intercepción. ¡Eso es realmente extraño!

He buscado en muchos hilos del foro, aquí Un ejemplo: Regresión LASSO con glmnet para resultados binarios explica que no hay un mínimo local por muy pocas observaciones y todos los coeficientes se redujeron a cero con las penalizaciones por contracción.

¿Alguien tiene otras interpretaciones?

Gracias de antemano.

1 votos

He realizado modelos con exactamente este tipo de resultados: un efecto que esperaba que variara de un estado a otro (en EE.UU., incluyendo DC, para un total de 51 "estados") resultó no variar en absoluto según el estado. Una de las muchas formas de comprobar las cosas es volver a ejecutar el modelo utilizando lm solo: lo más probable es que todos los coeficientes estimados sean pequeños y la mayoría no sean significativos.

0 votos

En primer lugar, trazamos la distribución de y. (¿Es normal? Si no lo es, hay que transformarla con alguna función para que sea suficientemente normal, por ejemplo log, log1p). En segundo lugar, asegúrate de normalizar tus variables x (por ejemplo, utilizando scale() ).

0 votos

Además, nfolds=29 es elegir LOOCV. Puede probar con nfolds más pequeños (3..10), teniendo en cuenta que los coeficientes de cualquier ejecución individual dependerán de la semilla aleatoria y pueden no ser estables. Véase Variabilidad en los resultados de cv.glmnet

3voto

unk2 Puntos 36

El ajuste fino del factor de penalización de Elastic Net durante la validación cruzada ha dado como resultado una penalización que reduce todos los coeficientes a cero.

Sin ser matemáticamente exacto, esto parece indicar que ninguna de sus características es muy útil. En este caso, Elastic Net siempre predecirá la media de los datos con los que se ha entrenado.

Su medida de la precisión es muy problemática, ya que la mera predicción de la media puede producir resultados muy elevados.

Por ejemplo, dada la distribución normal estándar, el error absoluto medio se aproxima a 0,8. Con una muestra de gran tamaño, el intervalo se sitúa fácilmente en torno a 8, lo que da una precisión de 0,9.

Consulte aquí:

> set.seed(123)
> x <- rnorm(1e5)
> 1-mean(abs(x-mean(x)))/diff(range(x))
0.9056073

0 votos

¡Buenas explicaciones! ¿Significa eso que todas mis características de entrada son inútiles y que no existe un modelo lineal entre la entrada x y la respuesta y bajo la condición del lazo? También tengo curiosidad por saber cómo se mide la capacidad de predicción de un modelo. ¿Existe algún indicador aparte de mse (definido como mean(y-predicted_y)^2)? Muchas gracias.

0 votos

En cuanto a la medida de la precisión, resulta problemática en este caso, en el que todos los coeficientes son cero. Sin embargo, en los casos más adecuados, lo que significa que el número de coeficientes distintos de cero no es cero, y la salida de la predicción no es la media de los datos entrenados. De esta forma, la precisión puede ser una indicación razonable para medir la capacidad de predicción. ¿Es así?

0 votos

@cyingJack Supongo que podrías hacerlo informativo, comparándolo con la precisión del modelo que sólo predice la media todo el tiempo. Esto sería un rendimiento de referencia. Yo en cambio me fijaría en indicadores clásicos como R al cuadrado.

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