クラスタリングは、各観測は、最寄りの平均
三つの同心円でクラスタに属するk個のクラスタにn個の観測を分割することを目的とkは、意味しますまったく同じ平均を持つので、k-meansはそれらを分離するのに適していません。結果は実際にここでk-meansから期待するべきものです。今
あなたのクラスタが常に同心円になることがわかっている場合、あなたは、単に極座標に座標あなたのデカルト(XY)を変換することができ、およびクラスタリングのためだけ半径rho
を使用する - あなたが知っているように、その角度theta
重要ではありません:
% Create random data
[x1,y1] = pol2cart(2*pi*rand(1000,1),rand(1000,1));
[x2,y2] = pol2cart(2*pi*rand(1000,1),rand(1000,1)+2);
[x3,y3] = pol2cart(2*pi*rand(1000,1),rand(1000,1)+4);
X = [x1,y1; x2,y2; x3,y3];
% Transform to polar
[theta,rho] = cart2pol(X(:,1),X(:,2));
% k-means clustering
idx = kmeans(rho,3);
% Plot results
hold on
plot(X(idx==1,1), X(idx==1,2), 'r.')
plot(X(idx==2,1), X(idx==2,2), 'g.')
plot(X(idx==3,1), X(idx==3,2), 'b.')
以上の一般:k平均クラスタリングに適したカーネルを使用するか、または別のアルゴリズムを使用します。
うわー、私はこれを考えなかった、答えてくれてありがとう。私はk-meansが「平均」を指標として使用して動作することを知っていました。つまり、アルゴリズムはk-meansという名前になっています。しかし、データがアークとしてクラスタリングされている理由を理解できませんでした。 – papabiceps