時系列データの K-means クラスタリングを行うにはどうすればよいですか? 入力データがポイントのセットである場合にこれがどのように機能するかは理解していますが、M がデータ長である 1XM で時系列をクラスター化する方法がわかりません。特に、時系列データのクラスターの平均を更新する方法がわかりません。
ラベル付けされた一連の時系列があり、K-means アルゴリズムを使用して、同様のラベルが返されるかどうかを確認したいと考えています。上記のように、私の X 行列は NXM になります。ここで、N は時系列の数、M はデータ長です。
誰もこれを行う方法を知っていますか? たとえば、時系列データで機能するように、この k-means 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