我有训练数据,我随机分成两部分:
我使用train_train拟合glm(glmnet)模型,然后使用train_cv进行交叉验证。
我的问题是,train_train和train_cv的不同随机分组会返回不同的交叉验证结果(使用曲线下面积进行评估," AUC")
第一次AUC = 0.6381583
第二次AUC = 0.6164524
有没有办法在不重复代码的情况下运行多个交叉验证?
答案 0 :(得分:8)
这里有一些令人困惑的事情。我认为你所描述的更多是标准的训练/测试分裂,交叉验证这个词的使用方式通常不同。因此,您已经将30%的数据用于测试,这很好,您可以使用它来了解您的列车对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)。