【发布时间】:2013-07-09 22:06:48
【问题描述】:
一直在探索对时间序列数据进行聚类的不同选项:
两个不同的事件 - 比如 1,2
事件时间(纳米)
- 1 1e3
- 1 6e3
- 1 8e3
- 2 12e3
- 1 54e3
- 1 58e3
- 1 62e3
- 1 67e3
- 1 70e3
- 1 75e3
- 2 103e3
- 2 108e3
- 2 114e3
- 等等等等
即,时间是随机的(指数分布),并且记录事件 1 或事件 2。录音以纳秒为单位。数据集很大,可达15-20 mts,有数百万个点
这些事件是相关的,因此可能会发生一堆 2 或 1。例如,会有小片段(1 毫秒长的片段,两种类型都有 100-200 个事件)。在某些情况下,将发生一系列需要丢弃的事件类型。 大多数时候,只记录一个或几个事件,这只是噪音(>80% 的数据)。
这显然是一个时间序列数据,带有事件类型信息。
我想应用聚类方法来识别有意义的小片段。我正在使用 Matlab 并尝试研究诸如 DBSCAN、k-means 之类的选项(因为我不知道先验聚类的数量,所以没用)等,
(记录时间本身可以被视为“距离”,因为它们是连续的块。即,dist(x1,x2) = abs(x2(2) - x1(2)) 如果 x 是(事件,时间) ; 此外,在时间 = 10.2 到 10.23 秒之间发生的一系列有意义的事件与任何其他片段都没有关系。即,聚类仅用于“识别”短片段(预计在整个数据集中只有几 10000 个)
任何帮助将不胜感激!谢谢。
【问题讨论】:
-
你看过
clusterdata()吗? -
是的。由于庞大的数据集导致内存不足,尽管我可以迭代更小的长度)。但我不确定如何只提取我想要的相关部分。
-
您是否尝试过 savememory 选项?另外,请详细说明“有意义的事件顺序”;从 cmets 到 Hugh 的回答,您似乎只根据时间戳进行区分,这已经降低了问题的维度,即仅集群时间。
-
是的,对于整个集合,即使使用 savememory 选项,它也会耗尽内存(可以理解)。这不是主要问题,因为我可以分析较长时间序列的较短片段。
-
理想情况下,有意义的片段的定义包括时间戳和事件类型。一件好的作品将有两个事件的比例,并且事件会在很短的时间间隔内发生。录音中有很多需要过滤的噪音。关于噪声的一些观察结果是:可能有痕迹,其中大多数只有 1 个事件在快速间隔内也发生(如良好的数据)。这种嘈杂的轨迹也可能在一个好的轨迹内,也可能只有几个点(例如,200 点的好轨迹中有 10 个嘈杂的点)。因此,将发生在时间上的事件类型聚集在一起的想法。
标签: matlab time-series cluster-analysis