Я хочу реализовать алгоритм машинного обучения в scikit learn, но я не понимаю, что random_state
делает этот параметр ? Почему я должен использовать это?
Я также не мог понять, что такое псевдослучайное число.
источник
Я хочу реализовать алгоритм машинного обучения в scikit learn, но я не понимаю, что random_state
делает этот параметр ? Почему я должен использовать это?
Я также не мог понять, что такое псевдослучайное число.
train_test_split
разбивает массивы или матрицы на случайные подмножества поездов и тестов. Это означает, что каждый раз, когда вы запускаете его без указания random_state
, вы получите другой результат, это ожидаемое поведение. Например:
Прогон 1:
>>> a, b = np.arange(10).reshape((5, 2)), range(5)
>>> train_test_split(a, b)
[array([[6, 7],
[8, 9],
[4, 5]]),
array([[2, 3],
[0, 1]]), [3, 4, 2], [1, 0]]
Run 2
>>> train_test_split(a, b)
[array([[8, 9],
[4, 5],
[0, 1]]),
array([[6, 7],
[2, 3]]), [4, 2, 0], [3, 1]]
Меняется. С другой стороны, если вы используете random_state=some_number
, то вы можете гарантировать, что выходной результат прогона 1 будет равен выходному сигналу прогона 2 , т. Е. Ваше разделение будет всегда одинаковым. Неважно, какое random_state
число на самом деле составляет 42, 0, 21, ... Важно то, что каждый раз, когда вы используете 42, вы всегда получите один и тот же результат при первом выполнении разделения. Это полезно, если вам нужны воспроизводимые результаты, например, в документации, чтобы каждый мог последовательно видеть одинаковые цифры при запуске примеров. На практике я бы сказал, что вы должны установить random_state
какое-то фиксированное число во время тестирования, но затем удалить его в производстве, если вам действительно нужно случайное (а не фиксированное) разделение.
Что касается вашего второго вопроса, генератор псевдослучайных чисел - это генератор чисел, который генерирует почти действительно случайные числа. Почему они не являются случайными, выходит за рамки этого вопроса и, вероятно, не имеет значения в вашем случае, вы можете посмотреть здесь более подробную информацию.
Если вы не указываете
random_state
в своем коде, то каждый раз, когда вы запускаете (исполняете) свой код, генерируется новое случайное значение, и наборы данных train и test будут каждый раз иметь разные значения.Однако, если фиксированное значение назначается примерно так,
random_state = 42
независимо от того, сколько раз вы выполняете свой код, результат будет одинаковым .ie, одинаковые значения в наборах данных train и test.источник
Если вы не упоминаете random_state в коде, то всякий раз, когда вы выполняете свой код, генерируется новое случайное значение, и наборы данных train и test каждый раз будут иметь разные значения.
Однако, если вы используете конкретное значение для random_state (random_state = 1 или любое другое значение) каждый раз, когда результат будет одинаковым, то есть одинаковые значения в наборах данных train и test. Смотрите ниже код:
Не имеет значения, сколько раз вы запустите код, результат будет 70.
Попробуйте удалить random_state и запустить код.
Теперь здесь вывод будет разным при каждом выполнении кода.
источник
Число random_state случайным образом разделяет наборы тестовых и обучающих данных. В дополнение к тому, что объясняется здесь, важно помнить, что значение random_state может оказать существенное влияние на качество вашей модели (под качеством я, в сущности, подразумеваю точность прогнозирования). Например, если вы берете определенный набор данных и обучаете его регрессионной модели без указания значения random_state, существует вероятность того, что каждый раз вы будете получать другой результат точности для вашей обученной модели на тестовых данных. Поэтому важно найти лучшее значение random_state, чтобы предоставить вам наиболее точную модель. И затем это число будет использовано для воспроизведения вашей модели в другом случае, например в другом исследовательском эксперименте. Для этого
источник
Если не предоставлено случайное состояние, система будет использовать случайное состояние, созданное внутри. Таким образом, когда вы запускаете программу несколько раз, вы можете увидеть разные точки данных поезда / теста, и поведение будет непредсказуемым. В случае, если у вас возникла проблема с вашей моделью, вы не сможете восстановить ее, поскольку вы не знаете случайное число, которое было сгенерировано при запуске программы.
Если вы видите древовидные классификаторы - либо DT, либо RF, они пытаются создать попытку, используя оптимальный план. Хотя в большинстве случаев этот план может быть одним и тем же, могут быть случаи, когда дерево может отличаться, и поэтому прогнозы. При попытке отладки вашей модели вы не сможете воссоздать тот же экземпляр, для которого было построено дерево. Итак, чтобы избежать всех этих хлопот, мы используем random_state при создании DecisionTreeClassifier или RandomForestClassifier.
PS: Вы можете немного углубиться в то, как дерево построено в DecisionTree, чтобы лучше это понять.
randomstate в основном используется для воспроизведения вашей проблемы одинаково при каждом запуске. Если вы не используете случайное состояние в Traintestsplit, каждый раз, когда вы делаете разделение, вы можете получить различный набор обучающих и тестовых точек данных и не поможет вам в отладке в случае возникновения проблемы.
Из Док:
Если int, randomstate - это начальное число, используемое генератором случайных чисел; Если экземпляр RandomState, randomstate является генератором случайных чисел; Если None, генератор случайных чисел - это экземпляр RandomState, используемый np.random.
источник
Разбить массивы или матрицы на случайные подмножества поездов и тестов
Если int, random_state - это начальное число, используемое генератором случайных чисел; Если экземпляр RandomState, random_state является генератором случайных чисел; Если None, генератор случайных чисел - это экземпляр RandomState, используемый np.random. источник: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
'' 'Что касается случайного состояния, то оно используется во многих рандомизированных алгоритмах в sklearn для определения случайного начального числа, передаваемого в генератор псевдослучайных чисел. Следовательно, он не управляет каким-либо аспектом поведения алгоритма. Как следствие, значения случайного состояния, которые хорошо работали в наборе проверки, не соответствуют тем, которые будут хорошо работать в новом, невидимом наборе испытаний. В самом деле, в зависимости от алгоритма вы можете увидеть совершенно разные результаты, просто изменив порядок обучающих образцов. '' 'Источник: /stats/263999/is-random-state-a-parameter -настраивать
источник