補間時に scipy.interpolate.UnivariateSpline でスムージングを使用するのに問題があります。関数のページと以前の投稿に基づいて、パラメーターで平滑化を提供する必要があると思いs
ます。
これが私のコードです:
# Imports
import scipy
import pylab
# Set up and plot actual data
x = [0, 5024.2059124920379, 7933.1645067836089, 7990.4664106277542, 9879.9717114947653, 13738.60563208926, 15113.277958924193]
y = [0.0, 3072.5653360000988, 5477.2689107965398, 5851.6866463790966, 6056.3852496014106, 7895.2332350173638, 9154.2956175610598]
pylab.plot(x, y, "o", label="Actual")
# Plot estimates using splines with a range of degrees
for k in range(1, 4):
mySpline = scipy.interpolate.UnivariateSpline(x=x, y=y, k=k, s=2)
xi = range(0, 15100, 20)
yi = mySpline(xi)
pylab.plot(xi, yi, label="Predicted k=%d" % k)
# Show the plot
pylab.grid(True)
pylab.xticks(rotation=45)
pylab.legend( loc="lower right" )
pylab.show()
結果は次のとおりです。
s
値の範囲 (0.01、0.1、1、2、5、50) と明示的な重みを同じもの (1.0) に設定するかランダム化して、これを試しました。私はまだ平滑化を行うことができず、ノットの数は常にデータ ポイントの数と同じです。特に、平滑化される 4 番目のポイント (7990.4664106277542、5851.6866463790966) のような外れ値を探しています。
十分なデータがないからですか?もしそうなら、このいくつかのデータポイントで平滑化を達成するために適用できる同様のスプライン関数またはクラスター手法はありますか?