Линейная регрессия — различия между версиями
Zem4ik (обсуждение | вклад) (→Дано) |
(замена дефисов на тире) |
||
Строка 5: | Строка 5: | ||
==== Дано ==== | ==== Дано ==== | ||
− | * <tex> f_1(x), \dots ,f_n(x) </tex> | + | * <tex> f_1(x), \dots ,f_n(x) </tex> — числовые признаки |
* модель многомерной линейной регрессии: <br> <tex> f(x,\alpha) = \sum\limits_{j=1}^n \alpha_j f_j(x) </tex>, <br> где <tex> a \in R^n </tex> | * модель многомерной линейной регрессии: <br> <tex> f(x,\alpha) = \sum\limits_{j=1}^n \alpha_j f_j(x) </tex>, <br> где <tex> a \in R^n </tex> | ||
* обучающая выборка: множество из пар <tex>(x_i, y_i)_{i=1 \dots n}</tex> | * обучающая выборка: множество из пар <tex>(x_i, y_i)_{i=1 \dots n}</tex> | ||
− | * <tex> x_i </tex> | + | * <tex> x_i </tex> — объекты из множества <tex> X = R^n </tex> |
− | * <tex> y_i </tex> | + | * <tex> y_i </tex> — объекты из множества <tex> X = R </tex> |
==== Матричные обозначения ==== | ==== Матричные обозначения ==== | ||
Строка 42: | Строка 42: | ||
, где | , где | ||
− | * <tex> F </tex> | + | * <tex> F </tex> — матрица объектов-признаков, где строки соответствуют объектам а столбцы — признакам |
− | * <tex> y </tex> | + | * <tex> y </tex> — вектор ответов, или целевой вектор |
− | * <tex> \alpha </tex> | + | * <tex> \alpha </tex> — вектор коэффициентов |
==== Постановка задачи ==== | ==== Постановка задачи ==== | ||
Строка 66: | Строка 66: | ||
<tex> F^T F \alpha = F^T y </tex>, | <tex> F^T F \alpha = F^T y </tex>, | ||
− | где <tex> F^T F | + | где <tex> F^T F — n \times n </tex> матрица |
Мы получили систему уравнений, откуда можем выразить искомый вектор <tex> \alpha </tex>. | Мы получили систему уравнений, откуда можем выразить искомый вектор <tex> \alpha </tex>. | ||
Строка 73: | Строка 73: | ||
<tex> \alpha^* = (F^T F)^{-1} F^T y = F^+ y </tex>, <br> где <tex> F^+ </tex> — псевдо-обратная матрица. | <tex> \alpha^* = (F^T F)^{-1} F^T y = F^+ y </tex>, <br> где <tex> F^+ </tex> — псевдо-обратная матрица. | ||
− | Значение функционала: <tex> Q(\alpha^*) = ||P_F y - y||^2 </tex>, <br> где <tex> P_F = F F^+ = F (F^T F)^{-1} F^T </tex> | + | Значение функционала: <tex> Q(\alpha^*) = ||P_F y - y||^2 </tex>, <br> где <tex> P_F = F F^+ = F (F^T F)^{-1} F^T </tex> — ''проекционная матрица'' |
==== Проблемы ==== | ==== Проблемы ==== |
Версия 18:04, 19 марта 2019
Линейная регрессия (англ. linear regression) — метод восстановления зависимости одной (объясняемой, зависимой) переменной
от другой или нескольких других переменных (факторов, регрессоров, независимых переменных) с линейной функцией зависимости. Данный метод позволяет предсказывать значения зависимой переменной по значениям независимой переменной .Содержание
Задача
Дано
- — числовые признаки
- модель многомерной линейной регрессии:
,
где - обучающая выборка: множество из пар
- — объекты из множества
- — объекты из множества
Матричные обозначения
Перейдем к матричным обозначениям:
, где
- — матрица объектов-признаков, где строки соответствуют объектам а столбцы — признакам
- — вектор ответов, или целевой вектор
- — вектор коэффициентов
Постановка задачи
В этих трех векторно-матричных обозначениях очень удобно расписать постановку задачи наименьших квадратов:
Необходимо найти вектор
при известной матрице и известном вектор-столбце .Решение
Нормальная система уравнений
Запишем необходимые условия минимума в матричном виде.
Отсюда следует нормальная система задачи МНК:
,
где
матрицаМы получили систему уравнений, откуда можем выразить искомый вектор
.Решение системы
где — псевдо-обратная матрица.
Значение функционала:
где — проекционная матрица
Проблемы
В случае мультиколлинеарности (столбцы матрицы
линейно-зависимы) нам не удастся найти обратную матрицу к (она будет вырождена).Если же столбцы матрицы
почти линейно-зависимы, то у нас возникнет масса вычислительных проблем с обращением этой матрицы.Сингулярное разложение
Воспользуемся понятием сингулярного разложения , которое позволяет произвольную прямоугольную матрицу представить в виде произведения трех матриц:
.
Основные свойства сингулярного разложения:
-
столбцы — собственные векторы матрицы ;
-матрица ортогональна, , -
столбцы — собственные векторы матриц ;
-матрица ортогональна, , -
— собственные значения матриц и ,
— сингулярные числа матрицы . -матрица диагональна, ,
Решение МНК через сингулярное разложение
Найдем псевдо-обратную матрицу:
.
Теперь зная псевдо-обратную матрицу, найдем решение задачи наименьших квадратов:
.
Найдем вектор, которым наша линейная модель аппроксимирует целевой вектор
.
Квадрат нормы вектора коэффициентов:
.
В 3-х из 4-х формул сингулярные числа оказались в знаменателе. Если имеются сингулярные числа приближающиеся к 0, то мы получаем проблему мультиколлинеарности. Близкие к 0 собственные значения или сингулярные числа — показатель того, что среди признаков есть почти линейно-зависимый.
Проблема мультиколлинеарности и переобучения
Если имеются сингулярные числа, близкие к 0, то:
- матрица плохо обусловлена;
- решение становится неустойчивым и неинтерпретируемым, слишком большие коэффициенты разных знаков;
- возникает переобучение:
на обучении мало;
на контроле велико.
Стратегии устранения мультиколлинеарности и переобучения:
- отбор признаков, то есть выкидываем те признаки, которые могут оказаться линейно-зависимыми:
; - регуляризация (накладываем дополнительные ограничения на вектор коэффициентов):
; - преобразование признаков, чтобы в новом признаковом пространстве признаков оказалось меньше, но они хорошо восстанавливали бы исходные:
.
Пример кода для Scikit-learn
import matplotlib.pyplot as plt from sklearn import datasets, linear_model # generate dataset X, y = datasets.make_regression(n_samples=1_000, n_features=1, noise=8, shuffle=True) # test and train data sizes train_size = 700 test_size = 300 # split the data into training/testing sets X_train = X[:-train_size] X_test = X[-test_size:] # split the targets into training/testing sets y_train = y[:-train_size] y_test = y[-test_size:] # create linear regression object regr = linear_model.LinearRegression() # train the model using the training sets regr.fit(X_train, y_train) # make predictions using the testing set y_pred = regr.predict(X_test) # plot outputs plt.scatter(X_test, y_test, color='red', s=5) plt.plot(X_test, y_pred, color='blue', linewidth=2) plt.xticks(()) plt.yticks(()) plt.show()
Возможный результат исполнения программы:
См. также
- Общие понятия
- Вариации регрессии
- Логистическая регрессия
- Обзор библиотек для машинного обучения на Python