python - numpy polynomial.Polynomial.fit() 给出与 polynomial.polyfit() 不同的系数

标签 python numpy curve-fitting polynomials

我不明白为什么 polynomial.Polynomial.fit() 给出的系数与预期的系数非常不同:

import numpy as np

x = np.linspace(0, 10, 50)
y = x**2 + 5 * x + 10

print(np.polyfit(x, y, 2))
print(np.polynomial.polynomial.polyfit(x, y, 2))
print(np.polynomial.polynomial.Polynomial.fit(x, y, 2))
给出:
[ 1.  5. 10.]
[10.  5.  1.]
poly([60. 75. 25.])
前两个结果还可以,感谢 this answer我明白为什么这两个数组的顺序相反。
但是,我不明白第三个结果的含义。尽管我以这种方式得到的多项式似乎给出了正确的预测值,但这些系数看起来是错误的。

最佳答案

当然,答案稍微隐藏在文档中。看着 class numpy.polynomial.polynomial.Polynomial(coef, domain=None, window=None)
很明显,一般来说,系数 [ a , b , c , ...] 用于多项式 a + b * x + c * x**2 + ... .但是,有关键字参数domainwindow两者都默认 [-1,1] .我不是那个类(class),所以我不确定目的,但很明显发生了重新映射。现在在 polynomial.Polynomial.fit() 的情况下有一个类方法可以自动获取 x data 作为域,但仍然映射到窗口。因此,在 OP [0-10] 中映射到 [-1,1] .这是由 x = x' / 5 - 1 完成的或 x' -> 5 * x + 5 .将后者放入 OP 多项式我们得到( 5 x' + 5 )**2 + 5 * ( 5 * x' + 5 ) + 10 = 25 * x'**2 + 75 * x' + 60瞧。
为了得到预期的结果,必须把

print(np.polynomial.polynomial.Polynomial.fit(x, y, 2, window=[0, 10] ) )
这给
poly([10.  5.  1.])

关于python - numpy polynomial.Polynomial.fit() 给出与 polynomial.polyfit() 不同的系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67371614/

相关文章:

python - 从 python scipy.optimize.curve_fit 得到完全错误的拟合

python - 如何阻止 Python parse_qs 将单个值解析为列表?

Python Curve_Fit 指数/幂/对数曲线 - 改善结果

python - 使用 tensorflow 中的另一个索引列表访问张量的元素

python - 如何累计 "all"

Python:线性回归, reshape numpy 数组以在模型中使用

python - 将 numpy 数组分成两部分

python - 基于最小二乘法拟合SIR模型

python - 如何使用 python 为拼字游戏创建基于文本的棋盘?

python - 使用 Python 中每个列表的最后一个元素