MOA的StreamKM群集不会返回任何结果

时间:2016-02-11 14:38:19

标签: java machine-learning cluster-analysis weka moa

我目前正在尝试将大量数据点聚集到给定数量的群集中,我想尝试MOA基于流的k-means StreamKM。我正在尝试使用随机数据做的一个非常简单的例子如下:

StreamKM streamKM = new StreamKM();
streamKM.numClustersOption.setValue(5); // default setting
streamKM.widthOption.setValue(100000); // default setting
streamKM.prepareForUse();
for (int i = 0; i < 150000; i++) {
    streamKM.trainOnInstanceImpl(randomInstance(2));
}
Clustering result = streamKM.getClusteringResult();
System.out.println("size = " + result.size());
System.out.println("dimension = " + result.dimension());

随机实例创建如下:

static DenseInstance randomInstance(int size) {
    DenseInstance instance = new DenseInstance(size);
    for (int idx = 0; idx < size; idx++) {
        instance.setValue(idx, Math.random());
    }
    return instance;
}

但是,在运行给定代码时,似乎没有创建集群:

System.out.println("size = " + result.size()); // size = 0
System.out.println("dimension = " + result.dimension()); // NPE

还有什么我需要照顾的,或者我对MOA群集概念有一个根本的误解?

1 个答案:

答案 0 :(得分:0)

我认为prepareForUse()方法不是初始化算法的正确方法。

您应该使用streamKM.prepareForUse();而不是streamKM.resetLearning();

简而言之,您的代码应类似于:

StreamKM streamKM = new StreamKM();
streamKM.numClustersOption.setValue(5); // default setting
streamKM.widthOption.setValue(100000); // default setting
streamKM. resetLearning(); // UPDATED CODE LINE !!!
for (int i = 0; i < 150000; i++) {
    streamKM.trainOnInstanceImpl(randomInstance(2));
}
Clustering result = streamKM.getClusteringResult();
System.out.println("size = " + result.size());
System.out.println("dimension = " + result.dimension());