Set-based Similarity Search for Time Series

来源:互联网 发布:淘宝联盟互刷 编辑:程序博客网 时间:2024/04/25 15:38

        这篇论文是关于时间序列相似性搜索的,所谓的时间序列也就是指,与时间相关的序列,比如说一个人的血压,他每时每刻都会有或多或少的变化,随着时间的延续,就形成了一组血压序列。

        时间序列相似性搜索的应用有很多,如医学方面,人在某段时间的各种生理特征值都可以作为时间序列,根据一个人的序列值和已经诊断的病例的序列值比较,可以大致判断人的疾病;类似的可以用来做设备故障的检测;再有就是语音识别。

        一般常用的序列相似性比较的有基于欧式距离的(Euclidean Distance),它的精确度较高,但是要求序列等长度,而且对于噪声比较敏感;第二类方法是基于动态时间规整的(DTW),优点是可以处理非等长序列,允许不同步的点对应计算,由于该方法是依靠动态规划来解决的,因此计算代价比较高。第三类是基于最长公共子序列的(LCSS),优点同样是可以处理非等长序列,允许不同步的点对应计算,缺点同样也是计算代价比较高。下面我们就介绍本篇论文的方法。

  论文主要是把空间划分成等大小的方格,序列中的点会落在对应的方格内,我们就以方格的编号对落在该方格的点建立索引,两条序列的相似性以落在同一个方格内的点的个数作为计算依据。大致思路如下图,有S1S2S3三条序列,查询序列Q。首先用一个倒排表IL记录下各个方格有哪些序列的点落在里面,如17号方格有S2S3经过;再用一个表Intersection记录S1S2S3与查询序列Q有多少落入同一格的点,最终用Jaccard值计算各序列与Q的相似性。其中Jaccard以落入同一个方格的点数和(S∩Q)与两序列长度和(SUQ)的比值计算的。

        

        大致上基于这种方法,文章给出了另一个索引方式,以求能更快的计算交集与并集,如下图。定义一个二维数组Dzone,其中每一行记录一条序列在各个方格中的点的个数,共|序列条数|列。用一个一维数组Qzone记录查询序列在各个方格中的点的个数。之后用后面的公式求得查询序列与任意序列的相似性。
         
        最后论文给出了一个近似解法,即先将整个区域划分为较大的方格,用较小的计算代价过滤掉一些与查询序列相似性较小的序列。然后把区域划分为较小的方格,对剩余的序列进行精确地求解。但这种方法作为一种近似解法,是可能在过滤阶段把原本相似的序列过滤掉的可能。如下图,序列1与查询序列更加相似,但会在近似解法中被过滤掉。

        总结:一开始提到的三种方法都存在这样或那样的缺点,本论文的方法也是存在一些不足。如图所示:(1)对于比较平稳的序列(如绿色序列)本方法比较适用,但是对于波动较大的序列(如红色序列)本方法会有较大误差;(2)本方法也没能很好的处理有噪声的序列(横向第二幅图)。(3)对于序列的水平位移,或者竖直位移,及拉伸的情况(下面两幅图),本方法也不能很好的识别。
        我们可以通过对本方法进行一系列简单的改进,使之可以适应更多情况的判别。如对于噪声较多的序列我们要判断其相似性,可以预先对序列进行降噪处理;假如我们认为水平或垂直位移的序列也是相似的,则可以根据这两条序列的个点的方格编号差值进行计算(平移的序列,各点的编号有一定的关系);对于拉伸的情况,我们则需要进一步观察序列编号之间的关系,在这里我们并没有进行深层次的探讨。

0 0
原创粉丝点击