2016-11-06 6 views
3

私は手で非線形分離可能なデータを持っています。私はMATLABのK - meansの実装を使用してそれをクラスタ化したい。私は、それぞれのデータポイントごとにクラスターラベルを取得し、別の分類問題に使用する必要があります。Matlab kmeans非線形分離可能データのクラスタリング

問題はk-meansが期待どおりの結果を与えていないことです。私は得たクラスタープロットを付けています。

私はk-meansがデータの見た目と同心円としてクラスタを与えると予測しましたが、出力はアークでした。私はなぜこれが起こっているのか分からない。

私の目標を達成するための他のクラスタリング方法を教えてもらえますか?

答えて

3

My cluster plotアルゴリズムを使用する前に、あなたはそれをを理解に試してみてください:アルゴリズムの目標が何であるか、そしてどのようにそれを達成ありません。 K-手段について、Wikipediaは私たちに次のように伝えます:

クラスタリングは、各観測は、最寄りの平均

三つの同心円でクラスタに属する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.') 

result

以上の一般:k平均クラスタリングに適したカーネルを使用するか、または別のアルゴリズムを使用します。

+0

うわー、私はこれを考えなかった、答えてくれてありがとう。私はk-meansが「平均」を指標として使用して動作することを知っていました。つまり、アルゴリズムはk-meansという名前になっています。しかし、データがアークとしてクラスタリングされている理由を理解できませんでした。 – papabiceps