時系列データのK-meansクラスタリングを行うにはどうすればよいですか?入力データがポイントのセットである場合にこれがどのように機能するかは理解していますが、Mがデータ長である1XMで時系列をクラスター化する方法がわかりません。特に、時系列データのクラスターの平均を更新する方法がわかりません。
ラベル付けされた時系列のセットがあり、K-meansアルゴリズムを使用して、同様のラベルが返されるかどうかを確認したいと思います。私のX行列はNX 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
時系列は通常、高次元です。また、類似性を比較するには、特殊な距離関数が必要です。さらに、外れ値がある可能性があります。
k-meansは、(意味のある)ユークリッド距離を持つ低次元空間用に設計されています。外れ値に二乗の重みがかかるため、外れ値に対してあまり堅牢ではありません。
時系列データでk-meansを使用することは、私には良い考えとは思えません。より現代的で堅牢なクラスタリングアルゴリズムを調べてみてください。多くの場合、DTWなどの時系列距離を含む任意の距離関数を使用できます。
おそらく答えるには遅すぎますが、:
上記のメソッドはRを使用します。たとえば、「 時系列の反復型インクリメンタルクラスタリング "」を探すと、さらに多くのメソッドが見つかります。
私は最近、縦断的データのk-meansクラスタリングを実装すると主張する kml
Rパッケージに出くわしました。自分で試したことはありません。
また、 時系列クラスタリング-10年のレビュー S。Aghabozorgi、A。S。Shirkhorshidi、T。YingWahによる論文は、代替案を探すのに役立つかもしれません。もう1つの素晴らしい論文は、多少古くなっていますが、 時系列データのクラスタリング-調査 T. WarrenLiaoによるものです。
本当にクラスタリングを使用したい場合は、アプリケーションに応じて、時系列ごとに低次元の特徴ベクトルを生成できます。たとえば、時系列平均、標準偏差、フーリエ変換からの支配的な頻度などを使用します。これはk-meansでの使用に適していますが、有用な結果が得られるかどうかは、特定のアプリケーションと時間の内容によって異なります。シリーズ。
K-meansも正しい方法ではないと思います。 @ Anony-Mousseが提案したように、 [〜#〜] dtw [〜#〜] を利用できます。実際、私は自分のプロジェクトの1つで同じ問題を抱えていて、そのための独自のクラスをPythonで作成しました。論理は次のとおりです。
n! / k! / (n-k)!
である必要があります。これらは潜在的なセンターのようなものになります。そして、興味があれば、Python実装は ここ です。