2014-12-11 6 views
5

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

Plotted sequence

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

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,52632 2,54689 2,5149 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: Данные, доступные в этом примере, являются частным случаем. Нет типичного шаблона, в котором числа будут происходить, но мы ожидаем, что некоторый диапазон будет непрерывным со всеми примерами. Решение, которое я ищу, является общим.

+0

Что было бы/могло бы быть неправильным с наивным сглаживанием нескольких значений? – JBL

+0

Я предполагаю, что вы имеете в виду фильтра нижних частот или обычный метод. При фильтрации нижних частот я не могу принять решение о частоте, поэтому не в состоянии снова вырезать ошибки. При запуске среднее количество ошибок X & Y исчезает, но обведенная область влияет на плохое выполнение программы, поэтому количество ошибок остается таким же, как и они. – Adorn

+1

Что означает термин «нормализовать» в названии? –

ответ

1

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

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

1

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

В принципе, если вы берете свои точки как ландшафт и представляете себе водораздел, начиная с максимальной высоты и уменьшаясь, у вас есть выбор. Каждый выбор имеет время, в котором он родился, и это время, когда оно появляется, и время, когда оно умирает, когда оно сливается с более высоким выбором. Теперь диаграмма персистентности рисует точку для каждого выбора, где его координаты x/y - это время рождения/смерти (по предположению, что первый выбор не умирает и не показан). Если выбор является глобальным максимальным, то он будет дальше от диагонали на диаграмме персистентности, чем локальный максимальный выбор. Чтобы удалить локальные максимумы, вам нужно удалить кирки рядом с диагональю. Есть четвереньках локальные максимумы в вашем примере, как вы можете видеть, с настойчивостью диаграммой ваших данных (спасибо за предоставление данных BTW) и две глобальные (первый выбор не изображенные на диаграмме инерционности): Persistence diagram of your function

Если шум ваши данные, как, что: enter image description here

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

enter image description here

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

+0

Прошу прощения за отложенный ответ. Я еще не пробовал ваше решение. Но это кажется приятным. Будет обновляться здесь о результатах, как только я попробую – Adorn