Я знаю, что становится сложно следить за ежедневными публикациями, но так и должно быть. 12 алгоритмов за 12 дней.
Здесь мы распаковываем одну из самых мощных техник машинного обучения, которые использовали гроссмейстеры для победы на Data Hackathons на Kaggle. Вы будете считать себя удачливым, если поймете это правильно.

Повышение точности модели сверх определенного предела может быть сложной задачей. Именно поэтому вам нужен Boosting.

Не сдавайтесь в перерыве. Сконцентрируйтесь на победе во втором тайме.

Что такое повышение?

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

Может ли группа слабых учеников создать одного сильного ученика?

  • Слабый обучающийся: любой алгоритм машинного обучения, который обеспечивает точность немного лучше, чем случайное предположение.
  • Ансамбль: общая модель, построенная с помощью Boosting, представляет собой взвешенную сумму всех слабых учащихся. В целом модель дает довольно высокую точность.
  • Мета-алгоритм: это не алгоритм машинного обучения, он использует другие алгоритмы для более точных прогнозов.

Типы бустинга

1. AdaBoost

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

Объяснение алгоритма!

Выше показано пространство выборки, которое мы будем использовать для классификации.

Блок 1: всем наблюдениям присваиваются равные веса, а для классификации + или - применяется пень решения. S1 создал вертикальную линию с левой стороны для классификации точек данных. Этот пень решения неверно предсказал три +. Итак, мы придадим больший вес этим трем точкам данных в нашей следующей пеньке для принятия решения.

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

Box3: Здесь три - имеют больший вес. S3 применяется для правильного прогнозирования этих неверно классифицированных наблюдений. На этот раз создается горизонтальная линия для классификации - и +.

Блок 4: Здесь мы объединяем S1, S2 и S3, чтобы сформировать сильное предсказание со сложным правилом по сравнению с отдельными слабыми учениками. Очевидно, этот алгоритм классифицировал эти наблюдения точно по сравнению с любым из отдельных слабых учеников.

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

Если вы проходите через ад, продолжайте идти. (У. Черчилль)

Самые важные параметры

Здесь объясняются основные параметры. Остальных можно ограбить из Sklearn.

  • base_estimator: базовая оценка, на основе которой создается усиленный ансамбль. Как и в данном примере, мы использовали Дерево решений в качестве базового обучающегося.
  • n_estimators: максимальное количество оценок, при которых повышение прекращается. В случае идеального соответствия процедура обучения прекращается досрочно.
  • Learning_rate: уменьшает вклад каждого дерева на Learning_rate. Существует компромисс между Learning_rate и n_estimators.
  • алгоритм: алгоритм SAMME.R обычно сходится быстрее, чем SAMME, обеспечивая меньшую ошибку теста с меньшим количеством итераций повышения.

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

Если бы линейная регрессия была Toyota Camry, то градиентное усиление было бы вертолетом UH-60 Blackhawk. Это основной алгоритм для большинства хакеров, стремящихся выиграть соревнования по машинному обучению. Прочитай внимательно!

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

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

Математика Математика и другие математики:

Давайте на этот раз рассмотрим проблему регрессии. Нам даны (x1, y1), (x2, y2),…, (xn, yn), и задача состоит в том, чтобы подобрать модель F (x), чтобы минимизировать квадратные потери. Предположим, у нас есть модель, и модель хорошая, но не идеальная. Есть несколько ошибок: F (x1) = 0,8, а y1 = 0,9, и F (x2) = 1,4, а y2 = 1,3… Как мы можем улучшить эту модель, не удаляя ничего из F и не изменяя какой-либо параметр F?

Мы можем добавить дополнительную модель (дерево регрессии) h к F, чтобы новый прогноз был F (x) + h (x).

мы хотим улучшить модель так, чтобы

Или, что то же самое, вы желаете, чтобы

Чтобы получить h, мы подбираем модель по точкам (x1, y1-F (x1)), (x2, y2-F (x2)),… (xn, yn-F (xn) ).

