Поиск по сайту:

Почему в машинном обучении я каждый раз получаю разные результаты?


Получаете ли вы разные результаты от своего алгоритма машинного обучения?

Возможно, ваши результаты отличаются от результатов урока, и вы хотите понять, почему.

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

Этого следовало ожидать и даже может быть особенностью алгоритма, а не ошибкой.

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

После завершения этого урока вы будете знать:

  • Алгоритмы машинного обучения будут обучать разные модели, если набор обучающих данных будет изменен.
  • Алгоритмы стохастического машинного обучения используют случайность во время обучения, гарантируя, что при каждом запуске обучается другая модель.
  • Различия в среде разработки, такие как версии программного обеспечения и тип ЦП, могут привести к различиям в ошибках округления в прогнозах и оценках моделей.

Давайте начнем.

Обзор руководства

Этот урок разделен на пять частей; они есть:

  1. Помогите, я получаю разные результаты!?
  2. Различия, вызванные обучающими данными
  3. Различия, вызванные алгоритмом обучения
  4. Различия, вызванные процедурой оценки
  5. Различия, вызванные платформой

1. Помогите, у меня разные результаты!?

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

Это не ваша вина. На самом деле, зачастую это особенность, а не ошибка.

Мы четко укажем и объясним вашу проблему.

Во-первых, давайте разберемся с основами.

В прикладном машинном обучении мы запускаем «алгоритм» машинного обучения на наборе данных, чтобы получить «модель» машинного обучения. Затем модель можно оценить на данных, которые не используются во время обучения, или использоваться для прогнозирования новых данных, которые также не используются во время обучения.

  • Алгоритм: процедура выполняется на данных, в результате которых создается модель (например, обучение или обучение).
  • Модель: структура данных и коэффициенты, используемые для прогнозирования данных.

Дополнительную информацию о разнице между алгоритмами и моделями машинного обучения см. в руководстве:

  • Разница между алгоритмом и моделью в машинном обучении

Контролируемое машинное обучение означает, что у нас есть примеры (строки) с входными и выходными переменными (столбцы). Мы не можем написать код для прогнозирования выходных данных с учетом входных данных, потому что это слишком сложно, поэтому мы используем алгоритмы машинного обучения, чтобы научиться прогнозировать выходные данные на основе входных данных на исторических примерах.

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

  • Обучение с учителем. Автоматическое изучение функции сопоставления примеров входных данных с примерами выходных данных.

В этом смысле модель машинного обучения — это программа, которую мы собираемся использовать для какого-то проекта или приложения; так уж получилось, что программа была изучена на примерах (с использованием алгоритма), а не написана явно с операторами if и тому подобным. Это тип автоматического программирования.

  • Модель машинного обучения: «программа», автоматически обучающаяся на основе исторических данных.

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

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

Есть как минимум четыре случая, когда вы получите разные результаты; они есть:

  • Разные результаты из-за различий в обучающих данных.
  • Различные результаты из-за алгоритмов стохастического обучения.
  • Различные результаты из-за процедур стохастической оценки.
  • Разные результаты из-за различий в платформах.

Давайте подробнее рассмотрим каждый по очереди.

Не упустил ли я возможную причину разницы в результатах?
Дайте мне знать в комментариях ниже.

2. Различия, вызванные обучающими данными

Вы получите разные результаты, если запустите один и тот же алгоритм на разных данных.

Это называется дисперсией алгоритма машинного обучения. Возможно, вы слышали об этом в контексте компромисса между смещением и дисперсией.

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

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

Более чувствительный алгоритм имеет большую дисперсию, что приведет к большей разнице в модели и, в свою очередь, к сделанным прогнозам и оценке модели. И наоборот, менее чувствительный алгоритм имеет меньшую дисперсию и приведет к меньшей разнице в результирующей модели с разными обучающими данными и, в свою очередь, к меньшей разнице в результирующих прогнозах и оценке модели.

  • Высокая дисперсия: алгоритм более чувствителен к конкретным данным, используемым во время обучения.
  • Низкая дисперсия: алгоритм менее чувствителен к конкретным данным, используемым во время обучения.

Дополнительную информацию о дисперсии и компромиссе между смещением и дисперсией см. в руководстве:

  • Нежное введение в компромисс между смещением и дисперсией в машинном обучении

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

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

Тем не менее, когда вы обучаете алгоритм машинного обучения на разных обучающих данных, вы получите другую модель с другим поведением. Это означает, что разные данные обучения дадут модели, которые делают разные прогнозы и имеют разную оценку производительности (например, ошибку или точность).

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

Что я должен делать?

Часто вы можете уменьшить дисперсию модели, изменив гиперпараметр алгоритма.

Например, k в k-ближайших соседях контролирует дисперсию алгоритма, где небольшие значения, такие как k=1, приводят к высокой дисперсии и большие значения, такие как k=21, приводят к низкой дисперсии.

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

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

