如何解决动态时间扭曲 (DTW) 单调性约束
在使用动态时间扭曲时如何指定单调性约束(一个时间序列不应在另一个之前)?
例如,我有成本和收入数据;一个应该影响另一个,但反之则不然。我正在使用基本的 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
的文档以获取更多选项。
您可能想要添加窗口大小约束。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。