在我的 JAVA 代码中使用带有 weka 的 EM 聚类?

Posted

技术标签:

【中文标题】在我的 JAVA 代码中使用带有 weka 的 EM 聚类?【英文标题】:Using EM clustering with weka in my JAVA code? 【发布时间】:2015-06-22 12:14:58 【问题描述】:

我在 weka 中应用 EM 聚类来聚类一些点 (x, y, z)。我在我的 JAVA 代码上写了 EM:

EM em = new EM();
em.setDebug(false);
em.setDisplayModelInOldFormat(false);
em.setMaxIterations(100);
em.setMinStdDev(0.000001);
em.buildClusterer(data_to_use);

当它想要构建时(最后一行),它得到一个错误,这可能是因为它只得到一个集群。我该如何解决这个错误?

【问题讨论】:

说真的,如果您需要我们提供帮助,您需要告诉我们错误消息......也可以考虑使用 ELKI 对我来说更快,并且有更多的聚类算法。 抱歉我的重播迟了。错误是:“weka.core.WekaException: weka.clusterers.EM: 没有足够的训练实例(必需:1,提供:0)!” 【参考方案1】:

您是否尝试过不使用任何其他选项?例如

    EM clusterer = new EM();
    clusterer.buildClusterer(dataClusterer);

尝试使用过滤器来带走Class,否则它会认为这是一个特征,因此只生成1个集群,你可以使用:

    // generate data for clusterer (w/o class)
    Remove filter = new Remove();
    filter.setAttributeIndices("" + (data.classIndex() + 1));
    try 
        filter.setInputFormat(data);
     catch (Exception e) 
        e.printStackTrace();
    

    Instances dataClusterer = Filter.useFilter(data, filter);

    // train clusterer
    EM clusterer = new EM();

    // set further options for EM, if necessary...
    // clusterer.setNumClusters(maxNumofClusters); //-1 for n number of clusters
    clusterer.buildClusterer(dataClusterer);

另一种方法是直接在 weka 中进行评估(创建 arff)

干杯

【讨论】:

TNX 供您重播。它对我不起作用。我不知道为什么。我更喜欢使用“try_catch”。

以上是关于在我的 JAVA 代码中使用带有 weka 的 EM 聚类?的主要内容,如果未能解决你的问题,请参考以下文章

Java、weka LibSVM 预测不正确

在java代码中使用weka过滤器(RemoveType)的选项p

尝试使用带有 Weka 的 Java 对新实例进行分类时出错 - 未定义输出实例格式

如何使用带有 Java 代码的 WEKA 评估类来显示标准差值

在java中使用朴素贝叶斯(weka)进行简单的文本分类

无法在 weka java *WEKA*DUMMY*STRING*FOR*STRING*ATTRIBUTES* 中获取类标签