[英]numpy polynomial.Polynomial.fit() gives different coefficients than polynomial.polyfit()
我不明白為什么 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.])
前兩個結果沒問題,感謝這個答案,我明白為什么兩個 arrays 順序相反。
但是,我不明白第三個結果的含義。 系數看起來是錯誤的,盡管我以這種方式得到的多項式似乎給出了正確的預測值。
當然,答案稍微隱藏在文檔中。 Looking at the class numpy.polynomial.polynomial.Polynomial(coef, domain=None, window=None)
It is clear that in general the coefficients [ a
, b
, c
, ...] are for the polynomial a + b * x + c * x**2 +...
但是,關鍵字參數domain
和window
都默認為[-1,1]
。 我不喜歡那個 class,所以我不確定目的,但很明顯發生了重新映射。 現在在polynomial.Polynomial.fit()
的情況下,有一個 class 方法自動將x
數據作為域,但仍然映射到 window。 因此,在 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.])
埋在文檔中:
請注意,系數在由 window 和域之間的線性映射定義的縮放域中給出。 convert 可用於獲取未縮放數據域中的系數。
所以使用:
poly.convert()
這會將您的系數重新調整為您可能期望的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.