java - Weka预测分类节点

标签 java machine-learning weka

我创建了一棵巨大的 j48 树,大小约为 7000,有如此多的 Twig 和叶子。我也得到了测试图像的分类结果。我想知道哪个节点正在对每个结果进行分类。换句话说,weka 有没有办法查看做出决定的叶节点的 id 或其他内容。

最佳答案

据我所知,您无法从 Weka GUI 执行此操作。不过,如果您使用 Weka API,还是有一些希望的。我不是 Java 专家,因此以下步骤可能不遵循最佳实践,但它确实适用于我编写的小示例。

  1. 在 Weka GUI 中构建 j48 树,并在“更多选项”选项卡中选择“输出源代码”

  2. 将源代码复制到 Java 代码中的新类

  3. classifyInstance方法中增加返回变量以包含叶编号

  4. 修改类,使其不再扩展“Classifier”(这需要消除刚刚创建的类中的一些其他方法)

下面是一个类,它将使用决策树桩分类器对 Weka 实例进行分类。输出将包括叶编号。这是按照上述步骤根据 Weka 示例数据集中包含的分类天气数据构建的。对于您拥有的巨大决策树,可能需要进行一些字符串替换以有效地增加您的返回变量。

import weka.core.Instance;

public class WekaWrapper {

  /**
   * Classifies the given instance.
   *
   * @param i the instance to classify
   * @return the classification result
   */
  public double[] classifyInstance(Instance i) throws Exception {
    Object[] s = new Object[i.numAttributes()];

    for (int j = 0; j < s.length; j++) {
      if (!i.isMissing(j)) {
        if (i.attribute(j).isNominal())
          s[j] = new String(i.stringValue(j));
        else if (i.attribute(j).isNumeric())
          s[j] = new Double(i.value(j));
      }
    }

    // set class value to missing
    s[i.classIndex()] = null;

    return WekaClassifier.classify(s);
  }
}
class WekaClassifier {
  public static double[] classify(Object[] i) {
    /* outlook */
      double[][] here=new double[3][2];
      here[0][0]=0; //leaf value
      here[0][1]=1; //leaf ID
      here[1][0]=0; //leaf value
      here[1][1]=2; //leaf ID
      here[2][0]=0; //leaf value
      here[2][1]=3; //leaf ID
    if (i[0] == null) { return here[0]; } else if (((String)i[0]).equals("overcast")) { return here[1]; } else { return here[2]; }
  }
}

关于java - Weka预测分类节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19278386/

相关文章:

machine-learning - ML.Net 0.17.0 版本之后 ML.Net MatrixFactorizationTrainer 类发生了什么?

machine-learning - NEAT 算法中调整的适应度

machine-learning - LibSVM 分类到树

java - 使用 Java 中的 Weka 进行基本文本分类

scala - Weka,SimpleKMeans 无法处理字符串属性

java - 无法向请求正文添加新字段

java - 如何调试使用 java 反射调用的代码?

java - 如何在给定起点坐标的情况下找到最近的目标?

java - 如何将 Orchid (Tor Java Lib) 添加到我的项目中?

machine-learning - 通过全名检测性别