set.seed: ресэмплы, созданные в цикле for - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу произвести равные повторные выборки и использовать функцию 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()?Как я могу произвести равные повторные образцы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...