为何numpy.polynomial.Polynomial.fit()拟合结果与其他方法不同?
Numpy多项式拟合结果不一致的原因
问题描述
使用Numpy的多项式拟合方法时,三种方式的结果存在差异,仅numpy.polynomial.polynomial.Polynomial.fit()的输出和另外两种不同。测试代码及输出如下:
import numpy as np x = [0.0, 0.44721, 0.94868, 1.3784, 2.21359] y = [100.0, 99.77908, 97.99978, 95.56167, 88.42727] coef00, coef11 = np.polynomial.polynomial.Polynomial.fit(x, y, 1) coef_0, coef_1 = np.polynomial.polynomial.polyfit(x, y, 1) coef1, coef0 = np.polyfit(x, y, 1) print(coef00, coef11) print(coef_0, coef_1) print(coef0, coef1)
输出结果:
95.77300574959435 -5.883175469265392 101.65618121885973 -5.315506005416914 101.65618121885977 -5.315506005416928
核心原因
Polynomial.fit()与另外两个函数的关键差异在于自动对输入x做了标准化处理:
np.polyfit()和np.polynomial.polynomial.polyfit()直接基于原始x值执行最小二乘拟合,返回的是原始变量空间下的多项式系数(低次到高次顺序)。Polynomial.fit()默认会将x标准化到[-1, 1]区间,以此提升数值稳定性,返回的系数对应标准化后的x变量,而非原始x的系数。
统一结果的方法
如果需要让Polynomial.fit()返回与另外两个函数一致的结果,只需关闭标准化,指定domain参数为x的实际取值范围:
coef00, coef11 = np.polynomial.polynomial.Polynomial.fit(x, y, 1, domain=[min(x), max(x)])
此时得到的系数会和polyfit的结果完全匹配。
额外注意:系数顺序
np.polynomial模块下的函数(Polynomial.fit()、polyfit())返回系数为低次到高次,即先常数项,再一次项。np.polyfit()返回系数为高次到低次,即先一次项,再常数项,这也是代码中coef1, coef0顺序的原因。
内容的提问来源于stack exchange,提问作者LinuxPenguin99
相关产品推荐
相关产品推荐

