random state python что это

Русские Блоги

Понимание параметров random_state

В процессе обучения машинному обучению мы часто сталкиваемся с параметром random_state, кратко опишем его роль.
Роль: контролировать случайное состояние.

Причина: зачем нужен такой параметр random_state (случайное состояние)?

Вот три ситуации:
1. При построении модели:

2. При создании набора данных:

3. При разделении набора данных на обучающий набор и тестовый набор:

Что будет, если random_state не установлен?
Например, в 1 модель, построенная каждый раз, различается.
Например, в 2 каждый раз создается другой набор данных.
Например, в 3 обучающий набор и набор тестов каждый раз различаются.

Причина этого в том, что построение модели, создание набора данных и разделение набора данных являются случайными процессами.

Если вы хотите, чтобы результаты были воспроизводимы, очень важно исправить random_state.

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

После исправления random_state модель, построенная каждый раз, остается той же, сгенерированный набор данных остается тем же самым, и результат разделения всегда один и тот же.

Резюме: Для тех процессов, которые являются случайными по своей природе, нам необходимо управлять случайным состоянием, чтобы мы могли многократно показывать одни и те же результаты.
Если случайное состояние не контролируется, результаты эксперимента не могут быть зафиксированы, а отображаются случайным образом.

Источник

10.3. Контроль случайности ¶

10.3.1. Использование None или RandomState экземпляры, а также повторные вызовы fit и split

Здесь мы проиллюстрируем эти правила как для оценщиков, так и для CV-сплиттеров.

10.3.1.1. Оценщики

Передача экземпляров означает, что fit многократный вызов не даст одинаковых результатов, даже если оценщик приспособлен к одним и тем же данным и с одними и теми же гиперпараметрами:

10.3.1.2. CV разветвители

Рандомизированные разделители CV имеют аналогичное поведение при RandomState передаче экземпляра; вызов split несколько раз дает разные разбиения данных:

10.3.2. Распространенные подводные камни и тонкости

Хотя правила, управляющие random_state параметром, кажутся простыми, они, тем не менее, имеют некоторые тонкие последствия. В некоторых случаях это может даже привести к неверным выводам.

10.3.2.1. Оценщики

Различные типы random_state приводят к разным процедурам перекрестной проверки

В зависимости от типа random_state параметра оценщики будут вести себя по-разному, особенно в процедурах перекрестной проверки. Рассмотрим следующий фрагмент:

Хотя наличие постоянного оценщика RNG по сгибам не является неправильным по своей сути, мы обычно хотим, чтобы результаты CV были устойчивыми по отношению к случайности оценщика. В результате передача экземпляра вместо целого числа может быть предпочтительнее, поскольку это позволит оценивающему RNG изменяться для каждой кратности.

Клонирование

Еще один тонкий побочный эффект передачи RandomState экземпляров — это то, как clone будет работать:

Если бы было передано целое число, a и b были бы точными клонами, и они не влияли бы друг на друга.

10.3.2.2. CV разветвители

При передаче RandomState экземпляра разделители CV дают разные разделения каждый раз при split вызове. При сравнении различных оценщиков это может привести к переоценке дисперсии разницы в производительности между оценщиками:

Для получения сравнимых сгиба до раза результатов во всех сценариях, следует передать целое число в CV разветвителя: cv = KFold(shuffle=True, random_state=0)

10.3.3. Общие рекомендации

10.3.3.1. Получение воспроизводимых результатов при многократном выполнении

Теперь нам гарантируется, что результат этого скрипта всегда будет 0,84, независимо от того, сколько раз мы его запускали. Изменение глобальной rng переменной на другое значение должно повлиять на результаты, как и ожидалось.

Также можно объявить rng переменную как целое число. Однако это может привести к менее надежным результатам перекрестной проверки, как мы увидим в следующем разделе.

10.3.3.2. Надежность результатов перекрестной проверки

Когда мы оцениваем производительность рандомизированного оценщика с помощью перекрестной проверки, мы хотим убедиться, что оценщик может давать точные прогнозы для новых данных, но мы также хотим убедиться, что оценщик устойчив по отношению к своей случайной инициализации. Например, мы хотели бы, чтобы инициализация случайных весов SGDCLassifier была стабильно хорошей для всех сверток: в противном случае, когда мы обучаем эту оценку новым данным, нам может не повезти, и случайная инициализация может привести к плохой производительности. Точно так же мы хотим, чтобы случайный лес был устойчивым по отношению к набору случайно выбранных функций, которые будет использовать каждое дерево.

По этим причинам предпочтительно оценивать преформность перекрестной проверки, позволяя оценщику использовать различный RNG в каждом сгибе. Это делается путем передачи RandomState экземпляра (или None ) в инициализацию оценщика.

