区分的に線形だがノイズの多いデータに適合する堅牢な方法は何ですか?
いくつかのほぼ線形のセグメントで構成される信号を測定しています。遷移を検出するために、データに複数の行を原子的に適合させたいと思います。
データセットは1〜10個のセグメントを持つ数千のポイントで構成されており、セグメントの数はわかっています。
これは自動的にやりたいことの例です。
区分的に線形だがノイズの多いデータに適合する堅牢な方法は何ですか?
いくつかのほぼ線形のセグメントで構成される信号を測定しています。遷移を検出するために、データに複数の行を原子的に適合させたいと思います。
データセットは1〜10個のセグメントを持つ数千のポイントで構成されており、セグメントの数はわかっています。
これは自動的にやりたいことの例です。
回答:
単純に2つのアプローチを試みました(3つのセグメントのみを使用)。確かに手の込んだ方法があるでしょう。
次の方法は堅牢であるとは言いませんが、うまくいくかもしれません。数千のポイントと、おそらく10個程度の直線セグメントを使用して、次のように進めます。
次のように、ポイントを処理してビット配列を作成します。 ここで、は、ポイント直線にどれだけ近いかという概念に合うように選択された小さな数字です。に変更します。基準は、およびを通る直線が通る直線とほぼ同じ勾配を持つことを要求するものとして認識します。および。
場合 10かのように長めの実行の配列ですの実行で区切らS時々迷とS、ここでsおよびそこに、美しさを損なうリラックスして、あなたは正しい軌道に乗っています。それ以外の場合、実行が少なすぎるかの実行が多すぎる場合は、異なるして前の手順を繰り返します。
線形最小平均二乗誤差曲線近似を使用して、によって同じ直線セグメントに属すると識別された点に直線を当てはめます。これで、ポイントに適合する10本の直線ができました。たとえば、ラインAはポイントから適合します。ラインBはポイントからにフィットし、ラインCはポイントからにフィットします。Aを右に、Bを左に拡張して、交差する場所を見つけます。Bを右に、Cを左に拡張して、それらが交差する場所などを見つけます。おめでとうございます。これで、データの連続的で区分的な線形モデルができました。x [ 3 ] x [ 88 ] x [ 94 ] x [ 120 ] x [ 129 ] ⋯
(年後)区分的線形関数は、次数1のスプラインであり、ほとんどのスプラインフィッターに指示することができます。
たとえばscipy.interpolate.UnivariateSplineは、で実行することができます。k=1
また、スムージングパラメーターs
を使用する必要があります。scipy -interpolation-with- univariate-splinesを参照して
ください。
Matlabで、how-to-choose-knotsを参照してください
。
追加:最適なノットを見つけることは簡単ではありません。なぜなら、多くの局所的な最適値があるからです。代わりに、UnivarateSplineにtarget s
、error ^ 2の合計を与え、ノットの数を決定させます。フィッティング後get_residual()
、error ^ 2の実際の合計とget_knots()
ノットを取得します。s
特にノイズが大きい場合、ymmv の小さな変化はノットを大きく変化させる可能性があります。
プロットは、さまざまなのランダムな区分的線形関数+ノイズへの近似を示していますs
。
区分定数の近似については、ステップ検出を参照してください 。それはpw linearに使用できますか?わからない。ノイズの多いデータを区別することから始めると、ノイズが増えますが、間違っています。
他のテスト機能、および/または論文やコードへのリンクは歓迎されます。リンクのカップル:
区分的線形回帰とノット-としてパラメータ線形スプラインノットが配置される場所に非常に敏感である結び目選択-用立方回帰スプラインこれはトリッキーな問題であり、ほとんどの人は試行錯誤してノットを選択するだけです。人気が高まっている1つのアプローチは、代わりにペナルティ付き回帰スプラインを使用することです。
optimal k lines
= optimal k - 1 lines up to some x
+ cost of the last line x to the end
over x (all x in theory, nearby x in practice)
動的プログラミングは非常に巧妙ですが、このタスクのブルートフォース+ヒューリスティックに打ち勝つことができますか?
下のエリク・デメインにより、優れたコースのノートを参照してください
アルゴリズムにMIT 6.006イントロを
また、Google セグメント化された線形回帰
もジョン・ヘンリー症候群。
導関数を取り、ほぼ一定の値の領域を探します。理想的には+/-勾配のあるレベルでそれらの領域を検索するアルゴリズムを作成する必要があります。これにより、そのセクションの線の勾配が得られます。区分的分類を行う前に、スライディング平均などの平滑化を実行することができます。次のステップは、y交差を取得することです。これはその時点では簡単なはずです。