Случайное состояние (псевдослучайное число)в Scikit learn


Я хочу реализовать алгоритм машинного обучения в scikit learn, но я не понимаю, что это за параметр random_state делает? Почему я должен его использовать?

Я также не мог понять, что такое псевдослучайное число.

3 69

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