【时间序列】时间序列分割聚类算法TICC
Hallac, David, et al. “Toeplitz Inverse Covariance-Based Clustering of Multivariate Time Series Data.” KDD. (2017).
本文是2017年KDD最佳论文,解决了高维时间信号的自动分割聚类问题,并给出了基于python的源码(戳这里下载)。
核心思想
在实际问题中有大量随时间变化的高维信号。
- 驾驶汽车:油门,刹车,地理位置,空调,门窗…
- 支付软件:用户的登陆,转入,提现,消费…
在没有标定的情况下,想发掘这些数据中隐藏的信息,即将信号划分为若干可能的状态,并标记每条信号的各段。
- 驾驶汽车:起步,上坡,超车,拥堵…
- 支付软件:用户发薪,过节,打新股…
这就需要同时对数据进行两种操作:
- 将各条数据进行分割
- 将分割结果各个聚类
传统聚类方法考察信号各维度的绝对值,以确定信号间的相似度;
本文算法考察信号各维度之间的相关性,以确定信号间的相似度。
建模
信号段
设有时间长度为
实际应用中,会有来自多个用户的多段原始信号。这里可以直接将它们连缀成一个向量。如果需要考虑绝对时刻,则可以将时间戳也作为一维信号增补上去。
其中每一时刻的信号
为了便于考察信号相关性,以每一时刻为基准,向前截取宽度为
信号段
类别信息
预期将所有信号段划分为
举例:有信号段ABAAC,
n=5 ,K=3 。P1=[0,2,3],P2=[1],P3=[4]
认为每一类信号段服从0均值高斯分布,其协方差逆矩阵为
这里假设信号是非时变的,不同时刻信号之间的关系只和相对时间差有关;交换pq,其协方差逆阵互为转置。
换句话说,
每条斜线上的子矩阵相同;对角对称斜线的子矩阵互为转置。
求解
我们需要轮流求解两个问题
- 给定
- 给定
信号段分类Pj
给定
另外考虑信号的连续性:相连信号段不同类时施加惩罚
两个代价构成经典的流水线调度问题,可以使用BP算法求解。
其核心思路是:在给第i个信号段分类时,只需考虑第i-1信号段分为各类时的代价即可。
逆协方差阵Θj
给定一类中所有信号段集合
各类可以并行计算,故书写时省去下标j。
求和号内第一项和
求和号内第二项可以写成迹的形式:
其中
另外添加一个正则项:
其中
根据前述,要求
把问题稍作变换为如下形式,可以用ADMM2算法快速求解:
实验
正确率
使用模拟数据:信号维度
试验中直接固定
可以看到,本文的TICC算法(第一行)有十分明显的优势。
TICC算法(蓝方块)聚类所需的样本数也较少。
可扩展性
使用
真实案例
给出了汽车行驶案例,大家体会一下。
传感器
- 刹车状态
- 前向加速度
- 侧向加速度
- 方向盘角度
- 速度
- 发动机转速
- 油门状态
每一组观测时长1小时,每隔0.1秒采样一次。共有36000组观测。
使用的窗口
使用BIC方法3发现的最佳聚类数量为
- 此处待推导。思路:证明
XTiΘXi 是S⋅Θ 的特征值。其总和为该矩阵的迹。 ↩ - S. Boyd, N. Parikh, E. Chu, B. Peleato, and J. Eckstein. Distributed optimization and statistical learning via the alternating direction method of multipliers. Foundations and Trends in Machine Learning, 2011. ↩
- T. Hastie, R. Tibshirani, and J. Friedman. The Elements of Statistical Learning. Springer, 2009. ↩