Отладка алгоритма обучения
Что нам делать после того, как мы подгоним нашу модель машинного обучения к данным? Очевидно, нам нужно оценить его и понять, работает он или нет, и, особенно в последнем случае, внести некоторые изменения для его улучшения.
В этом случае нам нужно отладить наш алгоритм, но с чего начать?
Эта статья представляет собой отрывок из более сложного и полного курса по машинному обучению профессора Стэнфордского университета Эндрю Н.Г. Курс доступен на Coursera и является бесплатным. Вот ссылка на этот отличный курс! Приятного чтения :)
Оценка погрешности модели
Хорошей отправной точкой является функция стоимости, которую мы использовали для создания нашей модели (в этой формуле мы учли также параметр регуляризации)
Предположим, у нас есть линейная регрессионная модель, и мы хотим спрогнозировать продажи продуктов нашего клиента. Но что, если наша модель не работает или мы также хотели бы улучшить ее производительность?
Что ж, мы можем попробовать разные подходы, такие как:
- Попробуйте меньший набор функций → (позже мы увидим, что это исправляет высокую дисперсию)
- Попробуйте расширить набор функций → (позже мы увидим, что это исправляет High Bias)
- Ознакомьтесь с дополнительными обучающими примерами → (позже мы увидим, что это исправляет высокую дисперсию)
- Добавьте полиномиальные функции → (позже мы увидим, что это исправляет High Bias)
- Увеличить ƛ → (позже мы увидим, что это исправляет высокую дисперсию)
- Уменьшить ƛ → (позже мы увидим, что это исправляет High Bias)
Конечно, одна из возможностей - попробовать разные случайные подходы с разными параметрами и проверить результат, но это может быть пустой тратой времени, особенно если мы внесем некоторые изменения, требующие огромных усилий для получения большего количества данных, а для этого также могут потребоваться месяцы и что, если после получения дополнительных данных мы увидим, что производительность нашей модели не изменилась?
У нас есть несколько методов оценки или диагностики, которые могут помочь нам понять, какой путь лучше выбрать.
Мы можем оценить нашу гипотезу. Например, может случиться так, что наша модель идеально подходит для обучающего набора, но это из-за переобучения (данные = зеленая линия, модель = красная линия - вверху справа), в результате чего прогнозы будут неверными. Или на противоположной стороне у нас может быть модель, которая не соответствует правильно нашим данным в обучающем наборе, имеющем недостаточное соответствие (данные = зеленая линия, модель = красная линия - вверху слева).
Хорошей отправной точкой является разделение данных на две части: первая будет использоваться для обучения модели, а вторая - для тестирования. Это очень полезно, особенно если мы рассматриваем случай переобучения, когда точность модели для обучения будет очень высокой, в то время как тест скажет нам, что модель не была настолько идеальной;)
Итак, мы разделили 70/30:
- обучающий набор (обычно 70%)
- тестовый набор (обычно 30%)
Если мы кодируем на Python, существует библиотека, которая может помочь нам в этом, как показано в примере ниже:
С помощью этого разделения мы можем создать модель на основе обучающего набора, минимизируя нашу функцию стоимости с помощью значения ошибки (это будет работать лучше, потому что на модель не будут влиять данные тестового набора).
Когда у нас будет наша модель, мы будем оценивать ошибку с помощью тестового набора, используя прогноз модели, вычисляющий ошибку на основе расхождений между прогнозами и реальными значениями.
Проблема выбора модели
Как выбрать полином правильной степени, который лучше соответствует данным (линейный, квадратичный, кубический….)?
Мы можем рассчитать различные модели на основе параметра d (который будет степенью нашего полинома) и измерить для каждой из них ошибку значения на тестовом наборе, выбрав ту, которая работает лучше (минимальная ошибка). В этом случае мы можем разделить наши данные на 3 части:
- Обучающий набор (обычно 60%)
- Набор перекрестной проверки - CV (обычно 20%)
- Тестовый набор (обычно 20%)
Мы подбираем модель с помощью нашего обучающего набора. Последовательно подобранная модель используется для прогнозирования ответов на наблюдения во втором наборе данных, который называется набор перекрестной проверки.
Набор перекрестной проверки обеспечивает объективную оценку соответствия модели набору обучающих данных при настройке гиперпараметров модели, которые в данном случае являются степенями полинома.
После настройки гиперпараметров набор тестов используется для оценки окончательной модели.
Важным аспектом, который следует учитывать в нашей модели, который поможет нам выбрать, что нужно изменить в нашей модели, являются смещение и дисперсия.
Вот пример подгонки разных моделей к одним и тем же данным с разной степенью полинома. Мы видим, что при 1 степени полинома результат не соответствует (высокий сдвиг), а при 4 степени полинома результат переоснащен (высокая дисперсия).
Если мы построим график ошибок функций затрат в зависимости от d (степень полинома), мы сможем увидеть это графически, чтобы лучше понять влияние недостаточного и переобучения. Построим график функции стоимости J (поезд), рассчитанной на обучающем наборе, и J (перекрестная проверка), рассчитанного на наборе перекрестной проверки:
Кривые обучения
Кривая обучения - это график зависимости ошибки от m =, который является размером обучающей выборки.
Давайте рассмотрим первый случай высокого смещения, построив график функций стоимости ошибок обучающего набора и набора перекрестной проверки:
Как видно из графика, если мы будем использовать больше данных, это не улучшит ситуацию.
Давайте рассмотрим второй случай высокой дисперсии, построив те же функции, что и раньше:
В этом случае вместо этого мы видим, что если наш алгоритм обучения страдает от высокой дисперсии, если мы будем использовать больше данных, это поможет улучшить нашу модель, потому что есть пробел, который будет заполнен при увеличении размера обучения m.
Если вам понравилась статья и вы хотите узнать больше по этой теме, я предлагаю вам прочитать следующую статью Полное руководство по оценке и выбору моделей в машинном обучении в блоге, посвященном искусственному интеллекту.
Получайте лучшие предложения по программному обеспечению прямо в свой почтовый ящик