В этой серии я собираюсь рассмотреть ряд алгоритмов обучения на основе дерева. Прежде чем мы сможем погрузиться в XGBoost, LightGBM, CatBoost, нам нужно будет рассказать об основном методе AdaBoost.

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

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

Подводя итог идеям AdaBoost:

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

Хорошо, давайте рассмотрим пример, чтобы увидеть, как это делается.

У нас есть следующие игрушечные данные, где с учетом 3 функций мы пытаемся предсказать, будет ли у пациента сердечная недостаточность. Глядя на эти игрушечные данные, мы видим, что если у пациента в прошлом была операция по шунтированию, у него, скорее всего, будет сердечная недостаточность. Двумя другими признаками, которые мы можем использовать для прогнозирования сердечной недостаточности, являются боль в руке и вес пациента. Последний столбец в этой таблице — это вес выборки, который AdaBoost использует для обозначения важности выборки. Когда мы начинаем, все образцы взвешиваются одинаково. Однако во время нескольких итераций алгоритма AdaBoost столбец весов будет использоваться для передачи информации от одного пня к другому, чтобы новые пни уделяли больше внимания неправильно классифицированным примерам.

Теперь мы хотим найти первый пень в лесу. Мы собираемся найти эту культю, выяснив, какая из трех переменных (боль в руке, шунтирование, вес) может лучше всего классифицировать образцы. Начнем с боли в руке. Используя функцию Arm Pain, наша культя может правильно предсказать 3 из 5 случаев сердечной недостаточности, а из 3 случаев, которые она классифицировала как отсутствие сердечной недостаточности, была допущена только 1 ошибка.

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

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

До сих пор обучение мало чем отличалось от случайных лесов, за исключением постройки просто пня. Здесь все становится интереснее. Суммарная ошибка, которую делает культя, представляет собой всю сумму всех весов неправильно классифицированных образцов. В нашем конкретном случае, поскольку у нас есть только одна ошибка, а соответствующая ошибка для этого образца равна 1/8, общая ошибка, которую допустил наш пень, составляет 1/8. Обратите внимание, что лучший пень получит ошибку 0, если он правильно классифицирует все выборки, а худший пень получит ошибку 1, поскольку сумма всех весов выборки равна 1. Общая ошибка, которую допустил пень, используется как total_say культи. Пень, который сделал много ошибок, будет иметь меньше total_say, а пень, который правильно классифицировал каждую выборку, будет иметь очень высокий total_say.

Подставив для этого пня значение total_error, равное 1/8, мы вычислим, что total_say будет равно 0,97. Обратите внимание на высокое значение, которое получает этот пень. Это потому, что мы допустили только 1 ошибку во время классификации.