numpy Polynomial.fit 的零次拟合会产生意想不到的结果

问题描述 投票:0回答:1
import numpy as np

f = np.array(
    [481.62900766, 511.94542042, 647.40216379, 686.10402156, 849.9420538, 888.64398048, 1029.26087049, 1071.18799217,
     1210.51481107, 1266.63254274, 1409.54282743])
s = np.array(
    [457.90057373, 520.90911865, 666.19372559, 709.64898682, 862.48828125, 892.19934082, 1031.70675659, 1063.03643799,
     1206.41647339, 1239.6506958, 1386.23660278])

series1 = np.polynomial.polynomial.Polynomial.fit(f, s, deg=1)
delta, ratio = series1.convert().coef
print(delta, ratio)  # delta = 24.72921108370622, ratio = 0.971307510662272
# ratio is expected to be 1.0, this delta is sufficiently close to zero

series0 = np.polynomial.polynomial.Polynomial.fit(f, s, deg=0)  # assume ratio = 1.0
delta = series0.convert().coef[0]
print(delta)  # delta = 912.3988175827271 is unreasonably large

# inspired by: https://stats.stackexchange.com/questions/436375/
delta = np.mean(s - f)
print(delta)  # delta = -1.4926089272727112 is quite close to zero

有没有办法通过使用

Polynomial.fit
deg=0
或其他方式获得第二个结果(增量接近于零)?

python numpy linear-regression least-squares
1个回答
0
投票

事实证明我需要像这样手动减去

f

series0 = np.polynomial.polynomial.Polynomial.fit(f, s - f, deg=0)
delta = series0.convert().coef[0]
print(delta)  # delta = -1.4926089272727097
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.