Дополнительные материалы

Продолжим работу в том же ноутбуке

Масштабирование признаков

Рассмотрим линейную регрессию с двумя независимыми переменными, у которых совершенно разный масштаб. Например, один признак находится в диапазоне от 0 до 1000, а второй — от 0 до 1. Логично, что чтобы подстроиться под такие признаки, модель выберет небольшой первый и большой второй коэффициенты.

Проблема такой модели в том, что на этапе обучения скорость оптимизации таких коэффициентов (весов, параметров) не будет одинаковой.

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

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

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

Пропишем функцию потерь и найдем ее частные производные.

Попробуем найти оптимальные веса с помощью алгоритма градиентного спуска.

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

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

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

графики изменения весов при обучении модели с различным диапазоном признаков

Посмотрим, что будет, если привести признаки к одному масштабу. Вначале найдем минимум методом градиентного спуска.

Выведем результат на графике.

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

Посмотрим на обновления весов.

графики изменения весов при обучении модели с одинаковым диапазоном признаков

Мы видим только оранжевую линию, потому что одна кривая перекрывает другую.

Полиномиальная регрессия

Данные далеко не всегда хорошо аппроксимируются прямой линией. Создадим искусственный набор данных.

искусственный набор данных

Попробуем «наложить» на данные модель линейной регрессии.

Посмотрим на получившиеся коэффициенты.

Выведем результат на графике и оценим качество через RMSE и $R^2$.

аппроксимация данных с помощью модели линейной регрессии

В данном случае очевидно, что данные гораздо более удачно моделировать с помощью квадратичной функции (quadratic function).

$$ \hat{y} = \theta_0 + \theta_1x \theta_2x^2 $$

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

Параметр include_bias регулирует добавлять ли столбец из единиц для свободного коэффициента или нет. Так как в данном случае мы используем класс LinearRegression, который сам рассчитывает все коэффициенты, такой столбец нам не понадобится.

Второй столбец — квадрат первого.

Построим модель.

аппроксимация данных с помощью модели полиномиальной регрессии

Два важных замечания.

(1) Масштабирование признаков становится особенно важным при оптимизации методом градиентного спуска (потому что, например, если мы возводим признак в квадрат, его диапазон также увеличивается).

(2) Функция не обязательно должна быть степенной, если нам нужно например предсказать данные которые растут, но затем выходят на плато (например, цены) можно использовать квадратный корень.