2014-05-14 31 views
2

我有我随机分成两个部分列车数据:řGLM - 怎么办多个交叉验证

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

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

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

AUC = 0.6381583所述第一时间

AUC = 0.6164524第二次

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

+0

对于我自己,我问这个问题和你一样多,但难道你不能只是平均AUCs? (作为一个问题而不仅仅是一个答案) – Vincent

+0

所以你会随机分裂你的数据两次,并想知道为什么你会得到不同的结果? – rawr

回答

7

这里有一些令人困惑的事情。我认为你所描述的更多的是标准的训练/测试分割,交叉验证通常用于不同的方面。所以你已经拿出了30%的数据进行测试,这是很好的,你可以用它来找出你的训练集估计的AUC是多么乐观。但是,当然,估算取决于你如何进行火车/测试分割,并且知道这个测试性能有多大变化是一件好事。您可以使用多次交叉验证来实现此目的。

交叉验证从只使用一个不渗透性组稍微 - 5次交叉验证,例如,包括以下步骤操作:

    随机
  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)