以下是回答您问题的尝试:
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")
最佳lambda的误分类错误在
CVGLM$cvm
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
0.06
因此,看起来没有必要使用与cv.glmnet相同的方法测试性能,因为结果将相同。
2)当您拥有最佳lambda值时,应使用glmnet
函数在整个数据集上拟合模型。您对该模型的后续处理完全取决于您自己,大多数人训练模型以预测某些东西。
3)分类问题的R^2是什么?如果您能解释一下,那么您就可以计算它了。
R^2 = 解释的方差 / 总方差
从类的角度来看这是什么意思?
无论如何,R^2不用于分类,而是使用AUC、偏差、准确率、平衡准确率、kappa、joudens J等。其中大多数用于二元分类,但有些也适用于多项式分类。
我建议这篇文章作为进一步阅读。
CVGLM$cvm
中,它代表了总误差,因此准确性为1 - CVGLM$cvm
。 - missuse