分类模型train.glmnet与cv.glmnet?
我如何在train.glmnet上获得与cv.glmnet相同的答案?我正在进行分类,并使用family=“二项式”。我做了一些测试,但没有达到同样的敏感性和特异性。差别很大,即使我从cv.glmnet中给出lambda列表,但我仍然得到相同的答案 下面是一个简单的例子:分类模型train.glmnet与cv.glmnet?,r,r-caret,cross-validation,glmnet,R,R Caret,Cross Validation,Glmnet,我如何在train.glmnet上获得与cv.glmnet相同的答案?我正在进行分类,并使用family=“二项式”。我做了一些测试,但没有达到同样的敏感性和特异性。差别很大,即使我从cv.glmnet中给出lambda列表,但我仍然得到相同的答案 下面是一个简单的例子: set.seed(2) training <- twoClassSim(50, linearVars = 2) testing <- twoClassSim(500, linearVars = 2) trainX
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
set.seed(2)
培训请参阅我对这个问题的回答: