如何规范化数字序列?

时间:2014-12-11 09:20:02

标签: c++ image-processing user-interaction curvesmoothing

我正在处理用户行为项目。根据用户交互,我得到了一些数据。有一个很好的序列,随着时间的推移平稳地增加和减少。但是差异很小,非常糟糕。请参考下图:

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.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的值,因为这是基于用户交互,我不是它的真正控制者。如果用户交互的形式是曲折模式,我最终会得到“根本没有检测到用户移动数据”。

  3. 请分享您所了解的技术。

    PS:此示例中提供的数据是特定情况。没有数字将会出现的典型模式,但我们希望所有示例都有一些范围是连续的。我正在寻求的解决方案是通用的。

2 个答案:

答案 0 :(得分:2)

我不知道你想在这个问题上多少努力,但如果你想要理论上的保证, 拓扑持久性似乎很好地适应了你的问题imho。 基本上使用该方法,您可以通过固定比例来过滤局部最大值/最小值 还有一些理论证据表明,如果你抽样的话 从您的函数关闭,然后您使用持久性提取正确的最大数量。 您可以看到这些slides(主要是第7-9页以获得想法)以了解该方法。

基本上,如果你将你的积分作为一个景观并想象从最大高度开始逐渐减少的分水岭,你就会有一些选择。 每个选秀权都有一个时间,它出生的时间是它出现的时间和它死亡的时间,当它与更高的选择合并时。现在,持久性图描绘了每个选择的点,其中x / y坐标是其出生/死亡的时间(假设第一个选择没有死亡并且未显示)。 如果一个选择是全局最大值,那么它将比持久性图中的对角线更远离局部最大值。要删除局部最大值,您必须删除靠近对角线的拾取。您的示例中有四个局部最大值,您可以看到数据的持久性图表(感谢提供数据btw)和两个全局值(第一个选择图未在持久性图中显示): Persistence diagram of your function

如果您对数据进行噪音干扰: enter image description here

您仍将获得一个非常不错的持久性图表,允许您根据需要过滤本地最大值:

enter image description here

请询问您是否需要更多详细信息或参考资料。

答案 1 :(得分:1)

由于你不能决定截止频率,甚至不能决定你想要使用的滤波器,我会实现几个,让用户设置参数。

我想到的第一件事是running average,你可以看到有很多东西要设置,以获得不同的输出。

相关问题