Если разные классы приложения должны извлечь одно или несколько случайных чисел, где должен быть инициализирован генератор случайных чисел для получения хороших случайных последовательностей?
В частности, мне нужно построить несколько деревьев решений для обучения случайного леса. Построение каждого дерева решений включает в себя следующие этапы:
Три шага, перечисленные выше, выполняются для построения каждого дерева решений. Только что описанная процедура предусматривает, что генерация случайных чисел происходит несколько раз. Например, второй шаг должен гарантировать, что каждое дерево решений обучается с набором данных, немного отличающимся от исходного, поэтому генератор случайных чисел должен избегать генерации равных наборов данных (или в любом случае вероятность этого появления должна быть очень низкой) ,
По сути, в этой процедуре мы можем выделить два источника случайности:
N
случайный набор данных, каждый для обучения отдельного дерева решений;M
случайные извлечения из данного набора данных.Сколько генераторов случайных чисел я должен использовать?
Поскольку у меня есть класс, который реализует случайный лес, и другой класс, который реализует дерево решений, я решил инициализировать генератор случайных чисел в первом классе (первый источник случайности), а другой генератор случайных чисел — во втором. класс (второй источник случайности). Это правильно?
Каковы общие рекомендации по выбору правильного числа генераторов псевдослучайных чисел?
Зависит от того, насколько воспроизводимой вам должна быть последовательность. например если вы не можете гарантировать порядок выполнения вызовов rand () и вам нужно каждый раз генерировать одну и ту же последовательность для тестирования, то вам потребуется отдельный начальный / генератор для каждой из этих очередей.
Если вам не нужна повторяемость, просто возьмите один генератор, одно семя и дайте ему поработать.
Имейте в виду, что независимо от того, какой компьютерный язык вы используете, сгенерированные числа всегда будут псевдослучайными. Это означает, что с учетом того же семени, которое использовалось для порождения поколения, вы всегда получите один и тот же результат. Все включенные генераторы случайных чисел в языках программирования уже тщательно разработаны и протестированы, чтобы быть максимально оптимальными. Одного прохода со случайной функцией должно быть достаточно.
Используйте только один генератор случайных чисел, но убедитесь, что он хорошо посеян. Вы можете поместить его в начало функции main () и либо генерировать последовательности случайных чисел для последующего использования, либо по мере необходимости вызывать генератор.
Удостоверьтесь, что НЕ заполняете его каждый раз, когда вы звоните на него, так как это склонно к производству тех же номеров, если вы, например, посеиваете с использованием времени с точностью до секунды. Лучше всего посеять генератор один раз.
На самом деле, если вы работаете в Unix-подобной системе, рассмотрите возможность использования / DEV / случайное для вашего генератора. Не используйте свой собственный код, так как практически любая система, которую вы используете, гарантированно предоставит нативную или библиотеку для создания случайности.
В общем, рассмотрите возможность использования генераторов, которые используют внешние источники (шум от компьютерного оборудования) вместо расчета собственных.
Используйте только один генератор случайных чисел для всех функций.
Использование двух или более генераторов случайных чисел может вызвать проблемы. Большинство генераторов случайных чисел используют системное время в качестве начального начального числа. Если создать экземпляры двух классов случайных чисел, близких по времени, они могут создать одинаковую последовательность случайных чисел. При использовании одного генератора случайных чисел это не может произойти.