如何解决具有不同视野的滚动原点交叉验证?
我有一个 2010 年至 2016 年期间的时间序列训练数据集,其观测次数列在下表中。我想在 R 中执行滚动原点交叉验证,其中初始折叠使用 2010 年的观察作为训练,2011 年作为测试。第二部分使用 2010 年和 2011 年的 daa 作为训练,2012 年作为测试等。
我尝试了不同的函数,例如 rolling_origin
和插入符号 trainControl
但遗憾的是它似乎只适用于 1 个预测范围值和 1 个跳过值。我非常感谢任何帮助,尤其是代码示例!
2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 |
---|---|---|---|---|---|---|
614 | 617 | 599 | 677 | 881 | 1215 | 1208 |
解决方法
设 x 为数据,y[i] 为 x[i] 的年份。然后计算 u[i] 作为第 i 个唯一年份中最后一个数据点的索引,并迭代训练和测试集中最后一个点的索引。在下面的代码中,我们返回每次迭代的训练和测试数据,但您可以用您需要的任何计算替换标有 ## 的行。
y <- c(2000,2000,2001,2002)
x <- 11:16
u <- unique(findInterval(y,y)) # 3,5,6
# input is last index of training and test sets in x
f <- function(itrain,itest) {
train <- x[ seq(1,itrain)]
test <- x[ seq(itrain+1,itest) ]
list(train = train,test = test) ##
}
L <- Map(f,itrain = head(u,-1),itest = tail(u,-1))
names(L) <- y[ u[-1] ]
str(L)
给出这个命名列表,其中名称是测试集的年份:
List of 2
$ 2001:List of 2
..$ train: int [1:3] 11 12 13
..$ test : int [1:2] 14 15
$ 2002:List of 2
..$ train: int [1:5] 11 12 13 14 15
..$ test : int 16
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。