本文簡要介紹 python 語言中 numpy.polynomial.polynomial.polyfit
的用法。
用法:
polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=None)
多項式與數據的最小二乘擬合。
返回多項式的係數度這是適合數據值的最小二乘y在點給出x.如果y是一維的,返回的係數也將是一維的。如果y是 2-D 多次擬合完成,每列一個y,並且得到的係數存儲在二維返回的相應列中。擬合多項式的形式為
其中 n 是度數。
- x: 數組樣,形狀(M,)
的 x 坐標M樣本(數據)點
(x[i], y[i])
.- y: 數組樣,形狀(M,) 或者 (M,K)
樣本點的 y 坐標。共享相同 x 坐標的幾組樣本點可以(獨立地)通過一次調用來擬合numpy.polyfit通過傳入y一個二維數組,每列包含一個數據集。
- deg: int 或 1-D 數組
擬合多項式的次數。如果 deg 是單個整數,則所有直到並包括 deg'th 項的項都包含在擬合中。對於 NumPy 版本 >= 1.11.0,可以使用指定要包含的項的度數的整數列表來代替。
- rcond: 浮點數,可選
擬合的相對條件數。奇異值小於rcond,相對於最大奇異值,將被忽略。默認值為
len(x)*eps
,其中每股收益是平台浮點類型的相對精度,大多數情況下約為 2e-16。- full: 布爾型,可選
開關決定返回值的性質。當
False
(默認)隻返回係數;當True
時,還返返回自奇異值分解(用於求解擬合矩陣方程)的診斷信息。- w: 數組樣,形狀(M,), 可選的
重量。如果不是 None,則權重
w[i]
適用於x[i]
處的未平方殘差y[i] - y_hat[i]
。理想情況下,選擇權重以使產品w[i]*y[i]
的誤差都具有相同的方差。使用 inverse-variance 加權時,請使用w[i] = 1/sigma(y[i])
。默認值為無。
- coef: ndarray,形狀(度+ 1,) 或 (度+ 1,K)
多項式係數從低到高排序。如果 y 是二維的,則 coef 的 k 列中的係數表示擬合 y 的 k-th 列中數據的多項式。
- [residuals, rank, singular_values, rcond]: 列表
這些值僅在
full == True
時返回殘差 - 最小二乘擬合的殘差平方和
rank - 縮放的 Vandermonde 矩陣的數值等級
singular_values - 縮放範德蒙矩陣的奇異值
rcond - rcond 的值。
有關詳細信息,請參閱
numpy.linalg.lstsq
。
- RankWarning
如果最小二乘擬合中的矩陣存在秩不足,則引發該錯誤。僅當
full == False
時才會引發警告。可以通過以下方式關閉警告:>>> import warnings >>> warnings.simplefilter('ignore', np.RankWarning)
參數:
返回:
拋出:
注意:
解是使加權平方誤差之和最小化的多項式 p 的係數
其中 是權重。這個問題通過建立(通常)over-determined矩陣方程來解決:
其中 V 是 x 的加權偽 Vandermonde 矩陣,c 是要求解的係數,w 是權重,y 是觀測值。然後使用 V 的奇異值分解求解該方程。
如果某些奇異值V太小以至於被忽視(和numpy.full==
False
), 一種RankWarning
將被提高。這意味著可能很難確定係數值。擬合低階多項式通常會消除警告(但可能不是您想要的,當然;如果您有獨立的理由選擇不工作的度數,您可能必須:a)重新考慮這些原因,和/或 b) 重新考慮您的數據質量)。這rcond參數也可以設置為小於其默認值的值,但結果擬合可能是虛假的並且有很大的舍入誤差貢獻。使用雙精度的多項式擬合傾向於 “fail” 大約(多項式)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]
相關用法
- Python numpy polynomial.polyfromroots用法及代碼示例
- Python numpy polynomial.polyline用法及代碼示例
- Python numpy polynomial.polyadd用法及代碼示例
- Python numpy polynomial.polyder用法及代碼示例
- Python numpy polynomial.polydomain用法及代碼示例
- Python numpy polynomial.polyint用法及代碼示例
- Python numpy polynomial.polydiv用法及代碼示例
- Python numpy polynomial.polyvalfromroots用法及代碼示例
- Python numpy polynomial.polyval用法及代碼示例
- Python numpy polynomial.polysub用法及代碼示例
- Python numpy polynomial.polyx用法及代碼示例
- Python numpy polynomial.polytrim用法及代碼示例
- Python numpy polynomial.polyroots用法及代碼示例
- Python numpy polynomial.polymul用法及代碼示例
- Python numpy polynomial.polyzero用法及代碼示例
- Python numpy polynomial.polyone用法及代碼示例
- Python numpy polynomial.polypow用法及代碼示例
- Python numpy polynomial.set_default_printstyle用法及代碼示例
- Python numpy polyder用法及代碼示例
- Python numpy polyfit用法及代碼示例
- Python numpy polyutils.as_series用法及代碼示例
- Python numpy poly用法及代碼示例
- Python numpy polysub用法及代碼示例
- Python numpy polyutils.getdomain用法及代碼示例
- Python numpy polyutils.mapdomain用法及代碼示例
注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.polynomial.polynomial.polyfit。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。