2017-04-25 22 views
0

我有兩組我想要找到相關性的數據。雖然有相當一些分散的數據,但顯然存在一種關係。我目前使用numpy polyfit(8階),但是有一些「擺動」的線條(特別是在開始和結束時),這是不恰當的。第二,我不認爲擬合得很好在該行的開頭(曲線應稍陡。通過分散擬合樣條

我怎樣才能得到一個最適合的「花」,通過這些數據點?

Data scatter with polyfit

我當前的代碼:

# fit regression line 
regressionLineOrder = 8 
regressionLine = np.polyfit(data['x'], data['y'], regressionLineOrder) 
p = np.poly1d(regressionLine) 
+0

這可以是更大的[交叉驗證](https://stats.stackexchange.com/)的,但在任何情況下,這些效應是天然的多項式適合。如果你想要更好的曲線,你可能需要使用更高級的迴歸技術; [scikit-learn](http://scikit-learn.org/stable/)提供了幾種算法。 [高斯過程](https://en.wikipedia.org/wiki/Gaussian_process)可能是一個很好的選擇,儘管可能太多數據直接使用它。 – jdehesa

回答

1

看看@ MatthewDrury對Why use regularisation in polynomial regression instead of lowering the degree?回答這簡直是太棒了,並當場上最有趣的一點在最後進來,他開始談論使用自然的時候。三次樣條擬合迴歸來代替10次正則化多項式。您可以使用scipy.interpolate.CubicSpline的實現來完成非常相似的事情。對於類似方法,scipy.interpolate中包含的其他樣條方法有很多類。

下面是一個簡單的例子:

from sklearn.interpolate import CubicSpline 

cs = CubicSpline(data['x'], data['y']) 
x_range = np.arange(x_min, x_max, some_step) 
plt.plot(x_range, cs(x_range), label='Cubic Spline')