R语言`dtw`与Python`dtw-python`计算DTW结果不一致问题
R与Python dtw包DTW距离计算结果差异问题
我正在探索Python中计算动态时间规整(Dynamic Time Warping, DTW)距离的多种方案,受限于相关包文档不足,尝试了dtaidistance的distance_fast、distance,fastdtw的fastdtw以及dtw-python的dtw函数,发现它们的计算结果存在差异,推测和默认参数有关但找不到相关说明。
目前我重点对比R语言dtw包与Pythondtw-python包,二者官方标注为直接等价且文档相似,但设置相同参数(Sakoechiba窗口、窗口大小5)后,使用UCI合成控制时序数据集(每行代表一条时序)计算得到的结果差异显著。
R代码与结果
R代码
data=read.table('synthetic_control.data',header=FALSE) library(dtw) dtw(x=data[1,], y=data[2,] , window.type= "sakoechiba", window.size= 5)$distance dtw(x=data[2,], y=data[3,] , window.type= "sakoechiba", window.size= 5)$distance dtw(x=data[2,], y=data[600,], window.type= "sakoechiba", window.size= 5)$distance dtw(x=data[1,], y=data[600,], window.type= "sakoechiba", window.size= 5)$distance dtw(x=data[3,], y=data[600,], window.type= "sakoechiba", window.size= 5)$distance
R计算结果(欧氏距离)
[1] 42.181 [1] 35.09292 [1] 105.0999 [1] 110.9285 [1] 105.9934
Python代码与结果
Python代码
import pandas as pd data = pd.read_csv("synthetic_control.data", header=None,delimiter=r"\s+") from dtw import * print(dtw(x=data.loc[0], y=data.loc[1] , window_args= {"window_type": "sakoechiba", "window_size": 5}, keep_internals=True).distance) print(dtw(data.loc[1], data.loc[2] , window_args= {"window_type": "sakoechiba", "window_size": 5}, keep_internals=True).distance) print(dtw(data.loc[1], data.loc[599] , window_args= {"window_type": "sakoechiba", "window_size": 5}, keep_internals=True).distance) print(dtw(data.loc[0], data.loc[599] , window_args= {"window_type": "sakoechiba", "window_size": 5}, keep_internals=True).distance) print(dtw(data.loc[2], data.loc[599] , window_args= {"window_type": "sakoechiba", "window_size": 5}, keep_internals=True).distance)
(注:原代码中data_a应为data,已修正)
Python计算结果
166.58120000000002 165.87640000000005 647.89322 604.29862 663.3971200000001
我已确保参数设置一致且默认参数看似相同,请问问题出在哪里?
内容的提问来源于stack exchange,提问作者hamagust
相关产品推荐
相关产品推荐

