Наука о данных с нуля
Основы: ансамблевые методы
Методы упаковки, случайного леса и ускорения для повышения производительности
Ансамблевые методы - это версия старой пословицы о том, что две головы лучше, чем одна: если одна модель работает хорошо, то несколько моделей, работающих согласованно, могут работать еще лучше. Конечно, одна из проблем заключается в том, что может быть сложно собрать достаточно данных для создания нескольких независимых моделей. Оказывается, лишь немного ловкости рук, мы можем построить разные модели из одного набора данных и объединить их выходные данные для улучшения результатов. Эти методы ансамбля особенно полезны для расширения древовидных моделей, как классификаторов, так и регрессоров, и часто сами по себе превосходят древовидные модели.
Модели начальной загрузки
Одна из проблем с моделями деревьев решений заключается в том, что их структура очень хрупкая: как я обсуждал в своем Введение в модели деревьев, небольшие изменения в обучающих данных могут привести к большим изменениям в конечном дереве. Если одно из ранних разбиений в дереве выполняется в другом месте или по другой переменной в результате некоторого изменения обучающих данных, все последующие решения дерева обязательно будут другими. В результате деревья решений, построенные на похожих, но не идентичных данных, могут сильно отличаться друг от друга как по структуре, так и по результатам - более или менее точными, более или менее переобученными или даже переобученными по-разному.
Чтобы наглядно представить, что это означает на практике, я создал пример набора данных с тысячей точек. Затем я произвольно взял три четверти этих точек в качестве выборки, подогнал модель дерева решений к этой выборке и проверил ее точность. Я проделал это 500 раз, оценил модели по точности и нанес на график результаты:
В среднем созданные модели имели точность около 77%, но результаты сильно различались. Некоторые модели имели точность менее 70%, а некоторые - почти 85%. Важно то, что каждая из этих моделей, несмотря на очень разные результаты, была обучена на очень похожих данных. Действительно, каждая модель была обучена более чем на половине общего набора данных, поэтому должно быть хотя бы некоторое перекрытие между обучающими данными любых двух созданных моделей.
Тот факт, что деревья решений настолько хрупкие, что два дерева, обученные на большинстве одних и тех же данных, могут давать такие разные результаты, на самом деле позволяет нам создавать множество разных и достаточно разных моделей из одного и того же набора данных. Обработка называется «упаковкой», сокращением двух задействованных этапов: начальной загрузки и агрегирования. На первом этапе, начальной загрузке, мы берем обучающие данные и создаем несколько меньших наборов данных, выбирая случайные выборки. Каждый из этих меньших наборов данных используется для обучения отдельной модели. Все эти модели затем используются для создания прогнозов путем агрегирования результатов, усреднения результатов каждой из отдельных моделей (или в задаче классификации вы можете думать об этом как о том, что модели «голосуют». на каком классе прогнозировать).
Каким-то чудом этот агрегированный прогноз часто работает значительно лучше, чем в среднем отдельные модели. Чтобы продемонстрировать это, давайте вернемся к тренировочным данным, которые я создал ранее. Я снова взял кучу случайных образцов, создал модели и измерил их точность, но на этот раз с одной добавленной морщинкой. Вместо того, чтобы просто создать одну модель дерева решений для каждого из моих образцов, я создал 100 различных моделей и объединил их прогнозы, используя этот метод упаковки. Выравнивая полученные точности, как мы делали раньше, мы снова видим аналогичную форму, причем некоторые модели в мешках более точны, чем другие, но наша точность повысилась по всей кривой!
Ранее одно дерево решений, полученное на основе подвыборки набора данных, имело точность около 77%. Однако точность одной модели в мешке составляет в среднем 85%.
У вас может возникнуть ощущение, что это не должно работать. Конечно, мы перешли от одной модели к нескольким моделям, работающим в тандеме, но каждая из наших новых моделей обучается только на части доступных данных. Раньше у нас была только одна модель, но в ней использовались все данные. Мы не получили больше данных в совокупности и даже не используем все наши данные сразу, но каким-то образом разделение данных на несколько небольших выборок позволяет нам повысить точность наших моделей на 8%. Ключ кроется в том, что модели с самозаготовкой, вероятно, будут сильно отличаться друг от друга. Как мы уже отмечали, два дерева решений, основанные в основном на одних и тех же данных, могут иметь очень разные структуры. Объединение результатов множества различных моделей, каждая из которых построена на немного разных данных, на самом деле дает нам множество различных структур дерева решений.
Как вы понимаете, ключевым фактором является количество используемых моделей с начальной загрузкой. Вы начинаете получать преимущества, когда у вас есть множество различных моделей, которые реагируют на разные особенности данных и дают разные результаты. Если у вас всего две или три модели, вы вряд ли превзойдете одно дерево решений, поскольку, даже если у вас более одной модели, ваши модели строятся только из меньших выборок данных. На другом конце спектра, когда у вас есть достаточное количество моделей, вы извлекаете из данных столько логической мощности, сколько возможно, и добавление большего количества самонастраиваемых моделей не дает никаких дополнительных преимуществ (к счастью, наличие слишком большого количества моделей в методе с мешками обычно не дает переобучения, хотя становится более затратным с точки зрения вычислений подгонка и прогнозирование с помощью такой модели). График числа бутстрэп-моделей в зависимости от точности агрегированных прогнозов является информативным:
Сначала модель с мешком уступает среднему дереву решений с одной моделью, но после того, как в наш ансамбль было добавлено лишь несколько моделей с загрузкой (в данном случае четыре или пять), модель с мешком начинает значительно превосходить среднюю точность по одной модели. После 40 или 50 бутстреп-моделей производительность модели с мешком, кажется, выровняется, и она не получает особой выгоды от добавления последующих моделей в ансамбль.
Видя такое большое улучшение предсказательной способности, зачем вам вообще использовать одно дерево? Что ж, для начала, как вы, наверное, догадались, обучение и запуск одного дерева требует меньших вычислительных затрат, чем обучение и запуск 100 деревьев (даже если каждое отдельное дерево немного меньше). Во-вторых, модели в мешках теряют интерпретируемость. Раньше было легко отобразить структуру дерева решений в виде блок-схемы и следить за ней, наблюдая, какие функции представляются важными, а где могут быть критические значения. Теперь у вас есть целый ряд деревьев, которые нужно нанести на карту, каждое с разной структурой, разным набором критических значений, каждое из которых дает различное представление о том, что было «важным» для модели. Они обязательно не согласятся друг с другом, что усложняет интерпретацию.
Следующий шаг: случайные леса
Как мы уже подчеркивали, мешочные модели работают потому, что агрегированные деревья решений существенно отличаются друг от друга. Вы можете думать о каждом из базовых деревьев как о подходе к проблеме немного по-разному, принимая другой набор решений и, возможно, извлекая немного иную информацию из процесса. Естественным прогрессом могло бы стать еще большее отличие этих базовых моделей друг от друга, что лежит в основе стратегии случайного леса.
Модель случайного леса строится почти так же, как и модель с мешками, с обучением множества различных деревьев решений, которые затем используются в тандеме. Ключевое отличие состоит в том, что в случайном лесу, в дополнение к деревьям, обучающимся на немного разных подвыборках общих данных обучения, каждая из них использует только случайно выбранную выборку переменных характеристик. Скажем, например, я использую общий набор данных Титаника, который имеет около 8 значимых переменных характеристик, включая пол пассажира, класс, стоимость проезда и место, из которого он вылетел. Обычная модель с мешками будет агрегировать множество деревьев решений, которые используют все 8 из этих функций. Модель случайного леса будет агрегировать деревья решений, каждое из которых использует различные подмножества этих функций. Одно дерево может использовать пол, класс, возраст и дом. Другой может также использовать пол и возраст, но не класс или каюту, а вместо этого использовать место посадки и количество братьев и сестер.
Случайным образом выбирая как выборку точек обучающих данных, так и используемые функции, случайные леса создают еще большее разнообразие агрегированных деревьев решений и, следовательно, могут подойти к проблеме прогнозирования с еще большего количества точек зрения. Как и в случае с обычной упакованной моделью, точность случайного леса увеличивается по мере увеличения количества деревьев в ансамбле до определенного значения. Рассмотрим производительность упакованных моделей и случайных лесов в моем примере набора данных по мере увеличения количества агрегированных деревьев:
Как и модель с мешками, наш случайный лес вначале уступает среднему показателю для одного дерева. На самом деле, случайный лес также начинает хуже работать с упакованной моделью - помните, что каждое дерево в случайном лесу строится не только из части доступных обучающих данных, но и только из части доступных функций, поэтому каждый отдельный tree будет менее мощным, чем одно дерево, использующее все функции, и вы вполне можете ожидать, что случайный лес только с несколькими деревьями будет хуже работать с мешочной моделью с тем же количеством деревьев. После того, как в лес добавлено несколько деревьев, производительность быстро улучшается. Как только в лесу появятся десять деревьев, модель, вероятно, будет включать информацию от каждого объекта и строки в каком-либо наборе данных, и она начнет извлекать выгоду из разнообразия, которое мы внесли в деревья. Случайный лес в этом случае добавляет нашей модели еще около 2,5% точности.
Немного другой подход: повышение
Последний метод ансамбля, который следует рассмотреть, - это Boosting, который работает иначе, чем наши методы упаковки или случайного леса. Обычная упаковка и случайные леса генерируют несколько моделей параллельно и запускают их одновременно, каким-то образом усредняя результаты. Повышение также создает несколько деревьев, но создает и запускает их последовательно. Первое дерево решений создано и соответствует данным. Затем создается последующее дерево, но вместо того, чтобы соответствовать напрямую целевой переменной данных, это дерево соответствует остаткам первого дерева: то есть оно соответствует количеству, которое предсказания первого дерева неверны. В дереве регрессии это будет некоторое положительное или отрицательное число в зависимости от того, насколько модель превышает или недооценивает отметку. В задаче классификации этот член ошибки будет просто 0 (если предыдущее дерево дало правильный прогноз) или +/- 1.
Чтобы сделать прогноз, вам нужно последовательно использовать два дерева. Первое дерево делает прогноз, второе дерево обеспечивает корректировку в зависимости от того, насколько неверными, по его мнению, являются результаты первого дерева. Конечно, вам не нужно останавливаться на достигнутом, вы можете подогнать третье дерево к остаткам результата первых двух деревьев, используемых вместе, и так далее, пока у вас не будет много деревьев. Надеюсь, с каждым последующим деревом вы сможете еще больше уточнить прогнозы, хотя, в отличие от упакованных моделей, усиленные модели склонны к переобучению, если количество используемых деревьев становится чрезмерным.
На самом деле, есть еще одна сложность, чтобы заставить эту цепочку моделей давать разумные результаты. Если вы просто соедините несколько моделей, как я описал, ваши результаты могут вообще не улучшиться. Одна модель выйдет за пределы допустимого диапазона, затем следующая модель будет чрезмерно корректировать и отклониться слишком далеко в другом направлении. Чтобы гарантировать, что модели действительно сходятся в одном ответе, результаты последующих моделей не учитываются с помощью коэффициента сжатия, называемого «скоростью обучения». Снижение скорости обучения может помочь избежать переобучения, но для достижения хороших результатов потребуется больше моделей. Подумайте, наш набор данных атакован усиленными деревьями с разной скоростью обучения и количеством деревьев:
В этом случае вы заметите, что все улучшенные модели демонстрируют примерно одинаковый уровень точности, хотя для моделей с более низкой скоростью обучения требуется немного времени, чтобы достичь этого уровня точности.
В примере набора данных, который я создал, усиленный алгоритм работает так же, как и случайный лес, хотя, возможно, само собой разумеется, что ваш пробег может варьироваться в зависимости от того, с какими данными вы имеете дело:
В любом случае вы заметите, что все три этих ансамблевых метода легко превосходят одно дерево решений, от которого они концептуально зависят.
Приложение: как насчет ансамблей, использующих другие типы моделей?
На этом этапе вы можете убедиться в силе этих ансамблевых методов и начать задаваться вопросом, почему мы ограничились деревьями решений. Можем ли мы использовать агрегирование начальной загрузки для повышения производительности других типов моделей? Короткий ответ заключается в том, что такой метод, как упаковка в мешки, обычно не работает для других типов моделей. Например, что, если вместо деревьев решений мы попробуем объединить логистические модели для решения нашей задачи классификации? Вот результаты агрегирования бутстрэп-логистических моделей:
Линия, представляющая логистические модели в мешках, больше не показывает четкой тенденции и не представляет каких-либо значительных улучшений по сравнению с единой логистической моделью. Измеренная точность немного колеблется в зависимости от случайности выборок, используемых для тестирования модели, но на любом уровне агрегации показатель точности с такой же вероятностью упадет ниже среднего значения для отдельной логистической модели.
Почему это? Ну, потому что логистические модели, которые мы пытаемся объединить, слишком похожи. Этот метод работает, потому что деревья решений хрупкие, и даже небольшие изменения в обучающих данных могут создавать деревья очень разной структуры. Напротив, две логистические модели, созданные с использованием немного разных наборов данных, скорее всего, будут очень похожи друг на друга; каждый из них будет использовать все функции, и коэффициенты, которые модели найдут для каждой функции, вероятно, будут близки друг к другу. На коэффициенты в логистической регрессии, безусловно, может влиять несколько резко отклоняющихся значений, но если ваша выборка исчисляется сотнями, маловероятно, что одно новое значение так сильно повлияет на окончательное значение коэффициента.
К сожалению, пакетирование - это не универсальное решение, но для древовидных методов оно может быть довольно мощным.