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 聚类不返回任何结果的主要内容,如果未能解决你的问题,请参考以下文章
KMeans 从 2 列的所有可能组合中聚类不产生正确的输出