Python で 3 次スプラインをノイズの多い x、y データに当てはめ、各区間のスプライン係数を抽出したい (つまり、各区間で 4 つのスプライン係数を取得することが期待される)
これまでのところ、私は試しました(すべてscipy.interpolateから):
1) CubicSpline ですが、この方法ではスプラインを滑らかにすることができず、非現実的で不安定な係数データが生成されます。
2) splrep と splev の組み合わせ。
tck = splrep(x, y, k=3, s=1e25)
ここで、次を使用して係数/ノットを抽出します
F = PPoly.from_spline(tck)
coeffs = F.c
knots = F.x
ただし、平滑化パラメーター s を非常に大きな数値に増やしても、x 範囲全体で滑らかな係数を見つけることができません (0 に近い値と 1e23 の間でジャンプします。これは非物理的です)。ノット数は s とともに減少します。適切なパラメータ s とノット数を同時に見つけることができないようです。
3) UnivariateSpline(x, y, k=3, s=0.03) を使用しました。ここでは、s の変更に対する感度が高いことがわかりましたが、対応する get_coeffs() メソッドは、各間隔に対して 4 つの係数を提供するのではなく、1 つのみを提供します。理解していない。
4) 3 次多項式を使用した区分的リッジ型線形回帰も試しましたが、この方法ではフィットのパーセンテージ エラーが大きすぎるため、標準のスプライン法の 1 つを機能させることができれば素晴らしいと思います。
私は何が欠けていますか?誰か助けてくれませんか?