Es scheint eine Menge Verwirrung im Vergleich zwischen der Verwendung von glmnet
inside caret
zur Suche nach einem optimalen Lambda und der Verwendung cv.glmnet
derselben Aufgabe zu geben.
Viele Fragen wurden gestellt, zB:
Klassifizierungsmodell train.glmnet vs. cv.glmnet?
Was ist der richtige Weg, um glmnet mit caret zu verwenden?
Quervalidierung von "glmnet" mit "caret"
Es wurde jedoch keine Antwort gegeben, was möglicherweise auf die Reproduzierbarkeit der Frage zurückzuführen ist. Nach der ersten Frage gebe ich ein ganz ähnliches Beispiel, habe aber die gleiche Frage: Warum sind die geschätzten Lambdas so unterschiedlich?
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)
Zusammenfassend werden die optimalen Lambdas wie folgt angegeben:
0.055 mit
cv.glmnet()
0,001 mit
train()
Ich weiß, dass die Verwendung standardize=FALSE
in cv.glmnet()
nicht ratsam ist, aber ich möchte wirklich beide Methoden mit den gleichen Voraussetzungen vergleichen. Als wesentliche Erklärung denke ich, dass der Stichprobenansatz für jede Falte ein Problem sein könnte - aber ich verwende die gleichen Samen und die Ergebnisse sind sehr unterschiedlich.
Also bin ich wirklich gespannt, warum die beiden Ansätze so unterschiedlich sind, obwohl sie sich ziemlich ähnlich sein sollten? - Ich hoffe, die Community hat eine Idee, worum es hier geht