В чем заключается истинное различие между множеством.семя (n) и множество.семя (n+1)
Я пытаюсь выяснить, как set.seed()
функция работает в R.
Мне интересно, если set.seed( 3 )
и set.seed( 4 )
они с большей вероятностью будут генерировать дубликаты образцов, чем если set.seed( 3 )
и set.seed( 100 )
?
Если да, то сколько уникальных выборок может сгенерировать set.seed( 3 )
, Прежде чем появится совпадение в выборках, сгенерированных set.seed( 4 )
?
Если нет, то могу ли я заключить, что другой n
в set.seed( n )
ничего не значит, пока они есть по-другому?
Я слышал что-то связанное с независимым случайным потоком? Это n
связано с этим?
Если да , то как я могу определить независимый случайный поток? Я уже читал Что означает целое число при установке семени?, но это, похоже, не отвечает на мои вопросы.
2 ответа:
Позвольте мне также попытаться дать краткий простой ответ. Я действительно считаю эти два замечания полезными.
Иногда нам нужны случайные числа в наших программах. Компьютер полагается на алгоритм для генерации случайных чисел. Из-за этого у нас есть возможность воссоздать последовательность генерируемых случайных чисел. Это очень полезно при воспроизведении чьей-то работы. В R, если мы используемsed.seed(42) runif(5)
В любой точке он всегда будет давать одну и ту же последовательность случайных чисел.
Не ожидается, что существует связь между
Таким образом, в общем случае можно рассматривать последовательности случайных чисел, порожденных различными семенами, как независимые.set.seed(n)
иset.seed(n+1)
, илиset.seed(n1)
иset.seed(n2)
. Или же ожидается, чтоset.seed(3)
не будет генерировать потокset.seed(4)
после ряда итераций, и наоборот.
Я думаю, что это плохая идея, чтобы сделать какие-либо предположения о связи между потоками случайных чисел, которые производятся двумя различными семенами, если лежащий в основе генератор случайных чисел не документирует эту связь. Например, я был удивлен, узнав, что по умолчанию RNG Mersenne-Twister действует следующим образом:
Я не заметил такого поведения ни для одной другой пары исходных значений, но этого было достаточно, чтобы отпугнуть меня от предположений.> set.seed(0) > x <- runif(10) > set.seed(1) > y <- runif(10) > x[2:10] == y[1:9] [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Если вам не все равно об этих проблемах вы должны прочитать о функциях
nextRNGStream
иnextRNGSubStream
в пакетеparallel
. Они предназначены для генерации значений.Random.seed
, которые приводят к независимым потокам случайных чисел.