[ЗАСТАВКА] Мы начинаем урок, посвященный градиентному бустингу, и в первую очередь мы обсудим, почему случайные леса применимы не ко всем задачам, и зачем могут понадобиться другие подходы к построению композиций. Итак, случайный лес — это композиция большого количества глубоких деревьев. При этом базовые алгоритмы (базовые решающие деревья в случайном лесе) строятся независимо друг от друга. На самом деле здесь есть несколько проблем. Проблема первая состоит в том, что базовые алгоритмы (деревья) должны быть глубокими. Они должны быть очень сложными и улавливать сложные закономерности в данных. Из-за этого строить такие деревья очень долго, если у вас большая выборка или много признаков. Возникает вопрос: а что будет, если мы введем ограничения, если будем ограничивать глубину базовых решающих деревьев? Тогда мы получим примерно такую картину. Смотрите, здесь синий класс состоит из двух групп: одна в центре, одна с краю. Из-за того, что деревья очень небольшой глубины (в данном случае — 2), они могут уловить только одну из этих групп — ту, которая в центре, а на второй они полностью ошибаются. Именно эта проблема не позволяет строить неглубокие деревья в случайном лесе. В этом случае случайный лес будет слишком слабым, его сдвиг будет большим. Вторая проблема случайного леса состоит в том, что деревья строятся ненаправленно, каждое следующее дерево в композиции не зависит от предыдущих деревьев. Из-за этого для решения сложных задач деревьев нужно довольно много. Это тоже может быть проблемой, связанной с производительностью. Бустинг — это подход к построению композиций, который призван решить все эти проблемы. В бустинге базовые алгоритмы строятся последовательно, один за другим. И при этом каждый следующий выбирается так, чтобы исправлять ошибки уже построенной композиции, исправлять ошибки предыдущих базовых алгоритмов. Благодаря тому, что построение композиций в бустинге направленное, в нем достаточно простых базовых алгоритмов, например, неглубоких деревьев. Давайте разберем простой пример того, как может быть устроен бустинг для задачи регрессии. Допустим, мы хотим минимизировать среднеквадратичную ошибку, с которой вы уже хорошо знакомы. Итак, давайте начнем с того, что обучим один алгоритм, который будет решать нашу задачу, минимизировать среднеквадратичную ошибку. Это очень простая задача, мы умеем ее решать, например, градиентным спуском. Хорошо. Итак, допустим, мы нашли b1 — алгоритм из некого семейства алгоритмов, например, из семейства неглубоких решающих деревьев, который решает данную задачу. После этого мы можем нарисовать такую таблицу. У нас всего l объектов обучающей выборки, на каждом мы знаем ответ (yi) и прогноз нашего алгоритма b1 — b1 (xi). Представьте, что теперь мы хотим добавить в композицию еще один алгоритм b2. И возникает вопрос: а какие же ответы b2 должен давать на объектах обучающей выборки, чтобы ошибка нашей композиции была как можно меньше? В общем-то, если записать уравнение b1 (xi) + b2 (xi) = yi, из него легко понять, чему должен быть равен b2 (xi), чтобы давать наилучшее приближение к истинным ответам. b2 (xi) должен быть равен yi − b1 (xi). Тогда, если мы прибавим ответ нашего второго алгоритма к ответу первого алгоритма, то ответ b1 (xi) сократится, и останется только yi. То есть после прибавления b2 к b1 мы получим на объектах обучающей выборки нулевую ошибку, получим идеальные ответы. Отлично. Давайте тогда обучать b2 так, чтобы его прогнозы были как можно ближе вот к этому вектору сдвигов, этому вектору ошибок. Получаем задачу, где минимизируется среднеквадратичное отклонение b (xi) от вот этих самых ошибок yi − b1 (xi). Если удастся решить задачу точно, то есть получить нулевую ошибку, то и наша композиция после добавления этого алгоритма b2 будет иметь нулевую ошибку. Но поскольку у нас алгоритмы базовые очень простые, скорее всего, точно решить задачу не получится, и поэтому b2 будет просто чуть-чуть улучшать качество первого базового алгоритма. Этот процесс можно продолжать очень долго. n-ный базовый алгоритм мы будем настраивать на ошибку композиции из (n − 1) алгоритма, которая записана вот здесь: yi − сумма ответов уже построенных (n − 1) алгоритма. Мы будем продолжать этот процесс до тех пор, пока ошибка на обучающей выборке не будет нас устраивать. Итак, мы с вами обсудили, в чем могут быть проблемы случайного леса, а именно в том, что строить глубокие деревья, а это очень долго и сложно, и в том, что его построение ненаправленное, каждый следующий алгоритм не зависит от предыдущих. И поговорили о том, что такое бустинг, который как раз таки является противоположностью случайного леса, он строит направленную композицию: каждый следующий алгоритм исправляет ошибки предыдущего. И разобрали на примере, как может выглядеть такое построение для среднеквадратичной ошибки и задачи регрессии. А в следующем видео мы поговорим о градиентном бустинге — более общем подходе, который обосновывает тот простой алгоритм, о котором мы только что говорили.