gpt4 book ai didi

r - cv.glmnet 和 Leave-one out CV

转载 作者:行者123 更新时间:2023-12-04 01:58:56 28 4
gpt4 key购买 nike

我正在尝试使用函数 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com