2013-02-14 62 views
0

我有一個包含> 100,000條記錄的數據集,其中每條記錄都有一個時間戳記。將時間戳集合分解爲時間間隔均勻的子集的算法

此數據集已從多個「控制器」節點彙總而來,每個「控制器」節點都從一組子節點收集其數據。每個控制器週期性地收集這些記錄(例如,每5分鐘一次或每10分鐘一次),並且是將時間戳應用於記錄的控制器。


E.g:

控制器的一個可能有20個記錄在時間t時戳,共有23條記錄在時間t + 10 minutes時間戳的時刻t + 5 minutes,33條記錄。

控制器二可能在時間(t + 2 minutes) + 10 minutes時間戳有30個記錄,時間戳記錄爲32個記錄(t + 2 minutes) + 20 minutes,41個記錄在時間(t + 2 minutes) + 30 minutes等時間戳記等。


現在假設你擁有的唯一信息是集所有的時間標記和多條記錄怎麼出現在每個時間戳的計數。也就是說,你不知道i)哪一組記錄是由哪個控制器產生的,ii)是每個控制器的採集間隔或控制器總數的ii)。是否有一種算法可以將所有時間戳的集合分解爲單個子集,使得每個給定子集的連續(有序)元素之間的差異變化非常接近0,而將來自一個子集i的任何元素添加到另一個子集j增加這種差異?請記住,對於此數據集,由於CPU時序/網絡延遲等原因,單個控制器的「週期性」可能會波動+/-數秒。

我的最終目標是建立a)有多少個控制器,每個控制器的採樣間隔爲b)。到目前爲止,我一直在考慮周期函數的問題,所以也許有一些可能有用的分解方法。

另外一點是我不需要知道哪個控制器的每條記錄都來自我只需要知道每個控制器的採樣間隔。所以例如如果有兩個控制器在時間u開始採樣,一個以5分鐘間隔採樣一個,另一個以50分鐘間隔採樣,那麼很難在50分鐘標記處將兩者分開,因爲5是因子50.這並不重要,只要我能夠獲得足夠的信息來計算每個控制器的間隔,儘管偶爾會有這些重疊。

+0

嗯,或者你可以在數據集中記錄控制器ID;) – nneonneo 2013-02-14 04:02:17

+0

你必須有更多的約束,並且要更具體地說明你的目標函數(要優化的東西)。例如,如果我只是讓無限數量的控制器在特定時間記錄一次,然後再次不再記錄呢?在這種情況下,方差將爲零。 – nneonneo 2013-02-14 04:05:36

+0

@nneonneo不幸的是,我無法控制數據源。你是對的。限制。在這種情況下,控制器的數量可能很小,例如<= 25,並且猜測間隔可能會在幾分鐘內達到最多約一個小時。這是一個跨越幾個星期的蹤跡。 – 2013-02-14 04:11:44

回答

1

一個基本的方法是對數據集進行FFT分解(或者,如果你覺得奇怪,是週期圖)並在結果頻譜中尋找峯值。這會給你一個控制器週期的粗略近似值,甚至可以給你估計它們的數量(通過查看峯值的高度,它可以告訴你有多少記錄被記錄)。