Случайные образцы из createFolds в R - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу разделить свой набор данных на 30 сгибов. Поэтому я использовал функцию createFolds из пакета caret в R. I set.seed, чтобы получить воспроизводимые результаты.

Теперь я хочу получить 20 разных случайных выборок. Другими словами, 20 разных 30 сгибов. Таким образом, мне нужно изменить set.seed 20 раз.

Есть ли способ сделать это проще.

    wdbcc=as.data.frame(scale(wdbc))
    set.seed(12345)
    k = 30
    folds <- createFolds(wdbcc$PE, k = k, list = TRUE, returnTrain = TRUE)

ПРИМЕЧАНИЕ

wdbcc - это мой набор данных, k - номер сгиба, PE - зависимая переменная.

EDIT1

Я приведу краткий пример из того, что я хочу, следующим образом

Сначала я буду использовать следующий набор * Затем я воспользуюсь той же идеей, но с изменением set.seed на (123456) вместо (12345), и построю модель на этом.

Мне нужно сделать это 20 раз с другим set.seed. Каждый раз, чтобы построить модель на разных set.seed.

EDIT2

Просто, если у меня 30 сгибов, я построю линейную регрессию на этих 30 сгибах и, таким образом, У меня будет 30 модельных результатов. У меня должен быть один и тот же процесс, но с разными 30 сгибами (20 раз, и у каждого из 20 у меня разные 30 сгибов). Поэтому я буду строить модель каждый раз из 20 с 30 различными сгибами.

1 Ответ

1 голос
/ 05 февраля 2020
folds <- replicate(20,createFolds(wdbcc$PE, k = k, list = FALSE, returnTrain = TRUE))

, если вы не возражаете против сгибов в векторе (столбцы матрицы), а не в списке.

Редактировать: мой код выше уже обеспечивает случайное заполнение числа, так как вы будете получать одинаковые сгибы (все 20 из них) каждый раз, когда вы запускаете вышеуказанный код с заданным начальным числом. Однако, если вы абсолютно хотите, чтобы для каждого повторного сэмпла было задано c начальное число (что является подозрительным), вы можете сделать следующее

wdbcc=as.data.frame(scale(wdbc))
lmv = vector("list",20)
mySeed=c(1,2,3,4,5,...,20) #vector with your pre-defined seeds

for (i in 1:length(lmv)) {
    set.seed(mySeed[i])
    lmv2 = vector("list",30)
    folds <- createFolds(wdbcc$PE, k = 30, list = FALSE, returnTrain = TRUE)
    for (j in 1:length(lmv2)) {
        lmv2[[j]] = lm(PE~ ., data = wdbcc[folds!=j,])
    }
    lmv[[i]] = lmv2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...