问题描述
在使用动态时间扭曲时如何指定单调性约束(一个时间序列不应在另一个之前)?
例如,我有成本和收入数据;一个应该影响另一个,但反之则不然。我正在使用基本的 dtw 包,但我知道还有很多其他包可以做得更好。以下是我目前的对齐方式。
(我想将相应的收入点保存到单独的列中,可以吗?)
View settings
感谢您的帮助!
解决方法
我认为您可以通过定义自己的窗口函数来强制执行此操作。 以这些系列为例:
library(dtw)
set.seed(310L)
idx <- seq(0,6.28,len = 100L)
reference <- sin(idx)
query <- cos(idx) + runif(100L) / 10
foo <- dtw(query,reference,keep = TRUE,step.pattern = symmetric2,window.type = sakoeChibaWindow,window.size = 30L)
plot(foo,type = "two",off = 2)
红线是参考, 并且您希望查询的值仅匹配过去或同一天的值。
win_fun <- function(i,j,...) { i >= j }
bar <- dtw(query,window.type = win_fun)
plot(bar,off = 2)
如果你想匹配过去的值,严格排除同一时间的值,
将条件更改为 i > j
。
查看 dtwWindowingFunctions
的文档以获取更多选项。
您可能想要添加窗口大小约束。