【问题标题】:Clustering using Java-ML package使用 Java-ML 包进行聚类
【发布时间】:2013-06-26 04:29:31
【问题描述】:

我有一个数据集,每个实例都有一个属性值,并且需要对其应用聚类。 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 更适合我工作的库?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    首先,因为您的数据是一维的,所以首先不要使用聚类

    一维数据可以排序,这允许比一般情况更快的算法。您可能想研究经典统计、自然间断点、核密度估计等。事实上,我会从核密度估计开始,并将数据拆分为两个局部最大值之间的最低最小值。

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

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

    【讨论】:

    • 我想要的是将一维数据分组为内部同质但与其他数据不同的子集。子集的数量不是固定的,必须根据数据设置。根据您对自然中断和内核密度估计的建议,我研究了它们,似乎 Jenks 自然中断适合这项任务。这种方法的问题是识别中断的大量迭代计算。然而,k-means 也存在固定 k 值的问题。
    • 我希望您查看此链接 (stackoverflow.com/questions/5304057/…),在该链接中,使用 k-means 的人比自然休息更快地获得结果。你能评论一下自然间断点和 k-means 之间的比较吗?
    • 我不使用一维数据,所以我没有第一手经验。无论哪种方式,k-means 在 1-d 中都没有多大意义,因为它没有利用数据的顺序。至于观察到的效果,很可能是实施问题。 R 中的 K-means 是一个 C 函数,因此速度相当快。也许另一个是纯 R,它可能会慢很多。
    【解决方案2】:

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

    【讨论】:

    • 感谢@Edward 的回复。我想要的是将一维数据分组为内部同质且与其他数据不同的子集。子集的数量不是固定的,必须根据数据设置。根据您对自然中断和内核密度估计的建议,我研究了它们,似乎 Jenks 自然中断适合这项任务。这种方法的问题是识别中断的大量迭代计算。然而,k-means 也存在固定 k 值的问题。
    • 我希望您查看此链接 (stackoverflow.com/questions/5304057/...),在该链接中,使用 k-means 的人比自然休息更快地获得结果。你能评论一下自然间断点和 k-means 之间的比较吗?
    • 看来你需要自己研究研究。你没有问你的目标,而是问如何使用工具来实现你的目标。很明显,您不应该使用该工具 既然您有一个简洁明了的目标,您需要尝试解决您的问题或搜索现有的解决方案。如果没有,你必须解决你的问题。如果您无法解决问题,则必须确定您是否缺乏所需的知识,或者问题是否无法解决。如果是前者,你可能会选择更加努力地获得这些知识。否则 - 您可能需要购买外部帮助。
    猜你喜欢
    • 2017-05-18
    • 2017-09-07
    • 2021-08-25
    • 2016-06-11
    • 2013-06-08
    • 2018-07-08
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    相关资源
    最近更新 更多