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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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