2017-05-24 43 views
0

選擇適當的平滑因子我試圖使用scipy.interpolate.UnivariateSpline創建三次樣條曲線,但我無法找到平滑因子s的適當值。如何爲scipy.interpolate.UnivariateSpline

s=0,每個數據點變成一個結,曲線通過每一點。另一方面,s的高值將返回2節的曲線。

理想情況下,我想要一條曲線超過2節以獲得更好的貼合性,而且我絕對不想要一條經過每個點的曲線。我相信,一個5節左右的曲線將在良好的吻合度和平滑度之間取得良好的平衡。

目前,我正在製作曲線和UnivariateSpline並調整平滑度,直到節數爲5左右。顯然,這不是最好的過程。

基於一組數據確定平滑因子是否有更好的計算或統計方法?

回答

1

SciPy的本身使用啓發式算法(從文檔):用於選擇節點數

正面平滑因子。將增加的結數,直到平滑條件是 滿足:

sum((w[i] * (y[i]-spl(x[i])))**2, axis=0) <= s 

如果無(默認)中,s = LEN(W),其應該是一個好值,如果1/W [i]是的估計y [i]的標準偏差。如果爲0,樣條線 將內插通過所有數據點。

根據我的經驗,當你使用的樣條,你要的長相,而不是試圖以適合你真的想以後使用功能,所以你可能必須手工檢查,如果它實際上做看起來不錯。我可能只是看看數據,然後用for循環制作3-4個版本,並檢查哪一個更漂亮:)