5

UnivariateSplineでスプライン フィッティングを制限できるかどうか疑問に思っていましたか? たとえば、次のデータを考えてみましょう。

 x         y
13    2.404070
12    1.588134
11    1.760112
10    1.771360
09    1.860087
08    1.955789
07    1.910408
06    1.655911
05    1.778952
04    2.624719
03    1.698099
02    3.022607
01    3.303135    

平滑化関数の選択と役割に関する議論は、こちらの以前の投稿で見つけることができます。ただし、スプラインが単調減少する必要があるという制約を課す場合、スプラインをどのように適合させるべきかについてのアイデアはありますか?

ご協力いただきありがとうございます!。

編集: スプラインは、すべてのポイントに正確に適合する必要はありません。ただし、制約 (単調減少) を満たす必要があります。

4

3 に答える 3

2

統合スプラインを基底関数として使用し、OLS 係数が非負になるように制約することによって、単調性制約を課すことができます。非負の制約により、解の計算が通常の平滑化スプラインの当てはめよりも困難になります。scipy パッケージに必要な機能が含まれていない可能性があります。

Mary Meyer は、計算を容易にするために、この問題でパラメーター空間のいくつかの興味深い特性を使用することを提案しています。彼女は自分の論文で R コードを提供しています。Meyer (2008, AoAS), Inference using shape-restricted回帰スプライン, at 1031 を参照してください。

于 2014-03-28T01:51:59.557 に答える
1
  • xリンクした質問を読んで、単調である必要があるだけだと思います。データが x をインデックスとする Series の場合は、UnivariateSpline(s.sort()). データが DataFrame の場合は、UnivariateSpline(df.set_index('x')['y'].sort()).

  • y(x) が単調に見えなくても、実際には単調スプラインが必要な場合があります。制約をUnivariateSpline直接導入する方法はわかりませんが、スプラインに合わせる前にデータを制約できます。次のように、データの「強制単調減少」バリアントを生成します。

    pd.expanding_min(s.sort())
    

    各要素は、これまでに確認された最小の要素に置き換えられ、増加が抑制されます。そのようなデータからのスプラインも単調でなければなりません。

  • 最後に、一般に、制約付きのカーブ フィッティングについては、lmfitをチェックアウトします。非線形最小二乗曲線フィッター scipy.optimize にいくつかの機能が追加され、多くの手間が省けました。

于 2013-07-30T02:58:34.973 に答える