2010-08-17 6 views
18

Как я могу выполнить кластеризацию временных рядов K-типа? Я понимаю, как это работает, когда входные данные представляют собой набор точек, но я не знаю, как сгруппировать временные ряды с 1XM, где M - длина данных. В частности, я не уверен, как обновить среднее значение кластера для данных временных рядов.Как выполнить кластеризацию K-временных рядов по данным временных рядов?

У меня есть набор помеченных временных рядов, и я хочу использовать алгоритм K-средних, чтобы проверить, верну ли я подобную метку или нет. Моя матрица 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-средство предназначено для низкоразмерных пространств с (значащим) евклидовым расстоянием. Он не очень устойчив к выбросам, так как он накладывает на них квадратный вес.

Не кажется мне хорошей идеей использовать k-средства для данных временных рядов. Попробуйте изучить более современные, надежные алгоритмы кластеризации. Многие из них позволят вам использовать произвольные функции расстояния, включая расстояния по временным рядам, такие как DTW.

+0

Не могли бы вы предложить некоторые из надежных алгоритмов кластеризации. и что такое DTW? Благодарю. – samkhan13

+1

Возьмите любую книгу по временным рядам, и она научит вас DTW. Или google для «временных рядов DTW». Это современное состояние. Что касается кластеризации, найдите DBSCAN и OPTICS в Википедии. Они могут использоваться с DTW, k-средства не могут. –

+0

спасибо, это помогает :) – samkhan13

1

Если вы действительно хотели использовать кластеризацию, то в зависимости от вашего приложения вы могли бы генерировать векторный вектор с низкой размерностью для каждого временного ряда. Например, используйте среднее временное сечение, стандартное отклонение, доминирующую частоту от преобразования Фурье и т. Д. Это было бы удобно для использования с k-средствами, но может ли оно дать вам полезные результаты, зависит от вашего конкретного приложения и содержания вашего времени серии.

1

Я недавно встретил пакет kml R, который утверждает, что он реализует кластеризацию k-средних для продольных данных. Я сам не пробовал.

Кроме того, вы можете искать альтернативные варианты в документе Time-series clustering - A decade review S. Aghabozorgi, A. S. Shirkhorshidi и T. Ying Wah. Еще одна хорошая бумага, хотя несколько датирована Clustering of time series data-a survey Т. Уоррен Ляо.

Смежные вопросы