Основы линейной регрессии

Обучение с учителем с помощью scikit-learn

George Boorman

Core Curriculum Manager, DataCamp

Механика регрессии

  • $y = ax + b$

    • Простая линейная регрессия использует один признак

      • $y$ = целевая переменная

      • $x$ = один признак

      • $a$, $b$ = параметры/коэффициенты модели — наклон, смещение

  • Как выбрать $a$ и $b$?

    • Определить функцию ошибки для заданной прямой

    • Выбрать прямую, минимизирующую функцию ошибки

  • Функция ошибки = функция потерь = функция стоимости

Обучение с учителем с помощью scikit-learn

Функция потерь

диаграмма рассеяния

Обучение с учителем с помощью scikit-learn

Функция потерь

линия регрессии, проходящая снизу слева вверх вправо через центр наблюдений

Обучение с учителем с помощью scikit-learn

Функция потерь

красные отрезки от линии регрессии до каждого наблюдения

Обучение с учителем с помощью scikit-learn

Функция потерь

красные отрезки обозначают остатки

Обучение с учителем с помощью scikit-learn

Функция потерь

стрелка указывает на положительный остаток: наблюдение выше линии регрессии

Обучение с учителем с помощью scikit-learn

Метод наименьших квадратов

вторая стрелка указывает на остаток ниже линии регрессии — отрицательный остаток

$RSS = $ $\displaystyle\sum_{i=1}^{n}(y_i-\hat{y_i})^2$

МНК (OLS): минимизировать RSS

Обучение с учителем с помощью scikit-learn

Линейная регрессия в многомерном случае

$$ y = a_{1}x_{1} + a_{2}x_{2} + b$$

  • Чтобы обучить линейную модель:
    • Нужно задать 3 параметра: $ a_1,\ a_2,\ b $
  • В многомерном случае:
    • Называется множественной регрессией
    • Необходимо задать коэффициенты для каждого признака и параметр $b$

$$ y = a_{1}x_{1} + a_{2}x_{2} + a_{3}x_{3} +... + a_{n}x_{n}+ b$$

  • scikit-learn работает так же:
    • Передайте два массива: признаки и целевую переменную
Обучение с учителем с помощью scikit-learn

Линейная регрессия на всех признаках

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
reg_all = LinearRegression()
reg_all.fit(X_train, y_train)
y_pred = reg_all.predict(X_test)
Обучение с учителем с помощью scikit-learn

R-квадрат

  • $R^2$: показывает долю дисперсии целевой переменной, объяснённой признаками

    • Принимает значения от 0 до 1
  • Высокий $R^2$:

линия регрессии под углом 45°, проходящая близко ко всем наблюдениям

 

 

  • Низкий $R^2$:

горизонтальная линия регрессии, наблюдения разбросаны далеко от неё

Обучение с учителем с помощью scikit-learn

R-квадрат в scikit-learn

reg_all.score(X_test, y_test)
0.356302876407827
Обучение с учителем с помощью scikit-learn

Среднеквадратичная ошибка и корень из неё

$MSE = $ $\displaystyle\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y_i})^2$

  • $MSE$ измеряется в единицах целевой переменной, возведённых в квадрат

 

$RMSE = $ $\sqrt{MSE}$

  • $RMSE$ измеряется в тех же единицах, что и целевая переменная
Обучение с учителем с помощью scikit-learn

RMSE в scikit-learn

from sklearn.metrics import root_mean_squared_error

root_mean_squared_error(y_test, y_pred)
24.028109426907236
Обучение с учителем с помощью scikit-learn

Давайте потренируемся!

Обучение с учителем с помощью scikit-learn

Preparing Video For Download...