3. Различия, вызванные алгоритмом обучения

Вы можете получить разные результаты при запуске одного и того же алгоритма на одних и тех же данных из-за природы алгоритма обучения.

Это наиболее вероятная причина, по которой вы читаете этот урок.

Вы запускаете один и тот же код в одном и том же наборе данных и получаете модель, которая каждый раз делает разные прогнозы или имеет разную производительность, и вы думаете, что это ошибка или что-то в этом роде. Я прав?

Это не баг, это особенность.

Некоторые алгоритмы машинного обучения являются детерминированными. Точно так же, как программирование, к которому вы привыкли. Это означает, что когда алгоритму предоставляется один и тот же набор данных, он каждый раз изучает одну и ту же модель. Примером может служить алгоритм линейной регрессии или логистической регрессии.

Некоторые алгоритмы не являются детерминированными; вместо этого они стохастические. Это означает, что их поведение включает в себя элементы случайности.

Стохастический не означает случайный. Алгоритмы стохастического машинного обучения не изучают случайную модель. Они изучают модель на основе предоставленных вами исторических данных. Вместо этого конкретные небольшие решения, принимаемые алгоритмом в процессе обучения, могут меняться случайным образом.

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

Дополнительную информацию о стохастике и ее значении в машинном обучении см. в руководстве:

  • Что означает стохастик в машинном обучении?

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

Поиск хорошей или лучшей картографической функции для набора данных — это своего рода задача поиска. Мы тестируем различные алгоритмы и тестируем конфигурации алгоритмов, которые определяют форму пространства поиска и дают нам отправную точку в пространстве поиска. Затем мы запускаем алгоритмы, которые затем перемещают пространство поиска к одной модели.

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

Дополнительную информацию об обучении с учителем как о задаче поиска см. в руководстве:

  • Нежное введение в прикладное машинное обучение как задачу поиска

Примером алгоритма, использующего случайность во время обучения, является нейронная сеть. Он использует случайность двумя способами:

  • Случайные начальные веса (коэффициенты модели).
  • Случайное перемешивание образцов каждую эпоху.

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

Дополнительную информацию о стохастической природе нейронных сетей см. в руководстве:

  • Зачем инициализировать нейронную сеть со случайными весами?

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

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

Дополнительную информацию о стохастической природе ансамблей мешков см. в руководстве:

  • Как разработать ансамбль упаковки с помощью Python

Что я должен делать?

Случайность, используемую алгоритмами обучения, можно контролировать.

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

Дополнительную информацию о генераторах случайных чисел и настройке фиксации начального числа см. в руководстве:

  • Введение в генераторы случайных чисел для машинного обучения в Python

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

  • Какое начальное число лучше всего подходит для генератора псевдослучайных чисел?

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

Вы можете доказать, что окончательная модель подходит, используя фиксированное начальное значение, чтобы гарантировать, что одна и та же модель создается на основе одних и тех же данных перед использованием в производстве до любого тестирования системы перед развертыванием. Тем не менее, как только набор обучающих данных изменится, изменится и модель.

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

Учтите, что для вашего набора данных нет ни одной модели. Вместо этого существует стохастический процесс (конвейер алгоритмов), который может генерировать модели для вашей проблемы.

Подробнее об этом смотрите в уроке:

  • Примите случайность в машинном обучении

Затем вы можете суммировать производительность этих моделей — конвейера алгоритмов — как распределение со средней ожидаемой ошибкой или точностью и стандартным отклонением.

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

Дополнительную информацию об ансамблевом подходе к окончательным моделям см. в руководстве:

  • Как уменьшить дисперсию в окончательной модели машинного обучения

4. Различия, вызванные процедурой оценки

Вы можете получить разные результаты при запуске одного и того же алгоритма с одними и теми же данными из-за процедуры оценки.

Двумя наиболее распространенными процедурами оценки являются разделение поездного теста и k-кратная перекрестная проверка.

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

Дополнительную информацию о разделении поезд-тест см. в руководстве:

  • Разделение поезд-тест для оценки алгоритмов машинного обучения

Процедура k-кратной перекрестной проверки включает в себя разделение набора данных на k непересекающихся частей и использование одной складки в качестве тестового набора, а всех остальных сгибов в качестве обучающего набора. Модель подгоняется к обучающему набору и оценивается по контрольной свертке, и этот процесс повторяется k раз, давая возможность использовать каждую складку в качестве контрольной складки.

Дополнительную информацию о перекрестной проверке в k-кратном размере см. в руководстве:

  • Нежное введение в k-кратную перекрестную проверку

Обе эти процедуры оценки модели являются стохастическими.

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

Такое использование случайности — это особенность, а не ошибка.

