dtw-package 简介
dtw-package 是 R语言对动态时间规整(DTW)算法的封装。DTW 计算了将 一个时序(query) 与 另一个时序(reference)的整个或部分序列 进行匹配时 时间轴上的扭曲。该算法会输出:① 两个序列经过匹配后的剩余累积距离(remaining cumulative distance)、② 点与点之间的对应关系,即 匹配函数(warping function)。
在 dtw-package 中:dtw() 函数是整个包的主要入口,dtwDist() 用于在一个时序集合上迭代 dtw,plot.dtw() 是 DTW 对象的绘图方法;dtwWindowingFunctions() 定义了全局限制,stepPattern() 定义了局部限制;proxy::dist()、analogue::distance()、 vegan::vegdist() 等函数可用于自定义构建距离函数和局部代价矩阵。
aami
PhysioBank 是一个记录生理信号的数据库。aami 的格式是 Time-series objects (class ts)。
countPaths
countPaths(d, debug = FALSE) 。其中,d 表示 class dtw 的一个对象,debug 表示是否需要返回中间结果。
该函数会计算当前匹配问题(包括限制)中所有可能的匹配路径的数量。例子:
注意事项:① 路径数量会随着问题大小呈指数型增长。② 使用 windowing 函数时,返回值可能是一个近似结果。③ debug=TRUE 时,函数会返回一个用于计算的矩阵;debug = FALSE 时,函数返回值只是路径数量。
dtw
该函数是 dtw-package 包的主要入口,用于计算 2 个时间序列之间的动态时间规整,并找到最佳匹配。
dtw 函数参数
x | query 向量,或 local cost matrix (局部代价函数) | |
y | reference 向量 | |
dist.method | 两个点之间的距离函数 / 局部距离函数。 若该参数是一个字符串,则将 x、y 与 该字符串对应的方法 一起传给 proxy 包中的 proxy::dist() 函数。 若该参数是一个输入为两个参数的函数,它会对所有 x[i] 和 y[j] 重复调用,从而构建局部代价矩阵。 多变量时序 以及 其他任意距离指标,都可通过提供一个预先计算好的 local cost matrix 来处理,该矩阵的元素 [i,j] 表示 x[i] 和 y[j] 之间的距离。距离矩阵 拥有 n=length(x) 行 和 m=length(y) 列。 | |
step.pattern | 一个 stepPattern 对象,用于描述 cost 所允许的 local warping steps(局部限制)。 具体可见 stepPattern() 。 | |
window.type | windowing 函数,用于控制匹配路径的范围(全局限制)。 可以输入一些特定的字符串: " none " : 默认值,无限制。 " itakura " : Itakura parallelogram " sakoechiba " : 围绕主对角线(main diagonal)的一个 band " slantedband " : 围绕斜对角线(slanted diagonal)的一个 band 也可以输入一个函数。dtwWindowingFunctions() 中包括一些现有的函数。 | |
keep.internals | 保留 累积代价矩阵、输入以及其他内部结构 | |
distance.only | 仅计算距离(没有 backtrack,速度更快) | |
open.begin | 传给 window.type 的额外参数。 | |
open.end | 实施 open-ended alignment。 Open-end DTW 由 Mori (2006)、Sakoe (1979) 等人提出。 将所有的 query 与 reference 的 头部 进行最佳匹配。 |
注:is.dtw(d) 函数用于 检验其参数 d 是否是一个 dtw 类,d 可以是一个任意的 R 对象。
dtw 类 的 对象属性
distance | 最小全局距离(没有标准化) |
normalizedDistance | 若已知 chosen step pattern:根据 path length,对 distance 进行标准化。 |
N | query 的长度 |
M | reference 的长度 |
call | 创建本对象的函数调用 |
index1 | x(query) 中 所匹配的 下标 |
index2 | y(reference) 中 被映射的 下标 |
stepPattern | 用于计算的 stepPattern 对象 |
jmin | 若 open.end=TRUE:reference 中匹配的最后一个元素 |
directionMatrix | 若 keep.internals=TRUE:在每个 alignment pair 上要走的方向(在所选的 step pattern 中 产生整数下标的规则) |
stepsTaken | 从 alignment 的开始到结束 所走的 steps 的 一个 list(在所选的 step pattern 中的 整数下标)。 |
index1s | 与 index1、index2 一样, 但 排除了 multi-step patterns 中的中间步骤 |
index2s | |
costMatrix | 若 keep.internals=TRUE:累积代价矩阵 |
query | 若 keep.internals=TRUE 且 作为 x 和 y 参数传递: query 和 reference 时间序列 |
reference |
注:不论是输入还是输出,在 代价矩阵(cost matrix)中,query 元素按行排列(first index)、reference 元素按列排列(second index);它们按照惯例打印,即下标向下和向右增加。
参考文献:
1. Toni Giorgino. Computing and Visualizing Dynamic Time Warping Alignments in R: The dtw Package. Journal of Statistical Software, 31(7), 1-24. doi: 10.18637/jss.v031.i07
2. Tormene, P.; Giorgino, T.; Quaglini, S. & Stefanelli, M. Matching incomplete time series with dynamic time warping: an algorithm and an application to post-stroke rehabilitation. Artif Intell Med, 2009, 45, 11-34. doi: 10.1016/j.artmed.2008.11.007
3. Sakoe, H.; Chiba, S., Dynamic programming algorithm optimization for spoken word recognition, Acoustics, Speech, and Signal Processing, IEEE Transactions on , vol.26, no.1, pp. 43-49, Feb 1978. doi: 10.1109/TASSP.1978.1163055
4. Mori, A.; Uchida, S.; Kurazume, R.; Taniguchi, R.; Hasegawa, T. & Sakoe, H. Early Recognition and Prediction of Gestures Proc. 18th International Conference on Pattern Recognition ICPR 2006, 2006, 3, 560-563 doi: 10.1109/ICPR.2006.467
5. Sakoe, H. Two-level DP-matching–A dynamic programming-based pattern matching algorithm for connected word recognition Acoustics, Speech, and Signal Processing, IEEE Transactions on, 1979, 27, 588-595 doi: 10.1109/TASSP.1979.1163310
6. Rabiner L, Rosenberg A, Levinson S (1978). Considerations in dynamic time warping algorithms for discrete word recognition. IEEE Trans. Acoust., Speech, Signal Process., 26(6), 575-582. doi: 10.1109/TASSP.1978.1163164
7. Muller M. Dynamic Time Warping in Information Retrieval for Music and Motion. Springer Berlin Heidelberg; 2007. p. 69-84. doi: 10.1007/9783540740483_4
dtwDist
dtwDist(mx, my = mx, ...) 用于计算一组单变量时序之间的 dissimilarity 矩阵。