Аппроксимация: polyfit, интерполяция, оптимизация

Как провести кривую через экспериментальные точки, оценить значения между ними и найти минимум функции.

polyfit(x, y, n) подбирает коэффициенты полинома степени n, наилучшего по методу наименьших квадратов.

Аппроксимация полиномом

Эксперимент дал облако точек, и нужно провести через них гладкую линию. polyfit находит коэффициенты полинома, а polyval вычисляет его в новых точках. Степень 1 — это линейная регрессия (прямая).

x = [1 2 3 4 5];
y = [2.1 3.9 6.2 7.8 10.1];
p = polyfit(x, y, 1);     % прямая: наклон и сдвиг
yfit = polyval(p, x);     % значения прямой
% p ≈ [2.0  0.0] — почти y = 2x

Полученные коэффициенты p описывают прямую, наилучшим образом проходящую через данные. Под капотом polyfit решает переопределённую систему методом наименьших квадратов — тем же, что стоит за оператором \.

Интерполяция между точками

Интерполяция отличается от аппроксимации: она проходит точно через данные точки и оценивает значения между ними. Функция interp1 делает это для одномерных данных, поддерживая разные методы: линейный, сплайновый, ближайшего соседа.

x = [1 2 3 4 5];
y = [1 4 9 16 25];
xi = 2.5;
yi = interp1(x, y, xi, 'spline');   % оценка в точке 2.5

Аппроксимация против интерполяции

Аппроксимация (polyfit)Интерполяция (interp1)
сглаживает шумпроходит точно через точки
для зашумлённых данныхдля точных данных
модель (формула)оценка между узлами

Поиск минимума функции

Оптимизация — поиск значения, при котором функция минимальна. Базовые встроенные средства: fminbnd ищет минимум на отрезке, fminsearch — минимум функции многих переменных без производных. Им передают функцию через @.

f = @(x) (x - 3).^2 + 1;    % минимум в x = 3
xmin = fminbnd(f, 0, 10);    % ≈ 3
% значение минимума f(xmin) ≈ 1

Как работает под капотом

За polyfit снова стоит линейная алгебра: задача сводится к решению переопределённой системы относительно коэффициентов методом наименьших квадратов. Поэтому полиномиальная аппроксимация — это, по сути, тот же A\b, где столбцы A — степени x. А вот fminsearch работает иначе: он не решает систему, а итеративно «нащупывает» минимум, двигая пробную точку (симплекс-метод). Понимание, что аппроксимация — это линейная алгебра, а общая оптимизация — итеративный поиск, помогает выбирать правильный инструмент.

Частые ошибки

  • Брать слишком высокую степень в polyfit — кривая начнёт «гулять» между точками (переобучение).
  • Путать аппроксимацию и интерполяцию: для шумных данных нужна первая, не вторая.
  • Экстраполировать interp1 за пределы данных — результат ненадёжен.

Аппроксимация как основа регрессии и ML

За скромным polyfit скрывается идея, лежащая в основе всего машинного обучения, — подгонка модели под данные. Линейная регрессия (polyfit степени 1) — простейшая обучаемая модель: по точкам она находит прямую, минимизирующую суммарную ошибку. Усложните модель — и получите полиномиальную регрессию, нелинейную подгонку через lsqcurvefit, а дальше и нейросети из соответствующего тулбокса. Все они отвечают на один вопрос: какие параметры модели лучше всего объясняют наблюдения? Поняв аппроксимацию на полиномах, вы поняли скелет, на котором держатся куда более сложные методы. Это хороший мост к курсам по статистике и машинному обучению, где та же идея разворачивается в полную силу.

Опасность переобучения

С аппроксимацией связан фундаментальный риск, который стоит прочувствовать рано. Кажется, что чем выше степень полинома, тем лучше он опишет данные, — и формально на обучающих точках это так: полином достаточной степени пройдёт точно через все. Но между точками такая кривая начинает дико осциллировать, а на новых данных предсказывает абсурд. Это переобучение: модель запомнила шум вместо закономерности. Лекарство — выбирать модель не сложнее, чем оправдано данными, и проверять её на отложенных точках, которых она не видела при подгонке. Это центральная идея всей прикладной статистики и ML, и впервые её удобно осознать именно на простом примере с polyfit и растущей степенью.

Итоги

  • polyfit/polyval подгоняют полином по МНК; степень 1 — линейная регрессия.
  • interp1 интерполирует точно через узлы; методы — линейный, сплайн и др.
  • fminbnd/fminsearch ищут минимум функции.
Проверьте себя
1. Что делает polyfit(x, y, 1)?
AИнтерполирует сплайном
BПодбирает прямую (линейную регрессию) по МНК
CНаходит минимум
DРешает ОДУ
2. Чем интерполяция отличается от аппроксимации?
AНичем
BИнтерполяция проходит точно через точки, аппроксимация сглаживает
CИнтерполяция только для шума
DАппроксимация точнее всегда
3. Что вернёт fminbnd(@(x) (x-3).^2+1, 0, 10)?
AЗначение около 1
BТочку около 3, где функция минимальна
CМаксимум
DКорень уравнения