numpy.polynomial.polynomial.polyfit
- polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=None)[source]
-
Наименьшие квадраты подгонка полинома к данным.
Возвращает коэффициенты полинома степени
deg, который является наименьшей квадратической подгонкой к значениям данныхy, заданным в точкахx. Еслиyявляется одномерным, возвращаемые коэффициенты также будут одномерными. Еслиyявляется двумерным, выполняются несколько подгонок, по одной для каждого столбцаy, и получившиеся коэффициенты хранятся в соответствующих столбцах двумерного результата. Подгоняемый(е) полином(ы) имеют вид\[p(x) = c_0 + c_1 * x + ... + c_n * x^n,\]где
nявляетсяdeg.- Parameters:
-
-
xarray_like, shape (
M,) -
Координаты x выборочных (данных) точек
M. -
yarray_like, shape (
M,) или (M,K) -
Координаты y выборочных точек. Несколько наборов выборочных точек, имеющих одинаковые координаты x, могут быть (независимо) подогнаны с помощью одного вызова
polyfit, передавая вyдвумерный массив, содержащий один набор данных в каждом столбце. - degint или 1-D array_like
-
Степень(и) подгоняемых полиномов. Если
deg— целое число, в подгонку включаются все члены вплоть до и включаяdeg-го члена. Для версий NumPy >= 1.11.0 вместо этого можно использовать список целых чисел, указывающих степени членов, которые следует включить. - rcondfloat, optional
-
Относительное число обусловленности подгонки. Сингулярные значения, меньшие
rcond, по отношению к наибольшему сингулярному значению, будут проигнорированы. Значение по умолчанию равноlen(x)*eps, гдеeps— относительная точность плавающей точки платформы, примерно 2e-16 в большинстве случаев. - fullbool, optional
-
Переключатель, определяющий характер возвращаемого значения. Когда
False(значение по умолчанию), возвращаются только коэффициенты; когдаTrue, возвращается также диагностическая информация из сингулярного разложения (используемого для решения матричного уравнения подгонки). -
warray_like, shape (
M,), optional -
Веса. Если не None, вес
w[i]применяется к невозведенной остаточной величинеy[i] - y_hat[i]в точкеx[i]. В идеале веса выбираются таким образом, чтобы ошибки произведенийw[i]*y[i]имели одинаковую дисперсию. При использовании взвешивания обратных дисперсий используйтеw[i] = 1/sigma(y[i]). Значение по умолчанию — None.Добавлен в версии 1.5.0.
-
xarray_like, shape (
- Returns:
-
-
coefndarray, shape (
deg+ 1,) или (deg+ 1,K) -
Коэффициенты полинома, упорядоченные от низшей к высшей степени. Если
yбыло двумерным, коэффициенты в столбцеkизcoefпредставляют полиномиальную подгонку к данным вy’s столбцеk. - [residuals, rank, singular_values, rcond]list
-
Эти значения возвращаются только если
full == True- residuals — сумма квадратов остатков наименьших квадратов подгонки
- rank — численная ранг масштабированной матрицы Вандермонда
- singular_values — сингулярные значения масштабированной матрицы Вандермонда
- rcond — значение
rcond.
Для получения дополнительной информации см.
numpy.linalg.lstsq.
-
coefndarray, shape (
- Raises:
-
- RankWarning
-
Выдаётся, если матрица в наименьших квадратах подгонки имеет недостающий ранг. Предупреждение выдаётся только если
full == False. Предупреждения можно отключить с помощью:>>> import warnings >>> warnings.simplefilter('ignore', np.exceptions.RankWarning)
См. также
numpy.polynomial.chebyshev.chebfitnumpy.polynomial.legendre.legfitnumpy.polynomial.laguerre.lagfitnumpy.polynomial.hermite.hermfitnumpy.polynomial.hermite_e.hermefitpolyval-
Вычисляет значение полинома.
polyvander-
Матрица Вандермонда для степеней.
numpy.linalg.lstsq-
Вычисляет подгонку наименьших квадратов из матрицы.
scipy.interpolate.UnivariateSpline-
Вычисляет сплайновые подгонки.
Примечания
Решение — это коэффициенты полинома
p, который минимизирует сумму взвешенных квадратов ошибок\[E = \sum_j w_j^2 * |y_j - p(x_j)|^2,\]где \(w_j\) — веса. Эта задача решается путём задания (обычно) переопределённого матричного уравнения:
\[V(x) * c = w * y,\]где
V— взвешенная псевдоматрица Вандермондаx,c— искомые коэффициенты,w— веса, аy— наблюдаемые значения. Это уравнение затем решается с помощью сингулярного разложенияV.Если некоторые сингулярные значения
Vнастолько малы, что ими можно пренебречь (иfull==False), будет выдано предупреждениеRankWarning. Это означает, что значения коэффициентов могут быть плохо определены. Подгонка к полиному меньшей степени обычно устраняет предупреждение (но, возможно, это не то, что вы хотите; если у вас есть независимые причины для выбора степени, которая не работает, вам, возможно, придётся: a) пересмотреть эти причины и/или b) пересмотреть качество ваших данных). Параметрrcondтакже может быть установлен на значение, меньшее, чем по умолчанию, но полученная подгонка может быть ложной и иметь большие вклады от погрешности округления.Полиномиальные подгонки с двойной точностью, как правило, «не работают» примерно при степени 20. Подгонки с использованием рядов Чебышева или Лежандра обычно лучше обусловлены, но многое может зависеть от распределения выборочных точек и гладкости данных. Если качество подгонки недостаточно, сплайны могут быть хорошей альтернативой.
Примеры
>>> np.random.seed(123) >>> from numpy.polynomial import polynomial as P >>> x = np.linspace(-1,1,51) # x "data": [-1, -0.96, ..., 0.96, 1] >>> y = x**3 - x + np.random.randn(len(x)) # x^3 - x + Gaussian noise >>> c, stats = P.polyfit(x,y,3,full=True) >>> np.random.seed(123) >>> c # c[0], c[2] should be approx. 0, c[1] approx. -1, c[3] approx. 1 array([ 0.01909725, -1.30598256, -0.00577963, 1.02644286]) # may vary >>> stats # note the large SSR, explaining the rather poor results [array([ 38.06116253]), 4, array([ 1.38446749, 1.32119158, 0.50443316, # may vary 0.28853036]), 1.1324274851176597e-014]То же самое без добавленного шума
>>> y = x**3 - x >>> c, stats = P.polyfit(x,y,3,full=True) >>> c # c[0], c[2] should be "very close to 0", c[1] ~= -1, c[3] ~= 1 array([-6.36925336e-18, -1.00000000e+00, -4.08053781e-16, 1.00000000e+00]) >>> stats # note the minuscule SSR [array([ 7.46346754e-31]), 4, array([ 1.38446749, 1.32119158, # may vary 0.50443316, 0.28853036]), 1.1324274851176597e-014]
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.polynomial.polynomial.polyfit.html