0

我有一个包含 > 100,000 条记录的数据集,其中每条记录都有一个时间戳。

该数据集是从几个“控制器”节点聚合而成的,每个“控制器”节点都从一组子节点收集数据。每个控制器定期收集这些记录(例如,每 5 分钟一次或每 10 分钟一次),并将时间戳应用于记录的 是控制器。


例如:

控制器一可能有 20 条记录的时间戳t,23 条记录的时间戳t + 5 minutes,33 条记录t + 10 minutes

控制器 2 可能有 30 条记录的时间戳记(t + 2 minutes) + 10 minutes,32 条记录的时间戳记(t + 2 minutes) + 20 minutes,41 条记录的时间戳记(t + 2 minutes) + 30 minutes等等。


现在假设您拥有的唯一信息是所有时间戳的集合以及每个时间戳出现的记录数。也就是说,你不知道i)哪个控制器产生了哪些记录ii)集,每个控制器的收集间隔或控制器ii)的总数。是否有一种算法可以将所有时间戳的集合分解为单独的子集,使得每个给定子集的连续(有序)元素之间的差异差异非常接近 0,而将任何元素从一个子集添加i到另一个子j集会增加这个方差?请记住,对于这个数据集,单个控制器的“周期性”可能会因 CPU 计时/网络延迟等原因波动 +/- 几秒。

我在这里的最终目标是确定a)有多少个控制器以及b)每个控制器的采样间隔。到目前为止,我一直在考虑周期函数方面的问题,所以也许该领域的一些分解方法可能有用。

另外一点是我不需要知道每个记录来自哪个控制器,我只需要知道每个控制器的采样间隔。因此,例如,如果有两个控制器都在 time 开始采样u,一个以 5 分钟间隔采样,另一个以 50 分钟间隔采样,则很难在 50 分钟标记处将两者分开,因为 5 是一个因素50。这没关系,只要我能获得足够的信息来计算每个控制器的间隔,尽管这些偶尔重叠。

4

1 回答 1

1

一种基本方法是对数据集执行 FFT 分解(或者,如果您喜欢,可以使用周期图)并在结果频谱中寻找峰值。这将为您提供控制器周期的粗略近似值,甚至可以为您提供其数量的估计值(通过查看峰值的高度,它可以告诉您记录了多少条记录)。

于 2013-02-14T04:09:14.643 回答