05 / 27 · Линейная регрессия
Метод наименьших квадратов
Линейная регрессия, обученная минимизацией суммы квадратов остатков: нормальные уравнения и условие единственности их решения, подгонка как ортогональная проекция, интерпретация как метод максимального правдоподобия при гауссовском шуме и выборочное распределение коэффициентов, коллинеарность и численная обусловленность, R² и его ловушки, устойчивые функции потерь для данных с выбросами.
Метод ближайших соседей · Линейная алгебра ↗ · Метод максимального правдоподобия · Условное математическое ожидание
На этой странице 13
Заметка о ближайших соседях закончилась моделью, которая отвечает на каждый запрос по горстке близких точек и ничего не узнаёт о зависимости в целом; в пространствах большой размерности близкие точки исчезают. Эта заметка делает противоположную ставку. Она предполагает, что целевая переменная с точностью до шума равна взвешенной сумме признаков, по одному весу на признак, и подбирает веса сразу по всем данным, минимизируя квадраты ошибок. У решения есть замкнутая формула, геометрический смысл и вероятностный смысл, и каждый из трёх объясняет свой способ сломаться: на коллинеарных признаках, на плохо масштабированных числах и на выбросах. Эти поломки задают остальную часть раздела.
Обозначения. Обучающая выборка — , где и . Строки матрицы признаков (design matrix) — векторы , а собирает целевые значения. Если в модели есть свободный член, первый признак — константа 1, так что учитывает и свободный член. Вектор весов даёт прогноз , для всех объектов сразу — . Остатки (residuals) — , сумма квадратов остатков (residual sum of squares) — , среднеквадратичная ошибка — . — точка минимума, .
Линейная модель#
Модель имеет вид
Каждый вес говорит, насколько меняется прогноз, когда один признак растёт на единицу, а остальные не меняются. Модель линейна по , но не обязательно по исходным входам: признаками могут быть степени числа, логарифмы, произведения двух входов или one-hot-столбцы категории из заметки о признаках. Всё, что сказано ниже, верно для любого такого фиксированного набора признаков, потому что использует только матрицу .
Функция потерь — квадрат ошибки, усреднённый по обучающей выборке:
Почему квадраты, а не модули или другой штраф? В этой заметке будет три ответа: у точки минимума есть формула, она является ортогональной проекцией, и она совпадает с оценкой максимального правдоподобия при гауссовском шуме. Последний раздел показывает цену этого выбора.
Нормальные уравнения#
Раскроем сумму квадратов остатков: . Градиент линейного члена равен , а градиент квадратичной формы при симметричной равен , поэтому
Гессиан равен , и для любого : функция выпукла, и каждая точка, где градиент обращается в ноль, — глобальный минимум. Приравняв градиент к нулю, получаем нормальные уравнения (normal equations)
Если столбцы линейно независимы (для этого нужно ), то для любого , матрица положительно определена и обратима, а точка минимума единственна:
Если столбцы зависимы, например когда один признак равен сумме двух других или когда , у нормальных уравнений бесконечно много решений, и все они дают одни и те же прогнозы; к этому случаю вернётся раздел об устойчивости.
Разобранный пример. Четыре точки: и , модель . Столбцы матрицы признаков — и , поэтому
Определитель равен , и . Подобранная прямая — , остатки — , и .
Решение нормальных уравнений стоит на построение и на решение системы размера . Для десяти признаков это ничто; для миллиона разреженных текстовых признаков это невозможно, и с этого начинается следующая заметка.
Геометрия: проекция#
Нормальные уравнения можно переписать как : вектор остатков ортогонален каждому столбцу . Будем считать целевых значений одной точкой . Когда меняется, прогнозы пробегают пространство столбцов (column space) — -мерное подпространство . Метод наименьших квадратов выбирает ближайшую к точку этого подпространства, а ближайшая точка — основание перпендикуляра.
Метод наименьших квадратов как проекция
Ортогональность даёт доказательство оптимальности без дифференцирования. Для любого разложим . Первое слагаемое ортогонально пространству столбцов, а второе лежит в нём, поэтому по теореме Пифагора
причём равенство достигается ровно тогда, когда . В примере с тремя точками на рисунке добавочное слагаемое для равно .
Отображение из в линейно: , где — матрица-шляпа (hat matrix). Это ортогональный проектор на , поэтому он симметричен и идемпотентен (: повторная проекция ничего не меняет), а его след равен , размерности подпространства. Диагональный элемент , рычаг (leverage) точки , показывает, насколько сдвигается , когда сдвигается на единицу. В примере с четырьмя точками рычаги равны и в сумме дают : крайние точки тянут прямую сильнее средних.
Два следствия ортогональности используются постоянно. Если в модели есть свободный член, константный столбец — один из столбцов, поэтому : остатки в среднем равны нулю, и среднее равно среднему . В разобранном примере , а также . Кроме того, и , поэтому общий разброс раскладывается на объяснённую и необъяснённую части — это и измеряет ниже.
Вероятность: гауссовский шум и условное среднее#
Пусть данные порождены как , где независимы и имеют распределение . Отрицательный логарифм правдоподобия равен плюс константа, как выведено в заметке о методе максимального правдоподобия, поэтому минимизировать квадратичную ошибку — значит максимизировать правдоподобие. И без всякой модели у квадратичной ошибки есть другое обоснование: её минимум по всем функциям на генеральной совокупности — условное среднее (наилучший прогноз). Метод наименьших квадратов, ограниченный линейными функциями, оценивает линейную функцию, ближайшую к в среднеквадратичном смысле, — то есть саму , если она линейна.
Распределение коэффициентов. Здесь матрица признаков считается фиксированной, а случаен только шум: утверждения ниже — о повторных реализациях при тех же входах. Подставим в формулу:
Оценка — это истинный вес плюс фиксированное линейное отображение шума. Отсюда следуют три факта, каждый при своём предположении:
- Несмещённость, если : .
- Ковариационная матрица , если шум некоррелирован и имеет одинаковые дисперсии, : при получаем .
- Нормальность, если шум гауссовский, поскольку аффинное отображение гауссовского вектора гауссовское: . Для другого независимого шума с конечной дисперсией распределение при больших приближённо нормально по центральной предельной теореме, если ни одна точка не доминирует в подгонке: наибольший рычаг (определён выше) должен стремиться к 0.
Дисперсия шума неизвестна и оценивается по остаткам. Поскольку (так как ), получаем и . Поэтому оценка
несмещённая: степеней свободы тратятся на подгонку, так же как в выборочной дисперсии отражает одну степень свободы, потраченную на среднее. Квадратные корни из диагонали — стандартные ошибки (standard errors) коэффициентов.
Разобранный пример. В примере с четырьмя точками и , так что у наклона стандартная ошибка , а у свободного члена — . При четырёх точках наклон отстоит от нуля едва на две стандартные ошибки. Моделирование подтверждает формулу: 30 равноотстоящих точек на , истинный , и 20 000 реализаций шума дают средние коэффициентов и стандартные отклонения против по формуле (раздел «Код»).
Теорема Гаусса–Маркова (Gauss–Markov theorem) добавляет, что при некоррелированном шуме с одинаковыми дисперсиями никакая другая линейная по несмещённая оценка не имеет меньшей дисперсии ни для какой линейной комбинации коэффициентов (Hastie, Tibshirani and Friedman, 2009, раздел 3.2.2). Оговорка важна: оценки, допускающие небольшое смещение, могут иметь намного меньшую дисперсию и меньшую среднеквадратичную ошибку — это компромисс из заметки об оценках. Такие оценки строит заметка о регуляризации.
Когда решение неустойчиво#
Ковариация велика в тех направлениях, где у малые собственные числа, то есть там, где некоторая комбинация признаков почти постоянна на данных. Именно это дают два признака, которые почти повторяют друг друга.
Коллинеарность (collinearity). Возьмём 100 точек с , где — стандартный нормальный шум, и с . Корреляция двух признаков равна , а число обусловленности — . Три реализации шума дают веса , и с суммами , и . Данные фиксируют сумму — направление, в котором признаки меняются, — и почти ничего не говорят о разности — направлении, в котором они не меняются. Стандартная ошибка каждого веса равна , против у модели только с одним из двух признаков. Прогнозы на данных, похожих на обучающие, от реализации к реализации почти не меняются; коэффициенты, а с ними и любая их интерпретация, — шум. Типичный симптом — вес у признака, который помогает предсказывать целевую переменную.
Неполный ранг (rank deficiency). Когда столбцы точно зависимы или , матрица вырождена, и у нормальных уравнений целое аффинное множество решений. Стандартный выбор — решение с наименьшей нормой, с псевдообратной матрицей Мура–Пенроуза ; его и возвращает numpy.linalg.lstsq. Этот выбор — предпочтение, а не то, что решают данные, и заметка о регуляризации делает предпочтение явным.
Численная обусловленность. Даже когда обратима в точной арифметике, её построение возводит число обусловленности в квадрат: . Двойная точность хранит около 16 значащих цифр, а решение линейной системы теряет примерно из них. Для полиномиальных признаков на 50 точках отрезка получаем и . Решение нормальных уравнений восстанавливает коэффициенты, которые все равны 1, с ошибкой ; решатель на основе SVD, применённый прямо к , как это делает lstsq, — с ошибкой (Trefethen and Bau, 1997, лекции 11 и 19). Формула — для выводов; численный код раскладывает . Центрирование и масштабирование признаков, как в заметке о признаках, тоже уменьшают число обусловленности, а следующая заметка показывает, что то же число управляет скоростью градиентного спуска.
Как измерить качество регрессии#
Среднеквадратичная ошибка измеряется в квадратах единиц целевой переменной; корень из неё, RMSE, — в единицах целевой переменной. Коэффициент детерминации (coefficient of determination) сравнивает модель с лучшей константой — средним :
На обучающих данных модели со свободным членом разложение по теореме Пифагора из предыдущих разделов помещает между 0 и 1: это доля разброса , которую объясняет модель. В примере с четырьмя точками , полная сумма квадратов равна , и .
На данных о диабете из scikit-learn (442 пациента, 10 центрированных и масштабированных измерений, целевая переменная — мера прогрессирования болезни через год) у метода наименьших квадратов на обучении равен , а на 5-кратной кросс-валидации — . Ближайшие соседи на стандартизованных признаках достигают в лучшем случае (при ; , и при , 10 и 40). Одиннадцать коэффициентов, подобранных по всем данным, здесь побеждают локальное голосование, потому что зависимость близка к аддитивной, а 442 точек мало для окрестностей в десятимерном пространстве.
У три ловушки:
- на обучении не убывает с числом признаков. Добавленный столбец может только сохранить или расширить пространство столбцов, поэтому остаток проекции никогда не растёт. При 50 обучающих точках, одном полезном признаке и столбцах чистого шума на обучении равен , , , при , а на 50 новых точках — , , , . Отрицательный означает, что модель хуже прогноза средним, и он появляется только на данных, которых модель не видела. Сообщайте на валидационных данных, как заметка о валидации требует для любой метрики.
- зависит от разброса . Для с одна и та же модель с тем же шумом имеет , когда равномерно распределён на , и , когда на ; RMSE в обоих случаях равен 1. сравнивает модель со средним, а среднее — тем худший прогноз, чем сильнее меняется .
- Высокий не означает правильную модель. Прямая, проведённая через точки на параболе, может иметь около 1 и остатки, которые все положительны на краях и отрицательны в середине. Смотрите на остатки.
Квадратичная ошибка и выбросы#
Квадратичная ошибка оценивает условное среднее, а среднее следует за самыми большими значениями. Другие функции потерь оценивают другие величины (другие функции потерь — другие цели): лучшая константа при абсолютной ошибке — медиана. Для пяти значений лучшая константа при квадратичной ошибке — их среднее , при абсолютной ошибке — их медиана . Поэтому одно неверное значение может сдвинуть решение метода наименьших квадратов сколь угодно далеко, а решение на основе медианы оно сдвигает, только пока не пересечёт другие точки.
Один выброс и три функции потерь
У выброса на рисунке остаток по методу наименьших квадратов равен ; его квадрат, , больше суммы квадратов остатков остальных девяти точек. Метод наименьших квадратов наклоняет прямую к нему: наклон растёт с без этой точки до с ней. Влияние больших остатков ограничивают две функции потерь:
- Абсолютная ошибка, , — метод наименьших модулей (least absolute deviations). Каждая точка тянет с одной и той же силой независимо от расстояния. Подобранная прямая здесь — ; точка минимума не всегда единственна, а функция потерь недифференцируема в 0.
- Функция потерь Хьюбера (Huber loss; Huber, 1964): при и дальше. Квадратичная для малых остатков, поэтому сохраняет эффективность метода наименьших квадратов на чистых гауссовских данных; линейная для больших, поэтому сила, с которой тянет выброс, ограничена величиной . При прямая — .
Ограничена производная по остатку. Градиент по весам умножает эту производную на , поэтому точка с крайним значением входа, точка с большим рычагом (high leverage), по-прежнему тянет сильно. Десять точек на прямой и одна грубая ошибка в одинаково выравнивают все три подгонки: наклоны наименьших квадратов, Хьюбера и наименьших модулей равны . Эти функции потерь защищают от выбросов по , а не по .
Ни у одной из них нет замкнутой формулы. Обе можно подобрать, многократно решая задачу взвешенных наименьших квадратов с весами, которые уменьшаются для больших остатков, — так их вычисляет рисунок, — или общим методом из следующей заметки.
Что изменилось#
| Ближайшие соседи | Метод наименьших квадратов | |
|---|---|---|
| Модель | среднее целевых значений соседей | глобальная линейная функция с коэффициентами |
| Обучение | запомнить данные | решить , |
| Прогноз | поиск по обучающей выборке | одно скалярное произведение, |
| Диабет, на кросс-валидации | в лучшем случае () | |
| Неопределённость | не встроена | , стандартные ошибки |
| Интерпретация | нет | по весу на признак, если признаки не коллинеарны |
| Слабое место | большая размерность, масштаб | нелинейные зависимости, коллинеарность, выбросы, близко к |
Ограничения#
- Линейность по выбранным признакам. Модель видит взаимодействия и кривизну, только если их кто-то заложил в ; раздел о деревьях и раздел о нейросетях выучивают их сами.
- Неустойчивость при коррелированных признаках или , близком к . Дисперсия коэффициентов взрывается вдоль почти постоянных направлений; при и ошибка на обучении равна нулю, так что подгонка на обучающих данных ничего не говорит об обобщении. Какое из многих интерполирующих решений выбрано (например, с наименьшей нормой) и геометрия данных всё равно решают, полезны ли его прогнозы, как показывает оговорка о двойном спуске.
- Чувствительность к выбросам. Одна грубая ошибка может повернуть прямую, потому что квадратичная функция потерь взвешивает остатки по их величине; устойчивые функции потерь помогают против выбросов по , но не против крайних значений входов.
- Формула дисперсии предполагает некоррелированный шум с одинаковой дисперсией. При гетероскедастичных или коррелированных ошибках (временные ряды, сгруппированные данные) коэффициенты остаются несмещёнными, но стандартные ошибки неверны.
- Замкнутая формула стоит и существует только для квадратичной ошибки.
Что нужно запомнить#
- Метод наименьших квадратов минимизирует ; нормальные уравнения имеют единственное решение , когда столбцы независимы.
- Геометрически — ортогональная проекция на пространство столбцов; остаток ортогонален каждому признаку, а при наличии свободного члена остатки в сумме дают ноль.
- При гауссовском шуме метод наименьших квадратов — это метод максимального правдоподобия, и ; оценивают как .
- Почти коллинеарные признаки делают отдельные коэффициенты бессмысленными, хотя прогнозы остаются устойчивыми; здесь вступает регуляризация.
- Никогда не решайте нормальные уравнения численно для плохо обусловленных признаков: построение возводит число обусловленности в квадрат. Используйте QR или SVD (
lstsq). - сравнивает модель с прогнозом средним; на обучающих данных он не убывает при добавлении признаков, поэтому сообщайте его на валидационных данных.
- Квадратичная ошибка оценивает условное среднее и следует за выбросами; абсолютная ошибка оценивает медиану, а функция потерь Хьюбера — промежуточный вариант между ними.
Код#
Разобранные примеры, выборочное распределение коэффициентов, сравнение с ближайшими соседями на данных о диабете, ловушки , коллинеарность, обусловленность и устойчивые подгонки:
import numpy as np
from scipy import optimize
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold, cross_val_score
from sklearn.neighbors import KNeighborsRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
rng = np.random.default_rng(0)
r2 = lambda y, p: 1 - ((y - p) ** 2).sum() / ((y - y.mean()) ** 2).sum()
# разобранный пример: четыре точки, нормальные уравнения, остатки ортогональны столбцам
x = np.array([0., 1, 2, 3]); y = np.array([1., 3, 2, 5])
X = np.column_stack([np.ones(4), x])
w = np.linalg.solve(X.T @ X, X.T @ y)
r = y - X @ w
H = X @ np.linalg.inv(X.T @ X) @ X.T
print(w, r.round(2), (X.T @ r).round(12) + 0, round(r @ r, 2), round(r2(y, X @ w), 3), np.diag(H).round(2))
# [1.1 1.1] [-0.1 0.8 -1.3 0.6] [0. 0.] 2.7 0.691 [0.7 0.3 0.3 0.7]
s2 = r @ r / (4 - 2) # несмещённая оценка дисперсии шума, n - d = 2
print(round(s2, 2), np.sqrt(s2 * np.diag(np.linalg.inv(X.T @ X))).round(3)) # 1.35 [0.972 0.52 ]
# выборочное распределение w-hat: 30 точек на [0, 1], w = (1, 2), sigma = 0.5, 20 000 реализаций шума
Xs = np.column_stack([np.ones(30), np.linspace(0, 1, 30)])
W = np.array([np.linalg.lstsq(Xs, Xs @ [1, 2] + 0.5 * rng.normal(size=30), rcond=None)[0] for _ in range(20_000)])
print(W.mean(0).round(3), W.std(0).round(3), (0.5 * np.sqrt(np.diag(np.linalg.inv(Xs.T @ Xs)))).round(3))
# [1.001 2. ] [0.177 0.303] [0.178 0.306]: средние по моделированию, стандартные отклонения по моделированию и по теории
# диабет (442 пациента, 10 признаков): scikit-learn вычисляет именно замкнутую формулу; линейная модель против kNN
Xd, yd = load_diabetes(return_X_y=True)
A = np.column_stack([np.ones(len(yd)), Xd])
wd = np.linalg.lstsq(A, yd, rcond=None)[0]
lr = LinearRegression().fit(Xd, yd)
print(f'{np.abs(wd - np.r_[lr.intercept_, lr.coef_]).max():.0e}', round(r2(yd, A @ wd), 3)) # 2e-12 0.518
cv = KFold(5, shuffle=True, random_state=0)
print(round(cross_val_score(LinearRegression(), Xd, yd, cv=cv, scoring='r2').mean(), 3),
[round(float(cross_val_score(make_pipeline(StandardScaler(), KNeighborsRegressor(k)), Xd, yd, cv=cv, scoring="r2").mean()), 3) for k in (5, 10, 20, 40)])
# 0.489 [0.382, 0.444, 0.454, 0.428]
# R² на обучении не убывает с бесполезными признаками; на новых данных он рушится (50 + 50 точек)
z = rng.normal(size=(100, 1)); t = z[:, 0] + rng.normal(size=100)
for k in (0, 10, 20, 40):
Z = np.column_stack([np.ones(100), z, rng.normal(size=(100, k))])
v = np.linalg.lstsq(Z[:50], t[:50], rcond=None)[0]
print(k, round(r2(t[:50], Z[:50] @ v), 3), round(r2(t[50:], Z[50:] @ v), 3))
# 0 0.572 0.325 | 10 0.649 0.154 | 20 0.747 -0.158 | 40 0.921 -0.71
# два почти одинаковых признака: коэффициенты скачут, а их сумма и прогнозы — нет
x1 = rng.normal(size=100); x2 = x1 + 0.01 * rng.normal(size=100); X2 = np.column_stack([x1, x2])
print(round(np.corrcoef(x1, x2)[0, 1], 5), f'{np.linalg.cond(X2.T @ X2):.1e}') # 0.99994 3.5e+04
for _ in range(3):
v = np.linalg.lstsq(X2, x1 + x2 + rng.normal(size=100), rcond=None)[0]
print(v.round(2), round(v.sum(), 2))
# [-5. 6.88] 1.88 | [11.88 -9.9 ] 1.98 | [-8.83 10.94] 2.11
print(np.sqrt(np.diag(np.linalg.inv(X2.T @ X2))).round(2), round(1 / np.sqrt(x1 @ x1), 2)) # [9.74 9.73] 0.1: стандартные ошибки при sigma = 1
# обусловленность: полиномиальные признаки степени 10 на 50 точках; нормальные уравнения против QR/SVD (lstsq)
V = np.vander(np.linspace(0, 1, 50), 11, increasing=True); yv = V @ np.ones(11)
print(f'{np.linalg.cond(V):.1e} {np.linalg.cond(V.T @ V):.1e}',
f'{np.abs(np.linalg.solve(V.T @ V, V.T @ yv) - 1).max():.0e} {np.abs(np.linalg.lstsq(V, yv, rcond=None)[0] - 1).max():.0e}')
# 2.0e+07 4.1e+14 4e-03 4e-10
# один выброс: наименьшие квадраты, Хьюбер (delta = 1) и наименьшие модули
xo = np.arange(10.); yo = np.array([1.3, 1.1, 2.2, 3.0, 2.7, 3.6, 3.5, 4.9, 13.0, 5.3]); Xo = np.column_stack([np.ones(10), xo])
huber = lambda r: np.where(np.abs(r) <= 1, 0.5 * r ** 2, np.abs(r) - 0.5)
fits = {'ls': np.linalg.lstsq(Xo, yo, rcond=None)[0],
'ls without x=8': np.linalg.lstsq(np.delete(Xo, 8, 0), np.delete(yo, 8), rcond=None)[0],
'huber': optimize.minimize(lambda v: huber(yo - Xo @ v).sum(), [0, 0], method='BFGS', options={'gtol': 1e-10}).x,
'lad': optimize.linprog(np.r_[0, 0, np.ones(10)], A_ub=np.block([[Xo, -np.eye(10)], [-Xo, -np.eye(10)]]),
b_ub=np.r_[yo, -yo], bounds=[(None, None)] * 2 + [(0, None)] * 10).x[:2]}
for k, v in fits.items(): print(k, v.round(3))
# ls [0.373 0.819] | ls without x=8 [1.107 0.477] | huber [0.986 0.533] | lad [1.267 0.467]
# грубая ошибка при крайнем значении входа: десять точек на y = x и одна в (100, 0)
xl = np.r_[np.arange(10.), 100]; yl = np.r_[np.arange(10.), 0]; Xl = np.column_stack([np.ones(11), xl])
print(round(float(np.linalg.lstsq(Xl, yl, rcond=None)[0][1]), 2),
round(float(optimize.minimize(lambda v: huber(yl - Xl @ v).sum(), [0, 1], method='BFGS', options={'gtol': 1e-10}).x[1]), 2),
round(float(optimize.linprog(np.r_[0, 0, np.ones(11)], A_ub=np.block([[Xl, -np.eye(11)], [-Xl, -np.eye(11)]]),
b_ub=np.r_[yl, -yl], bounds=[(None, None)] * 2 + [(0, None)] * 11).x[1]), 2))
# -0.04 -0.04 -0.04: наклоны наименьших квадратов, Хьюбера и наименьших модулей
Дальше#
Нормальным уравнениям нужна вся матрица и решение системы размера , что недостижимо для миллиона признаков, и они существуют только для квадратичной ошибки: у функций потерь Хьюбера и абсолютной ошибки из последнего раздела, как и у логистической функции потерь из раздела о классификации, замкнутой формулы нет вовсе. Следующая заметка заменяет формулу итерацией, которой нужен только градиент, здесь , и показывает, что её скорость задаёт то же число обусловленности, из-за которого нормальные уравнения были неточны.
Метод наименьших квадратов встречается во всех курсах: векторы слов GloVe подбираются взвешенным методом наименьших квадратов по логарифмам числа совместных вхождений, GAN с функцией потерь наименьших квадратов заменяет кросс-энтропию дискриминатора квадратичной ошибкой, а метод чередующихся наименьших квадратов подбирает матричную факторизацию в рекомендательных системах.
Литература#
- E. Sokolov et al. Машинное обучение (HSE), конспекты лекций, лекция 2: линейные модели, функции потерь и метрики качества регрессии и лекция 3: переобучение, обучение линейной регрессии.
- T. Hastie, R. Tibshirani, J. Friedman. The Elements of Statistical Learning, 2nd ed. Springer, 2009. Раздел 3.2 (метод наименьших квадратов, его геометрия и выборочное распределение коэффициентов), раздел 3.2.2 (теорема Гаусса–Маркова).
- C. M. Bishop. Pattern Recognition and Machine Learning. Springer, 2006. Раздел 3.1.1 (максимальное правдоподобие и наименьшие квадраты), раздел 3.1.2 (геометрия метода наименьших квадратов).
- M. P. Deisenroth, A. A. Faisal, C. S. Ong. Mathematics for Machine Learning. Cambridge University Press, 2020. Глава 9 (линейная регрессия), раздел 3.8 (ортогональные проекции).
- L. N. Trefethen, D. Bau III. Numerical Linear Algebra. SIAM, 1997. Лекция 11 (задачи наименьших квадратов), лекция 19 (устойчивость алгоритмов наименьших квадратов: нормальные уравнения против QR и SVD).
- P. J. Huber. Robust estimation of a location parameter. Annals of Mathematical Statistics, 35(1), 1964.