Использование случайности в этом случае позволяет повторной выборке аппроксимировать оценку производительности модели, которая не зависит от конкретной выборки данных, взятой из домена. Это приближение является предвзятым, поскольку у нас есть только небольшая выборка данных для работы, а не полный набор возможных наблюдений.

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

Дополнительную информацию о более общей теме статистической выборки см. в руководстве:

  • Небольшое введение в статистическую выборку и повторную выборку

Таким образом, каждая оценка детерминированного алгоритма машинного обучения, такого как линейная регрессия или логистическая регрессия, может давать различную оценку ошибки или точности.

Что я должен делать?

Решение в этом случае во многом похоже на случай для алгоритмов стохастического обучения.

Начальное число для генератора псевдослучайных чисел может быть фиксированным или можно принять случайность процедуры.

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

Если большое количество алгоритмов машинного обучения и конфигураций алгоритмов систематически оцениваются в задаче прогнозного моделирования, хорошей идеей может быть исправление случайного начального числа процедуры оценки. Любое значение подойдет.

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

Принятие случайности также может быть уместным. Это предполагает многократное повторение процедуры оценки и представление сводной информации о распределении показателей эффективности, например, среднего значения и стандартного отклонения.

Возможно, наименее предвзятым подходом к повторной оценке было бы использование повторной k-кратной перекрестной проверки, например, три повтора с 10 сгибами (3×10), что является обычным явлением, или пять повторов с двумя сгибами (5×2), что обычно используется при сравнении алгоритмов с проверкой статистических гипотез.

Более подробное введение в использование тестов статистических гипотез для сравнения алгоритмов см. в руководстве:

  • Тесты статистической значимости для сравнения алгоритмов машинного обучения

Учебное пособие по сравнению средней производительности алгоритма с проверкой гипотезы см. в учебном пособии:

  • Проверка гипотезы для сравнения алгоритмов машинного обучения

5. Различия, вызванные платформой

Вы можете получить разные результаты при запуске одного и того же алгоритма с одними и теми же данными на разных компьютерах.

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

Причиной в этом случае является платформа или среда разработки, использованная для запуска примера, и результаты часто незначительно отличаются, но не всегда.

Это включает в себя:

  • Различия в архитектуре системы, например. Процессор или графический процессор.
  • Различия в операционной системе, например. МакОС или Линукс.
  • Различия в основных математических библиотеках, например. ЛАПАК или БЛАС.
  • Различия в версии Python, например. 3,6 или 3,7.
  • Различия в версии библиотеки, например. scikit-learn 0,22 или 0,23.

Алгоритмы машинного обучения — это тип численных вычислений.

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

Кроме того, различия в версиях библиотек могут означать исправление ошибок и изменение функциональности, что также может привести к разным результатам.

Кроме того, это также объясняет, почему вы получите разные результаты для одного и того же алгоритма на одной машине, реализованной на разных языках, таких как R и Python. Небольшие различия в реализации и/или различия в используемых базовых математических библиотеках приведут к различиям в результирующей модели и прогнозах, сделанных этой моделью.

Что я должен делать?

Это не означает, что саму платформу можно рассматривать как гиперпараметр и настроить для решения задач прогнозного моделирования.

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

Одним из подходов может быть использование виртуализации, такой как Docker или экземпляр виртуальной машины, чтобы обеспечить постоянство среды, если полная воспроизводимость имеет решающее значение для проекта.

Честно говоря, на практике эффект часто очень мал (по крайней мере, по моему ограниченному опыту), пока основные версии программного обеспечения хорошо или достаточно близко совпадают.

Дальнейшее чтение

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

Похожие руководства

  • Разница между алгоритмом и моделью в машинном обучении
  • Нежное введение в компромисс между смещением и дисперсией в машинном обучении
  • Что означает стохастик в машинном обучении?
  • Нежное введение в прикладное машинное обучение как задачу поиска
  • Зачем инициализировать нейронную сеть со случайными весами?
  • Как разработать ансамбль упаковки с помощью Python
  • Как уменьшить дисперсию в окончательной модели машинного обучения
  • Введение в генераторы случайных чисел для машинного обучения в Python
  • Небольшое введение в статистическую выборку и повторную выборку
  • Тесты статистической значимости для сравнения алгоритмов машинного обучения

Краткое содержание

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

В частности, вы узнали:

  • Алгоритмы машинного обучения будут обучать разные модели, если набор обучающих данных будет изменен.
  • Алгоритмы стохастического машинного обучения используют случайность во время обучения, гарантируя, что при каждом запуске обучается другая модель.
  • Различия в среде разработки, такие как версии программного обеспечения и тип ЦП, могут привести к различиям в ошибках округления в прогнозах и оценках моделей.

У вас есть вопросы?
Задавайте свои вопросы в комментариях ниже, и я постараюсь ответить.