区分的線形データを近似


18

区分的に線形だがノイズの多いデータに適合する堅牢な方法は何ですか?

いくつかのほぼ線形のセグメントで構成される信号を測定しています。遷移を検出するために、データに複数の行を原子的に適合させたいと思います。

データセットは1〜10個のセグメントを持つ数千のポイントで構成されており、セグメントの数はわかっています。

これは自動的にやりたいことの例です。

ここに画像の説明を入力してください


ブレークポイントの位置、線形セグメントの最短長の推定値、および典型的なサンプル数を正確に知りたい場合を除き、この質問に合理的に答えられるとは思わない遷移領域。Figureの水平軸ラベルがサンプル番号である場合、からへのスパンに2つの遷移がある場合、タスクは直線セグメントの期間が長い場合よりも困難です(サンプル)。x [ 0 ]x[5]x[0]
ディリップサルワテ

@DilipSarwate質問を要件で更新しました(ただし、x軸はテスラの磁場です)
P3trus

回答:


12

単純に2つのアプローチを試みました(3つのセグメントのみを使用)。確かに手の込んだ方法があるでしょう。

    RANSAC、堅牢なフィッティングメカニズムと思われます。いくつかのセグメントの後にアルゴリズムを停止するのは簡単です。ただし、少なくとも単純な実装では、アプリケーションで必要と思われるように、セグメント間の連続性を強化することは困難な場合があります。私は利用可能なRANSACエンジンを使用できるように、概念の証明として、私は、データ点から画像を作成はMathematicaのライン検出機能。ImageLines

ここに画像の説明を入力してください

    汎用最小化器を使用して区分線形モデルを近似します。セグメントの連続性を強制するのは簡単です。興味深いことに、残差やその他のプロパティをテストすると、セグメントの数を自動的に判断するのに十分な情報が得られる場合がありますが、試したことはありません。それはMathematicaでどのように見えるかです:

ここに画像の説明を入力してください


素晴らしい答えのように見えます。貢献してくれてありがとう。
ジェイソンR

7

次の方法は堅牢であるとは言いませんが、うまくいくかもしれません。数千のポイントと、おそらく10個程度の直線セグメントを使用して、次のように進めます。x[n]

  • 次のように、ポイントを処理してビット配列を作成します。 ここで、は、ポイント直線にどれだけ近いかという概念に合うように選択された小さな数字です。に変更します。基準は、およびを通る直線が通る直線とほぼ同じ勾配を持つことを要求するものとして認識します。および。x[n]y[n]

    y[n]={1,if |(x[n+1]x[n])(x[n]x[n1])|<ϵ,0,otherwise.
    ϵx[n1],x[n],x[n+1](n1,x[n1])(n,x[n])(n,x[n])(n+1,x[n+1])
  • 場合 10かのように長めの実行の配列ですの実行で区切らS時々迷とS、ここでsおよびそこに、美しさを損なうリラックスして、あなたは正しい軌道に乗っています。それ以外の場合、実行が少なすぎるかの実行が多すぎる場合は、異なるして前の手順を繰り返します。y[n]1011ϵ

  • 線形最小平均二乗誤差曲線近似を使用して、によって同じ直線セグメントに属すると識別された点に直線を当てはめます。これで、ポイントに適合する10本の直線ができました。たとえば、ラインAはポイントから適合します。ラインBはポイントからにフィットし、ラインCはポイントからにフィットします。Aを右に、Bを左に拡張して、交差する場所を見つけます。Bを右に、Cを左に拡張して、それらが交差する場所などを見つけます。おめでとうございます。これで、データの連続的で区分的な線形モデルができました。x [ 3 ] x [ 88 ] x [ 94 ] x [ 120 ] x [ 129 ] y[n]x[3]x[88]x[94]x[120]x[129]


完全に私の答えを盗んだ!=)
フォノン

興味深いアイデアですが、悲しいことに信号のノイズのため、良い結果が得られません。
P3trus

1
マグニチュードがイプシロンと比較される式は、実際にはデータの2次導関数の近似値です。ノイズにあまり反応しない3つ以上のポイントを使用してこれを計算する他の方法があります。Savitzky-Golayを調べてください。
DarenW

4

(年後)区分的線形関数は、次数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つのアプローチは、代わりにペナルティ付き回帰スプラインを使用することです。




2014年3月追加: 動的プログラミング は、次のようなネストされたサブ問題の問題に対する一般的な方法です。

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 セグメント化された線形回帰
もジョン・ヘンリー症候群。


ここに画像の説明を入力してください


問題は、少なくともscipyの場合、結び目の位置です。scipyは等間隔のノットを使用します。
P3trus

@ P3trus、開始はい、しかし彼らは動くことができます-プロットを見てください。とにかく、ノットではなく、全体のエラーを対象としています。
デニス

@ P3trusブレークポイントを繰り返し自動的に選択する多変量回帰スプライン法を使用しようとしましたか?cs.rtu.lv/jekabsons/regression.html
Atul Ingle

@Atul Ingle、afaikブレークポイント/ノットの選択は、スプラインフィッターが何であれ、同じ問題です。R /回帰の人々からそのためのさまざまなアルゴリズムを知っている場合は、リンクを投稿してください。
denis

適応回帰スプラインを行うR / Matlabのパッケージを探していますか?ここ:cran.r-project.org/web/packages/earth/index.html cran.r-project.org/web/packages/mda/index.htmlおよびMatlabのARESLabもリンクをすでに投稿しています。
アトールイングル

0

導関数を取り、ほぼ一定の値の領域を探します。理想的には+/-勾配のあるレベルでそれらの領域を検索するアルゴリズムを作成する必要があります。これにより、そのセクションの線の勾配が得られます。区分的分類を行う前に、スライディング平均などの平滑化を実行することができます。次のステップは、y交差を取得することです。これはその時点では簡単なはずです。


派生物は騒々しいかもしれません。私はそれをお勧めするとは思わない。
ロバートブリストージョンソン14年

0

l1トレンドフィルターを使用することも別のアイデアです。

論文

オンラインの例


1
あなたの答えは少し短すぎて建設的ではありません!教育的な方法でそれを拡大する努力をすることを検討してください。
山水荘14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.