Члены (yi-F (xi)) называются остатками. Это те части, где наша существующая модель F не может хорошо работать. Роль h состоит в том, чтобы компенсировать недостаток существующей модели F. Если новая модель F + h все еще неудовлетворительна, мы можем добавить еще одно дерево регрессии.

Как это связано с градиентным спуском?

Градиентный спуск

Минимизируйте функцию, двигаясь в направлении, противоположном градиенту.

Функция потерь: J = (y - F (x)) ² / 2

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

Код Python

  • n_estimators: int (по умолчанию = 100)
  • Learning_rate: (по умолчанию = 0,1)
  • max_depth: (по умолчанию = 3) = максимальная глубина отдельных оценок регрессии. Максимальная глубина ограничивает количество узлов в дереве.

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

Сделайте что-нибудь, прежде чем читать это. Возьмите любое недавнее соревнование Kaggle и посмотрите подходы трех победителей. Если вы не находите применения XGBoost, стреляйте в меня!

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

Это делает XGBoost как минимум в 10 раз быстрее, чем существующие реализации повышения градиента. Он поддерживает различные целевые функции, включая регрессию, классификацию и ранжирование.

Объяснение алгоритма:

Основное различие между GBM и XGBoost заключается в их целевой функции. В случае XGBoost целевая функция = потеря обучения + регуляризация

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

Любопытство - это вожделение ума

Итак, для всех любопытных, которые хотят исследовать больше! Посмотрите здесь, здесь и здесь.

Параметры (наиболее важные для настройки):

  • Booster: у вас есть такие варианты, как gbtree, gblinear и dart.
  • Learning_rate: Аналогично скорости обучения в GBM. Попробуйте 0,01–0,2
  • max_depth: То же, что мы использовали в Random Forest, GBM и т. д. Он контролирует переоснащение. Обычно значения: 3–10

Ох! эти параметры повторяются

  • gamma: разделение узлов будет выполнено только в том случае, если уменьшение потерь больше, чем gamma. Итак, это делает алгоритм консервативным.
  • лямбда и альфа: лямбда - это коэффициент регуляризации L2, а альфа - коэффициент регуляризации L1. Если вы боитесь переобучения, настройте их хорошо.

Код Python:

Тем, кому интересно, почему я описал очень мало параметров выше, я сказал Важно.

Для кодов в R вы можете обратиться к этой статье, а для настройки параметров вы можете обратиться к этой.

Неужели это так хорошо?

Мне больше всего нравится эта часть поста, потому что, в конце концов, это главное. Имейте это в виду!

Плюсы

  • Меньше ошибок на основе ансамблевого метода.
  • Легко понять. (Не для xgboost)
  • Автоматически выполнять проектирование функций.
  • Очень небольшая подготовка данных, необходимая для алгоритма.
  • Подходит, если исходная модель довольно плохая

Минусы

  • Дорогое время и вычисления.
  • Сложность классификации возрастает.
  • Трудно реализовать на платформе реального времени.
  • Алгоритмы повышения обычно имеют 3 параметра, которые можно настроить, параметр усадки, глубину дерева, количество деревьев. Правильная тренировка каждого из этих параметров необходима для хорошей подгонки. Если параметры настроены неправильно, это может привести к чрезмерной настройке.
  • В случае несбалансированного набора данных деревья решений смещены. Однако, используя правильные критерии разделения, эту проблему можно решить.

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

  1. Awesome Resources github rep o (ЕСЛИ ВЫ НЕ ОТКРЫВАЛИ ЭТО, БЛОГ НЕ СТОИТ ПРОЧИТАТЬ)
  2. AV Blog о Boosting
  3. Мастерство машинного обучения
  4. Ансамблевые методы
  5. Мастер Kaggle объясняет бустинг
  6. Документы XGBoost
  7. Исследовательская статья XGBoost
  8. Мультикласс Adaboost
  9. Модуль повышения склеарна

Сноски:

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

Кстати, это завершает третий алгоритм нашей серии алгоритмов. Для нас это действительно захватывающе. Ваше здоровье!

Нажмите ❤, если это сделает вас немного умнее.

Соавтор: Гаурав Джиндал
Редакторы: Аджай Унагар и Ахил Гупта