Случайное состояние (псевдослучайное число)в Scikit learn
Я хочу реализовать алгоритм машинного обучения в scikit learn, но я не понимаю, что это за параметр random_state
делает? Почему я должен его использовать?
Я также не мог понять, что такое псевдослучайное число.
3 ответа:
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 будет равно выходу Run 2, т. е. ваш раскол будет всегда одинаковым. Это не имеет значения, что на самом делеrandom_state
число 42, 0, 21, ... Важно то, что каждый раз, когда вы используете 42, вы всегда будете получать один и тот же результат при первом разделении. Это полезно, если вы хотите воспроизводимые результаты, например, в документации, так что все могут последовательно видеть одни и те же числа при запуске примеров. На практике я бы сказал, что вы должны установитьrandom_state
к некоторому фиксированному номеру пока вы тестируете материал, но затем удаляете его в производстве, если вам действительно нужен случайный (а не фиксированный) раскол.Что касается вашего второго вопроса, генератор псевдослучайных чисел-это генератор чисел, который генерирует почти действительно случайные числа. Почему они не являются действительно случайными выходит за рамки этого вопроса и, вероятно, не имеет значения в вашем случае, вы можете посмотреть здесь форма более подробную информацию.
Если вы не указать
random_state
в коде, то каждый раз при запуске(выполнении) кода генерируется новое случайное значение и поезд и тестовые наборы данных будут иметь разные значения каждый раз.однако, если фиксированное значение присваивается как
random_state = 42
тогда независимо от того, сколько раз вы выполняете свой код, результат будет одинаковым .то есть, одинаковые значения в наборах данных train и test.
sklearn.model_selection.train_test_split(*arrays, **options)[source]
разбить массивы или матрицы на случайные последовательности и тестовые подмножества
Parameters: ... random_state : int, RandomState instance or None, optional (default=None)
Если инт random_state семя используется генератор случайных чисел; если RandomState примеру, random_state является генератор случайных чисел; если нет, то генератор случайных чисел-это RandomState экземпляра, используемые НП.случайность. источник: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
"' относительно случайного состояния, он используется во многих рандомизированных алгоритмах в sklearn для определения случайного семени, передаваемого генератору псевдослучайных чисел. Таким образом, он не гоберн какой-либо аспект поведения алгоритма. Как последовательное, случайные значения состояния, которые хорошо выполнялись в наборе проверки, не соответствуют тем, которые хорошо выполнялись бы в новом, невидимом наборе тестов. Действительно, в зависимости от алгоритма вы можете увидеть совершенно разные результаты, просто изменив порядок обучающих выборок."' источник: https://stats.stackexchange.com/questions/263999/is-random-state-a-parameter-to-tune