«Не все то золото, что блестит». - Уильям Шекспир
Что за # (хэштег)?
Некоторое время назад я начал новую серию, посвященную тому, что в ней говорится, - серию, где я устраняю некоторые пробелы, которые могут возникнуть в отношении алгоритма / концепции, объясняя интуицию, лежащую в основе этого, вместо того, чтобы выдавать математику прямо сейчас. Это всего лишь попытка заставить вас осознать, что машинное обучение несложно. Это скорее интуиция, подтвержденная алгоритмически.
Если вы хотите прочитать другие статьи этой серии, обратитесь к тем, которые начинаются с #TheNotSoToughML.
В прошлой статье мы говорили о функциях ошибок, градиентном спуске и о том, как эти два понятия соотносятся друг с другом.
Теперь мы расширим концепции, чтобы развить вопрос -
В. Как мы узнаем, что наша модель работает?
Для этого нам нужно понять две очень важные концепции машинного обучения:
Недостаточное и переобучение.
Эти концепции вступают в игру, когда мы работаем с моделями машинного обучения, и внезапно мы понимаем, что, когда мы строили модель - результаты казались разумными, но в тот момент, когда мы запускали ее в производство - с течением времени оказалось, что результаты были вполне удовлетворительными. неверно, и модель не давала хороших прогнозов.
Конечно, существует множество факторов, способствующих таким «неправильным» результатам, но две важные сложности, которые довольно часто встречаются в таких сценариях, - это недостаточная установка и переобучение.
В текущей статье серии мы подробно рассмотрим эти две сложности и найдем способы их решения. Хотя доступно множество техник, мы в основном рассмотрим следующее:
- Тестирование и валидация модели
- Использование графа сложности модели
- Регуляризация (следующая статья).
Но сначала,
Недостаточное оснащение против переобучения - что это такое?
Хотя их можно интерпретировать по-разному, мне нравится думать о них как о проблеме между чрезмерным упрощением и чрезмерным усложнением.
Как?
Что ж, давайте возьмем пример.
Скажем, у вас есть задача сразиться с Годзиллой. Что, если вы выйдете на поле боя просто с мухобойкой? Это пример чрезмерного упрощения.
Такой подход нам не подходит, потому что мы недооценили проблему и пришли неподготовленными. Это не соответствует: Когда наш набор данных сложен, и мы приходим к его моделированию, не имея ничего, кроме очень простой модели. Модель просто не сможет охватить сложность набора данных.
Теперь давайте посмотрим на другой пример.
Напротив, если наша задача - убить небольшую муху, и для этого у нас есть базука, это пример чрезмерного усложнения. Да, мы можем убить муху, но мы также уничтожим все, что есть под рукой, и подвергнем себя риску. Мы переоценили проблему, и наше решение было плохим. Это переоснащение: когда наши данные просты, но мы пытаемся подогнать их под слишком сложную модель. Модель сможет соответствовать нашим данным, но фактически запомнит их, а не изучит.
Да, переобучение не кажется такой серьезной проблемой, как переоборудование, но наиболее серьезное препятствие, которое мы достигаем с моделями с переобучением, - это когда мы сталкиваемся с невидимыми данными. быть ужасным! Мы увидим это в текущей статье.
У каждой модели машинного обучения есть гиперпараметры, которые представляют собой ручки, которые мы крутим и поворачиваем перед обучением модели. Установка правильных гиперпараметров для нашей модели крайне важна. Если мы настроим некоторые из них неправильно, мы склонны к недостаточной или избыточной настройке.
Давайте теперь посмотрим на некоторые данные.
Понимание недостаточной подгонки-переобучения на примере полиномиальной регрессии
Во всех предыдущих статьях мы узнали, как найти лучшую линию для наших данных, предполагая, что наши данные очень похожи на линию. Но что произойдет, если наши данные не будут похожи на линию? В этом случае может быть полезно мощное расширение линейной регрессии, называемое полиномиальной регрессией, которое помогает нам справляться со случаями, в которых данные более сложные.
Все наши модели линейной регрессии, о которых мы говорили до сих пор, представляют собой полиномиальные уравнения степени 1.
Мы определяем степень полинома как показатель наибольшей степени в выражении полинома. Например, многочлен y = 2x3 + 8x2–40 имеет степень 3, поскольку 3 - это наивысший показатель степени, до которого возводится переменная x. Обратите внимание, что в приведенном выше примере многочлены имеют степень 0, 1, 2 и 3. Многочлен степени 0 всегда является константой, а многочлен степени 1 является линейным уравнением.
График многочлена очень похож на кривую, которая колеблется несколько раз. Количество колебаний зависит от степени полинома. Если полином имеет степень d, то график этого полинома представляет собой кривую, которая колеблется не более d-1 раз (при d ›1).
Из-за этой особенности полиномиальной регрессии это лучший алгоритм, позволяющий увидеть, как недостаточное / переобучение может повлиять на то, как модель учится на данных, и, в конечном итоге, также повлияет на наши прогнозы. Мы сделаем это, настроив самый важный параметр в полиномиальной регрессии - это степень.
Скажем, наши данные выглядят так -
Нам, людям, легко понять, просто на картинке выше, что это похоже на параболу (что-то вроде грустного лица). Однако для компьютера будет непросто определить это как параболу.
Допустим, компьютер пытается подобрать разные степени полинома, чтобы подогнать эти данные следующим образом:
Обратите внимание, что Модель 1 слишком проста, поскольку это линия, пытающаяся соответствовать квадратичному набору данных. Мы не сможем найти подходящую линию, которая соответствовала бы этому набору данных, потому что набор данных просто не выглядит как линия. Таким образом, модель 1 - наглядный пример недостаточного соответствия.
Модель 2, напротив, довольно хорошо соответствует данным. Эта модель ни подходит, ни не подходит.
Модель 3 очень хорошо соответствует данным, но совершенно не соответствует сути. Данные должны выглядеть как парабола с небольшим шумом, а модель рисует очень сложный многочлен 10-й степени, который проходит через каждую из точек, но не отражает сути данных. Модель 3 - наглядный пример переобучения.
А теперь подумайте о ситуации -
Из нашей последней статьи мы знаем, что для того, чтобы компьютер знал, какая модель лучше, ему просто нужно выбрать ту, которая имеет наименьшее количество ошибок. Но если это так, то компьютер приземлится, выбрав Модель 3, поскольку точки находятся ближе всего к кривой в Модели 3 (они находятся на кривая сама!). Но мы знаем, что лучшая модель из трех - это Модель 2!
Что мы делаем?
Нам нужно сообщить компьютеру, что лучшая модель - это модель 2, а модель 3 - избыточная.
Решение 1. Путем тестирования и проверки
Тестирование модели состоит из выбора небольшого набора точек в наборе данных и выбора использования их не для обучения модели, а для тестирования ее производительности. Этот набор точек называется тестовым набором. Оставшийся набор точек (большинство), который мы используем для обучения модели, называется обучающим набором. После обучения модели на обучающем наборе мы используем набор для тестирования для оценки модели. Таким образом, мы гарантируем, что модель хороша для обобщения невидимых данных, а не для запоминания обучающей выборки.
Теперь давайте посмотрим, как этот метод выглядит с нашим набором данных и нашими моделями. Обратите внимание, что настоящая проблема с моделью 3 заключается не в том, что она не соответствует данным, а в том, что она плохо обобщается на новые данные. Другими словами, если вы обучили модель 3 на этом наборе данных , и появились некоторые новые точки, доверяете ли вы модели, чтобы делать хорошие прогнозы с этими новыми точками? Вероятно, нет, поскольку модель просто запомнила весь набор данных, не улавливая его сути. В этом случае суть набора данных заключается в том, что он выглядит как парабола, направленная вниз.
Давайте попробуем визуализировать наборы для обучения и тестирования для вышеуказанных моделей.
Мы можем использовать эту таблицу, чтобы решить, насколько сложной мы хотим нашу модель
Столбцы представляют три модели степени 1, 2 и 10. Столбцы также представляют собой обучение и ошибку тестирования.
Закрашенные кружки - обучающий набор, белые треугольники - тестовый набор.
Ошибки в каждой точке можно увидеть как вертикальные линии от точки к кривой. Ошибка каждой модели - это средняя абсолютная ошибка (для простоты), определяемая средним значением этих вертикальных длин.
Обратите внимание, что ошибка обучения уменьшается по мере увеличения сложности модели. Однако ошибка тестирования уменьшается, а затем снова увеличивается по мере увеличения сложности. Из этой таблицы мы делаем вывод, что из этих трех моделей лучшей является модель 2, поскольку это дает нам низкую ошибку тестирования.
Таким образом, способ определить, подходит ли модель недостаточно, переоснащается или хороша, - это посмотреть на ошибки обучения и тестирования. Если обе ошибки высоки, то он не подходит. Если обе ошибки низкие, то это хорошая модель. Если ошибка обучения мала, а ошибка тестирования большая, значит, она превышает допустимую.
Это подводит нас к ЗОЛОТОМУ ПРАВИЛУ, которое мы никогда не должны нарушать при работе с моделями машинного обучения:
«Никогда не используйте данные тестирования для обучения».
Когда мы разделяем наши данные на обучение и тестирование, мы должны использовать обучающие данные для обучения модели, и ни по какой причине мы не должны касаться данных тестирования во время обучения модели или принятия решений по гиперпараметрам модели. Несоблюдение этого правила может привести к переобучению, даже если это незаметно для человека.
Теперь, когда вы знаете золотое правило и я говорю вам, что мы уже нарушили его в этой статье, вы можете понять, где и как?
Здесь появляется еще один набор данных - набор проверки.
Набор для проверки
Вспомните, что у нас было три модели полиномиальной регрессии: одна степени 1, одна степени 2 и одна степени 10, и мы не знали, какую из них выбрать. Мы использовали наши обучающие данные для обучения трех моделей, а затем мы использовали данные тестирования, чтобы решить, какую модель выбрать. Мы не должны использовать данные тестирования для обучения нашей модели или для принятия каких-либо решений по модели или ее гиперпараметрам. Как только мы это сделаем, мы потенциально переобучаемся!
Что же тогда делать? Решение простое, мы еще больше разбиваем наш набор данных. Мы представляем новый набор, набор проверки, который затем используется для принятия решений по нашему набору данных. Таким образом, мы разбиваем наш набор данных на следующие три набора:
- Учебный набор: используется для обучения всех наших моделей.
- Набор для проверки: используется для принятия решения о том, какую модель использовать.
- Набор для тестирования: используется для проверки того, насколько хорошо работает наша модель.
Таким образом, в нашем примере у нас будет еще две точки, используемые в качестве проверки, и рассмотрение ошибки проверки должно помочь нам решить, что лучшей моделью для использования является модель 2. Набор для тестирования следует использовать только в самом конце, чтобы увидеть насколько хороша наша модель. Если модель плохая, предлагаю выбросить все и начать с нуля.
Размер этих наборов зависит от множества факторов, зависящих от размера самого набора данных, но в идеале наиболее распространенными являются разбиения на 60–20–20 или 80–10–10. Другими словами, 60% обучение, 20% проверка, 20% тестирование или 80% обучение, 10% проверка, 10% тестирование. Эти числа произвольны, но они, как правило, работают хорошо, поскольку оставляют большую часть данных для обучения, но все же позволяют нам протестировать модель в достаточно большом наборе.
Решение 2. Используя график сложности модели
Представьте, что у нас есть другой и гораздо более сложный набор данных, и мы пытаемся построить модель полиномиальной регрессии, которая соответствовала бы этому набору данных. Мы хотим определить степень нашей модели среди чисел от 0 до 10 (включительно). Как мы видели в предыдущем разделе, способ решить, какую модель использовать, - это выбрать ту, которая имеет наименьшую ошибку проверки.
График сложности модели - очень эффективный инструмент, который помогает нам определить, какова идеальная сложность модели, чтобы избежать недостаточного и переобучения.
На приведенном выше графике горизонтальная ось представляет степень нескольких моделей полиномиальной регрессии от 0 до 10 (то есть сложность модели). Вертикальная ось представляет ошибку, которая в данном случае выражается средней абсолютной ошибкой.
Обратите внимание, что ошибка обучения начинается с большого размера и уменьшается по мере продвижения вправо. Это связано с тем, что чем сложнее наша модель, тем лучше она соответствует обучающим данным. Однако ошибка проверки сначала велика, затем уменьшается, а затем снова увеличивается. Это связано с тем, что очень простые модели не могут хорошо соответствовать нашим данным (они недостаточно подходят), в то время как очень сложные модели подходят нашим обучающим данным, но не нашим данным проверки, поскольку они переоснащаются.
В середине есть удачный момент, когда наша модель ни не соответствует, ни избыточно, и мы можем найти ее, используя график сложности модели.
Наименьшее значение ошибки проверки имеет степень 4, что означает, что для этого конкретного набора данных наиболее подходящей моделью (среди тех, которые мы рассматриваем) является модель полиномиальной регрессии степени 4. Глядя на левую часть графика, мы можем видно, что, когда степень полинома очень мала, и обучение, и ошибка проверки велики, что означает, что модели недостаточно подходят. Глядя на правую часть графика, мы видим, что ошибка обучения становится все меньше и меньше, а ошибка проверки становится все больше и больше, что означает, что модели переобучены. Сладкое пятно происходит около 4, это модель, которую мы выбираем.
Одно из преимуществ графика сложности модели заключается в том, что независимо от размера нашего набора данных или количества различных моделей, которые мы пробуем, он всегда выглядит как две кривые: одна всегда идет вниз (ошибка обучения), а другая - вниз и затем сделайте резервную копию (ошибка проверки). Конечно, в большом и сложном наборе данных эти кривые могут колебаться, и их поведение может быть труднее определить. Однако график сложности модели всегда является полезным инструментом для специалистов по обработке данных, чтобы найти хорошее место на этом графике и решить, насколько сложными должны быть их модели, чтобы избежать как недостаточного, так и переобучения.
Что дальше?
Следующим будет Решение 3. Регуляризация.
Это еще одно решение для предотвращения переобучения и более эффективное, но ему нужна целая статья, поэтому мы рассмотрим его в следующей.
Эта статья (и многие другие) основана на последней книге, которую я изучал - Grokking Machine Learning от Луиса Серрано. Книга еще не выпущена, но я купил к ней ранний доступ и считаю, что это был мудрый выбор. Поверьте, их книги / материалы определенно заслуживают того, чтобы их прочитал любой, кто хочет получить истинное представление об алгоритмах и принципах работы моделей.
Вскоре я напишу рецензию на книгу, но если вы уже хотите ознакомиться с книгой, вы можете просмотреть ее содержание здесь.
Если вы хотите связаться со мной в LinkedIn, отправьте мне сообщение или запрос здесь.
Конечно, вы также можете оставить здесь свои комментарии! Я тоже буду рад ответить на любые вопросы.
До следующего раза, продолжайте DSing, MLing и AIing. Самое главное, продолжайте учиться :)