了解动态时间扭曲

时间:2014-09-09 02:10:57

标签: r machine-learning time-series

我们希望将dtw库用于R,以便将某些时间序列数据缩小并扩展到标准长度。

考虑三个具有等效列的时间序列。 moref的长度(行)为105,mobig为130,mosmall为100.我们希望将mobigmosmall投影到105的长度。

moref <- good_list[[2]]
mobig <- good_list[[1]]
mosmall <- good_list[[3]]

因此,我们计算两个路线。

ali1 <- dtw(mobig, moref)
ali2 <- dtw(mosmall, moref)

如果我们打印出对齐,结果是:

DTW alignment object
 Alignment size (query x reference): 130 x 105
 Call: dtw(x = mobig, y = moref)
DTW alignment object
 Alignment size (query x reference): 100 x 105
 Call: dtw(x = mosmall, y = moref)

那么我们想要的是什么?根据我的理解,我们需要使用变形函数ali1$index1ali1$index2来缩小或扩展时间序列。但是,如果我们调用以下命令

length(ali1$index1)
length(ali2$index1)
length(ali1$index2)
length(ali2$index2)

结果是

[1] 198
[1] 162
[1] 198
[1] 162

这些是带索引的向量(可能是指其他向量)。我们可以使用哪一个进行映射?它们不是很长吗?

1 个答案:

答案 0 :(得分:4)

首先,我们需要同意index1index2是两个长度相同的向量,它们将查询/输入数据映射到引用/存储数据,反之亦然。

由于您没有提供任何数据。这是一些虚拟数据,可以给人们一个想法。

# Reference data is the template that we use as reference. 
# say perfect pronunciation from CNN
data_reference <- 1:10
# Query data is the input data that we want to map to our reference
# say random youtube audio 
data_query <- seq(1,10,0.5) + rnorm(19)
library(dtw)
alignment <- dtw(x=data_query, y=data_reference, keep=TRUE)
alignment$index1
alignment$index2
lcm <- alignment$costMatrix
image(x=1:nrow(lcm), y=1:ncol(lcm), lcm)
plot(alignment, type="threeway")

以下是输出:

enter image description here enter image description here

> alignment$index1
 [1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 13 14 14 15 16 17 18 19
> alignment$index2
 [1]  1  1  1  2  2  3  3  4  5  6  6  6  6  6  7  8  9  9  9  9 10 10

基本上,从index1到index2的映射是如何将输入数据映射到参考数据。

即。输入数据的第10个数据点已与模板中的第6个数据点匹配。

  

index1:查询的变形函数φx(k)

     

index2:参考的变形函数φy(k)

     

- Toni Giorgino

根据你的问题,“索引长度的处理是什么”,因为它基本上是最优路径的坐标,它可能只要m+n(非常浅)或{{ 1}}(完美的对角线)。显然,它不是一对一的映射,可能会让人感到困扰,我想你可以从这里做更多研究如何获取你想要的映射。


我不知道是否有一些构建函数功能来获取最佳的一对一映射。但这是一种方式。

min(m,n)

现在,映射包含从查询到引用的一对一映射。然后,您可以将查询映射到引用,并以您想要的任何方式缩放映射的输入。

我不完全确定该行下面的内容,并且非常欢迎任何人对映射和缩放应该如何工作进行任何改进。

参考文献:12