Я не уверен, что это правильный термин, но я думаю, что хочу, чтобы 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
для упрощения, предположим, что точки на оси х выровнены по красным точкам, но их меньше. Я написал свой собственный алгоритм, чтобы выполнить приближение, которое в основном идет слева направо и игнорирует все точки, находящиеся в пределах определенного уровня допуска. Если какое-либо значение превышает уровень допуска, создается новая точка данных и устанавливается как новая база сравнения. Алго работает нормально, но есть случаи, когда это не идеально. Вот почему я спрашиваю, есть ли какое-то общее решение, поэтому мне не нужно изобретать колесо. Я добавил примеры вывода моего эго выше. – maestr0