2010-08-17 190 views
18

我該如何做時間序列數據的K均值聚類? 我理解這是如何工作的,當輸入數據是一組點時,但我不知道如何聚類1XM的時間序列,其中M是數據長度。特別是,我不確定如何更新時間序列數據的羣集平均值。如何對時間序列數據執行K均值聚類?

我有一套標記時間序列,我想用K-means算法來檢查我是否會找回類似的標籤。我的X矩陣將是N X M,其中N是時間序列的數量,M是上面提到的數據長度。

有誰知道如何做到這一點?例如,我如何修改this k-means MATLAB code以便它適用於時間序列數據?另外,我希望能夠使用除歐幾里德距離以外的不同距離度量。

爲了更好地說明了我的懷疑,這裏是我修改的時間序列數據的代碼:


% Check if second input is centroids 
if ~isscalar(k) 
    c=k; 
    k=size(c,1); 
else 
    c=X(ceil(rand(k,1)*n),:); % assign centroid randomly at start 
end 

% allocating variables 
g0=ones(n,1); 
gIdx=zeros(n,1); 
D=zeros(n,k); 

% Main loop converge if previous partition is the same as current 
while any(g0~=gIdx) 
%  disp(sum(g0~=gIdx)) 
    g0=gIdx; 
    % Loop for each centroid 
    for t=1:k 
     % d=zeros(n,1); 
     % Loop for each dimension 
     for s=1:n 
      D(s,t) = sqrt(sum((X(s,:)-c(t,:)).^2)); 
     end 
    end 
    % Partition data to closest centroids 
    [z,gIdx]=min(D,[],2); 
    % Update centroids using means of partitions 
    for t=1:k 

     % Is this how we calculate new mean of the time series? 
     c(t,:)=mean(X(gIdx==t,:)); 

    end 
end 

回答

6

時間序列通常是高維。你需要專門的距離函數來比較它們的相似性。另外,可能會出現異常值。

k-means設計用於具有(有意義的)歐氏距離的低維空間。它對於異常值並不是很強大,因爲它會對它們施加平方重量。

對我來說聽起來不是一個好主意,我可以在時間序列數據上使用k-means。試着研究更現代的,強大的聚類算法。許多人可以使用任意距離函數,包括時間序列距離,如DTW。

+0

可否請您提出一些強大的聚類算法。什麼是DTW?謝謝。 – samkhan13 2013-06-09 18:50:54

+1

抓住時間序列的任何書,它會教你DTW。或谷歌的「時間序列DTW」。這是最先進的。至於聚類,請在Wikipedia上查找DBSCAN和OPTICS。它們可以與DTW一起使用,k-means不能。 – 2013-06-09 22:19:10

+0

謝謝這有助於:) – samkhan13 2013-06-10 05:44:02

1

如果您確實想要使用聚類,那麼依賴於您的應用程序,您可以爲每個時間序列生成一個低維特徵向量。例如,使用時間序列平均值,標準差,傅里葉變換的主頻率等。這適合與k-means一起使用,但它是否會爲您提供有用的結果取決於您的具體應用和您的時間內容系列。