MOA 的 StreamKM 聚类不返回任何结果

Posted

技术标签:

【中文标题】MOA 的 StreamKM 聚类不返回任何结果【英文标题】:MOA's StreamKM clustering doesn't return any result 【发布时间】:2016-05-22 09:38:33 【问题描述】:

我目前正在尝试将大量数据点聚集到给定数量的集群中,我想尝试 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 聚类概念有根本的误解?

【问题讨论】:

使用来源,卢克。 MOA 是开源的。 代码并没有真正解释清楚,MOA 文档缺乏使用示例……很难理解如何使用算法。此外,我也找不到任何教程。 【参考方案1】:

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

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

简而言之,你的代码应该是这样的:

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());

【讨论】:

无法亲自测试,但:接受。感谢并抱歉错过了这个:-)

以上是关于MOA 的 StreamKM 聚类不返回任何结果的主要内容,如果未能解决你的问题,请参考以下文章

VGG 特征的 K 均值聚类不起作用

KMeans 从 2 列的所有可能组合中聚类不产生正确的输出

在 MOA 中使用我的 weka 分类器

Keras MultiHeadAttention() 类不返回预期值

在 R/python/MOA 中实现的在线时间序列算法

R语言层次聚类算法及可视化