问题描述
我从各种在线资源中发现 DTW 的时间复杂度是二次的。另一方面,我也发现标准 kNN 具有线性时间复杂度。但是,将它们配对时,kNN-DTW 是否具有二次或三次时间?
本质上,kNN 的时间复杂度是否仅取决于所使用的度量?我还没有找到任何明确的答案。
解决方法
在这里你需要小心。假设您的“训练”集中有 n
个长度为 l
的时间序列(我们称之为,即使您并未真正使用 kNN 进行训练)。计算一对时间序列之间的 DTW 具有 O(l
* m
) 的渐近复杂度,其中 m
是您的最大扭曲窗口。由于 m
l 也 O(l
^2) 成立。 (虽然可能有更有效的实现,但我认为在大多数情况下它们实际上并没有更快,请参阅 here)。使用 kNN 对时间序列进行分类需要您计算该时间序列与训练集中所有时间序列之间的距离,这意味着 n
比较,相对于 n
是线性的。
所以你的最终复杂度将是 O(l
* m
* n
) 或 O(l
^2 * n
)。换句话说:复杂度与时间序列长度呈二次关系,与训练样例数量呈线性关系。