これは適切な用語かどうかわかりませんが、私はs-m-o-o-t-h- a-a-n-d- /─o-r-というデータセットを近似したいと思います。私は下の図に示すように30のデータポイントを持っています(点線の赤い線) データセットを近似して、より少ないデータポイントで記述できるようにしたいのですが。黒い線は達成したいことを表しています。 時系列データを近似する方法
結果データセットが元のものとどれだけ異なるかを制御する近似レベルを定義できます。 近似されたデータセットには、直線を使用して一緒に接続できる一連のデータポイントが含まれている必要があります。
この問題を解決する適切なアルゴリズムまたは数学関数は何ですか?私はここでの実装は期待していませんが、むしろいくつかの提案をどこから始めるべきですか。
私は近似アルゴリズムの実装を書いています。これはほとんどの場合に機能しますが、最適ではないデータを返す特定の状況があります。 以下の例では、3つの点線を示しています。細い赤線が元のデータセット、太い赤黒の点線がアルゴリズムで生成され、緑色の線が達成したいものです。
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;
});
何か試しましたか?私はあなたのx軸の点が均等に間隔を置かれていないので、あなたの黒い線に合った標準的なアルゴリズムがあるのか疑いがあります。データを平滑化するために「移動平均」を使用し、ポイント数を減らすためにnポイントごとに選択することを検討してください。 – bhspencer
簡単にするために、x軸上の点が赤い点に揃えられていると仮定しましょう。 私は、基本的に左から右に近づく近似を行う独自のアルゴリズムを書いており、ある許容レベル内のすべての点を無視しています。値が許容レベルを超えると、新しいデータポイントが作成され、新しい比較ベースとして設定されます。アルゴはうまくいくが、完璧ではない場合がある。これが私がジェネリックな解決策があるかどうかを尋ねているため、ホイールを再発明する必要はありません。上記の私のアルゴのサンプル出力を追加しました。 – maestr0