我在利用MATLAB进行时间序列数据聚类时遇到了一个问题。
我正在尝试使用下面的DTW库作为我的距离测量方法http://www.mathworks.com/matlabcentral/fileexchange/16350-continuous-dynamic-time-warping。
TimeData = csvread('testData10.csv',1,0)
Y = pdist(TimeData,@dtw_dist)
Z = linkage(Y,'complete')
dendrogram(Z) 我制作了一个函数,以适应pdist距离函数的格式。
function d2 = dtw_dist(XI,XJ)
[dist,D,k,w,rw,tw] = dtw2(XI,XJ,0)
d2 = dist
end但是我得到了错误信息
Error using pdist (line 373)
Error evaluating distance function 'dtw_dist'.
Caused by:
Error using -
Matrix dimensions must agree.如果有人帮助我,我将受到伤害。
谢谢!
-2015.1.5更新
我将我的功能更改为调用dtw以适应格式,它可以工作。
function d2 = dtw_dist(XI,XJ)
result =[];
[m1,n1] = size(XI);
[m2,n2] = size(XJ);
for j=1:m2
result = horzcat(result,dtw(XI,XJ(j,:)));
end
d2=result;
end发布于 2015-01-03 16:19:56
不知道dtw2是什么是很难判断的。但是,这里有一个可能的原因:当您使用自定义距离函数调用pdist2时,它应该满足以下条件:
距离函数的形式必须是 function D2 = DISTFUN(ZI,ZJ) ,其参数为1×N向量ZI,包含X或Y的单个观测,M2×N矩阵ZJ,包含X或Y的多个观测值,并返回距离D2的M2×1向量,其Jth元素是观测子与ZJ之间的距离(J,:)。
检查dtw2是否实现了这一点,如果没有,则相应地修改它(或者使用一个循环而不是pdist2)。
https://stackoverflow.com/questions/27752637
复制相似问题