Java K-意味着具有意外输出的实现

时间:2012-02-27 14:23:34

标签: java cluster-analysis data-mining k-means

我正在使用Trickl-Cluster项目来聚类我的数据集 和Colt记住矩阵中的数据对象。

执行此代码后

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个均值时,这很奇怪 关于这个具体问题,文件并不是那么清楚。

这是根据项目的java doc

的方法Cluster的定义
void cluster(cern.colt.matrix.DoubleMatrix2D data, int clusters) 

从逻辑上讲,int clusters代表K-means终止后预期集群的数量。

您是否知道项目中K-means类的输出与K-means算法预期结果之间的关系?

1 个答案:

答案 0 :(得分:3)

这是一个 3维的意思。如果你输入三维数据,就会得到三维手段。

请注意,使用k = 1运行k-means绝对是荒谬的,因为它只是计算数据集的平均值:

(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

结果显然是正确的。