Я хочу произвести равные повторные выборки и использовать функцию train()
пакета caret
в цикле for.Выбранный метод моделирования - Случайный лес (rf
).
Вот мой код:
# for reproducible results in runif set.seed(43)
set.seed(43)
dat <- data.frame(x = runif(300, min=0, max=100),
y = runif(300, min=0, max=10),
z = runif(300, min=0, max=5),
p = runif(300),
a = floor(runif(300, min=0, max=101)),
b = sample( LETTERS[1:4], 300, replace=TRUE, prob=c(0.2, 0.2, 0.4, 0.2)),
c = sample( LETTERS[5:8], 300, replace=TRUE, prob=c(0.2, 0.2, 0.4, 0.2)))
targets <- c("x","y")
predictors_name <- c("z", "p", "a", "b", "c")
model_list <- list()
library(caret)
for (i in 1:length(targets)) {
# set predictors and response
pred <- dat[,4:7]
response <- dat[, which(names(dat) == targets[i])]
# set parameter mtry as a dataframe (so the tuneGrid parameter of train will take it)
params <- data.frame(mtry = 4)
# specifiy trainControl
control <- trainControl(method="repeatedcv", number=10, repeats=10, savePred =T)
# fit models with fixed hyperparameter
set.seed(43)
model <- train(x = pred,
y = response,
method = "rf",
ntree = 25,
metric = "RMSE",
tuneGrid = params,
trControl = control,
importance = TRUE)
model_list[[i]] <- model
}
Теперь я хочу объединить два фрейма данных с помощью rowIndex
и Resample
без создания NA, но значения столбца Resample
не совпадают:
d1 <- model_list[[1]]$pred
d2 <- model_list[[2]]$pred
d1[d1$rowIndex == 1,]
d2[d2$rowIndex == 1,]
Столбцы Resample
из d1
и d2
должны иметь точно такие же значения.
Почему сэмплы, полученные с помощью цикла, отличаются, хотя я поставил set.seed()
перед train()
?Как я могу произвести равные повторные образцы?