Подгонка финальной модели после тюнинга с кареткой - PullRequest
0 голосов
/ 08 апреля 2019

Я хотел бы использовать каретку для настройки гиперпараметров различных моделей машинного обучения, прежде чем подгонять лучшую модель. Но у меня возникли проблемы с подбором окончательной модели и прочтением деталей модели.

Цель: у меня есть матрица модели, обозначенная df, и я хотел бы предсказать будущие значения x, используя несколько алгоритмов машинного обучения (lm, glmnet, gbm, svm и случайные леса).

Это то, что я пытался сделать: \ 1. Я использую две версии Time Control (trainingTimeControl и fitTimeControl), где одна использует временной интервал, а другая - нет метода, чтобы просто соответствовать модели. 2. Затем я обучил модель с tunelength = 5 и trainingTimeControl. 3. Я выбрал bestTune и подгонял модель, используя fitTimeControl

Вот минимальный рабочий пример:

df=data.frame(date=seq(as.Date("2014/01/01"), by = "day", length.out = 1090),x=rnorm(1090),y=rnorm(1090),z=rnorm(1090))

df_training<-df[1:730,]
df_test<-df[731:nrow(df),]

glmnet.mod<-list()
glmnet.fit<-list()

# creating sampling seeds
set.seed(123)

n=nrow(dfml_training)
tuneLength.num <- 5

seeds <- vector(mode = "list", length = n) # creates an empty vector containing lists
for(i in 1:(n-1)){ # choose tuneLength.num random samples from 1 to 1000
  seeds[[i]] <- sample.int(1000, tuneLength.num) 
}

# For the last model:
seeds[[n]] <- sample.int(1000, 10)

trainingTimeControl <- trainControl(method = "timeslice",
                                    initialWindow = trainingWindow,
                                    horizon = 1,
                                    fixedWindow = TRUE,
                                    returnResamp="all",
                                    allowParallel = TRUE,
                                    seeds = seeds,
                                    savePredictions = TRUE)

fitTimeControl <- trainControl(method = "none",
                               allowParallel = TRUE)

glmnet.mod <- caret::train(x ~ . - date,
                               data = df_training,
                               method = "glmnet",
                               family = "gaussian",
                               trControl = trainingTimeControl,
                               tuneLength=tuneLength.num)

glmnet.fit <- caret::train(x ~ . - date,
                               data = df_test,
                               method = "glmnet",
                               family = "gaussian",
                               trControl = fitTimeControl,
                               tuneGrid=glmnet.mod$bestTune)

lm.mod <- caret::train(x ~ . - date,
                           data = df_training,
                           method = "lm",
                           trControl = trainingTimeControl,
                           tuneLength=tuneLength.num)

lm.fit <- caret::train(x ~ . - date,
                           data = df_test,
                           method = "lm",
                           trControl = fitTimeControl,
                           tuneGrid=lm.mod$bestTune)

Однако я не могу получить доступ к установленным значениям для всех алгоритмов. В то время как подогнанные значения для lm - это просто lm.fit $ finalModel $ fit.values, а для gbm это gbm.fit $ finalModel $ fit, я понятия не имею, какой эквивалент будет для glmnet и svm, например. Правильно ли я подгоняю окончательную модель, используя версию fitTimeControl, которую я использую?

...