本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。
原文链接:小白学时间序列:MASS相似度计算
时间序列是按时间顺序排列的观测数据序列。给定一个查询时间序列,计算该查询与时间序列中所有可能子序列的相似性或距离,构成了查询的距离剖面(Distance Profile)。距离剖面的计算是时间序列数据挖掘中的基本任务,广泛应用于许多现有工作中。
unsetunset什么是MASS?unsetunset
MASS(Mueen's Algorithm for Similarity Search)是一种在z标准化欧几里得距离下高效计算距离剖面的算法。MASS被认为是许多数据挖掘工作中的有用工具,但其日益高效的版本缺乏完整的文档记录。
MASS在预测中的应用主要是通过将近期观测数据与历史数据进行比较,识别相似的过去场景,并用于预测未来状态。
基本定义
时间序列(Time Series)
子序列(Subsequence)
查询(Query)
距离剖面(Distance Profile)
z标准化欧几里得距离
距离剖面的计算
MASS原理
实验表明,MASS V3在所有指标(时间复杂度、运行时间和FLOPs)上均表现最佳。MASS V4虽然FLOPs较多,但在特定硬件上具有潜力。
MASS实现
import numpy as np
from scipy import stats
import pandas as pd
import math
def movstd(a,window):
left= window[0]
right = window[1]
result = []
for i in range(len(a)):
r=0
if i >= left and i +right<len(a):
r=np.std(a[i - left:i + right+1],ddof=1)
elif i < left:
r= np.std(a[:i + right+1],ddof=1)
elif i + right >= len(a):
r= np.std(a[i - left:],ddof=1)
else:
r=np.std(a[:],ddof=1)
result.append(0 if math.isnan(r) else r)
return result
def findInT(query,target):
m = len(query);
n = len(target);
Q = stats.zscore(query,ddof=1)#zNorm ???
stdv = movstd(target,(0,m-1))
Q= np.append(Q[::-1],np.zeros(n-m))
dots =np.convolve(target,Q)
dist =2 * (m - (dots[m-1:n])/ stdv[0:n - m +1])
return np.sqrt(dist)
qry = np.array([1, 10, 5]);
tgt = [4,8,6,-1,-2,-3,-1,3,4,5];
output=findInT(qry,tgt)
THE END !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。