Как получить абсолютно воспроизводимые результаты с Scikit Learn? - PullRequest
0 голосов
/ 10 октября 2018

Что касается системы высева при использовании алгоритмов машинного обучения с Scikit-Learn, обычно упоминаются три разные вещи:

  • random.seed
  • np.random.seed
  • random_state в SkLearn (итераторы перекрестной проверки, алгоритмы ML и т. Д.)

У меня уже есть этот FAQ из SkLearn о том, как исправитьглобальная система посева и статьи , которые указывают, что это не должно быть просто FAQ.

Мой окончательный вопрос - как я могу получить абсолютно воспроизводимые результаты при запуске алгоритма ML с SkLearn?

Более подробно,

  • Если я использую только np.random.seed и не буду указывать random_state в SkLearn, тогда мои результаты будут абсолютно воспроизводимыми?

и хотя бы один вопрос ради знания:

  • Как именно np.random.seed и random_state из SkLearn связаны между собой?Как np.random.seed влияет на систему высева (random_state) SkLearn и заставляет его (по крайней мере гипотетически) воспроизводить те же результаты?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

В примерах документации scikit-learn, например здесь , они используют np.random.seed(n), что, похоже, работает.

0 голосов
/ 10 октября 2018

Определение случайного начального числа гарантирует, что при каждом запуске алгоритма случайное число будет генерировать одинаковые числа.ИМХО, результат всегда будет таким же, пока мы используем одни и те же данные и те же значения любых других параметров.

Как вы прочли в FAQ Склеарна, он одинаков, либо вы определяете его глобальноnumpy.random.seed() или параметром random_state во всех задействованных алгоритмах, при условии, что вы устанавливаете одинаковое число для обоих случаев.

Я беру пример из sklearn docs , чтобы проиллюстрировать это.

import numpy
from sklearn.model_selection import train_test_split
# numpy.random.seed(42)
X, y = np.arange(10).reshape((5, 2)), range(5)

#1 running this many times, Xtr will remain [[4, 5],[0, 1],[6, 7]].
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.33, random_state=42)

#2 try running this line many times, you will get various Xtr
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.33)

Теперь раскомментируйте третью строку.Запустите # 2 много раз.Xtr всегда будет [[4, 5],[0, 1],[6, 7]]

К numpy.random.seed() он устанавливает начальное значение по умолчанию (Нет), а затем попытается прочитать данные из / dev / urandom (или аналога Windows), если он доступен, илиСемя с часов иначе. 1018 * Docs *

...