Skip to content
Dmitry Badeev edited this page Sep 8, 2023 · 28 revisions

Проект FT Linear Regression


Постановка задачи

Пусть $\Large y$ - цены на автомобили, $\Large x$ - их соответствующие пробеги.
Нужно построить регрессионную модель, предсказывающую стоимость автомобиля по его пробегу на основе данных из датасета.


Решение

Регрессия — способ выбрать из семейства функций ту, которая минимизирует функцию потерь.

Регрессионная модель в случае одного признака описывается формулой $\Large y = a + bx$.

Наша цель подобрать коэффициенты $\Large a$ и $\Large b$ так, чтобы функция потерь средней суммы квадратов отклонений регрессанта от модели $\Large MSE$ (Mean Squared Errors) достигла минимума:

$\qquad \qquad \qquad \Large MSE(y, \hat y(a, b, x)) = \frac {1}{N} \cdot \sum\limits_{i=1}^{N}(y_i - \hat y_i)^2 \rightarrow min$, где

$\qquad \Large y_i$ - наблюдаемые значения,
$\qquad \Large \hat y_i = a + bx_i$, где $\Large x_i$ - признак (регрессор) $\Large i$-го эксперимента,
$\qquad \Large N$ - количество экспериментов.


Для нахождения минимума, воспользуемся методом градиентного спуска.
Т.е. зафиксировав некоторые начальные $\Large a$ и $\Large b$ (по требованиям в Проекте они берутся равными $\Large 0$), будем двигаться по $\Large MSE$ в направлении антиградиента (т.е. уменьшения функции) к минимуму, на каждом шаге изменяя новые $\Large a$ и $\Large b$ на небольшие значения.
Поскольку $\Large MSE$ - квадратичная функция, этот минимум - единственный.


