簡體   English   中英

動態時間規整 (DTW) 單調性約束

[英]Dynamic Time Warping (DTW) monotonicity constraint

使用動態時間規整時如何指定單調性約束(一個時間序列不應出現在另一個之前)?

例如,我有成本和收入數據; 一個應該影響另一個,但反之則不然。 我正在使用基本的dtw package 但我知道還有很多其他的可能會更好。 下面是我目前的 alignment。

(我想把對應的收入點單獨存一欄,可以嗎?)

library(dtw)

asy<-dtw(df$cost,
         df$revenue,
         keep=TRUE,       
         window.size = 7, # max 7 days shift
         step=asymmetric  # gives best results for this problem (other: symmetric1 & symmetric2)
         );

plot(asy, type="two", off=1);

在此處輸入圖像描述

謝謝您的幫助!

我認為您可以通過定義自己的 window function 來強制執行此操作。 例如,以這些系列為例:

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, reference, keep = TRUE, step.pattern = symmetric2, window.type = win_fun)
plot(bar, type = "two", off = 2)

后

如果要匹配過去的值,嚴格排除同一時間的值,請將條件更改為i > j

查看dtwWindowingFunctions的文檔以獲取更多選項。 您可能想要添加 window 大小約束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM