Как нормализовать последовательность чисел?

Я работаю над проектом поведения пользователя. На основе взаимодействия с пользователем у меня есть некоторые данные. Есть хорошая последовательность, которая плавно увеличивается и уменьшается с течением времени. Но есть небольшие расхождения, которые очень плохие. Пожалуйста, обратитесь к графику ниже:

Построенная последовательность

Вы также можете найти данные здесь:

2,0789 2,09604 2,11472 2,13414 2,15609 2,17776 2,2021 2,22722 2,25019 2,27304 2,29724 2,31991 2,34285 2,36569 2,38682 2,40634 2,42068 2,43947 2,45099 2,46564 2,48385 2,49747 2,49031 2,51458 2,5149 2,52632 2,54689 2,56077 2,57821 2,57877 2,59104 2,57625 2,55987 2,5694 2,56244 2,56599 2,54696 2,52479 2,50345 2,48306 2,50934 2,4512 2,43586 2,40664 2,38721 2,3816 2,36415 2,33408 2,31225 2,28801 2,26583 2,24054 2,2135 2,19678 2,16366 2,13945 2,11102 2,08389 2,05533 2,02899 2,00373 1,9752 1,94862 1,91982 1,89125 1,86307 1,83539 1,80641 1,77946 1,75333 1,72765 1,70417 1,68106 1,65971 1,64032 1,62386 1,6034 1,5829 1,56022 1,54167 1,53141 1,52329 1,51128 1,52125 1,51127 1,50753 1,51494 1,51777 1,55563 1,56948 1,57866 1,60095 1,61939 1,64399 1,67643 1,70784 1,74259 1,7815 1,81939 1,84942 1,87731
1,89895 1,91676 1,92987

Я хотел бы сгладить эту последовательность. Техника должна быть в состоянии исключить числа с характеристиками X и Y, то есть ошибка в моно-увеличении или моно-уменьшении.

Если не устранить, техника должна быть в состоянии сдвинуть их так, чтобы на серию не влияли ошибки.

Что я попробовал и потерпел неудачу:

  1. Я пытался проверить разницу между значениями. В некоторых особых случаях это работает, но для последовательности, представленной в этом, расстояние между числами не такое, что я могу вырезать ошибки

  2. Я попытался применить счетчик, который является некоторым X, тогда принимается только изменение, иначе точка отображается только на предыдущую точку. Здесь я испытываю большие трудности с выбором значения X, потому что оно основано на взаимодействии с пользователем, я на самом деле не контролирую его. Если взаимодействие с пользователем таково, что его график будет зигзагообразным, я в конечном итоге получаю ситуацию «данные о перемещении пользователя не обнаружены вообще».

Пожалуйста, поделитесь методами, которые вы знаете.

PS: данные, представленные в этом примере, являются частным случаем. Не существует типичной схемы, в которой будут встречаться числа, но мы ожидаем, что некоторый диапазон будет непрерывным во всех примерах. Решение, которое я ищу, является общим.

5

Решение

Поскольку вы не можете выбрать частоту среза и даже не тот фильтр, который хотите использовать, я бы реализовал несколько и позволил пользователю установить параметры.

Первое, о чем я подумал, это скользящее среднее, и вы можете видеть, что есть так много вещей, которые можно установить, чтобы получить разные результаты.

1

Другие решения

Я не знаю, сколько усилий вы хотите привлечь к этой проблеме, но если вы хотите теоретические гарантии,
топологическая устойчивость, кажется, хорошо приспособлена к вашей проблеме.
В основном с помощью этого метода вы можете отфильтровать локальный максимум / минимум, установив шкалу
и есть теоретические доказательства, которые говорят, что если вы
закрыть от вашей функции, то вы извлекаете правильное количество максимумов с сохранением.
Вы можете увидеть эти слайды (в основном страницы 7-9, чтобы понять идею), чтобы получить представление о методе.

По сути, если вы берете свои точки как ландшафт и представляете водораздел, начинающийся с максимальной высоты и уменьшающийся, у вас есть некоторые выборы.
У каждого пика есть время, когда он родился, то есть время, когда он появился, и время, когда он умирает, когда он сливается с более высоким пиком. Теперь диаграмма постоянства отображает точку для каждого пика, где его координаты x / y — это время рождения / смерти (по предположению, первый пик не умирает и не отображается).
Если пик является глобальным максимумом, то он будет дальше от диагонали на диаграмме постоянства, чем от локального максимума. Чтобы удалить локальные максимумы, вы должны удалить кирки, расположенные близко к диагонали. В вашем примере есть четыре локальных максимума, как вы можете видеть на диаграмме постоянства ваших данных (спасибо за предоставление данных, кстати) и два глобальных (первый выбор не изображен на диаграмме постоянства):
Диаграмма устойчивости вашей функции

Если вы подделываете данные так:
введите описание изображения здесь

Вы по-прежнему получите очень приличную диаграмму постоянства, которая позволит вам фильтровать локальный максимум так, как вы хотите:

введите описание изображения здесь

Пожалуйста, спросите, если вы хотите больше деталей или ссылок.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector