SciPy 插值
什麼是插值?
插值是一種在給定點之間生成點的方法。
例如:對於點 1 和 2,我們可以進行插值找到點 1.33 和 1.66。
插值有很多用途,在機器學習中我們經常處理資料集中的缺失資料,插值常用於替換這些值。
這種填充值的方法稱為插補。
除了插補,插值還常用於需要平滑資料集中離散點的情況。
如何在 SciPy 中實現?
SciPy 提供了一個名為 scipy.interpolate
的模組,其中包含許多用於處理插值的功能。
一維插值
函式 interp1d()
用於對具有 1 個變數的分佈進行插值。
它接受 x
和 y
點,並返回一個可呼叫函式,該函式可以用新的 x
呼叫,並返回相應的 y
。
示例
對於給定的 xs 和 ys,對 2.1、2.2... 到 2.9 進行插值
from scipy.interpolate import interp1d
import numpy as np
xs = np.arange(10)
ys = 2*xs + 1
interp_func = interp1d(xs, ys)
newarr = interp_func(np.arange(2.1, 3, 0.1))
print(newarr)
結果
[5.2 5.4 5.6 5.8 6. 6.2 6.4 6.6 6.8]自己動手試一試 »
注意: 新的 xs 應該與舊的 xs 在同一範圍內,這意味著我們不能用大於 10 或小於 0 的值呼叫 interp_func()
。
樣條插值
在一維插值中,點是為單個曲線擬合的,而在樣條插值中,點是為由稱為樣條的多項式定義的分段函式擬合的。
函式 UnivariateSpline()
接受 xs
和 ys
,並生成一個可呼叫函式,該函式可以用新的 xs
呼叫。
分段函式: 為不同範圍定義不同的函式。
示例
為以下非線性點查詢 2.1、2.2... 2.9 的單變數樣條插值
from scipy.interpolate import UnivariateSpline
import numpy as np
xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1
interp_func = UnivariateSpline(xs, ys)
newarr = interp_func(np.arange(2.1, 3, 0.1))
print(newarr)
結果
[5.62826474 6.03987348 6.47131994 6.92265019 7.3939103 7.88514634 8.39640439 8.92773053 9.47917082]自己動手試一試 »
徑向基函式插值
徑向基函式是對應於固定參考點的函式。
函式 Rbf()
也接受 xs
和 ys
作為引數,並生成一個可呼叫函式,該函式可以用新的 xs
呼叫。
示例
使用 rbf 插值以下 xs 和 ys,並查詢 2.1、2.2 ... 2.9 的值
from scipy.interpolate import Rbf
import numpy as np
xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1
interp_func = Rbf(xs, ys)
newarr = interp_func(np.arange(2.1, 3, 0.1))
print(newarr)
結果
[6.25748981 6.62190817 7.00310702 7.40121814 7.8161443 8.24773402 8.69590519 9.16070828 9.64233874]自己動手試一試 »