TICC- TimeSeries Analyze

TICC

  Toeplitz Inverse Covariance-based Clustering (TICC).
  TICC是一個用於高效分段和聚類多變量時間序列的python求解器。
  TICC的輸入是T*N數據矩陣、正則化參數“lambda”和平滑度參數“β”作爲輸入,窗口大小“w”和簇數“k”。
  TICC將時間戳分割成每個分段。
  它通過運行EM算法來實現,其中TICC使用DP算法交替地分配聚類並通過解決Toeplitz逆協方差估計問題來更新聚類參數。 細節可以在論文中找到。

Download & Setup

  Download the source code, by running in the terminal:

            git clone https://github.com/davidhallac/TICC.git

Files

TICC包具有以下重要文件:TICC.py
運行TICC算法的一個實例。

參數

lambda_parameter:lambda正則化參數,如本文所述

beta:beta參數控制輸出的平滑度,如本文所述

number_of_cluster:時間戳聚集到的集羣“k”的數量

window_size:滑動窗口的大小

prefix_string:輸出文件的位置

threhsold:用於生成交叉時間圖。 不用於TICC算法

input_file:T*n的數據文件的位置。

maxIters:TICC算法的最大迭代次數

return

爲每個聚類逆方差保存一個.csv文件
將具有每個時間戳的分配列表的.csv文件保存到’k’集羣
如果指定了用於計算混淆矩陣的正確方法,則打印二進制精度


    car.py

  在汽車示例(案例研究)中運行TICC算法的實例,如本文所述。 參數與TICC示例相同。 注意:這個文件對於汽車的例子特別有用,對汽車數據集進行一些特殊的輸入數據處理。 對於運行TICC算法的實例,請使用TICC.py或TICC_solver.py。


    network_accuracy.py

Runs an instance of TICC algorithm on the T-by-n data matrix as described in the paper. Used for generating the network accuracy table as shown in the paper. The parameters are the same as the TICC example.
在T-by-n數據矩陣上運行TICC算法的實例,如本文所述。
用於生成網絡精度表,如本文所示。 參數與TICC示例相同。
return
爲每個聚類反協方差保存一個.csv文件
將具有每個時間戳的分配列表的.csv文件保存到’k’集羣
打印每個集羣的網絡F1分數,假設“真實”網絡按文件中指定的方式存儲。


    generate_synthetic_data.py

使用本文中描述的方法生成數據。
數據從“k”個簇生成。 ‘T’時間標記分爲段,相應簇的段長度分別在’break_points’數組和’seg_ids’列表中提及。所以段’i’的長度= break_points [i + 1] - break_points [i]。
參數
window_size:滑動窗口的大小
number_of_sensors:輸出T-by-n 數據矩陣的維數’n’。
sparsity_inv_matrix:每個集羣的MRF的稀疏性。每個簇的逆協方差矩陣的稀疏度。
rand_seed:用於生成隨機數的隨機種子
number_of_cluster:生成時間戳的集羣“k”的數量
cluster_ids:生成段的相應簇ID。
break_points:段的終點。所以段’i’的長度= break_points [i + 1] - break_points [i]
save_inverse_covariances:Boolean。指示每個羣集的計算的逆協方差是否應保存爲“逆協方差簇=羣集#.csv”
out_file_name:應存儲.csv數據矩陣的文件名。
return
使用數據矩陣T-by-n保存.csv文件
如果save_inverse_covariances標誌爲True,則保存每個羣集的每個逆協方差的.csv文件。


    scalability_test.py

運行可擴展性測試的實例。 打印每個步驟所需的時間:E步(DP算法)和M步(使用Toeplitz Graphical Lasso進行優化)。

參數
number_of_cluster:時間戳聚集到的集羣“k”的數量
window_size:滑動窗口的大小
input_file:T-by-n的數據文件的位置。
maxIters:TICC算法的最大迭代次數
output
打印出TICC算法中每個步驟所花費的時間。 該函數用於在本文中生成可擴展性圖。


    TICC_solver.py

TICC算法的求解器。包含所有重要的功能。文件中的求解函數可以運行TICC算法的一個實例。解決函數的細節如下:

參數
window_size:滑動窗口的大小
maxIters:TICC算法在協調之前的最大迭代次數。默認值爲100。
lambda_parameter:每個集羣的MRF的稀疏度。每個簇的逆協方差矩陣的稀疏度。
beta:TICC算法中使用的切換懲罰。與本文中描述的beta參數相同。
number_of_clusters:生成時間戳的集羣“k”的數量
threshold:用於可視化的閾值參數。不是TICC算法的一部分。
input_file:大小爲T-by-n的數據矩陣的位置。
prefix_string:要保存輸出的文件夾的位置。
write_out_file:Boolean。指示每個羣集的計算的逆協方差是否應保存爲“逆協方差簇=羣集#.csv”
return
返回每個時間點的一組集羣分配。
返回一個帶有cluster_id(從0到k-1)的密鑰的字典,並且這些值是集羣MRF。

使用示例

生成數據。如果您已經擁有數據矩陣,請跳過此步驟。

爲了生成本文中提到的數據,請使用generate_synthetic_data.py。

更改break_points和seg_ids的參數,以定義要生成的時間序列的時間模式。

使用sparsity_inv_matrix來定義每個集羣的MRF的稀疏度。還可以根據您的應用適當地設置window_size,number_of_sensors。然後運行以下命令:

python generate_synthetic_data.py

接下來使用TICC.py文件在數據矩陣上運行TICC算法的實例。

TICC.py方法應該使用以下參數進行初始化:平滑度參數’beta’,稀疏正則化’lambda’,窗口大小,收斂前的最大迭代次數,聚類數,輸入和輸出文件的位置。在TICC.py文件中更新後,運行以下命令:

python TICC.py

爲了生成網絡精度圖,請使用Network.py文件。在network_accuracy.py文件中添加與上述相同的參數,並將真正的逆協方差保存爲與network_accuracy.py文件相同的目錄中的”Inverse Covariance cluster = ‘cluster#’.csv”。

下一個運行:

python network_accuracy.py

對於運行可擴展性實驗,請使用scalability_test.py文件。將文件中的參數設置爲與TICC.py文件相同,並運行以下命令:

python scalability_test.py

對於使用求解器,對於您的數據,使用情況如下所示。輸入參數,如本文所述。根據應用程序的需要,使用cluster_assignments和cluster_MRF的命令輸出。

import TICC_solver as TICC
(cluster_assignment, cluster_MRFs) = TICC.solve(window_size = 10,number_of_clusters = 5, lambda_parameter = 11e-2, beta = 400, maxIters = 100, threshold = 2e-5, write_out_file = False, input_file = "data.csv", prefix_string = "output_folder/"):

References

TICC paper : http://stanford.edu/~hallac/TICC.pdf
Code and solver are available at http://snap.stanford.edu/ticc/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章