[ЗАСТАВКА] Привет! Вы уже изучили два вида композиции алгоритмов: случайный лес и градиентный бустинг. Строить случайный лес с помощью Sklearn вы уже умеете. И на этом видео мы потренируемся строить градиентный бустинг. Sklearn предоставляет нам готовую реализацию градиентного бустинга. Она находится в том же модуле, что и случайный лес, — модуль ensemble, класс называется gradient boosting classifier. Мы с вами не будем изучать эту модель (вы можете сделать это самостоятельно), а мы будем строить XGBoost — тот алгоритм, который вы изучали на прошлом уроке. Давайте импортируем необходимые библиотеки и поговорим про данные. Мы будем изучать эти алгоритмы на основе данных из задачи bioresponse. В этой задаче требуется предсказать, будет ли дан биологический ответ на основе данных о молекуле. Мы уже работали с этими данными ранее, когда изучали random forest. Давайте загрузим эти данные. Сделаем это с помощью библиотеки pandas, функции read_csv. И давайте вспомним, как они выглядели. Помним, что в первом столбце у нас дана метка класса: 1 означает, что биологический ответ будет дан, 0 означает обратное. И также нам доступны столбцы с параметрами молекулы. Давайте теперь отделим данные от метки класса. И можем переходить к построению моделей. И случайный лес, и градиентный бустинг являются композициями алгоритмов. Понятно, что их качество зависит от количества простых моделей, над которыми они строятся. Давайте проанализируем, как изменяется качество алгоритма в зависимости от количества деревьев, над которыми они построены. Начнем со случайного леса. Сначала зададим количество деревьев. Давайте смотреть на одно дерево и далее на количество деревьев от 10 до 55 с шагом 5. Что мы хотим понять? Мы хотим понять, как будет меняться качество в зависимости от того, сколько деревьев мы разрешили строить алгоритму. Для этого давайте пройдемся в цикле по заданному количеству деревьев и будем оценивать качество с помощью функции cross_val_score. При этом мы будем делать кросс-валидацию на три фолда и будем использовать метрику accuracy. Вот давайте получим результаты этого скоринга. И дальше будем строить график. Отложим на прямой, как меняется качество алгоритма. Ну мы с вами будем ожидать, что качество должно расти. Ведь, казалось бы, чем больше деревьев, тем лучше алгоритм должен быть обучен. Теперь давайте посмотрим на скоринг, который мы получили. Мы видим, что мы получили матрицу. Эта матрица состоит из 10 строк. Каждая строка соответствует количеству деревьев, над которыми мы строили случайный лес. Получается, что первая строка соответствует одному дереву, последняя строка соответствует 50 деревьям. Теперь давайте посмотрим, что же внутри. Мы видим в каждой строке три значения качества. Помните, что мы делали кросс-валидацию по трем фолдам, соответственно, каждое значение соответствует качеству на одном фолде. Теперь давайте построим следующий график: по оси x отложим количество деревьев, по оси y отметим качество. Мы предполагаем, что качество должно расти с количеством деревьев, поэтому давайте наглядно в этом убедимся. Будем строить график с помощью функции plot. Сразу же добавим на него сетку, чтобы было легче ориентироваться. Добавим имена осей x и y, а также зададим название графика. Вот давайте смотреть. Да, видим вполне ожидаемую картинку. Когда у нас было всего одно дерево, качество было довольно низкое, и дальше оно начало расти с увеличением количества деревьев — то, что мы и хотели. Теперь давайте построим градиентный бустинг и посмотрим, как же в этом случае будет меняться качество алгоритма в зависимости от количества деревьев. Мы будем использовать тот же список количества деревьев — от 1 до 50. И теперь давайте обучать модель. Для этого мы будем пользоваться библиотекой XGBoost (мы ее импортировали в самом начале) и будем использовать класс XGBClassifier. Передаем ему параметры, которые мы хотим использовать: это learning_rate — глубина дерева, количество деревьев и так далее. И дальше мы будем для оценки качества снова использовать функцию cross_val_score. Это очень удобно, потому что получившийся объект имеет интерфейс, совместимый с этой функцией. Итак, давайте теперь получим скоринг для градиентного бустинга и попробуем построить аналогичный график. Итак, оценки качества для градиентного бустинга готовы. Обратите внимание на время работы алгоритма. Для сравнения можем вспомнить, как долго обучался случайный лес. Мы видим, что сильно быстрее — на него потребовалось всего порядка 15 секунд. Теперь давайте проанализируем наш результат. Видим, что мы получили аналогичную матрицу, практически такую же, как мы получали в предыдущем случае, только для градиентного бустинга. Поэтому давайте теперь возьмем скоринг для градиентного бустинга, скоринг для случайного леса и отрисуем их на одной плоскости, чтобы можно было их удобнее сравнивать. Итак, давайте построим их вместе. И что мы видим: оба алгоритма имеют довольно высокое качество. Это видно из правой части графика. Однако, для того чтобы достигнуть его, градиентному бустингу нужно существенно меньше деревьев, чем случайному лесу. Мы можем посмотреть в левой части графика, что градиентный бустинг начинает с более высокой отметки. Это довольно интересно. А мы с вами на этом заканчиваем. В этом уроке мы научились строить модель XGBoost, проанализировали, как изменяется качество алгоритма в зависимости от количества деревьев. А на следующем уроке вы займетесь новым классом алгоритмов — нейронные сети.