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.- Параметры
-
-
xarray_like, shape (M,) -
Координаты x выборочных (данных) точек
M(x[i], y[i]). -
yarray_like, shape (M,) or (M, K) -
Координаты y выборочных точек. Несколько наборов выборочных точек, имеющих одинаковые координаты x, могут быть (независимо) аппроксимированы с помощью вызова
polyfitпутем передачи дляyдвумерного массива, который содержит один набор данных в каждом столбце. -
degint or 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, вклад каждой точки
(x[i],y[i])в аппроксимацию взвешен значениемw[i]. В идеале веса выбираются таким образом, чтобы ошибки произведенийw[i]*y[i]имели одинаковую дисперсию. Значение по умолчанию равно None.Новая в версии 1.5.0.
-
- Возвращает
-
-
coefndarray, 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', np.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. Аппроксимации с помощью рядов Чебышева или Лежандра, как правило, лучше обусловлены, но многое все еще может зависеть от распределения выборочных точек и гладкости данных. Если качество аппроксимации недостаточно, сплайны могут быть хорошей альтернативой.
Примеры
>>> 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 + N(0,1) "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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.polynomial.polynomial.polyfit.html