Caret & Caret Ensemble для перекрестной проверки временных рядов - PullRequest
2 голосов
/ 19 марта 2019

Я пытаюсь оценить и составить алгоритмы обучения, используя Перекрестная проверка временных рядов , используя caret и caretEnsemble.caret напрямую поддерживает это с помощью method = "timeslice" - однако, набор Caret не

caretList в настоящее время не знает, как обрабатывать метод перекрестной проверки = 'timeslice'.Пожалуйста, укажите trControl $ index вручную

, и представляется возможным создать индексы вручную, используя

createTimeSlices

, однако это даетследующая ошибка в минимальном рабочем примере ниже

Ошибка: Остановка Дополнительно: Предупреждение: в nominalTrainWorkflow (x = x, y = y, wts = weights, info = trainInfo,: там отсутствовализначения в измеренных показателях производительности.

library(tidyverse)
library(caret)
library(caretEnsemble)

dfml=data.frame(date=seq(as.Date("2014/09/04"), by = "day", length.out = 1090),y=rnorm(1090),x=rnorm(1090))
index=createTimeSlices(dfml$y,365,horizon = 1,fixedWindow = TRUE)

n=726
seeds <- vector(mode = "list", length = n) # creates an empty vector containing lists
for(i in 1:(n-1)){seeds[[i]] <- sample.int(1000, 3) }
seeds[[n]] <- sample.int(1000, 1)

myIndexControl <- trainControl(method = "cv",
                               allowParallel = TRUE,
                               seeds = seeds,index=index$train,indexOut=index$test)
alg_list <- c("glmnet", "gbm", "lm")
multi_mod <- caretList(y ~ . , 
                       data = dfml, 
                       trControl = myIndexControl, 
                       methodList = alg_list,
                       family="gaussian",
                       metric = "RMSE", seeds=seeds)

Будем весьма благодарны за любые предложения или обходные пути. Таким образом можно настроить одну модель

glmnet.fit =train( y~ .,
               data = df,
               method = "glmnet",
               verbose=FALSE, trControl = myIndexControl,seeds=seeds,tuneLength.num=2,linout = TRUE)
...