2016-08-20 12 views
1

これは適切な用語かどうかわかりませんが、私はs-m-o-o-t-h- a-a-n-d- /─o-r-というデータセットを近似したいと思います。私は下の図に示すように30のデータポイントを持っています(点線の赤い線) データセットを近似して、より少ないデータポイントで記述できるようにしたいのですが。黒い線は達成したいことを表しています。 chart1時系列データを近似する方法

結果データセットが元のものとどれだけ異なるかを制御する近似レベルを定義できます。 近似されたデータセットには、直線を使用して一緒に接続できる一連のデータポイントが含まれている必要があります。

この問題を解決する適切なアルゴリズムまたは数学関数は何ですか?私はここでの実装は期待していませんが、むしろいくつかの提案をどこから始めるべきですか。

私は近似アルゴリズムの実装を書いています。これはほとんどの場合に機能しますが、最適ではないデータを返す特定の状況があります。 以下の例では、3つの点線を示しています。細い赤線が元のデータセット、太い赤黒の点線がアルゴリズムで生成され、緑色の線が達成したいものです。

my implementation

 var previousValue; 
     return array.map(function (dataPoint, index, fullArray) { 
      var approximation = dataPoint; 

      if (index > 0) { 
       if (Math.abs(previousValue - value) < tolerance) { 
        approximation = previousValue; 
       } else { 
        previousValue = dataPoint; 
       } 

      } else { 
       previousValue = dataPoint; 
      } 

      return approximation; 
     }); 
+0

何か試しましたか?私はあなたのx軸の点が均等に間隔を置かれていないので、あなたの黒い線に合った標準的なアルゴリズムがあるのか​​疑いがあります。データを平滑化するために「移動平均」を使用し、ポイント数を減らすためにnポイントごとに選択することを検討してください。 – bhspencer

+0

簡単にするために、x軸上の点が赤い点に揃えられていると仮定しましょう。 私は、基本的に左から右に近づく近似を行う独自のアルゴリズムを書いており、ある許容レベル内のすべての点を無視しています。値が許容レベルを超えると、新しいデータポイントが作成され、新しい比較ベースとして設定されます。アルゴはうまくいくが、完璧ではない場合がある。これが私がジェネリックな解決策があるかどうかを尋ねているため、ホイールを再発明する必要はありません。上記の私のアルゴのサンプル出力を追加しました。 – maestr0

答えて

1

2つのオプションがここにあります

  1. データで示された「グリッチ」は、あなたがそれを滑らかにすることができないことを意味し、有意である場合。
  2. 示した全てのデータを近似することができ、「グリッチ」は、(1)の場合

微々たるものであるならば、あなたはテンプレート(例えば、ウェーブレット)によっておおよそ考えるか」を検出し、維持するための基本的な微分解析を使用することができますグリッチ "(例えば、メッシュ)。 (2)のケースでは、MA、ARIMAを使用して、 "グリッチ"を根からさらに分析することができます。

1

わかりやすく、データを円滑にするか、それとも近似したいですか?データを滑らかにする場合、定義によって、データシリーズ内の小さな凹凸を取り除きます。一方、目標がすべてのディップとバンプを正確に描写することであれば、スムージングは​​望ましくありません。私はスムージングについて話すつもりです、あなたは他のものが必要かどうか教えてください。

私が知っている最良の方法は、アルファ値を使用することです。式は、T n + 1 =(1-)T n + αデータn + 1である。これは、シリーズ履歴の影響を受ける次のファンクションポイントの部分と、現在のデータポイントの影響を受ける部分を設定することを意味します。

Example graph with alpha = .5 このデータをご覧ください。ここではα = .5です。したがって、関数はデータに適合しますが、それほど多くはありません。下のものは同じですが、アルファは.25です。したがって、データの追跡はさらに少なくなりますが、機能は非常にスムーズです。時間の経過とともにαが減少する3番目のオプションもあります。最初は非常に高くなる可能性があるため、データをすばやくフォローすることができますが、αが時間の経過と共に減少するため、トレンドはスムーズになり、時間の経過とともにスムーズになります。最後に、最小値にハード制限を設定することができますαこれにより、常にデータに対する最小限の応答性が保証されます。

Example graph with alpha = .25

+0

よろしくお願いします。それは、私が本当に必要としていることが近似であることを理解する助けになりました。基本的には、データポイントの数を減らし、グラフの元の形状に可能な限り近づけたいと考えています。私の最初のグラフは赤いデータセットの近似を黒線で示しています。私はその行を記述するために5点しか必要としない(開始点と終了点を含む) – maestr0

関連する問題