Добрый день. В этом видео мы поговорим о блендинге. Далеко не всегда один конкретный алгоритм, какой бы хороший он ни был, например, продвинутый градиентный бустинг, идеально решает задачи машинного обучения. Иногда нам нужно комбинировать различные алгоритмы для того, чтобы получить наиболее качественные предсказания. Например, одним из способов этого достичь является блендинг. Блендинг представляет из себя некий мета-алгоритм, который и строится как взвешенная сумма предсказаний нескольких различных алгоритмов. Давайте рассмотрим простой пример блендинга градиентного бустинга и линейной регрессии. В качестве наших данных мы возьмем boston datasets — это набор с данными о домах в Бостоне, и там решаются задачи регрессии. Как обычно, мы разобьем наши данные случайным образом, оставим в тестовой части 30 %. Качество мы будем измерять с помощью rmse и реализуем уже реализованную нами. Первым алгоритмом выступит градиентный бустинг в реализации как CatBoost. Посмотрим на метрики, которые у нас получаются. В градиентном бустинге на train получается 5,4 rmse, а на тесте — 6,5. Так или иначе мы переобучаемся, но не очень сильно. Давайте теперь обучим линейную регрессию. Естественно, мы должны отнормировать наши данные, то есть мы сначала их нормируем, и train, и test, после чего обучаемся на них. Здесь метрики заметно лучше, и на train, и на test. Давайте теперь смешаем наши алгоритмы. Мы будем считать, что новый алгоритм — это взвешенная сумма базовых алгоритмов. При этом веса суммируются в единицу для удобства. И все веса — неотрицательные. Естественно, когда мы будем решать какую-то более сложную задачу, мы можем убрать каждое из этих ограничений, но пока что введем их. Нам нужно написать функцию, которая будет выбирать эти веса. Давайте перебирать по сетке наши веса, то есть сетка у нас это будет np.linspace, перебирать мы, естественно, должны от 0 до 1 и давайте переберем 1.000 значений. Давайте теперь проитерируемся по этой сетке. Значение, которое мы будем отсюда доставать, это будет w_0, а второе значение для линейной регрессии, например, у нас будет w_1. Будем доставать w_0 из сетки. Сразу нам нужно получить w_1, это будет 1 − w_0, просто в силу наших ограничений. Давайте теперь получим наш ответ. Он должен реализоваться таким образом. Мы берем наше первое предсказание, домножаем его на w_0. И добавляем второе предсказание, умноженное на w_1. Давайте теперь в метрику в этот лист запишем следующее. Добавим в него такой объект. Первым слагаемым будет rmse, которое будем считать от наших правильных ответов и нашего нового y. Следующим мы запишем w_0, дальше мы запишем w_1, и дальше мы вернем наше значение метрики, весь наш массив. Давайте теперь выполним этот код, и мы можем сразу выбрать минимальное значение, используя функцию min, и значение key от всего нашего результата нашей функции. Посмотрим, чему у нас будет равно. rmse на обучающей выборке будет 0,426, что лучше, чем у линейной регрессии и у градиентного бустинга. Уже хорошо. Но на обучающей выборке мы, естественно, можем получить нулевую ошибку, нам интересно посмотреть на значение на тесте. Для этого мы точно так же, как и в нашей функции с выбором весов, возьмем ответы CatBoost и линейной регрессии с весами. Наше предсказание на тестовой выборке. И давайте теперь посмотрим на значение rmse. И на тестовой выборке у нас качество становится 5,22, что лучше, чем у линейной регрессии и явно лучше, чем у градиентного бустинга. То есть в итоге мы получили качество лучше, чем у каждого алгоритма в отдельности, пусть и на таком не очень сложном примере. В этом видео мы рассмотрели, как работает блендинг, и реализовали его для двух разных алгоритмов машинного обучения. [МУЗЫКА]