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

Недостаточное количество обучающих данных

Чтобы малыш узнал, что такое яблоко, достаточно указать на яблоко и сказать «яблоко» (возможно, повторив эту процедуру несколько раз). Теперь ребенок может распознавать яблоки всех цветов и форм. Гений.

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

Нерепрезентативные данные обучения

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

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

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

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

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

Данные низкого качества

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

  • Если какие-то экземпляры явно выпадают, может помочь просто отбросить их или попытаться исправить ошибки вручную.
  • Если в некоторых экземплярах отсутствуют некоторые функции (например, 5% ваших клиентов не указали свой возраст), вы должны решить, хотите ли вы полностью игнорировать этот атрибут, игнорировать эти экземпляры, заполнить недостающие значения (например, с помощью медианы возраст), или обучить одну модель с функцией и одну модель без нее, и так далее.

Нерелевантные функции

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

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

Подгонка обучающих данных

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

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

Сложные модели, такие как глубокие нейронные сети, могут обнаруживать тонкие закономерности в данных, но если обучающая выборка зашумлена или слишком мала (что приводит к шуму выборки), то модель, скорее всего, обнаружит закономерности в самом шуме. Очевидно, что эти шаблоны не будут распространяться на новые экземпляры. Например, предположим, что вы кормите свою модель удовлетворенности жизнью многими другими атрибутами, в том числе неинформативными, такими как название страны. В этом случае сложная модель может обнаруживать такие закономерности, как тот факт, что все страны в обучающих данных с буквой w в названии имеют удовлетворенность жизнью выше 7: Новая Зеландия (7,3), Норвегия (7,4), Швеция (7,2) и Швейцария (7,5). Насколько вы уверены, что правило W-удовлетворения распространяется на Руанду или Зимбабве? Очевидно, эта закономерность появилась в обучающих данных по чистой случайности, но модель не может сказать, является ли закономерность реальной или просто результатом шума в данных.

Ограничение модели для ее упрощения и снижения риска переобучения называется регуляризацией. Например, линейная модель, которую мы определили ранее, имеет два параметра, θ0 и θ1. Это дает алгоритму обучения две степени свободы для адаптации модели к обучающим данным: он может настраивать как высоту (θ0), так и наклон (θ1) линии. Если бы мы установили θ1 = 0, у алгоритма была бы только одна степень свободы, и ему было бы гораздо труднее правильно подобрать данные: все, что он мог бы сделать, — это переместить линию вверх или вниз, чтобы максимально приблизиться к обучающим экземплярам, так что это будет в конечном итоге вокруг среднего. Действительно очень простая модель! Если мы позволим алгоритму изменять θ1, но заставим его сохранять его малым, то алгоритм обучения фактически будет иметь где-то между одной и двумя степенями свободы. Это даст более простую модель, чем с двумя степенями свободы, но более сложную, чем с одной. Вы хотите найти правильный баланс между идеальной подгонкой обучающих данных и достаточной простотой модели, чтобы гарантировать, что она будет хорошо обобщаться.

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

Недостаточное соответствие данных обучения

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

Основные варианты решения этой проблемы:

«Выбор более мощной модели, с большим количеством параметров»

«Добавление лучших функций в алгоритм обучения (разработка функций)»

«Уменьшение ограничений на модель (например, уменьшение гиперпараметра регуляризации)»

Тестирование и проверка

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

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

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

Так что оценить модель достаточно просто: просто используйте тестовый набор. Теперь предположим, что вы колеблетесь между двумя моделями (скажем, линейной моделью и полиномиальной моделью): как вы можете решить? Один из вариантов — обучить оба и сравнить, насколько хорошо они обобщают, используя тестовый набор.

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

Итак, вы запускаете эту модель в производство, но, к сожалению, она не работает так, как ожидалось, и выдает 15% ошибок. Что сейчас произошло?

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

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

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