Вычислим градиент (частные производные) $\Large MSE$ по $\Large a$ и $\Large b$, используя формулу нахождения производной сложной функции (если $\Large {\displaystyle h(x)=f(g(x))}$, то $\Large {\displaystyle h'(x)=f'(g(x))g'(x)}$):

Для $\Large a$: $\qquad \Large \frac {\partial MSE}{\partial a} = \frac {\partial MSE}{\partial \hat y} \cdot \frac {\partial \hat y}{\partial a} = \frac{2}{N} \cdot \sum\limits_{i=1}^{N} 2(y_i - \hat y_i) \cdot (-1) = - \frac{2}{N} \cdot \sum\limits_{i=1}^{N}(y_i - \hat y_i)$
Для $\Large b$: $\qquad \Large \frac {\partial MSE}{\partial b} = \frac {\partial MSE}{\partial \hat y} \cdot \frac {\partial \hat y}{\partial b} = \frac{1}{N} \cdot\sum\limits_{i=1}^{N} 2 \cdot (y_i - \hat y_i) \cdot (-x_i) = - \frac{2}{N} \cdot \sum\limits_{i=1}^{N}x_i(y_i - \hat y_i)$

Метод градиентного спуска

  1. Фиксируем начальные значения параметров $\Large {a_0 = 0; b_0 = 0}$
  2. Вычисляем новые значения параметров $\Large {a_{new}; b_{new}}$ относительно текущих значений $\Large {a_{cnt}; b_{cnt}}$, двигаясь в сторону антиградиента частной производной $\Large MSE$ (т.е., если частная производная положительна, то она в этой точке возрастает и наоборот) с шагом коэффициента обучения (learning rate) $\Large {\eta = 0.2}$

$\qquad\qquad\qquad \Large a_{new} = a_{cnt} - \frac {1}{N} \cdot \eta \frac {\partial MSE}{\partial a}$

$\qquad\qquad\qquad \Large b_{new} = b_{cnt} - \frac {1}{N} \cdot \eta \frac {\partial MSE}{\partial b}$

  1. Повторяем тренировку модели (п.2) заданное в параметре $\Large epochs$ количество раз, либо пока разница между значением функции потерь на текущем и предыдущем шагах не окажется меньше заданного значения $\Large \Delta_{loss}$:

$\qquad\qquad\qquad \Large MSE_{cntstep} - MSE_{cntstep - 1} < \Delta_{loss}$

В качестве базового, для регуляризированных значений данных, возьмем $\Large \Delta_{loss} = 1e^{-12}$.

Регуляризация и дерегуляризация коэффициентов

Регуляризация необходима, т.к. при вычислении значений функции $\Large MSE$ получаются очень большие числа. Цель данного раздела - показать взаимосвязь для различных начальных и регулиризированных значений. В программе использована лишь часть из полученных формул.

Начальная формула:

$\qquad\qquad\qquad \Large y = a + bx$

Регуляризатор - минимакс.
После применения регуляризатора, новые значения попадают в отрезок $\Large [0.0, 1.0]$:

$\qquad\qquad\qquad \Large y_{reg} = \frac{y-y_{min}}{\Delta_y}, \qquad \Delta_y = y_{max} - y_{min}$

$\qquad\qquad\qquad \Large x_{reg} = \frac{x-x_{min}}{\Delta_x},\qquad \Delta_x = x_{max} - x_{min}$

Подставляя в начальную формулу новые значения $\Large y_{new}; x_{new}$ ($\Large a_{reg}; b_{reg}$ будут также отличаться от начальных $\Large a; b$) получим:

$\qquad\qquad\qquad \huge \frac{y-y_{min}}{\Delta_y} = a_{reg} + b_{reg}\frac{x - x_{min}}{\Delta_{x}}$

Выразим $\Large y$ через новые значения:
$\qquad\qquad\qquad \Large y = \overbrace{(\Delta_y \cdot (a_{reg}- b_{reg}\cdot \frac{x_{min}}{\Delta_x}) + y_{min})}^{\huge a} + \overbrace {(b_{reg}\cdot \frac {\Delta_y}{\Delta_x})}^{\huge b} x$

Таким образом, для первоначальных значений $\Large a; b$ получаем:

$\qquad\qquad\qquad \Large a = \Delta_y \cdot (a_{reg}- b_{reg} \cdot \frac{x_{min}}{\Delta_x}) + y_{min}$

$\qquad\qquad\qquad \Large b = b_{reg}\cdot \frac {\Delta_y}{\Delta_x}$


Или,

$\qquad\qquad\qquad \Large a = {\Delta_y} \cdot {a_{reg}} - {x_{min}} \cdot \frac {\Delta_y} {\Delta_x} \cdot b_{reg} + y_{min}$

$\qquad\qquad\qquad \Large b = b_{reg} \cdot \frac {\Delta_y}{\Delta_x}$

И, окончательно:

$\qquad\qquad\qquad \Large a = a_{reg} \cdot ({y_{max} - y_{min}}) - b_{reg} \cdot x_{min} \cdot \frac {y_{max} - y_{min}}{x_{max} - x_{min}} + y_{min}$

$\qquad\qquad\qquad \Large b = b_{reg} \cdot \frac {y_{max} - y_{min}} {x_{max} - x_{min}}$

Регуляризованные коэффициенты $\Large a_{reg}, b_{reg}$ выражаются через первоначальных значения $\Large a; b$ так:

$\qquad\qquad\qquad \Large b_{reg} = b \cdot \frac {\Delta_x}{\Delta_y} = b \cdot \frac {x_{max} - x_{min}} {y_{max} - y_{min}}$

$\qquad\qquad\qquad \Large a_{reg} = \frac {a} {{y_{max} - y_{min}}} + \frac {b_{reg} \cdot x_{min}}{x_{max} - x_{min}} - \frac {y_{min}}{{{y_{max} - y_{min}}}} = \frac {a - y_{min}} {{y_{max} - y_{min}}} + \frac {b \cdot x_{min}}{y_{max} - y_{min}} = \frac {a + {b \cdot x_{min}} - y_{min}} {y_{max} - y_{min}}$

Т.е. при начальных $\Large a = b = 0$:

$\qquad\qquad\qquad \Large b_{reg} = 0$
$\qquad\qquad\qquad \Large a_{reg} = - \frac {y_{min}} {y_{max} - y_{min}}$

Выражение для линейной регрессии через регуляризованные коэффициенты $\Large a_{reg}; b_{reg}$ также можно представить в виде: $\qquad\qquad\qquad \Large y = {\Delta_y} \cdot {a_{reg}} - {x_{min}} \cdot \frac {\Delta_y} {\Delta_x} \cdot b_{reg} + y_{min} + (b_{reg} \cdot \frac {\Delta_y}{\Delta_x}) \cdot x = {\Delta_y} \cdot {a_{reg}} + b_{reg} \cdot \frac {\Delta_y}{\Delta_x} \cdot(x - x_{min}) + y_{min}$

Значения $\Large x; y$ - через соответствующие $\Large x_{reg};y_{reg}$:

$\qquad\qquad\qquad \Large y = y_{reg} \cdot \Delta_y + y_{min}$

$\qquad\qquad\qquad \Large x = x_{reg} \cdot \Delta_x +x_{min},$ где $\Large \Delta_y = y_{max} - y_{min}$ и $\Large \Delta_x = x_{max} - x_{min}$

Модель и результаты

Модель тренировалась со следующими параметрами:

$\Large \eta = 0.2; \quad epochs = 1500; \quad \Delta_{loss} = 1e^{-12}$

Для коэффициентов $\Large a; b$ получен следующий результат:

$\Large [a, b] = [8499.586138425148, -0.021448835093484494]$

Для достижения указанных результатов при заданном $\Large \Delta_{loss} = 1e^{-12}$, хватило $\Large 1243 \ epochs$.

Оценка качества модели линейной регрессии

Средняя квадратичная ошибка $\Large MSE (Mean \ Squared \ Error)$

  • Служит для сравнения моделей, но не для оценки качества модели с т.з. решения задачи
  • Выделяет грубые ошибки за счет возведения в квадрат ошибки прогноза
  • Чувствительна к выбросам

$\qquad\qquad\qquad \Large MSE =\frac {1} {N}\sum\limits_{i=1}^{N}(y_i - \hat y_i)^2$, где
$\Large y_i$ - наблюдаемые значения
$\Large \hat y_i = a + bx_i$, где $\Large x_i$ - признак (регрессор) $\Large i$-го эксперимента
$\Large N$ - количество экспериментов
image
$\qquad\qquad\qquad\qquad\qquad\qquad$ Mean Squared Error Representation


Коэффициент детерминации $\Large (R-squared \ statistic)$
Нормированная среднеквадратичная ошибка

  • Выражается через $\Large SSR (Sum \ of \ Squares \ Regression)$ и $\Large SST (Sum \ of \ Squares \ Total)$
  • Если значение близко к единице, то модель хорошо объясняет данные

$\qquad\qquad\qquad \Large R^2 = \dfrac{SSR}{SST} = \dfrac{\sum \limits_{i=1}^{n}(\hat y_i - \overline y)^2}{\sum \limits_{i=1}^{n}(y_i - \overline{y})^2}$, где
$\Large y_i$ - наблюдаемые значения,
$\Large \hat y_i = a + bx_i$, где $\Large x_i$ - признак (регрессор) $\Large i$-го эксперимента,
$\Large \overline y = \dfrac{\sum \limits_{i=1}^{n}y_i}{n}$, среднее наблюдаемых значений,
$\Large n$ - количество экспериментов.
image
$\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad$ Digrammatic representation for understanding R-Squared

Выразим $\Large SST (Sum \ of \ Squares \ Total)$ через $\Large SSR (Sum \ of \ Squares \ Regression)$ и $\Large SSE (Sum \ of \ Square \ residual \ Error)$ (см. рис.):

$\qquad\qquad\qquad \Large SST = SSR + SSE \Rightarrow SSR = SST - SSE$

Тогда, $\Large R^2 = \dfrac{SSR}{SST} = \dfrac{SST - SSE}{SST} = 1 - \dfrac{SSE}{SST} = 1 - \dfrac{\sum \limits_{i=1}^{n}(y_i - \hat y_i)^2}{\sum \limits_{i=1}^{n}(y_i - \overline{y})^2}$
Умножая числитель и знаменатель дроби на $\Large \frac{1}{n}$ , получим:

$\qquad\qquad\qquad \Large R^2 = 1 - \dfrac{SSE}{SST} = 1 - \dfrac{MSE}{\frac{1}{n} \cdot \sum \limits_{i=1}^{n}(y_i - \overline{y})^2}$

По определению дисперсии:

$\qquad\qquad\qquad \Large D[y] = \frac{1}{n} \cdot \sum \limits_{i=1}^{n}(y_i - \overline{y})^2$

Окончательно:
$\qquad\qquad\qquad \Large R^2 = \frac{MSE}{D[y]}$



Результат оценки качества описанной выше модели:

$\Large R^2 = 0.7329659255274605, \quad MSE = 445645.24511545297$

Примеры

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

Запуск обучающей программы train.py с параметрами

$\qquad$ Параметр $\Large -g \ :$ вывод графика функции потерь в зависимости от эпохи
image

$\qquad$ Параметр $\Large -t \ :$ вывод графика с исходными данными и предсказанной зависимостью между пробегом и ценой автомобиля
image

$\qquad$ Параметр $\Large -c \ :$ анимация изменения по эпохам предсказания зависимости между пробегом и ценой автомобиля
ft_lin_reg_video

$\qquad$ Параметр $\Large -q \ :$ качество модели (R-square, MSE)

image


Запуск программы предсказания цены автомобиля по пробегу predict.py с параметрами

$\qquad$ Параметр $\Large -d \ :$ вывод информации о параметрах модели
$\qquad$ Параметр $\Large -m \ :$ пробег автомобиля в милях

image