动态时间扭曲 (DTW) 单调性约束

问题描述

在使用动态时间扭曲时如何指定单调性约束(一个时间序列不应在另一个之前)?

例如,我有成本和收入数据;一个应该影响另一个,但反之则不然。我正在使用基本的 dtw 包,但我知道还有很多其他包可以做得更好。以下是我目前的对齐方式。

(我想将相应的收入点保存到单独的列中,可以吗?)

View settings

enter image description here

感谢您的帮助!

解决方法

我认为您可以通过定义自己的窗口函数来强制执行此操作。 以这些系列为例:

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)

before

红线是参考, 并且您希望查询的值仅匹配过去或同一天的值。

win_fun <- function(i,j,...) { i >= j }

bar <- dtw(query,window.type = win_fun)
plot(bar,off = 2)

after

如果你想匹配过去的值,严格排除同一时间的值, 将条件更改为 i > j

查看 dtwWindowingFunctions 的文档以获取更多选项。 您可能想要添加窗口大小约束。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...