分类模型train.glmnet与cv.glmnet?

时间:2017-04-06 09:13:07

标签: r r-caret cross-validation glmnet

我如何使用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? 并且非常重要的是如何在两个模型中获得相同的答案?

提前谢谢你......

0 个答案:

没有答案