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/

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