我正在使用Trickl-Cluster項目對我的數據集 和Colt進行聚類,以便將數據對象記憶在矩陣中。具有意外輸出的Java K-means實現
執行此代碼
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組,有3種手段 文檔不是那麼清楚關於那個具體點。
這是根據該項目
void cluster(cern.colt.matrix.DoubleMatrix2D data, int clusters)
所以邏輯上說的int clusters
的Java文檔的方法集羣定義表示預期的簇的數目的K-means終止後。
您對項目中K-means類的輸出與K-means算法預期結果之間的關係有任何想法嗎?
只是在黑暗中刺,但不應該使用多於1作爲羣集方法的輸入值?否則,你會不會得到一個與所有數據點(即中心)距離最小的羣集? K-means的意義不在於在幾個聚類點之間劃分數據集? – 2012-02-27 14:33:13
是的,我有意將1作爲輸入值。 因爲只有一個羣集,只有一個平均值應該作爲輸出,而你清楚地看到有3個平均值。 – 2012-02-27 14:50:13