Что такое random state
Русские Блоги
Понимание параметров random_state
В процессе обучения машинному обучению мы часто сталкиваемся с параметром random_state, кратко опишем его роль.
Роль: контролировать случайное состояние.
Причина: зачем нужен такой параметр random_state (случайное состояние)?
Вот три ситуации:
1. При построении модели:
2. При создании набора данных:
3. При разделении набора данных на обучающий набор и тестовый набор:
Что будет, если random_state не установлен?
Например, в 1 модель, построенная каждый раз, различается.
Например, в 2 каждый раз создается другой набор данных.
Например, в 3 обучающий набор и набор тестов каждый раз различаются.
Причина этого в том, что построение модели, создание набора данных и разделение набора данных являются случайными процессами.
Если вы хотите, чтобы результаты были воспроизводимы, очень важно исправить random_state.
Для модели случайного леса он по сути случайный, и установка различных случайных состояний (или не установка параметра random_state) может полностью изменить построенную модель.
Для генерации набора данных он также является по существу случайным. Установка различных случайных состояний (или не установка параметра random_state) может полностью изменить сгенерированный набор данных.
Разделение набора данных также носит случайный характер. Установка другого случайного состояния (или не установка параметра random_state) может полностью изменить результат разделения.
После исправления random_state модель, построенная каждый раз, остается той же, сгенерированный набор данных остается тем же самым, и результат разделения всегда один и тот же.
Резюме: Для тех процессов, которые являются случайными по своей природе, нам необходимо управлять случайным состоянием, чтобы мы могли многократно показывать одни и те же результаты.
Если случайное состояние не контролируется, результаты эксперимента не могут быть зафиксированы, а отображаются случайным образом.
Что такое параметр 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: это может (или нет) повлиять на результаты напрямую. Я предлагаю вам установить случайное семя и всегда использовать это.
Роль random_state в train_test_split и классификаторах
Предположим, следующая строка выполняется несколько раз для каждого из нескольких размеров теста:
2 ответа
1: Поскольку вы меняете размер теста, случайное состояние не повлияет на выбранные строки между размерами теста, и это не обязательно будет желательным поведением, поскольку вы просто пытаетесь получить оценки на основе по разным размерам выборок. Это будет делать за вас, так это позволит вам сравнивать модели, использующие входные данные, разделенные по одному и тому же случайному состоянию. Наборы тестов будут одинаковыми от одного цикла к другому. Позволяет правильно сравнивать характеристики модели на одних и тех же образцах.
2: Для таких моделей, как классификаторы дерева решений и многих других, есть параметры инициализации, которые задаются случайным образом. Случайное состояние здесь гарантирует, что эти параметры устанавливаются одинаковыми от одного запуска к другому, создавая воспроизводимое поведение.
3: Если размер теста отличается, и вы умножаете его на 100, вы будете создавать разные случайные состояния для каждого набора тестов. Но от одного полного прогона до следующего он будет воспроизводить воспроизводимое поведение. Вы можете так же легко установить здесь статическое значение.
Вы можете проверить это с помощью кода:
Это дает результат 70, указывая, что он только что переместил элементы из тестового набора в обучающий набор.
train_test_split создает случайную перестановку строк и выбирает на основе первых n строк этой перестановки, где n зависит от размера теста.
Что такое «random-state» в примере sklearn.model_selection.train_test_split?
Может ли кто-нибудь объяснить мне, что означает random_state в приведенном ниже примере?
Почему он жестко закодирован на 42?
5 ответов
Что такое семя с точки зрения генерации числа random? Мне нужно сгенерировать от сотен до тысяч чисел random, я много читал об использовании seed. Что такое семя? Является ли семя тем местом, откуда начинаются числа random? Например, если я установлю свое семя равным 5, будет ли оно генерировать.
На серьезной ноте random_state просто устанавливает начальное значение для генератора random, так что ваши расщепления при тестировании на поезд всегда детерминированы. Если вы не установите семя, оно будет отличаться каждый раз.
состояние Random гарантирует, что создаваемые вами разбиения воспроизводимы. Scikit-learn использует random перестановок для создания расколов. Предоставленное вами состояние random используется в качестве начального значения для генератора чисел random. Это гарантирует, что числа random генерируются в том же порядке.
Если вы не укажете random_state в коде, то каждый раз, когда вы запускаете(выполняете) свой код, генерируется новое случайное значение, и наборы данных train и test каждый раз будут иметь разные значения.
Когда Random_state не определен в коде для каждого прогона, данные поезда будут меняться, и точность может изменяться для каждого прогона. Когда определено Random_state = «constant integer», то данные поезда будут постоянными для каждого запуска, так что их будет легко отлаживать.
Состояние random-это просто номер лота набора, генерируемого случайным образом в любой операции. Мы можем указать этот номер лота всякий раз, когда нам снова понадобится тот же набор.
Похожие вопросы:
Я создаю самозаверяющий сертификат SSL, чтобы защитить раздел администратора моего сервера, и я продолжаю получать это сообщение от OpenSSL: не могу написать ‘random state’ Что это значит? Это.
У меня есть следующая строка кода: fmap (*2) (*11) 3 Я пытаюсь понять, что такое мой функтор в этом примере, потому что, когда я проверяю тип, я получаю это: Prelude> :t fmap (*2) (*11) 3 fmap.
В этом примере существует функция fn с аргументами null и false: io.configure(function () < function auth (data, fn) < fn(null, false); >; io.set(‘authorization’, auth); >); https:/ /.
Что такое семя с точки зрения генерации числа random? Мне нужно сгенерировать от сотен до тысяч чисел random, я много читал об использовании seed. Что такое семя? Является ли семя тем местом, откуда.
Я использую генератор чисел random из библиотеки Armadillo C++ из R. Armadillo позволяет выполнять высокопроизводительные вычисления матриц и векторов. Однако я не вижу, какой генератор чисел random.
Я наткнулся на несколько ресурсов, касающихся REST, но я не в состоянии ясно понять вещи. Мне было бы полезно, если бы кто-нибудь мог объяснить вещи в отношении моего примера ниже. У меня есть.
Я читаю книгу по информатике, где есть упражнение, требующее написания программы java для печати пяти однородных чисел random между 0 и 1. Я знаю, что такое число random и как создать его в java. Но.
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 обычно более безопасна и охватывает большинство случаев использования.