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

Авторы: Рошни Шайк, Самир Паша, Саптарши Дутта Гупта, Харикришна Картикеян

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

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

От слабых учеников к сильным - вот как!

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

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

  • На изображении широкие колеса (мотоцикл класса).
  • На изображении изображен топливный бак (класс мотоциклов).
  • На изображении изображен двигатель / мотор (мотоцикл класса).
  • На изображении есть педали (велосипедный класс).
  • На изображении виден выхлоп (мотоцикл класса).
  • На изображении видны цепь и шестерни (велосипед класса).
  • На изображении изображен одноместный (велосипед класса).

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

Допустим, на нашем тестовом изображении есть объект, содержащий широкие колеса (Class Motorcycle), топливный бак (Class Motorcycle) и одноместный (Class Bicycle ). В этом случае по правилу большинства объект классифицируется как Мотоцикл.

Виды ансамблевого обучения:

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

Типы повышения:

Адаптивное ускорение (AdaBoost)

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

Давайте посмотрим, как работает алгоритм:

  1. Присвойте равный вес всем точкам данных и выделите пень для принятия решения для одного входного объекта.
  2. Проанализируйте результаты и увеличьте веса неверно классифицированных точек данных.
  3. Нарисуйте новый пень решения с учетом обновленных весов.
  4. Повторяйте шаги 2 и 3, пока все образцы не будут правильно классифицированы.

Повышение градиента

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

Для начала всем обучающим выборкам присваиваются одинаковые начальные веса. Затем слабый базовый обучающийся, скажем, дерево решений T1 построено на основе случайного разделения обучающих данных (самонастраиваемый набор данных). Затем модель предсказывает выходные данные для всех обучающих данных, и ошибка вычисляется с использованием функции потерь. Кроме того, функция потерь оптимизируется путем обновления градиентов с использованием метода спуска стохастического градиента. Таким образом, обновленная модель представляет собой новое дерево решений T2, построенное поверх T1 и переобученное, как показано в формулах ниже, где функция потерь (Lₙ) умножается на некоторое α, чтобы минимизировать ее. Этот процесс повторяется до тех пор, пока не будет достигнута приемлемая потеря.

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

Экстремальное усиление градиента (XGBoost)

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

Параметры модели: некоторые из параметров, которые влияют на производительность модели: max_depth, num_parallel_tree, predictor, и т. д. Максимальная глубина дерева устанавливается параметром max_depth, и увеличение этого значения сделает модель более сложной и склонной к переобучению. Важно отметить, что XGBoost агрессивно потребляет память при обучении глубокого дерева. Кроме того, степень распараллеливания задается параметром num_parallel_tree, который указывает количество параллельных деревьев в каждой итерации. Наконец, параметр predictor позволяет пользователю выбирать между GPU или CPU для выполнения вычислений.

Модель прогнозирования полетов на основе XGBoost с H2O.ai

Что такое H2O?

H2O - это распределенная платформа с открытым исходным кодом, созданная компанией H2O.ai, которая поддерживает некоторые из наиболее широко используемых алгоритмов машинного обучения, включая обобщенные линейные модели, машины с градиентным усилением и широко разрекламированный AutoML. Поскольку некоторые из ведущих компаний, включая PayPal и Cisco, переходят на H2O Driverless AI, позвольте нам углубиться в то, что может предложить эта структура.

Почему именно H2O, если у нас уже есть такие пакеты, как scikit-learn?

  • Мощный: H20 может действительно хорошо работать с «большими» наборами данных в распределенном режиме. Модели машинного обучения можно без проблем выполнять в Hadoop, Spark или любой другой инфраструктуре кластерных вычислений.
  • Эффективность памяти: фреймы данных H2O занимают меньше памяти по сравнению с фреймами данных Pandas. Время обучения моделей намного быстрее, чем у некоторых из его конкурентов, таких как scikit-learn.

  • Кросс-платформенная поддержка: H2O позволяет легко встраивать модели машинного обучения в существующий продукт, не основанный на Python, например, Java. Чтобы реализовать то же самое в sklearn, нам нужно написать обертку.
  • Простота использования в моделях на основе деревьев. В частности, для улучшения деревьев, scikit learn не выполняет автоматическое однократное кодирование категориальных переменных, которое неявно выполняется в H2O.

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

Let's Flow into H2O: знакомство с H2O Flow Framework

Мы собираемся показать, насколько просто использовать H2O Flow для создания модели прогнозирования задержки авиалинии с нуля . H2O Flow - это автономный интерфейс для H2O, который объединяет синтаксический анализ данных, предварительную обработку, исследовательский анализ данных, выбор функций и обучение моделей под одной крышей. Вы называете это, у H2O Flow это есть!

Настройка Flow в вашей системе

Загрузите пакет отсюда и выполните следующие команды.

cd ~/Downloads
unzip h2o-3.20.0.2.zip
cd h2o-3.20.0.2
java -jar h2o.jar

Перейдите по адресу http: // localhost: 54321, чтобы открыть веб-интерфейс H2O Flow.
[Если в вашей системе нет JAVA: Перейдите по этой ссылке]

Набор данных

Скачать данные о задержке рейса здесь.

Анализ данных

После того, как вы загрузили данные, вы можете импортировать их в платформу Flow и проанализировать данные, как показано ниже:

Разбиение на фреймы

Затем мы разделяем проанализированные данные на три кадра: обучение, проверка и тестирование в соотношении 7: 2: 1, как показано ниже:

Выбор функций с использованием исследовательского анализа данных

Наша основная мотивация для этого варианта использования - предсказать, будет ли рейс задержан (прибытие / вылет). Для этой цели мы использовали инструменты Flow EDA, чтобы определить наиболее важные функции, которые способствуют прогнозированию нашего классификатора.

Например, функция WeatherDelay имеет около 79,68% пропущенных значений и, таким образом, может быть проигнорирована. Точно так же, анализируя другие функции, мы выбрали 16 характеристик, которые сильно коррелированы и образуют хороший набор функций для нашей модели классификации.

Создание нашей модели XGBoost

После разработки функций мы построили нашу модель, используя алгоритм XGBoost. Мы зафиксировали num_parallel_tree равным 50 и max_depth равным 6. Анимация ниже показывает процесс обучения:

Результаты и анализ

После обучения модели XGBoost, ниже представлена ​​визуализация наших результатов:

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

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

Еще несколько интересных вещей, которые можно исследовать в рамках

Развертывание модели в устаревших системах JAVA путем преобразования модели в POJO

Используя функцию AutoML во фреймворке Flow, мы видим, что алгоритм XGBoost превосходит все другие реализации модели.

Спасибо, что прочитали эту статью! Мы надеемся, что вы получили глубокое представление о машинах с градиентным усилением с фреймворком H2O Flow. Будем рады услышать ваши предложения и отзывы. Не стесняйтесь связаться с нами в LinkedIn.

Ваше здоровье!

использованная литература

[1] https://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/
[2] http://docs.h2o.ai/h2o/latest-stable/h2o -docs / data-science / gbm.html
[3] Натали Кун и Наванит Джамадагни: Применение алгоритмов машинного обучения для прогнозирования задержки прибытия рейсов »