我不確定這是否是正確的術語,但我認爲我想要近似一個數據集s̶m̶o̶o̶t̶h̶̶a̶n̶d̶/̶o̶r̶。我有30個數據點,如下圖所示(帶點的紅線) 我想近似數據集,因此可以使用較少的數據點來描述它。黑色線代表我想達到的目標。 如何近似時間序列數據
我希望能夠定義一個近似等級來控制結果數據集與原始數據集有多少不同。 近似的數據集應包含一組數據點,我可以使用直線將它們連接在一起。
什麼是正確的算法或數學函數來解決這個問題?我不希望在這裏實施,而是建議從哪裏開始。
我寫了我的實現近似算法。它適用於大多數情況,但在某些情況下,它會返回非最佳數據。 下面的例子顯示了三條虛線。細紅線是原始數據集,我的算法會生成厚厚的紅黑色虛線,綠線就是我想要實現的。
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