r - cv.glmnet 和 Leave-one out CV

标签 r lambda glmnet

我正在尝试使用函数 cv.glmnet 找到最佳的 lambda(使用 RIDGE 回归)以预测某些对象的归属类别。 所以我使用的代码是:

CVGLM<-cv.glmnet(x,y,nfolds=34,type.measure = "class",alpha=0,grouped = FALSE)

实际上我没有使用 K 折交叉验证,因为我的数据集太小了,实际上我只有 34 行。因此,我在 nfolds 中使用我的行数来计算留一法式 CV。

现在,我有一些问题:

1) 首先:cv.glmnet 函数是调整 Hyperpameter lambda 还是测试“最终模型”?

2) 一次获得了最好的 lambda,我该怎么办?我必须使用 predict 功能吗? 如果是,如果我使用所有数据来查找 lambda,我必须使用哪些数据,因为我使用了 LOO CV?

3) 如何从 cv.glmnet 函数计算 R^2?

最佳答案

这里尝试回答您的问题:

1) cv.glmnet 通过使用规范的交叉验证来测试每个 lambda 的性能。这是一个例子:

library(glmnet)
data(iris)

找到虹膜预测的最佳 lambda:

CVGLM <- cv.glmnet(as.matrix(iris[,-5]),
                   iris[,5],
                   nfolds = nrow(iris),
                   type.measure = "class",
                   alpha = 0,
                   grouped = FALSE,
                   family = "multinomial")

best lambda的miss classification error在

CVGLM$cvm
#output
0.06

如果您使用 LOOCV 和最佳 lambda 独立测试:

z <- lapply(1:nrow(iris), function(x){
  fit <- glmnet(as.matrix(iris[-x,-5]),
                iris[-x,5],
                alpha = 0,
                lambda = CVGLM$lambda.min,
                family="multinomial")

   pred <- predict(fit, as.matrix(iris[x,-5]), type = "class")

  return(data.frame(pred, true = iris[x,5]))
})

z <- do.call(rbind, z)

并检查它的错误率:

sum(z$pred != z$true)/150
#output
0.06

所以看起来没有必要使用与 cv.glmnet 中相同的方法来测试性能,因为它是相同的。

2) 当您拥有最佳 lambda 时,您应该使用 glmnet 函数在整个数据集上拟合模型。模型之后的操作完全取决于您。大多数人训练模型来预测某些事情。

3) 什么是分类问题的 R^2?如果你能解释,那么你就可以计算它。

R^2 = 解释变异/总变异

这是什么类?

无论如何,R^2 不用于分类,而是 AUC、偏差、准确度、平衡准确度、kappa、joudens J 等 - 其中大部分用于二元分类,但有些可用于多项式。

我建议 this作为进一步阅读

关于r - cv.glmnet 和 Leave-one out CV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48709211/

相关文章:

c++ - 什么是广义 lambda 捕获,为什么要创建它?

c# - lambda 是否在每次调用时都创建一个新实例?

r - 如何使用 glmnet 逻辑回归获得 0 到 1 之间的概率

r - 如何使用 glmnet 包提取最佳 lambda 的 CV 错误?

r - 带 calendaR 的热图

r - 在 R-Studio 中将 kable 与 booktabs=TRUE 选项一起使用时出错

Python:列表函数和 lambda 表达式

r - S3 和类(class)顺序

r - 有没有办法找到向量中数字的单次出现并忽略 R 中的重复项?

R - 尝试安装软件包 : InternetOpenUrl failed 时