2017-04-25 10 views
0

私は相関関係を見つけたいと思う2組のデータを持っています。かなりのデータの分散がありますが、明らかに関係があります。私は現在、numpy polyfit(8次)を使用していますが、適切でない行(特に先頭と末尾)の「揺れ」があります。第二に、私はフィットカーブはやや急勾配でなければなりません(行の先頭に非常によくではないと思います。spline through scatter

を、私は、これらのデータ点を通るベストフィット「スプライン」を取得できますか?

Data scatter with polyfit

私の現在のコード:。

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

:ここ

は単純な例でありますフィット。より良いカーブが必要な場合は、より高度な回帰手法を使用する必要があります。 [scikit-learn](http://scikit-learn.org/stable/)にはいくつかのアルゴリズムがあります。 [Gaussian processes](https://en.wikipedia.org/wiki/Gaussian_process)は良い選択ですが、直接使用するにはあまりにも多くのデータが必要です。 – jdehesa

答えて

1

それは単に素晴らしいですWhy use regularisation in polynomial regression instead of lowering the degree?のため@ MatthewDruryの答えを見て、上のスポット彼は自然を使用しての話を開始したときに最も興味深いビットは最後に入ってきます。キュービックスプラインを使って次数10の正規化多項式の代わりに回帰を適合させることができます。scipy.interpolate.CubicSplineの実装を使用して、非常に似通った処理を行うことができます。同様のメソッドについては、scipy.interpolateに含まれている他のスプラインメソッドのクラスもたくさんあります。これは、[クロス検証済み(https://stats.stackexchange.com/)の複数であってもよいが、いずれの場合も、それらの影響は、多項式に自然である

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')