R glm - 如何进行多重交叉验证

3

我有一些训练数据,我将其随机分成两部分:

  • 70% -> train_train
  • 30% -> train_cv(用于交叉验证)

我使用train_train拟合glm(glmnet)模型,然后使用train_cv进行交叉验证。

我的问题是,对于train_train和train_cv的不同随机分割会导致不同的交叉验证结果(使用曲线下面积“AUC”评估):

AUC = 0.6381583 第一次

AUC = 0.6164524 第二次

有没有办法在不重复代码的情况下运行多个交叉验证?


我问这个问题不仅是为了你,也是为了我自己,但是你能不能只是平均AUC呢?(这应该被理解为一个问题而不是一个答案) - Vincent
所以你随机分割数据两次,然后想知道为什么会得到不同的结果? - rawr
1个回答

9
这里有一些令人困惑的地方。我认为你所描述的更像是标准的训练/测试分离,交叉验证一词通常使用方式不同。因此,你已经留出30%的数据进行测试,这很好,你可以使用它来了解你的训练集AUC估计值的乐观程度。但是,估计值当然取决于你如何进行训练/测试分离,知道测试性能变化多少会很有帮助。您可以使用多次交叉验证运行来实现这一点。
交叉验证与仅使用保留集略有不同-例如,五倍交叉验证涉及以下步骤:
1.随机将完整数据集分成五个大小相等的部分。 2.对于i = 1到5,将模型拟合到除第i部分以外的所有数据上。 3.在拟合中留出的部分上评估AUC。 4.平均五个AUC结果。
可以多次重复此过程以估计样本外估计的均值和方差。
R包cvTools允许您执行此操作。例如:
library(ROCR)
library(cvTools)

calc_AUC <- function(pred, act) {
  u<-prediction(pred, act)
  return(performance(u, "auc")@y.values[[1]])
}

cvFit(m, data = train, y = train$response, 
    cost = calc_AUC, predictArgs = "response")

将使用AUC作为性能指标对模型m进行5次交叉验证。cvFit还需要参数K(交叉验证折数)和R(使用不同随机分割进行交叉验证的次数)。
有关交叉验证的更多信息,请参见http://en.wikipedia.org/wiki/Cross-validation_(statistics)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接