Когда мы передаем целое число, оценщик будет использовать один и тот же RNG для каждого сгиба: если оценщик работает хорошо (или плохо), по оценке CV, это может быть просто потому, что нам повезло (или не повезло) с этим конкретным начальным числом. Передача экземпляров приводит к более надежным результатам CV и делает более справедливым сравнение между различными алгоритмами. Это также помогает ограничить соблазн рассматривать RNG оценщика как гиперпараметр, который можно настраивать.

Независимо от того, передаем ли мы RandomState экземпляры или целые числа в разделители CV, это не влияет на надежность, если split вызывается только один раз. Когда split вызывается несколько раз, сравнение сгиба-к-сгибу больше невозможно. В результате передача целого числа в разделители CV обычно более безопасна и охватывает большинство случаев использования.

Источник

Random state (Pseudo-random number) in Scikit learn

I want to implement a machine learning algorithm in scikit learn, but I don’t understand what this parameter random_state does? Why should I use it?

I also could not understand what is a Pseudo-random number.

random state python что это. Смотреть фото random state python что это. Смотреть картинку random state python что это. Картинка про random state python что это. Фото random state python что это

7 Answers 7

Run 1:

Run 2

Regarding your second question, a pseudo-random number generator is a number generator that generates almost truly random numbers. Why they are not truly random is out of the scope of this question and probably won’t matter in your case, you can take a look here form more details.

If you don’t specify the random_state in your code, then every time you run(execute) your code a new random value is generated and the train and test datasets would have different values each time.

random state python что это. Смотреть фото random state python что это. Смотреть картинку random state python что это. Картинка про random state python что это. Фото random state python что это

If you don’t mention the random_state in the code, then whenever you execute your code a new random value is generated and the train and test datasets would have different values each time.

However, if you use a particular value for random_state(random_state = 1 or any other value) everytime the result will be same,i.e, same values in train and test datasets. Refer below code:

Doesn’t matter how many times you run the code, the output will be 70.

Try to remove the random_state and run the code.

Now here output will be different each time you execute the code.

random_state number splits the test and training datasets with a random manner. In addition to what is explained here, it is important to remember that random_state value can have significant effect on the quality of your model (by quality I essentially mean accuracy to predict). For instance, If you take a certain dataset and train a regression model with it, without specifying the random_state value, there is the potential that everytime, you will get a different accuracy result for your trained model on the test data. So it is important to find the best random_state value to provide you with the most accurate model. And then, that number will be used to reproduce your model in another occasion such as another research experiment. To do so, it is possible to split and train the model in a for-loop by assigning random numbers to random_state parameter:

random state python что это. Смотреть фото random state python что это. Смотреть картинку random state python что это. Картинка про random state python что это. Фото random state python что это

Well the question what is «random state» and why is it used, has been answered above nicely by people above. I will try and answer the question «Why do we choose random state as 42 very often during training a machine learning model? why we dont choose 12 or 32 or 5? » Is there a scientific explanation?

Many students and practitioners use this number(42) as random state is because it is used by many instructors in online courses. They often set the random state or numpy seed to number 42 and learners follow the same practice without giving it much thought.

To be specific, 42 has nothing to do with AI or ML. It is actually a generic number, In Machine Learning, it doesn’t matter what the actual random number is, as mentioned in scikit API doc, any INTEGER is sufficient enough for the task at hand.

42 is a reference from Hitchhikers guide to galaxy book. The answer to life universe and everything and is meant as a joke. It has no other significance.

References:

random state python что это. Смотреть фото random state python что это. Смотреть картинку random state python что это. Картинка про random state python что это. Фото random state python что это

random state python что это. Смотреть фото random state python что это. Смотреть картинку random state python что это. Картинка про random state python что это. Фото random state python что это

random state python что это. Смотреть фото random state python что это. Смотреть картинку random state python что это. Картинка про random state python что это. Фото random state python что это

If there is no randomstate provided the system will use a randomstate that is generated internally. So, when you run the program multiple times you might see different train/test data points and the behavior will be unpredictable. In case, you have an issue with your model you will not be able to recreate it as you do not know the random number that was generated when you ran the program.

PS: You can go a bit in depth on how the Tree is built in DecisionTree to understand this better.

randomstate is basically used for reproducing your problem the same every time it is run. If you do not use a randomstate in traintestsplit, every time you make the split you might get a different set of train and test data points and will not help you in debugging in case you get an issue.

Источник

Что такое параметр random_state в TSNE scikit-learn?

random_state: int или экземпляр RandomState или None (по умолчанию) Управление начальным числом генератора псевдослучайных чисел. Если нет, используйте синглтон numpy.random. Обратите внимание, что разные инициализации могут привести к разным локальным минимумам функции стоимости.

Хотя результаты классификации зависят от random_state?, безусловно, помогает объяснить, почему используется случайное состояние в sklearn это не проясняет, как случайное состояние используется в реализации алгоритма sklearn tsne.

2 ответа

Использование random_state довольно хорошо объяснено в посте, который я прокомментировал. Что касается этого конкретного случая TSNE, random_state используется для заполнения функции cost_faltage алгоритма.

