Кажется, существует большая путаница при сравнении использования glmnet
внутри caret
для поиска оптимальной лямбды и использования cv.glmnet
для выполнения той же задачи.
Было задано много вопросов, например:
Модель классификации train.glmnet против cv.glmnet?
Как правильно использовать glmnet с кареткой?
Перекрестная проверка `glmnet` с использованием` caret`
но ответа не дано, что может быть связано с воспроизводимостью вопроса. Следуя первому вопросу, я привожу довольно похожий пример, но у меня все тот же вопрос: почему оценочные лямбды такие разные?
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)
Подводя итог, оптимальные лямбды даны как:
0.055 с помощью
cv.glmnet()
0,001 с помощью
train()
Я знаю, что использование standardize=FALSE
в cv.glmnet()
не рекомендуется, но я действительно хочу сравнить оба метода, используя одни и те же предпосылки. В качестве основного объяснения, я думаю, что подход выборки для каждого сгиба может быть проблемой - но я использую одни и те же семена, и результаты совершенно разные.
Так что я действительно застрял на том, почему эти два подхода настолько различны, в то время как они должны быть очень похожими? - Я надеюсь, что у сообщества есть идея, в чем здесь проблема