2010-08-17 18 views
18

Jak mogę dokonać grupowania K-średnich danych szeregów czasowych? Rozumiem, jak to działa, gdy dane wejściowe są zbiorem punktów, ale nie wiem jak grupować szeregi czasowe z 1XM, gdzie M jest długością danych. W szczególności nie jestem pewien, jak zaktualizować średnią klastra dla danych szeregów czasowych.Jak mogę przeprowadzić grupowanie K-średnich na danych szeregów czasowych?

Mam zestaw oznaczonych szeregów czasowych i chcę użyć algorytmu K-średnich, aby sprawdzić, czy otrzymam podobną etykietę, czy nie. Moja macierz X będzie N X M, gdzie N jest liczbą szeregów czasowych, a M jest długością danych, jak wspomniano powyżej.

Czy ktoś wie, jak to zrobić? Na przykład, w jaki sposób mogę zmodyfikować this k-means MATLAB code, aby działał w przypadku danych szeregów czasowych? Chciałbym również móc używać różnych metryk odległości poza odległością euklidesową.

Aby lepiej zilustrować moje wątpliwości, tutaj jest kod I zmodyfikowaną danych szeregów czasowych:


% 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 

Odpowiedz

6

seria czas są zazwyczaj wysoko-wymiarowej. I potrzebujesz specjalistycznej funkcji odległości, aby porównać je pod względem podobieństwa. Ponadto mogą występować wartości odstające.

k-średnich jest przeznaczony do przestrzeni niskowymiarowych z (znaczącą) odległością euklidesową. Nie jest bardzo odporny na wartości odstające, ponieważ obciąża je kwadratem.

Nie wydaje mi się, żebym używał K-średnich w danych z szeregów czasowych. Spróbuj spojrzeć na bardziej nowoczesne, niezawodne algorytmy klastrowania. Wiele z nich pozwala na stosowanie dowolnych funkcji odległości, w tym szeregów czasowych, takich jak DTW.

+0

czy możesz zaproponować niektóre z niezawodnych algorytmów grupowania. a czym jest DTW? dzięki. – samkhan13

+1

Zdobądź każdą książkę na szeregi czasowe, a nauczy Cię ona DTW. Lub google dla "szeregów czasowych DTW". To najnowszy stan. Jeśli chodzi o tworzenie klastrów, wyszukaj DBSCAN i OPTICS w Wikipedii. Mogą być używane z DTW, k-środki nie mogą. –

+0

dzięki temu pomaga :) – samkhan13

1

Jeśli naprawdę chcesz korzystać z klastrowania, to w zależności od aplikacji możesz wygenerować wektor właściwości niskiego wymiaru dla każdej serii czasowej. Na przykład, użyj średniej serii czasowej, odchylenia standardowego, częstotliwości dominującej z transformaty Fouriera itd. Byłoby to odpowiednie do użycia z k-środkami, ale to, czy przyniosłoby ci użyteczne wyniki, zależy od twojej konkretnej aplikacji i zawartości twojego czasu. seria.

Powiązane problemy