Parece ser que hay una gran confusión en la comparación del uso de glmnet
dentro caret
a la búsqueda de un óptimo lambda y el uso de cv.glmnet
para realizar la misma tarea.
Muchas preguntas se plantean, por ejemplo:
El modelo de clasificación de tren.glmnet vs cv.glmnet?
¿Cuál es la forma correcta de usar glmnet con el símbolo de intercalación?
La validación cruzada `glmnet` usando `cursor`
pero la respuesta no ha sido determinada, que podría ser debido a la reproducibilidad de la pregunta. Después de la primera pregunta, quiero dar una muy similares ejemplo, pero no tienen la misma pregunta: ¿por Qué la estimación de las lambdas 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, el óptimo de lambdas está dada como:
0.055 mediante
cv.glmnet()
0.001 mediante
train()
Sé que el uso de standardize=FALSE
en cv.glmnet()
no es recomendable, pero lo que realmente quiero comparar ambos métodos de uso de los mismos requisitos. Como principal explanaition, creo que el enfoque de muestreo para cada una de las veces puede ser un problema - pero yo uso las mismas semillas y los resultados son bastante diferentes.
Así que estoy muy pegado sobre el por qué de los dos enfoques son muy diferentes, mientras que ellos deben ser bastante similares? - Espero que la comunidad tiene alguna idea de cuál es el problema aquí