2010-08-17 7 views
18

Wie kann ich K-Means-Clustering von Zeitreihendaten durchführen? Ich verstehe, wie dies funktioniert, wenn die Eingabedaten eine Reihe von Punkten sind, aber ich weiß nicht, wie eine Zeitreihe mit 1XM zu clustern ist, wobei M die Datenlänge ist. Insbesondere bin ich nicht sicher, wie man den Mittelwert des Clusters für Zeitreihendaten aktualisiert.Wie kann ich K-Means-Clustering für Zeitreihendaten durchführen?

Ich habe eine Reihe von beschrifteten Zeitreihen, und ich möchte den K-Means-Algorithmus verwenden, um zu überprüfen, ob ich eine ähnliche Bezeichnung zurückbekomme oder nicht. Meine X-Matrix wird N X M sein, wobei N die Anzahl der Zeitreihen ist und M die Datenlänge wie oben erwähnt ist.

Weiß jemand, wie man das macht? Zum Beispiel, wie könnte ich this k-means MATLAB code ändern, so dass es für Zeitreihendaten funktionieren würde? Außerdem möchte ich in der Lage sein, neben der euklidischen Distanz auch andere Distanzmetriken zu verwenden.

besser Um meine Zweifel zu zeigen, hier ist der Code, den ich für Zeitreihendaten geändert:


% 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 

Antwort

6

Zeitreihen sind in der Regel hochdimensionalen. Und Sie brauchen spezialisierte Abstandsfunktion, um sie auf Ähnlichkeit zu vergleichen. Außerdem könnte es Ausreißer geben.

k-means ist für niederdimensionale Räume mit einem (aussagekräftigen) euklidischen Abstand ausgelegt. Es ist nicht sehr robust gegenüber Ausreißern, da es ihnen ein quadratisches Gewicht gibt.

Klingt nicht nach einer guten Idee zu k-Means auf Zeitreihendaten zu verwenden. Versuchen Sie, in modernere, robustere Clustering-Algorithmen zu schauen. Viele erlauben Ihnen, beliebige Entfernungsfunktionen zu verwenden, einschließlich Zeitreihenabständen wie DTW.

+0

könnten Sie bitte einige der robusten Clustering-Algorithmen vorschlagen. und was ist DTW? Vielen Dank. – samkhan13

+1

Schnappen Sie sich ein Buch über Zeitreihen, und es wird Ihnen DTW lehren. Oder googeln Sie nach "Zeitreihe DTW". Es ist Stand der Technik. Suchen Sie für DBSCAN und OPTICS auf Wikipedia nach Clustering. Sie können mit DTW verwendet werden, k-bedeutet nicht. –

+0

danke das hilft :) – samkhan13

1

Wenn Sie wirklich Clustering verwenden möchten, können Sie abhängig von Ihrer Anwendung für jede Zeitreihe einen niederdimensionalen Merkmalsvektor generieren. Verwenden Sie zum Beispiel Zeitreihenmittelwert, Standardabweichung, dominante Frequenz aus einer Fourier-Transformation usw. Dies wäre für die Verwendung mit k-means geeignet, aber ob es Ihnen nützliche Ergebnisse liefert, hängt von Ihrer spezifischen Anwendung und dem Inhalt Ihrer Zeit ab Serie.

1

Ich bin kürzlich auf das kml R-Paket gestoßen, das behauptet, k-Means-Clustering für longitudinale Daten zu implementieren. Ich habe es selbst nicht ausprobiert.

Auch die Time-series clustering - A decade review Papier von S. Aghabozorgi, A. S. Shirkhorshidi und T. Ying Wah könnte nützlich sein, um Alternativen zu suchen. Ein anderes schönes Papier, obwohl etwas veraltet ist Clustering of time series data-a survey von T. Warren Liao.