使用相同的 alpha/lambda 参数从 caret 和 cv.glmnet 获得不同的 AUC 估计

如何解决使用相同的 alpha/lambda 参数从 caret 和 cv.glmnet 获得不同的 AUC 估计

我正在使用 5 倍 CV 来查找岭回归的调整参数,同时尝试了 caret 和 cv.glmnet。我想使用 caret 包,因为它具有用于重复简历的内置例程。然而,单独尝试 5 倍 CV,我得到的准确度估计值非常不同:

请注意,我的数据集有 605 个观测值(150 1、455 0)和 26 个预测变量(连续/分类的混合)。

使用插入符号:

tr.control <- trainControl(method = "cv",number = 5)
param.control<-expand.grid(alpha = 0,lambda=seq(0.01,1,0.001))

glm.mod = train(caco ~ .,data=df.train,method='glmnet',trControl=tr.control,tuneGrid=param.control)

glm.mod$resample
   Accuracy      Kappa Resample
1 0.7520661 0.00000000    Fold1
2 0.7438017 0.01626016    Fold3
3 0.7603306 0.04930913    Fold5
4 0.7603306 0.04930913    Fold4
5 0.7603306 0.04930913    Fold2

glm.mod$bestTune
    alpha lambda
212     0  0.221

使用 cv.glmnet:

x.m <- model.matrix( ~ .,data=df.train[,c(-44)])
y.m<-as.numeric(as.matrix(df.train[,c(44)]))

ridge<-cv.glmnet(x=x.m,y=y.m,alpha=0,family="binomial",type.measure = "auc",standarize=TRUE,0.001))

ridge

Call:  cv.glmnet(x = x.m,y = y.m,lambda = seq(0.01,0.001),alpha = 0,family = "binomial",standarize = TRUE) 

Measure: AUC 

    Lambda Index Measure      SE Nonzero
min  0.313   188  0.6573 0.02711      43
1se  0.500     1  0.6562 0.02802      43

据我所知,caret 的结果似乎并不可靠。 kappa 值较低,折叠 1 的准确度为 455/605 = 0.7520。就其价值而言,cv.glmnet 准确度低于我的预期,这是基于该数据的 AUROC 与传统逻辑回归拟合 (~0.75)。

我的主要问题是,插入符号与 glmnet 计算中可能发生了什么导致结果如此不同? lambda 值似乎没有太大区别,尽管我可能应该增加 cv.glmnet lambda 序列。我知道这些折叠中的每一个都会有所不同,但准确度估计似乎差异太大,因此不能作为唯一的解释。

如果 cv.glmnet 给出“正确”的结果,为什么插入符号会失败?为了实现重复的 CV,我是否可以简单地遍历 cv.glmnet 的迭代并平均得到的 AUC?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?