Coggle数据科学 | 小白学时间序列:MASS相似度计算

本文来源公众号“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 !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值