Введение

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

Итак, на уроке математики, что, если вместо того, чтобы просто говорить вам, что такое теорема, я предлагаю вам найти правильное уравнение или правильную формулу самостоятельно, просто используя некоторые данные? Предоставленные вам данные будут иметь длины трех сторон восьми различных прямоугольных треугольников, обозначенных буквами a, b и c, где c — гипотенуза.

Данные приведены ниже:

У вас есть 30 минут, чтобы вычислить правильную формулу, так как мы собираемся пройти тест, где вам будут даны значения a и b, и вы должны предсказать правильные значения для c. В классе тот, кто наберет наибольшее количество баллов, будет свободен от любых домашних заданий в течение 2 полных недель. Разве это не круто?

Ваш ленивый друг в классе, скажем Атхарв, очень взволнован этим. Он не заинтересован в выполнении домашнего задания и поэтому хочет занять первое место в тесте. Итак, Атхарв запомнил все 8 рядов данных, и теперь он может правильно сказать значение c для заданных a и b при условии, что они получены из приведенных выше данных. Он действительно думает, что выиграет. Будет ли он?

Другая ваша подруга, Дхрити, нашла этот тест забавным не потому, что ей не нужно было делать домашнюю работу, а потому, что она действительно хочет доказать всем в классе свою сообразительность. 30 минут она билась и придумывала разные уравнения. Когда 30 минут истекли, все, что у нее было, это a + b = c.

Пришло время все проверить.

Теперь, к несчастью для Атхарва, ни одно из значений в тесте не было получено из предоставленных ему данных, и он был крайне разочарован, так как набрал 0 баллов и теперь должен был делать домашнее задание. Дхрити тоже была очень расстроена, так как ее уравнение не сработало. Но когда она узнала, что уравнение было a2 + b2 = c2, она подумала, что если бы у нее было немного дополнительного времени, то она могла бы составить и это уравнение.

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

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

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

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

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

Соответствие — насколько хорошо вы приближаетесь к целевой функции.

Что такое переоснащение?

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

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

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

Что мы подразумеваем под Generalize здесь?

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

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

Может быть, другой таксист берет с вас правильную, а не более высокую плату за проезд, вы все равно не верите этому водителю, и предполагаете, что он нечестен на основании вашего прошлого опыта. Это еще один пример «переоснащения» (или чрезмерного обобщения). Всякий раз, когда модель переоснащается, мы говорим, что модель имеет «высокую дисперсию». Если мы возьмем в качестве примера стрельбу по мишеням или стрельбу из лука, то высокая дисперсия по этой аналогии будет эквивалентна неустойчивому прицеливанию.

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

Что такое недообучение?

Помните Дхрити? Что она сделала? Ее подход определенно был хорош. Она старалась изо всех сил, но не могла найти правильную формулу. Ее работа не нашла хороших результатов в данных, предоставленных учителем, и, конечно же, не нашла хороших результатов в тесте. Это то, что мы называем недообучением в машинном обучении. Если бы ей дали больше случаев, она бы отследила аналогичные результаты на тестовом наборе. Это то, что мы называем «высокой предвзятостью».

Возвращаясь к нашему примеру со стрельбой из лука, вот как высокая/низкая дисперсия и смещение влияют на производительность модели:

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

ПРИМЕЧАНИЕ. Ниже приведено более наглядное представление недообучения и переоснащения, которое включает в себя некоторый код и графики. Даже если вам не очень нравится раздел кода, не волнуйтесь, графики дадут вам четкое представление о теме. Вы уже поняли, что такое переоснащение и недообучение!

Чтобы лучше понять это, давайте рассмотрим пример. Мы собираемся сгенерировать две переменные, скажем, P и Q. P будет иметь несколько случайных чисел/выборок, а Q будет частью функции косинуса.

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

Вау! Большие сроки! Что означают эти термины?

Распространенной практикой в ​​машинном обучении является создание новых функций путем возведения существующих функций в степень. Например, если бы у нас была одна входная функция Z, то «полиномиальная функция» была бы добавлением нового столбца, который является новой функцией. В этом столбце у нас есть значения Z2, как в квадратах значений в столбце Z. Почему мы это делаем? Это может помочь в повышении производительности нашей модели.

Количество признаков, добавляемых в модель, можно контролировать с помощью «степени» полинома.

plt.plot(p, q, color = 'c', label="Actual")
plt.scatter(p, q, edgecolor='r', s=20, label="Samples")
plt.xlabel("p")
plt.ylabel("q")
plt.legend(loc="best")
plt.show()

