MATLAB使用pdist处理时间序列聚类

时间:2015-01-03 07:13:16

标签: matlab time-series cluster-analysis

我在使用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

1 个答案:

答案 0 :(得分:0)

在不知道dtw2是什么的情况下很难说出来。但这是一个可能的原因:当您使用自定义距离函数调用pdist2时,它应符合以下条件:

  

距离函数的格式必须为

     function D2 = DISTFUN(ZI,ZJ)
     

将包含来自X或Y的单个观测值的1×N矢量ZI作为参数,包含来自X或Y的多个观测值的M2-by-N矩阵ZJ,并返回M2-by-1距离矢量D2,其第J个元素是观测值ZI和ZJ(J,:)之间的距离。

检查dtw2是否符合要求,如果没有,则相应地修改它(或使用循环代替pdist2)。