Метод наименьших квадратов: линия сквозь облако
Урок про метод наименьших квадратов (МНК) — как провести наилучшую прямую сквозь облако зашумлённых данных.
Метод наименьших квадратов подбирает параметры модели так, чтобы минимизировать сумму квадратов отклонений модели от данных:
min Σ (y_i − модель(x_i))².
Интерполяция против аппроксимации
В прошлом разделе кривая проходила точно через узлы. Но реальные данные зашумлены: измерения с погрешностью, разброс эксперимента. Прогонять кривую точно через каждую точку здесь вредно — она будет «гоняться за шумом», теряя общую тенденцию. Нужно другое: провести простую кривую рядом с точками, отражающую закономерность, а не шум. Это и есть аппроксимация. Самый частый случай — провести прямую y = a·x + b сквозь облако точек.
Вопрос: какая прямая «наилучшая»? МНК отвечает: та, для которой сумма квадратов вертикальных отклонений точек от прямой минимальна. Почему квадратов, а не модулей? Квадрат гладко дифференцируем (легко искать минимум), сильнее штрафует крупные промахи и приводит к красивым линейным формулам.
Вывод формул
Ищем a, b, минимизирующие E(a,b) = Σ (y_i − a·x_i − b)². В точке минимума частные производные по a и по b равны нулю. Приравняв их, получаем систему двух линейных уравнений (нормальные уравнения), решение которой — явные формулы:
a = ( n·Σ(x_i·y_i) − Σx_i·Σy_i ) / ( n·Σ(x_i²) − (Σx_i)² )
b = ( Σy_i − a·Σx_i ) / n
def мнк_прямая(xs, ys):
n = len(xs)
sx = sum(xs); sy = sum(ys)
sxx = sum(x*x for x in xs)
sxy = sum(xs[i]*ys[i] for i in range(n))
a = (n*sxy - sx*sy) / (n*sxx - sx*sx)
b = (sy - a*sx) / n
return a, b
# Зашумлённые данные вокруг прямой y = 2x + 1
xs = [0, 1, 2, 3, 4]
ys = [1.1, 2.9, 5.2, 6.8, 9.1]
a, b = мнк_прямая(xs, ys)
print(f"наилучшая прямая: y = {a:.4f}·x + {b:.4f}")
# Коэффициент детерминации R^2 — доля объяснённой дисперсии
ym = sum(ys) / len(ys)
ss_tot = sum((y - ym)**2 for y in ys)
ss_res = sum((ys[i] - (a*xs[i] + b))**2 for i in range(len(xs)))
print(f"R^2 = {1 - ss_res/ss_tot:.6f}")
Вывод:
наилучшая прямая: y = 1.9900·x + 1.0400 R^2 = 0.997305
МНК нашёл y ≈ 1.99x + 1.04 — почти идеально восстановил скрытую закономерность 2x + 1 из зашумлённых данных. Метрика R² ≈ 0.997 близка к 1: прямая объясняет 99.7% разброса данных.
Связь с линейной регрессией
МНК — это и есть линейная регрессия из статистики и машинного обучения. Когда вы обучаете простейшую модель «предсказать y по x», вы решаете ровно эту задачу минимизации суммы квадратов. Коэффициенты a (наклон) и b (сдвиг) — те же, что в формуле тренда в Excel или в LinearRegression из scikit-learn. Так численный метод XIX века (Гаусс, Лежандр) оказывается фундаментом современного ML.
| Область | Как называют МНК |
| Численные методы | метод наименьших квадратов |
| Статистика | линейная регрессия (OLS) |
| Машинное обучение | линейная модель с MSE-функцией потерь |
| Excel | линия тренда, ЛИНЕЙН / НАКЛОН |
Как работает под капотом
Геометрически МНК — это ортогональная проекция вектора данных y на подпространство, натянутое на столбцы матрицы признаков. Минимум квадратичной функции E — единственный (это парабола-«чаша»), поэтому формулы дают глобальный, а не локальный оптимум. Важная тонкость: МНК минимизирует вертикальные отклонения, считая x точным, а шум — только в y. Если погрешность есть и в x, нужна другая постановка (полная МНК / Деминга). В библиотеке вся задача — одна строка: numpy.polyfit(x, y, 1) или scipy.stats.linregress.
Частые ошибки
- Применять МНК к нелинейной зависимости как есть. Если данные не на прямой, сначала линеаризуйте (логарифм, замена переменных) или используйте полиномиальную/нелинейную модель.
- Игнорировать выбросы. Квадрат сильно штрафует крупные промахи, и один выброс может перекосить прямую; иногда нужна робастная регрессия (по модулю, Хьюбер).
- Путать
R²с «правильностью модели». ВысокийR²не означает, что модель верна — он лишь мера согласия с данными.
Итоги
- Аппроксимация проводит простую кривую рядом с зашумлёнными точками (в отличие от точной интерполяции).
- МНК минимизирует сумму квадратов отклонений; для прямой это даёт явные формулы через суммы
Σx, Σy, Σx², Σxy. - Это и есть линейная регрессия — фундамент статистики и ML.
- Минимум единствен (квадратичная «чаша»); шум предполагается только в
y.