我如何使用train.glmnet获得与cv.glmnet相同的答案?我正在进行分类,我使用family =“binomial”。我做了一些测试,但没有达到同样的灵敏度和特异性。差异很大,即使我从cv.glmnet给出lambda列表,但我仍然得到相同的答案。
看这里是一个简单的例子:
set.seed(2)
training <- twoClassSim(50, linearVars = 2)
testing <- twoClassSim(500, linearVars = 2)
trainX <- training[, -ncol(training)]
testX <- testing[, -ncol(testing)]
trainY <- training$Class
cctrl1 <- trainControl(method="cv", number=3, returnResamp="all",
classProbs=TRUE, summaryFunction=twoClassSummary)
set.seed(849)
X <- model.matrix(trainY ~ .,data=data.frame(cbind(trainX,trainY)))
cvob1=cv.glmnet(X,trainY,family="binomial",alpha=1, type.measure="auc", nfolds = 3)
test_class_cv_model <- train(trainX, trainY,
method = "glmnet",
trControl = cctrl1,
metric = "ROC",
preProc = c("center", "scale"),
tuneGrid = expand.grid(.alpha = 1
,.lambda = seq(0.001,0.1,by = 0.001)
#,.lambda = 0.017))
# lambda ROC Sens Spec
# 0.017 0.7222222 0.6833333 0.6333333
# 0.017 0.7833333 0.7333333 0.7333333
# 0.017 0.8027778 0.7666667 0.6833333
# 0.017 0.6861111 0.6333333 0.65
test_class_cv_model_cv <- train(trainX, trainY,
method = "glmnet",
trControl = cctrl1,
metric = "ROC",
preProc = c("center", "scale"),
tuneGrid = expand.grid(.alpha = 1,
.lambda = cvob1$lambda))
# lambda ROC Sens Spec
# 0.0010414124 0.8142361 0.7638889 0.5694444
# 0.0066942753 0.8527778 0.6833333 0.7166667
# 0.0224365508 0.7305556 0.6833333 0.6833333
# 0.0169724279 0.7972222 0.7333333 0.6500000
# 0.0031803231 0.6841564 0.6342593 0.6342593
# 0.0624310353 0.8111111 0.7166667 0.7333333
# 0.0073469589 0.7250000 0.7666667 0.6833333
在我的测试案例中,差异甚至更大,就像在这个简单的例子中一样。所以从0.85 / 0.90我有灵敏度/特异度0.99 / 0.57。
我在哪里可以看到,我如何设置train.glmnet? 并且非常重要的是如何在两个模型中获得相同的答案?
提前谢谢你......