我们希望将dtw库用于R,以便将某些时间序列数据缩小并扩展到标准长度。
考虑三个具有等效列的时间序列。 moref
的长度(行)为105,mobig
为130,mosmall
为100.我们希望将mobig
和mosmall
投影到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$index1
或ali1$index2
来缩小或扩展时间序列。但是,如果我们调用以下命令
length(ali1$index1)
length(ali2$index1)
length(ali1$index2)
length(ali2$index2)
结果是
[1] 198
[1] 162
[1] 198
[1] 162
这些是带索引的向量(可能是指其他向量)。我们可以使用哪一个进行映射?它们不是很长吗?
答案 0 :(得分:4)
首先,我们需要同意index1
和index2
是两个长度相同的向量,它们将查询/输入数据映射到引用/存储数据,反之亦然。
由于您没有提供任何数据。这是一些虚拟数据,可以给人们一个想法。
# 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")
以下是输出:
> 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)
现在,映射包含从查询到引用的一对一映射。然后,您可以将查询映射到引用,并以您想要的任何方式缩放映射的输入。
我不完全确定该行下面的内容,并且非常欢迎任何人对映射和缩放应该如何工作进行任何改进。