我正在尝试将proxy::dist
函数与自定义距离矩阵一起使用,但我现在的速度非常慢。
这是我如何调用自定义函数的可重现示例:
set.seed(1)
test <- matrix(runif(4200), 60, 70)
train <- matrix(runif(4200), 60, 70)
dMatrix <- proxy::dist(x = test, y = train, method = customDTW,
by_rows = T,
auto_convert_data_frames = T)
这应该计算矩阵中每个时间序列与test
矩阵中所有时间序列之间的距离train
(每一行都是一个时间序列)。
我的自定义功能是:
customDTW <- function(ts1, ts2){
d <- dtw(ts1, ts2,
dist.method = "Euclidean",
window.type = "sakoechiba",
window.size = 20
)
return(d$distance)
}
问题是,与我使用时相比method="DTW"
,甚至与我自己计算距离矩阵的情况相比,这非常慢,并且随着时间序列的长度或数量的增长,它会以指数方式变慢。当然,这植根于嵌套循环,但我对效果的规模感到惊讶。我没有看到它一定有另一个原因。
我的问题是,我还能如何实现 mycustomDTW
以使其更快,使用proxy::dist
?
这是我对执行时间的小实验:
60X7
(使用proxy::dist
+ customDTW
)的执行时间
user system elapsed
2.852 0.012 2.867
60X70
(使用proxy::dist
+ customDTW
)的执行时间
user system elapsed
5.384 0.000 5.382
60X700
(使用proxy::dist
+ customDTW
)的执行时间
user system elapsed
509.088 18.652 529.115
60X700
(不使用proxy::dist
)的执行时间
user system elapsed
26.696 0.004 26.753