MOA的StreamKM聚类没有返回任何结果

我目前正在尝试将大量数据点聚类到指定数量的簇中,并想尝试使用MOA基于流的k-means聚类方法StreamKM。使用随机数据进行的一个非常简单的示例如下所示:

StreamKM streamKM = new StreamKM();streamKM.numClustersOption.setValue(5); // 默认设置streamKM.widthOption.setValue(100000); // 默认设置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 = 0System.out.println("dimension = " + result.dimension()); // NPE

是否还有其他需要注意的地方,或者我对MOA聚类概念有根本性的误解?


回答:

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

你应该使用streamKM.resetLearning();来代替streamKM.prepareForUse();

简而言之,你的代码应该如下所示:

StreamKM streamKM = new StreamKM();streamKM.numClustersOption.setValue(5); // 默认设置streamKM.widthOption.setValue(100000); // 默认设置streamKM.resetLearning(); // 更新后的代码行 !!!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());

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注