Перекрестная проверка временных рядов для модели LASSO - PullRequest
0 голосов
/ 14 февраля 2020

Как видно из названия, моя цель - провести перекрестную проверку временных рядов с использованием штрафа L1 (Лассо). Поскольку кадр данных представляет собой формат временного ряда, очевидно, что результаты анализа временного ряда должны быть более подходящими, чем обычное резюме.

Вот строки кода, которые я пробовал

library(caret)
library(ggplot2)
library(pls)
economics
timeSlices <- createTimeSlices(1:nrow(economics), 
                               initialWindow = 36, horizon = 12, fixedWindow = FALSE)
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]

Это позволяет создать два среза для тренировочного набора (всегда получая еще одно наблюдение), сохраняя постоянную длину тестового набора. Здесь возникает проблема

plsFitTime <- train(unemploy ~ pce + pop + psavert,
                data = economics[trainSlices[[1]],],
                method = "glmnet",
                alpha = 1)

Здесь ошибка

Что-то не так; все значения RMSE metri c отсутствуют:

      RMSE        Rsquared        MAE     
 Min.   : NA   Min.   : NA   Min.   : NA  
 1st Qu.: NA   1st Qu.: NA   1st Qu.: NA  
 Median : NA   Median : NA   Median : NA  
 Mean   :NaN   Mean   :NaN   Mean   :NaN  
 3rd Qu.: NA   3rd Qu.: NA   3rd Qu.: NA  
 Max.   : NA   Max.   : NA   Max.   : NA  
 NA's   :9     NA's   :9     NA's   :9    
Error: Stopping
In addition: Warning message:
In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,  :
  There were missing values in resampled performance measures.

Я действительно не понимаю, что с этим может быть не так.

Тогда моей конечной целью было бы выполнить

pred <- predict(plsFitTime,economics[testSlices[[1]],])
true <- economics$unemploy[testSlices[[1]]]

Любое предложение с этим?

1 Ответ

1 голос
/ 14 февраля 2020

Если вы посмотрите на предупреждения:

50: ошибка соответствия модели для Resample17: альфа = 0,55, лямбда = 42,28 Ошибка в (функция (x, y, семейство = c (" gaussian "," binomial "," poisson ",:
формальный аргумент" alpha ", совпадающий с несколькими фактическими аргументами

По умолчанию обучение для gl mnet выполняется для лямбды и альфы. И альфа, которую вы указали, конфликтует с альфа, сгенерированной кареткой.

Если вам нужна фиксированная альфа, она должна быть указана в tuneGrid.

t_grid = expand.grid(lambda=seq(0,1,by=0.1),alpha=1)
plsFitTime <- train(unemploy ~ pce + pop + psavert,
                    data = economics[trainSlices[[1]],],
                    method = "glmnet",
                    tuneGrid = t_grid)

Вы можете проверить гиперпараметры здесь

...