Как нормализовать последовательность чисел?
Я работаю над проектом поведения пользователя. На основе взаимодействия с пользователем у меня есть некоторые данные. Есть хорошая последовательность, которая плавно увеличивается и уменьшается со временем. Но есть небольшие расхождения, которые очень плохие. Пожалуйста, обратитесь к графику ниже:
Вы также можете найти данные здесь:
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, т. Е. Ошибка в моно-увеличении или моно-уменьшении.
Если не устранить, техника должна быть в состоянии сдвинуть их так, чтобы на серию не влияли ошибки.
Что я попробовал и потерпел неудачу:
Я пытался проверить разницу между значениями. В некоторых особых случаях это работает, но для последовательности, представленной в этом, расстояние между числами не такое, что я могу вырезать ошибки
Я попытался применить счетчик, который является некоторым X, тогда принимается только изменение, иначе точка отображается только на предыдущую точку. Здесь я испытываю большие затруднения при выборе значения X, потому что оно основано на взаимодействии с пользователем, я на самом деле не контролирую его. Если взаимодействие с пользователем таково, что его график будет зигзагообразным, я в конечном итоге получаю ситуацию "данные о перемещении пользователя не обнаружены вообще".
Пожалуйста, поделитесь методами, которые вы знаете.
PS: данные, представленные в этом примере, являются частным случаем. Не существует типичной схемы, в которой будут встречаться числа, но мы ожидаем, что некоторый диапазон будет непрерывным во всех примерах. Решение, которое я ищу, является общим.
2 ответа
Поскольку вы не можете выбрать частоту среза и даже не тот фильтр, который хотите использовать, я бы реализовал несколько и позволил пользователю установить параметры.
Первое, о чем я подумал, - это среднее значение, и вы можете видеть, что нужно установить так много вещей, чтобы получить разные результаты.
Я не знаю, сколько усилий вы хотите приложить к этой проблеме, но если вам нужны теоретические гарантии, топологическая стойкость кажется вполне приспособленной к вашей проблеме. По сути, с помощью этого метода вы можете отфильтровать локальный максимум / минимум, установив шкалу, и есть теоретические доказательства, которые говорят, что если ваша выборка близка к вашей функции, то вы извлекаете правильное количество максимумов с постоянством. Вы можете увидеть эти слайды (в основном страницы 7-9, чтобы понять идею), чтобы получить представление о методе.
По сути, если вы берете свои точки как ландшафт и представляете водораздел, начинающийся с максимальной высоты и уменьшающийся, у вас есть некоторые выборы. У каждого пика есть время, когда он рождается, то есть время, когда он появляется, и время, когда он умирает, когда он сливается с более высоким пиком. Теперь диаграмма постоянства отображает точку для каждого пика, где его координаты x/y - это время его рождения / смерти (по предположению, первый пик не умирает и не отображается). Если пик является глобальным максимумом, то он будет дальше от диагонали на диаграмме постоянства, чем от локального максимума. Чтобы удалить локальные максимумы, вы должны удалить кирки, расположенные близко к диагонали. В вашем примере есть четыре локальных максимума, как вы можете видеть на диаграмме постоянства ваших данных (спасибо за предоставление данных между прочим) и два глобальных (первый выбор не изображен на диаграмме постоянства):
Если вы подделываете данные так:
Вы все равно получите очень приличную диаграмму постоянства, которая позволит вам фильтровать локальный максимум так, как вы хотите:
Пожалуйста, спросите, если вы хотите больше деталей или ссылок.