使用Java-ML包进行群集

时间:2013-06-28 11:48:56

标签: java machine-learning data-mining cluster-analysis

我有一个数据集,每个实例都有一个属性值,需要在其上应用群集。 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之外还有其他适合我工作的库吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

首先,因为您的数据是1维的,所以不要首先使用群集

1维数据可以排序,这允许比一般情况更快的算法。您可能需要查看经典统计,自然间断,核密度估计等。实际上,我从核密度估计开始,将数据分成两个局部最大值之间的最小最小值。

现在对于Java-ML,你所说的表明它实际上是一个分类包。对于以分类为驱动的应用程序,对类标签的需求是典型的。在那里,它本质上是一个学习和验证的类标签。

我主要使用ELKI,它有很多选择的聚类算法,并且不希望数据被标记。

答案 1 :(得分:1)

如果只有一个特征值,则几乎没有理由使用任何聚类算法。只需使用直方图或KDE绘图应该足以找到您要查找的信息。