Результатом этого кода, который дает нам базовую связь между p и q, является следующий график:

Теперь пришло время поместить эти значения в нашу модель. Мы собираемся использовать «линейную регрессию». Любопытный? Погугли это!

plt.plot(p, q, color = 'c', label="Actual")
plt.scatter(p, q, edgecolor='r', s=20, label="Samples")
plt.plot(p1, q_pred, label="Model")  # q_pred here is the prediction set of q values
plt.xlabel("p")
plt.ylabel("q")
plt.legend(loc="best")
plt.show()

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

Итак, возвращаясь к переобучению и недообучению, мы собираемся протестировать нашу модель на 3 степенях [1, 4, 15] и попытаться найти наилучшее соответствие. Наилучшее соответствие — это, по сути, золотая середина между переоснащением и недообучением.

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

Из приведенного выше графика, сравнивающего степени, мы можем заметить, что полинома со степенью 1 недостаточно для предсказания, он имеет большое смещение и, следовательно, является «недостаточным». Граф степени 4 подходит лучше всего; он почти идеально аппроксимирует исходное истинное соотношение между зависимыми и независимыми функциями для тестовых данных. Для степеней выше наилучшего соответствия очевидно, что модель является «переоснащением», и мы можем видеть это на примере степени 15. Эта модель переобучения изучила шум в данных и имеет высокую дисперсию.

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

Теперь мы знаем, что такое переоснащение и недооснащение, но как нам его обнаружить?

Обнаружение переобучения и недообучения:

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

Одним из распространенных и эффективных методов является разделение набора данных на две части (это можно сделать разными способами — обратитесь к train_test_split в sklearn), а именно на обучающую и тестовую части. Если наша модель хорошо справляется с набором обучающих данных и достигает точности, скажем, 90%, но только с точностью около 50–55% на наборе тестовых данных, то модель, вероятно, переоснащается.

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

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

Как предотвратить переоснащение и недооснащение:

Предотвращение переобучения:

1. Использование перекрестной проверки:

Перекрестная проверка — очень мощная профилактическая мера против переобучения с умной идеей. Создайте несколько мини-разбиений для проверки поезда в исходных данных поезда и используйте их для настройки модели.

У нас есть стандартный способ сделать это, называемый «к-кратной перекрестной проверкой». Что мы делаем здесь, так это разделяем набор данных на k подмножеств, которые мы называем «складки».

Затем мы итеративно обучаем нашу модель на k — 1 раз. Почему? Мы сохраняем последний в качестве набора данных проверки. Последняя складка называется «удерживающая складка».

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

K-кратная перекрестная проверка может не полностью устранить переоснащение, поэтому мы можем время от времени менять складки или использовать несколько k-кратных перекрестных проверок вместе.

2. Тренируйтесь с большим количеством данных:

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

3. Удалить функции

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

4. Регуляризация:

Как мы обсуждали ранее, такое переоснащение может быть следствием слишком сложной модели. Можем ли мы силой сделать это проще? Да! Регуляризация — это термин, обозначающий ряд методов, которые можно использовать для упрощения вашей модели. Методы, используемые для регуляризации любой модели, будут зависеть от самой модели. Например, опцией может быть обрезка дерева решений, в нейронных сетях можно использовать отсев или, к функции стоимости в регрессии, можно добавить параметр штрафа. Запутанные термины, да? Гуглите их!

Предотвращение недообучения:

1. Увеличение сложности модели:

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

2. Снижение регуляризации:

Что ж, недообучение несколько близко к противоположности переоснащению. Итак, как мы читали ранее, регуляризация может помочь решить проблему переоснащения, а ее уменьшение может решить проблему недостаточного приспособления! Некоторые из алгоритмов, которые вы используете по умолчанию, включают некоторые параметры регуляризации, предназначенные для подавления переобучения. Иногда это также может мешать изучению алгоритма. Уменьшение их значений по большей части имеет значение. Вы, должно быть, думаете, что если недообучение почти противоположно переоснащению, то, может быть, добавление дополнительных функций или данных поможет решить проблему? НЕТ! Если в наборе данных отсутствуют решающие и важные признаки, которые могли бы помочь вашей модели в обнаружении закономерностей, вы можете умножить набор обучающих данных на 2, 5 или даже 10, но это не поможет улучшить ваш алгоритм. Распространено мнение, что добавление большего количества данных решит проблему, но, как говорилось ранее, это может просто поставить проект под угрозу.

Хорошо вписывается в статистическую модель:

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

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

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

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

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

А пока следуйте за мной, чтобы узнать больше!