Аппроксимация: 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ищут минимум функции.