Parece haber mucha confusión en la comparación de usar glmnet
dentro caret
para buscar una lambda óptima y usar cv.glmnet
para hacer la misma tarea.
Se plantearon muchas preguntas, por ejemplo:
Modelo de clasificación train.glmnet vs. cv.glmnet?
¿Cuál es la forma correcta de usar glmnet con caret?
Validación cruzada de `glmnet` usando` caret`
pero no se ha dado respuesta, lo que podría deberse a la reproducibilidad de la pregunta. Después de la primera pregunta, doy un ejemplo bastante similar, pero tengo la misma pregunta: ¿Por qué las lambdas estimadas son tan diferentes?
library(caret)
library(glmnet)
set.seed(849)
training <- twoClassSim(50, linearVars = 2)
set.seed(849)
testing <- twoClassSim(500, linearVars = 2)
trainX <- training[, -ncol(training)]
testX <- testing[, -ncol(testing)]
trainY <- training$Class
# Using glmnet to directly perform CV
set.seed(849)
cvob1=cv.glmnet(x=as.matrix(trainX),y=trainY,family="binomial",alpha=1, type.measure="auc", nfolds = 3,lambda = seq(0.001,0.1,by = 0.001),standardize=FALSE)
cbind(cvob1$lambda,cvob1$cvm)
# best parameter
cvob1$lambda.mi
# best coefficient
coef(cvob1, s = "lambda.min")
# Using caret to perform CV
cctrl1 <- trainControl(method="cv", number=3, returnResamp="all",classProbs=TRUE,summaryFunction=twoClassSummary)
set.seed(849)
test_class_cv_model <- train(trainX, trainY, method = "glmnet", trControl = cctrl1,metric = "ROC",
tuneGrid = expand.grid(alpha = 1,lambda = seq(0.001,0.1,by = 0.001)))
test_class_cv_model
# best parameter
test_class_cv_model$bestTune
# best coefficient
coef(test_class_cv_model$finalModel, test_class_cv_model$bestTune$lambda)
Para resumir, las lambdas óptimas se dan como:
0.055 usando
cv.glmnet()
0.001 usando
train()
Sé que usar standardize=FALSE
in cv.glmnet()
no es aconsejable, pero realmente quiero comparar ambos métodos usando los mismos requisitos previos. Como explicación principal, creo que el enfoque de muestreo para cada pliegue podría ser un problema, pero uso las mismas semillas y los resultados son bastante diferentes.
Entonces, ¿estoy realmente atrapado en por qué los dos enfoques son tan diferentes, aunque deberían ser bastante similares? - Espero que la comunidad tenga alguna idea de cuál es el problema aquí.