2012-02-27 6 views
-1

Trickl-Clusterプロジェクトを使用してデータセット とColtをクラスタリングし、データオブジェクトを行列に格納します。予期しない出力を伴うJava K平均の実装

このコード

import cern.colt.matrix.DoubleMatrix2D; 
import cern.colt.matrix.impl.DenseDoubleMatrix2D; 
import com.trickl.cluster.KMeans; 

DoubleMatrix2D dm1 = new DenseDoubleMatrix2D(3, 3); 
dm1.setQuick(0, 0, 5.9); 
dm1.setQuick(0, 1, 1.6); 
dm1.setQuick(0, 2, 18.0); 
dm1.setQuick(1, 0, 2.0); 
dm1.setQuick(1, 1, 3.5); 
dm1.setQuick(1, 2, 20.3); 
dm1.setQuick(2, 0, 11.5); 
dm1.setQuick(2, 1, 100.5); 
dm1.setQuick(2, 2,6.5); 
System.out.println (dm1); 

KMeans km = new KMeans(); 
km.cluster(dm1 ,1); 
DoubleMatrix2D dm11 = km.getPartition(); 
System.out.println (dm11); 
DoubleMatrix2D dm111 = km.getMeans(); 
System.out.println (dm111); 

を実行した後、私はアルゴリズムのステップに続いて、次の出力

3 x 3 matrix 
5.9 1.6 18 
2  3.5 20.3 
11.5 100.5 6.5 

3 x 1 matrix 
1 
1 
1 

3 x 1 matrix 
6.466667 
35.2  
14.933333 

を持っていた、1は1つのクラスタを期待し、3つの手段を持っているとき、それは奇妙だ ドキュメントはそれほど明確ではありませんその特定の点について。

この

だから論理的に int clustersを話すプロジェクト

void cluster(cern.colt.matrix.DoubleMatrix2D data, int clusters) 

のJavaのドキュメントに記載の方法クラスタの定義で終了しKは、意味の後に予想されるクラスタの数を表します。

プロジェクトのK平均クラスの出力とK平均アルゴリズムの予想結果の関係についてご存じですか?

+0

暗闇の中でちょうど刺すが、クラスタメソッドの入力値として2つ以上を使用しないでください。それ以外の場合は、すべてのデータポイント(つまりセンター)との距離が最小のクラスターを取得するだけではありませんか?複数のクラスタポイント間でデータセットを分割するK平均のポイントではないのですか? –

+0

はい私は目的に応じて入力値として1を経験しました。 クラスタが1つのため、出力として平均が1つだけ必要ですが、3つの手段があることがはっきりと分かります。 –

答えて

3

これは1つです3次元平均です。 3次元データを入力すると、3次元の手段が得られます。

(5.9+2+11.5)/3 = 6.466667 
(1.6+3.5+100.5)/3 = 35.2 
(18+20.3+6.5)/3 = 14.933333 

結果は明らかに正しい:それは単にデータセットの平均値を計算するようにK = 1とK-手段を実行

注、絶対に無意味です。

+0

私は1つのクラスターが意味をなさないことを知っています。前のコメントで、私はそれを意図的にやったと言いました。 あなたは答えがとても役に立ちました。ありがとうございました –