Подтвердить что ты не робот

Как я могу выполнять кластеризацию K-параметров на данных временных рядов?

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

У меня есть набор помеченных временных рядов, и я хочу использовать алгоритм K-mean, чтобы проверить, верну ли я подобную метку или нет. Моя матрица X будет N X M, где N - число временных рядов, а M - длина данных, как указано выше.

Кто-нибудь знает, как это сделать? Например, как я могу изменить этот k-код MATLAB, чтобы он работал для данных временных рядов? Кроме того, я хотел бы иметь возможность использовать разные метрики расстояния, кроме евклидова расстояния.

Чтобы лучше проиллюстрировать мои сомнения, вот код, который я модифицировал для данных временных рядов:


% 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
4b9b3361

Ответ 1

Временные ряды обычно являются высокомерными. И вам нужна специализированная функция расстояния, чтобы сравнить их для подобия. Кроме того, могут быть выбросы.

k-средство предназначено для низкоразмерных пространств с (значимым) евклидовым расстоянием. Он не очень устойчив к выбросам, поскольку он кладет на них квадрат.

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

Ответ 2

Возможно, слишком поздно для ответа, но:

Приведенные выше методы используют R. Вы найдете больше методов, например, для Итеративная инкрементальная кластеризация временных рядов.

Ответ 3

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

Ответ 4

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

Также кластеризация временных рядов - обзор за десятилетний период, написанный С. Агабоборги, А. С. Ширхоршиди ​​и Т. Ин-Ва, может быть полезен для вы ищете альтернативы. Еще одна хорошая бумага, хотя она несколько датирована Кластеризация данных временных рядов - опрос Т. Уоррен Ляо.