Я хотел бы использовать каретку для настройки гиперпараметров различных моделей машинного обучения, прежде чем подгонять лучшую модель. Но у меня возникли проблемы с подбором окончательной модели и прочтением деталей модели.
Цель: у меня есть матрица модели, обозначенная 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, которую я использую?