聚类相似的时间序列?

时间:2019-10-12 20:16:20

标签: python machine-learning time-series cluster-analysis dtw

我有10-20k个不同的时间序列(24维数据-一天中的每个小时为一列)之间的某个地方,我对聚类的时间序列表现出大致相同的活动模式感兴趣。

我最初开始实施动态时间规整(DTW),原因是:

  1. 并非我所有的时间序列都完全对齐
  2. 出于我的目的,两个略有偏移的时间序列应被视为相似
  3. 形状相同但比例不同的两个时间序列应视为相似

我对DTW遇到的唯一问题是它似乎无法很好地缩放-在500x500距离矩阵上fastdtw花费了大约30分钟。

还有哪些其他方法可以帮助我满足条件2和3?

1 个答案:

答案 0 :(得分:5)

如果将时间序列分解为趋势,季节性和残差,ARIMA可以胜任。之后,使用K最近邻算法。但是,基本上由于ARIMA,计算成本可能会很高。

在ARIMA中:

DefaultParameters

作为@Sushant评论的补充,您可以分解时间序列,并可以检查4个图中的一个或全部的相似性:数据,季节性,趋势和残差。

source code

然后是一个数据示例:

restClient.DefaultParameters.Add(p);

ARIMA

xUnit

您将获得相似之处:

from statsmodels.tsa.arima_model import ARIMA

model0 = ARIMA(X, dates=None,order=(2,1,0))
model1 = model0.fit(disp=1)

decomposition = seasonal_decompose(np.array(X).reshape(len(X),),freq=100)
### insert your data seasonality in 'freq'

trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid