【时间序列】时间序列分割聚类算法TICC

Hallac, David, et al. “Toeplitz Inverse Covariance-Based Clustering of Multivariate Time Series Data.” KDD. (2017).

本文是2017年KDD最佳论文,解决了高维时间信号的自动分割聚类问题,并给出了基于python的源码(戳这里下载)。

核心思想

在实际问题中有大量随时间变化的高维信号。
- 驾驶汽车:油门,刹车,地理位置,空调,门窗…
- 支付软件:用户的登陆,转入,提现,消费…

在没有标定的情况下,想发掘这些数据中隐藏的信息,即将信号划分为若干可能的状态,并标记每条信号的各段。
- 驾驶汽车:起步,上坡,超车,拥堵…
- 支付软件:用户发薪,过节,打新股…

这就需要同时对数据进行两种操作:
- 将各条数据进行分割
- 将分割结果各个聚类

传统聚类方法考察信号各维度的绝对值,以确定信号间的相似度;
本文算法考察信号各维度之间的相关性,以确定信号间的相似度。

建模

信号段

设有时间长度为 T 的原始信号

x=[x1,x2...xT]

实际应用中,会有来自多个用户的多段原始信号。这里可以直接将它们连缀成一个向量。如果需要考虑绝对时刻,则可以将时间戳也作为一维信号增补上去。

其中每一时刻的信号 xi n 维向量。

为了便于考察信号相关性,以每一时刻为基准,向前截取宽度为 w 的一段:

Xi=[xiw+1,...xi1,xi]

i=1,2...T

信号段 Xi nw 维向量。

类别信息

预期将所有信号段划分为 K 类,属于第 j 类的信号段序号集合记为 Pj,j=1,2...K

举例:有信号段ABAAC, n=5 , K=3 P1=[0,2,3],P2=[1],P3=[4]

认为每一类信号段服从0均值高斯分布,其协方差逆矩阵为 Θj,j=1,2...K 。这是一个 nw×nw 的矩阵。

Θi w×w 个子矩阵组成,每个子矩阵的尺寸为 n×n 。位置 pq 的子矩阵描述时刻 p 和时刻 q 之间, n 个维度之间的协方差逆矩阵。

[0w+1,...p,...q,...0]

这里假设信号是非时变的,不同时刻信号之间的关系 只和相对时间差有关;交换pq,其 协方差逆阵互为转置

换句话说, Θj 是个分块Toeplitz矩阵:
【时间序列】时间序列分割聚类算法TICC_第1张图片
每条斜线上的子矩阵相同;对角对称斜线的子矩阵互为转置。

求解

我们需要轮流求解两个问题
- 给定 Θj ,求解信号段分类方法 Pj
- 给定 Pj ,求解各类逆协方差阵 Θj

信号段分类 Pj

给定 Θj ,把信号段 Xi 归入 j 类的代价可以负对数似然表示:

E(iPj)=ll(i,j)=log[N(Xi;0,Θ1j)]

=log[det(Θj)1/2exp[12XTiΘjXi]]=logdet(Θj)+XTiΘjXi

另外考虑信号的连续性:相连信号段不同类时施加惩罚 β

E(i,i+1)={0βi,i+1i,i+1

两个代价构成经典的流水线调度问题,可以使用BP算法求解。
【时间序列】时间序列分割聚类算法TICC_第2张图片
其核心思路是:在给第i个信号段分类时,只需考虑第i-1信号段分为各类时的代价即可。

逆协方差阵 Θj

给定一类中所有信号段集合 Pj ,通过最小化其负对数似然总和,可以求解 Θj
各类可以并行计算,故书写时省去下标j。

E(Θ)=iPll(Xi,Θ)=iPlogdet(Θ)+XTiΘXi=E1+E2

求和号内第一项和 j 无关, || 表示集合内元素计数:

E1=|Pi|logdet(Θ)

求和号内第二项可以写成迹的形式:

E2=tr(iPXTiXi)=|Pi|tr(SΘ)

其中 S 是由 Pj 中所有信号段计算得到的当前协方差阵。1

另外添加一个正则项:

E3=||λΘ||1

其中 λ 为权重矩阵, 表示矩阵对位相乘。

根据前述,要求 Θ 是分块Toeplitz矩阵。

把问题稍作变换为如下形式,可以用ADMM2算法快速求解:

minimize logdetΘ+tr(SΘ)+|λZ||1

subject to Θ=Z,ZToeplitz

实验

正确率

使用模拟数据:信号维度 n=5 ,窗口宽度 w=5 。聚类数量 K 从2到4不等。每个实验包含 100K 个样本。
试验中直接固定 K 为真值。使用所有聚类的F1 score均值作为聚类质量评估。

可以看到,本文的TICC算法(第一行)有十分明显的优势。
【时间序列】时间序列分割聚类算法TICC_第3张图片

TICC算法(蓝方块)聚类所需的样本数也较少。
【时间序列】时间序列分割聚类算法TICC_第4张图片

可扩展性

使用 n=50 的高维样本,聚类数量 K=5 ,窗口宽度 w=3 。下图示出,当信号长度增加时,聚类时间的增长基本为线性。
【时间序列】时间序列分割聚类算法TICC_第5张图片

真实案例

给出了汽车行驶案例,大家体会一下。

传感器 n=7

  • 刹车状态
  • 前向加速度
  • 侧向加速度
  • 方向盘角度
  • 速度
  • 发动机转速
  • 油门状态

每一组观测时长1小时,每隔0.1秒采样一次。共有36000组观测。

使用的窗口 w=10 时长1秒。

使用BIC方法3发现的最佳聚类数量为 K=5 。人工观察,它们对应于如下状态:
【时间序列】时间序列分割聚类算法TICC_第6张图片


  1. 此处待推导。思路:证明 XTiΘXi SΘ 的特征值。其总和为该矩阵的迹。 ↩
  2. 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. ↩
  3. T. Hastie, R. Tibshirani, and J. Friedman. The Elements of Statistical Learning. Springer, 2009. ↩

你可能感兴趣的:(论文解读)