请注意,您发布的原始问题已经考虑到了时间切片问题,因此您不必手动创建时间切片。
但是,以下是如何使用 createTimeSlices
对数据进行拆分,然后将其用于训练和测试模型的方法。
步骤0:设置数据和 trainControl
:(来自您的问题)
library(caret)
library(ggplot2)
library(pls)
data(economics)
步骤1:为数据索引创建时间片段:
timeSlices <- createTimeSlices(1:nrow(economics),
initialWindow = 36, horizon = 12, fixedWindow = TRUE)
这将创建一个训练时间片和测试时间片的列表。
> str(timeSlices,max.level = 1)
为了更容易地理解,我将它们保存在不同的变量中:
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]
步骤2:在第一个trainSlices
上进行训练:
plsFitTime <- train(unemploy ~ pce + pop + psavert,
data = economics[trainSlices[[1]],],
method = "pls",
preProc = c("center", "scale"))
第三步:在第一个 testSlices
上进行测试:
pred <- predict(plsFitTime,economics[testSlices[[1]],])
步骤4:绘图:
true <- economics$unemploy[testSlices[[1]]]
plot(true, col = "red", ylab = "true (red) , pred (blue)", ylim = range(c(pred,true)))
points(pred, col = "blue")
接下来,您可以对所有的切片执行此操作:
for(i in 1:length(trainSlices)){
plsFitTime <- train(unemploy ~ pce + pop + psavert,
data = economics[trainSlices[[i]],],
method = "pls",
preProc = c("center", "scale"))
pred <- predict(plsFitTime,economics[testSlices[[i]],])
true <- economics$unemploy[testSlices[[i]]]
plot(true, col = "red", ylab = "true (red) , pred (blue)",
main = i, ylim = range(c(pred,true)))
points(pred, col = "blue")
}
如前所述,这种时间切片是由您的原始函数一步完成的:
> myTimeControl <- trainControl(method = "timeslice",
+ initialWindow = 36,
+ horizon = 12,
+ fixedWindow = TRUE)
>
> plsFitTime <- train(unemploy ~ pce + pop + psavert,
+ data = economics,
+ method = "pls",
+ preProc = c("center", "scale"),
+ trControl = myTimeControl)
> plsFitTime
Partial Least Squares
478 samples
5 predictors
Pre-processing: centered, scaled
Resampling: Rolling Forecasting Origin Resampling (12 held-out with a fixed window)
Summary of sample sizes: 36, 36, 36, 36, 36, 36, ...
Resampling results across tuning parameters:
ncomp RMSE Rsquared RMSE SD Rsquared SD
1 1080 0.443 796 0.297
2 1090 0.43 845 0.295
RMSE was used to select the optimal model using the smallest value.
The final value used for the model was ncomp = 1.
希望这可以帮到您!