我有一个数据集,每个实例都有一个属性值,需要在其上应用群集。 Java-ML(Java机器学习库)似乎适合我完成这项任务。但是我发现它中的“数据集”类被构造为一组实例,它们被构造为一组属性和一个类标签。我的问题是每个实例都有一个属性,没有类标签。
以下是我尝试的示例代码,意外地,一旦开始群集,执行就不会结束。
int k;
Dataset dataset = new DefaultDataset();
double[] val= {5,6,15,20,40,50,55,73};
for(int i = 0; i < val.length; i++) {
Instance instance= new SparseInstance(1);
instance.put(1, val[i]);
dataset.add(instance);
}
k = 3;
Clusterer km = new KMeans(k);
System.out.println(dataset);
Dataset[] clusters = km.cluster(dataset);
System.out.println(dataset);
for(int i = 0; i < k; i++) {
System.out.println(clusters[i]+"\n\n\n\n");
}
我无法理解这种意外行为背后的原因。除了Java-ML之外还有其他适合我工作的库吗?
提前致谢。
答案 0 :(得分:2)
首先,因为您的数据是1维的,所以不要首先使用群集。
1维数据可以排序,这允许比一般情况更快的算法。您可能需要查看经典统计,自然间断,核密度估计等。实际上,我从核密度估计开始,将数据分成两个局部最大值之间的最小最小值。
现在对于Java-ML,你所说的表明它实际上是一个分类包。对于以分类为驱动的应用程序,对类标签的需求是典型的。在那里,它本质上是一个学习和验证的类标签。
我主要使用ELKI,它有很多选择的聚类算法,并且不希望数据被标记。
答案 1 :(得分:1)
如果只有一个特征值,则几乎没有理由使用任何聚类算法。只需使用直方图或KDE绘图应该足以找到您要查找的信息。