Optimal bir lambda aramak için glmnet
içeride caret
kullanma cv.glmnet
ve aynı görevi yapmak için kullanma karşılaştırmasında çok fazla karışıklık var gibi görünüyor .
Birçok soru yöneltildi, örneğin:
Sınıflandırma modeli train.glmnet mi cv.glmnet mi?
Glmnet'i caret ile kullanmanın doğru yolu nedir?
"Caret" kullanarak çapraz onaylama "glmnet"
ancak sorunun tekrarlanabilirliğinden kaynaklanabilecek hiçbir cevap verilmemiştir. İlk soruyu takiben oldukça benzer bir örnek veriyorum ama aynı sorum var: Tahmini lambdalar neden bu kadar farklı?
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)
Özetlemek gerekirse, optimal lambdalar şu şekilde verilir:
0.055 kullanarak
cv.glmnet()
0.001 kullanarak
train()
Ben kullanarak biliyoruz standardize=FALSE
içinde cv.glmnet()
tavsiye edilmez, ama gerçekten aynı önkoşul kullanarak her iki yöntemi karşılaştırmak istiyorum. Ana açıklama olarak, her kat için örnekleme yaklaşımının bir sorun olabileceğini düşünüyorum - ama aynı tohumları kullanıyorum ve sonuçlar oldukça farklı.
Bu yüzden, iki yaklaşımın neden bu kadar farklı olduğu konusunda oldukça takılıp kaldım. - Umarım topluluğun burada sorun ne olduğu hakkında bir fikri vardır