2014-09-29 3 views
9

Я понимаю, что random_state используется в различных алгоритмах sklearn, чтобы разбить связь между разными предикторами (деревьями) с таким же значением метрики (например, в GradientBoosting). Но документация не уточняет и не детализирует это. КакВыбор random_state для алгоритмов sklearn

1) где еще эти семена используются для генерации случайных чисел? Скажем, для RandomForestClassifier, случайное число может быть использовано для поиска набора случайных функций для построения предиктора. Алгоритмы, использующие подэмплинг, могут использовать случайные числа для получения разных подэмплов. Может/есть одно и то же семя (random_state), играющее роль в генерации нескольких случайных чисел?

То, что я в основном беспокоит

2), как далеко это эффект этой random_state переменной. ? Может ли значение сделать большую разницу в прогнозировании (классификация или регрессия). Если да, то какие типы данных мне следует уделить больше внимания? Или это скорее стабильность, чем качество результатов?

3) Если это может иметь большое значение, как лучше всего выбрать этот случайный_стат ?. Сложно сделать GridSearch без интуиции. Специально, если набор данных таков, что один CV может занимать час.

4) Если мотив является только устойчивым результатом/оценка моих моделей и перекрестных оценок проверок через повторные запуски, это имеет тот же эффект, если я изложу random.seed(X), прежде чем я использовать любого из алгоритмов (и использовать random_state в Никто).

5) Скажем, я использую значение random_state в GradientBoosted Classifier, и я перекрестно проверяю, чтобы найти доброту моей модели (подсчитывая каждый раз при проверке). После того, как я удовлетворен, я буду тренировать свою модель на всем тренировочном наборе, прежде чем применять ее на тестовом наборе. Теперь полный набор тренировок имеет больше примеров, чем меньшие учебные наборы в перекрестной проверке. Таким образом, значение random_state может привести к совершенно другому поведению (выбору функций и индивидуальным предсказателям) по сравнению с тем, что происходило в цикле cv. Точно так же, как и минимальные образцы листьев и т. Д., Также может привести к тому, что утерянная модель теперь будет равна w.r.t количеству экземпляров в CV, а фактическое число экземпляров больше. Это правильное понимание? Каков подход к защите от этого?

ответ

3

Да, выбор случайных семян повлияет на результаты вашего прогноза, и, как вы указали в своем четвертом вопросе, воздействие на самом деле не предсказуемо.

Общим способом защиты от предсказаний, которые бывают хорошими или плохими, является случайное обучение нескольким моделям (основанным на разных случайных состояниях) и средним их прогнозами значимым образом. Аналогичным образом, вы можете увидеть перекрестную проверку как способ оценки «истинной» производительности модели путем усреднения производительности по нескольким разбиениям на обучение/тестирование.

+0

Спасибо за ответ Тобиас. Позволяет услышать от еще нескольких людей/экспертов, а затем я отвечу. – Run2

0

1) где еще эти семена используются для генерации случайных чисел? Скажем, для RandomForestClassifier, случайное число может использоваться для поиска набора случайных функций для построения предиктора. Алгоритмы, использующие подэмплинг, могут использовать случайные числа для получения разных подэмплов. Может/Является ли одно и то же семя (random_state), играющее роль в нескольких поколениях случайных чисел?

random_stateis used wherever randomness is needed:

Если ваш код зависит от генератора случайных чисел, он никогда не должен использовать такие функции, как numpy.random.random или numpy.random.normal. Такой подход может привести к проблемам повторяемости в модульных тестах. Вместо этого следует использовать объект numpy.random.RandomState, который построен из аргумента random_state, переданного классу или функции.

2), как далеко это эффект этой random_state переменной. ? Может ли значение сделать большую разницу в прогнозировании (классификация или регрессия). Если да, то какие типы данных мне следует уделить больше внимания? Или это скорее стабильность, чем качество результатов?

Хорошие проблемы не должны зависеть слишком сильно от random_state.

3) Если это может иметь большое значение, как лучше всего выбрать этот случайный случай ?. Сложно сделать GridSearch без интуиции. Специально, если набор данных таков, что один CV может занимать час.

Не выбирайте его. Вместо этого попытайтесь оптимизировать другие аспекты классификации для достижения хороших результатов, независимо от random_state.

4) Если мотив должны иметь только стабильный результат/оценку моих моделей и перекрестные оценки проверок через повторные запуски, это имеет тот же эффект, если я изложу random.seed (X), прежде чем я использовать любого из алгоритмы (и используйте random_state как None).

От Should I use `random.seed` or `numpy.random.seed` to control random number generation in `scikit-learn`?, random.seed(X) не используется sklearn. Если вам нужно это контролировать, вы можете установить np.random.seed().

5) Скажите, я использую random_state значения на GradientBoosted классификатором, и я крест проверку, чтобы найти совершенство моей модели (скоринг на проверках, установленных каждый раз). После того, как я удовлетворен, я буду тренировать свою модель на всем тренировочном наборе, прежде чем применять ее на тестовом наборе. Теперь полный набор тренировок имеет больше примеров, чем меньшие учебные наборы в перекрестной проверке. Таким образом, значение random_state теперь может привести к совершенно другому поведению (выбору функций и индивидуальным предикторам) по сравнению с тем, что происходило в цикле cv. Точно так же, как и минимальные образцы листьев и т. Д., Также может привести к тому, что утерянная модель теперь будет равна w.r.t количеству экземпляров в CV, а фактическое число экземпляров больше. Это правильное понимание? Каков подход к защите от этого?

Ответы How can I know training data is enough for machine learning в основном утверждают, что чем больше данных, тем лучше.

Если вы делаете много выбора модели, возможно, Sacred тоже может помочь. Среди прочего, это sets и может log случайное семя для каждой оценки, f.ex.:

>>./experiment.py with seed=123 
Смежные вопросы