Algorithm 将时间戳集分解为时间间隔均匀的子集的算法

Algorithm 将时间戳集分解为时间间隔均匀的子集的算法,algorithm,Algorithm,我有一个包含>100000条记录的数据集,其中每条记录都有一个时间戳 此数据集已从多个“控制器”节点聚合,每个节点从一组子节点收集其数据。每个控制器定期收集这些记录(例如,每5分钟或每10分钟收集一次),并由控制器对记录应用时间戳 例如: 控制器1可能有20条记录在时间t上有时间戳,23条记录在时间t+5分钟上有时间戳,33条记录在时间t+10分钟上有时间戳 控制器2可能有30条记录在时间(t+2分钟)+10分钟,32条记录在时间(t+2分钟)+20分钟,41条记录在时间(t+2分钟)+30分

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

此数据集已从多个“控制器”节点聚合,每个节点从一组子节点收集其数据。每个控制器定期收集这些记录(例如,每5分钟或每10分钟收集一次),并由控制器对记录应用时间戳


例如:

控制器1可能有20条记录在时间
t
上有时间戳,23条记录在时间
t+5分钟上有时间戳,33条记录在时间
t+10分钟上有时间戳

控制器2可能有30条记录在时间
(t+2分钟)+10分钟
,32条记录在时间
(t+2分钟)+20分钟
,41条记录在时间
(t+2分钟)+30分钟
等等


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

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


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

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

Hm,或者您可以在数据集中记录控制器ID;)你必须有更多的约束,并且对你的目标函数(要优化的东西)更加具体。例如,如果我只创建一个无限数量的控制器,在特定时间记录一次,然后再也不记录,会怎么样?在这种情况下,方差将为零。@nneonneo很遗憾,我无法控制数据源。你是对的。限制。在这种情况下,控制器的数量可能很小,比如说,记录本身是否有任何东西可以揭示控制器的身份?可能每个控制器的值都不同?在这种情况下,您可以尝试k-means,根据时间戳以外的其他内容来梳理日志。@nneonneo目前,除了时间戳模式之外,没有任何明显的东西可以暗示控制器的分离。但这并不意味着它不在那里。如果按时间戳分解证明不成功,我将深入挖掘。