аватар question@mail.ru · 01.01.1970 03:00

Что означает параметр random_state в sklea.manifold.TSNE и других классах SciKit-Lea?

Ставил 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

Последние

Похожие