Метод: строка (по умолчанию: ‘barnes_hut ‘)

По умолчанию алгоритм вычисления градиента использует приближение Барнса-Хата, работающее за время O (NlogN)

Кроме того, ищите термин «случайный» в цитируемой вами статье. Первая строка

Градиентный спуск инициализируется путем случайной выборки точек карты из изотропного гаусса с небольшой дисперсией, центрированной вокруг начала координат.

Также другие местоположения слова «случайный» поясняют, что существует случайность выбора начальных ориентиров, и, следовательно, могут влиять на локальные минимумы функции.

Объяснение : Некоторые алгоритмы используют случайные числа при инициализации определенных параметров, таких как весовые коэффициенты для оптимизации, случайное разбиение данных на обучающие и тестовые данные, выбор некоторых функций и т. Д.

В настоящее время в программировании и программном обеспечении вообще нет ничего действительно случайного. Для генерации случайных чисел используется программа. Но поскольку это программа с некоторыми фиксированными шагами, она не может быть действительно случайной. Так его называют псевдослучайными генераторами. Теперь, чтобы каждый раз выводить различную последовательность чисел, они принимают входные данные, в соответствии с которыми генерируются числа. Как правило, этот вход является текущим временем в миллисекундах (Epochs UTC). Этот вход называется семенем. Исправление начального числа означает исправление выходных чисел.

random_state используется в качестве начального числа для генератора псевдослучайных чисел в scikit-learn, чтобы дублировать поведение, когда такая случайность задействована в алгоритмах. Когда зафиксировано random_state, оно будет давать одинаковые результаты при разных запусках программы. Так что легче отлаживать и выявлять проблемы, если таковые имеются. Без установки random_state будут использоваться разные начальные числа при каждом запуске алгоритма, и вы получите разные результаты. Может случиться так, что вы можете получить очень высокий балл в первый раз и никогда не сможете достичь этого снова.

Теперь в машинном обучении мы хотим повторить наши шаги точно так же, как и прежде, чтобы проанализировать результаты. Следовательно, random_state фиксируется с некоторым целым числом. Надеюсь, поможет.

Он используется на PCA (для уменьшения размерности данных) и для инициализации встраивания обучающих данных.

Вы также можете попытаться прочитать больше о методе.

Edit1: это может (или нет) повлиять на результаты напрямую. Я предлагаю вам установить случайное семя и всегда использовать это.

Источник

Модуль Python random – Генерация случайных чисел/Последовательностей

Эта статья посвящена модулю random в Python, который используется для генерации псевдослучайных чисел для различных вероятностных распределений.

Эта статья посвящена модулю random в Python, который используется для генерации псевдослучайных чисел для различных вероятностных распределений.

Методы случайных модулей Python

1. семена()

Это инициализирует генератор случайных чисел. Чтобы сгенерировать новую случайную последовательность, необходимо установить начальное значение в зависимости от текущего системного времени. random.seed() задает начальное значение для генерации случайных чисел.

2. getstate()

3. setstate(state_obj)

4. getrandbits(k)

Это возвращает целое число Python с k случайными битами. Это полезно для таких методов, как randrange() для обработки произвольных больших диапазонов для генерации случайных чисел.

Генерация Случайных Целых Чисел

Модуль random предоставляет некоторые специальные методы для генерации случайных целых чисел.

1. рандрейндж(старт, стоп, шаг)

2. рандинт(a, b)

Вот пример, иллюстрирующий обе вышеперечисленные функции.

Генерация случайных чисел с плавающей запятой

Подобно генерации целых чисел, существуют функции, которые генерируют случайные последовательности с плавающей запятой.

Существуют аналогичные функции для других распределений, таких как Нормальное распределение, Гамма-распределение и т. Д.

Пример генерации этих чисел с плавающей запятой приведен ниже:

Случайные последовательности с использованием модуля random

Подобно целым числам и последовательностям с плавающей запятой, общая последовательность может представлять собой набор элементов, таких как список/кортеж. Модуль random предоставляет полезные функции, которые могут ввести состояние случайности в последовательности.

1. случайное перемешивание(x)

Это используется для перетасовки последовательности на месте. Последовательностью может быть любой список/кортеж, содержащий элементы.

Пример кода для иллюстрации перетасовки:

2. случайный выбор(seq)

Это широко используемая функция на практике, в которой вы хотите случайным образом выбрать элемент из списка/последовательности.

3. случайная выборка(популяция, к)

Случайное семя

Это гарантирует, что мы должны помнить о нашем семени, когда имеем дело с псевдослучайными последовательностями, поскольку последовательность может повторяться, если семя остается неизменным.

Вывод

Мы узнали о различных методах, которые предоставляет нам случайный модуль Python для работы с целыми числами, числами с плавающей запятой и другими последовательностями, такими как списки и т. Д. Мы также видели, как seed влияет на последовательность псевдослучайных чисел.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *