numpy.polynomial.polynomial.polyfit
-
numpy.polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=None)[source] -
Наименьшие квадраты для подгонки многочлена к данным.
Возвращает коэффициенты многочлена степени
deg, являющегося наименьшими квадратами для значений данныхy, заданных в точкахx. Еслиyимеет размерность 1, возвращаемые коэффициенты также будут одномерными. Еслиyимеет размерность 2, выполняются несколько подгонок, по одной для каждого столбцаy, и полученные коэффициенты хранятся в соответствующих столбцах двумерного результата. Подгоняемый многочлен(ы) находятся в форме
где
nестьdeg.Параметры: x : array_like, shape (
M,)Координаты x выборочных (данных) точек
M.y : array_like, shape (
M,) или (M,K)Координаты y выборочных точек. Несколько наборов выборочных точек с одинаковыми координатами x могут быть (независимо) подогнаны с помощью одного вызова
polyfit, передав дляyдвумерный массив, содержащий один набор данных в каждом столбце.deg : int или 1-D array_like
Степень(и) подгоняемых многочленов. Если
degявляется целым числом, все члены вплоть до и включаяdeg-й член включаются в подгонку. Для версий Numpy >= 1.11 может использоваться список целых чисел, задающих степени включаемых членов.rcond : float, необязательно
Относительное число обусловленности подгонки. Сингулярные значения, меньшие
rcond, по отношению к наибольшему сингулярному значению, будут игнорироваться. Значение по умолчанию составляетlen(x)*eps, гдеeps— относительная точность плавающей точки платформы, примерно 2e-16 в большинстве случаев.full : bool, необязательно
Переключатель, определяющий характер возвращаемого значения. Когда
False(значение по умолчанию) возвращаются только коэффициенты; когдаTrue, также возвращается диагностическая информация из разложения по сингулярным значениям (используется для решения матричного уравнения подгонки).w : array_like, shape (
M,), необязательноВеса. Если не равно None, вклад каждой точки
(x[i],y[i])в подгонку взвешивается наw[i]. В идеале веса выбираются таким образом, чтобы ошибки произведенийw[i]*y[i]имели одинаковую дисперсию. Значение по умолчанию равно None.Введено в версии 1.5.0.
Возвращает: coef : ndarray, shape (
deg+ 1,) или (deg+ 1,K)Коэффициенты многочлена, упорядоченные от низшей к высшей степени. Если
yбыло двумерным, коэффициенты в столбцеkмассиваcoefпредставляют многочленную подгонку к данным вy-ом столбце.[residuals, rank, singular_values, rcond] : list
Эти значения возвращаются только если
full= Trueresid – сумма квадратов остатков наименьших квадратов fit rank – числовой ранг масштабированной матрицы Вандермонда sv – сингулярные значения масштабированной матрицы Вандермонда rcond – значение
rcond.Для получения дополнительной информации см.
linalg.lstsq.Исключения: RankWarning
Выбрасывается, если матрица в подгонке наименьших квадратов имеет недостаточный ранг. Предупреждение выводится только если
full== False. Предупреждения можно отключить, выполнив:>>> import warnings >>> warnings.simplefilter('ignore', RankWarning)См. также
chebfit,legfit,lagfit,hermfit,hermefitpolyval- Вычисляет многочлен.
polyvander- Матрица Вандермонда для степеней.
linalg.lstsq- Вычисляет наименьшие квадраты из матрицы.
scipy.interpolate.UnivariateSpline- Вычисляет сплайн-подгонки.
Примечания
Решение — коэффициенты многочлена
p, минимизирующие сумму взвешенных квадратов ошибок
где
— веса. Эта задача решается путём составления (обычно) переопределённого матричного уравнения:
где
V— взвешенная псевдо-матрица Вандермондаx,c— коэффициенты, подлежащие решению,w— веса, иy— наблюдаемые значения. Это уравнение затем решается с помощью разложения по сингулярным значениямV.Если некоторые сингулярные значения
Vнастолько малы, что они игнорируются (иfull==False), будет возбужденоRankWarning. Это означает, что значения коэффициентов могут быть плохо определены. Подгонка к многочлену более низкой степени обычно устраняет предупреждение (но это может быть не то, что вы хотите; если у вас есть независимые причина(ы) для выбора степени, которая не работает, вам, возможно, придётся: а) пересмотреть эти причины, и/или б) пересмотреть качество ваших данных). Параметрrcondтакже может быть установлен на значение, меньшее, чем по умолчанию, но полученная подгонка может быть ложной и иметь большой вклад от погрешности округления.Подгонки многочленов с двойной точностью, как правило, «неудачны» при степени около 20. Подгонки с помощью рядов Чебышева или Лежандра, как правило, лучше обусловлены, но многое всё ещё может зависеть от распределения выборочных точек и гладкости данных. Если качество подгонки неудовлетворительно, сплайны могут быть хорошей альтернативой.
Примеры
>>> 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 + N(0,1) "noise" >>> c, stats = P.polyfit(x,y,3,full=True) >>> 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]) >>> stats # note the large SSR, explaining the rather poor results [array([ 38.06116253]), 4, array([ 1.38446749, 1.32119158, 0.50443316, 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([ -1.73362882e-17, -1.00000000e+00, -2.67471909e-16, 1.00000000e+00]) >>> stats # note the minuscule SSR [array([ 7.46346754e-31]), 4, array([ 1.38446749, 1.32119158, 0.50443316, 0.28853036]), 1.1324274851176597e-014]
© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.polynomial.polynomial.polyfit.html