Ставил 3 разных значений random_state, это: (None, 0, 1).
Так и не понял, в чем заключается суть этого метода. Читал документацию, ответ на сайте, но так и не понял.
PythonLib
Питон для всех
question@mail.ru
·
01.01.1970 03:00
Ставил 3 разных значений random_state, это: (None, 0, 1).
Так и не понял, в чем заключается суть этого метода. Читал документацию, ответ на сайте, но так и не понял.
answer@mail.ru
·
01.01.1970 03:00
Суть параметра random_state (во всех функциях и методах из SciKit-Lea) в воспроизводимых случайных значениях. Т.е. если явно задать значение random_state отличным от None - то генерируемые псевдослучайные величины будут иметь одни и те же значения при каждом вызове.
Пример:
In [1]: import numpy as npIn [2]: np.random.seed(31415)In [3]: np.random.randint(10, size=(5,5))Out[3]:array([[7, 3, 5, 8, 2], [6, 6, 3, 5, 6], [0, 0, 8, 3, 6], [1, 6, 8, 5, 1], [4, 6, 9, 2, 7]])In [4]: np.random.seed(31415)In [5]: np.random.randint(10, size=(5,5))Out[5]:array([[7, 3, 5, 8, 2], [6, 6, 3, 5, 6], [0, 0, 8, 3, 6], [1, 6, 8, 5, 1], [4, 6, 9, 2, 7]])In [6]: np.random.seed(31415)In [7]: np.random.randint(10, size=(5,5))Out[7]:array([[7, 3, 5, 8, 2], [6, 6, 3, 5, 6], [0, 0, 8, 3, 6], [1, 6, 8, 5, 1], [4, 6, 9, 2, 7]])PS если вы запустите данный код на вашем компьютере - вы получите те же самые значения в матрицах.
Зачем это нужно?
В задачах машинного обучения и не только часто используется генератор псевдослучайных чисел для инициализации различных параметров, весов в нейросетях, случайного разделения дата сета на обучающий и проверочный сеты.
Соответственно если мы хотим сравнить несколько методов или разные наборы параметров, то для честного сравнения надо использовать одинаковые обучающие и проверочные сеты.
Также бывает полезно создать наборы данных случайным, но воспроизводимым способом. Например вы создали несколько различных вычислительных методов и хотите их сравнить или проверить правильность - для этого необходимо использовать одинаковые входные данные.
UPD: Если задать одинаковое значение random_state, то на одинаковых входных данных результат t-SNE будет тоже одинаковый:
In [120]: from sklea.manifold import TSNEIn [121]: a = np.random.rand(1000, 50)In [122]: res1 = TSNE(n_components=2, random_state=123).fit_transform(a)In [123]: res2 = TSNE(n_components=2, random_state=123).fit_transform(a)In [124]: res1.sum()Out[124]: -205.98636In [125]: res2.sum()Out[125]: -205.98636In [126]: res1 == res2Out[126]:array([[ True, True], [ True, True], [ True, True], ..., [ True, True], [ True, True], [ True, True]])In [127]: (res1 == res2).all()Out[127]: True