如何对时间序列数据进行K均值聚类?
我了解当输入数据是一组点时这是如何工作的,但是我不知道如何将时间序列与1XM聚类,其中M是数据长度。特别是,我不确定如何更新时间序列数据的聚类平均值。

我有一组标记的时间序列,并且我想使用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

最佳答案

时间序列通常是高维的。并且您需要专门的距离功能来比较它们的相似性。另外,可能会有异常值。

k均值设计用于具有(有意义的)欧几里德距离的低维空间。对于异常值,它不是很稳健,因为它对它们施加了平方的权重。

对我而言,在时间序列数据上使用k均值听起来不是一个好主意。尝试研究更现代,更强大的群集算法。许多将允许您使用任意距离功能,包括时间序列距离,例如DTW。

关于matlab - 如何对时间序列数据执行K均值聚类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3503668/

10-12 23:11