numpy.polynomial.polynomial.polyfit
-
numpy.polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=None)[source] -
Нахождение наилучшего приближения полинома к данным методом наименьших квадратов.
Возвращает коэффициенты полинома степени
deg, который является наилучшей аппроксимацией по методу наименьших квадратов к значениям данныхyв точкахx. Еслиyодномерно, то возвращаемые коэффициенты также будут одномерными. Еслиyдвумерно, то выполняется несколько аппроксимаций, по одной для каждого столбцаy, и результирующие коэффициенты хранятся в соответствующих столбцах двумерного результата. Аппроксимирующий(ие) полином(ы) имеют видгде
nестьdeg.Параметры: -
x : array_like, shape (M,) -
Координаты x точек выборки (данных)
M. -
y : array_like, shape (M,) or (M, K) -
Координаты y точек выборки. Несколько наборов точек выборки, имеющих одинаковые координаты x, могут быть (независимо) аппроксимированы одним вызовом
polyfitпутём передачи вyдвумерного массива, содержащего один набор данных в каждом столбце. -
deg : int or 1-D array_like -
Степень(и) аппроксимирующих полиномов. Если
degпредставляет собой целое число, то в аппроксимацию включаются все члены до и включаяdeg-й член. Для версий NumPy >= 1.11.0 вместо этого может использоваться список целых чисел, определяющих степени членов, которые нужно включить. -
rcond : float, optional -
Относительное число обусловленности аппроксимации. Сингулярные значения, меньшие
rcond, по отношению к наибольшему сингулярному значению, будут игнорироваться. Значение по умолчанию равноlen(x)*eps, гдеeps– относительная точность плавающей точки платформы, приблизительно 2e-16 в большинстве случаев. -
full : bool, optional -
Переключатель, определяющий характер возвращаемого значения. Когда
False(значение по умолчанию), возвращаются только коэффициенты; когдаTrue, также возвращается диагностическая информация из сингулярного разложения (используемого для решения матричного уравнения аппроксимации). -
w : array_like, shape (M,), optional -
Веса. Если не равно None, вклад каждой точки
(x[i],y[i])в аппроксимацию взвешивается значениемw[i]. В идеале веса выбираются таким образом, чтобы ошибки произведенийw[i]*y[i]имели одинаковую дисперсию. Значение по умолчанию равно None.Введено в версии 1.5.0.
Возвращает: -
coef : ndarray, shape (deg + 1,) or (deg + 1, K) -
Коэффициенты полинома, упорядоченные от низкой к высокой степени. Если
yбыло двумерным, то коэффициенты в столбцеkизcoefпредставляют полиномиальное приближение к данным вy-ом столбце. -
[residuals, rank, singular_values, rcond] : list -
Эти значения возвращаются только если
full= Trueresid – сумма квадратов остатков наилучшей аппроксимации методом наименьших квадратов rank – числовой ранг масштабированной матрицы Вандермонда sv – сингулярные значения масштабированной матрицы Вандермонда rcond – значение
rcond.Для получения более подробной информации см.
linalg.lstsq.
Возможные исключения: - RankWarning
-
Выдается, если матрица в аппроксимации методом наименьших квадратов имеет недостаточный ранг. Предупреждение выдается только если
full== False. Предупреждения можно отключить, используя:>>> import warnings >>> warnings.simplefilter('ignore', RankWarning)
См. также
chebfit,legfit,lagfit,hermfit,hermefit-
polyval - Вычисляет значение полинома.
-
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] -
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.16.1/reference/generated/numpy.polynomial.polynomial.polyfit.html