5

比方说,我已经建立了一个模型(例如 J4.8 树)并通过交叉验证对其进行了评估。如何使用此模型对新数据集进行分类?我知道,我可以使用“提供的测试集”选项设置要分类的数据文件,在“更多选项”窗口中标记“输出预测”并再次运行分类。它会产生几乎我需要的东西,但它似乎是一个非常奇怪的工作流程。此外,它会重新创建所有模型,这可能会花费不必要的时间。有没有更直接的方法来使用已经构建的模型进行分类?

4

2 回答 2

6

有几种方法可以做到这一点。

第一

您可以使用命令行来保存和加载模型,-l 和 -d 命令行开关允许您执行此操作。

来自 weka 文档

-l
    设置模型输入文件。如果文件名以“.xml”结尾,
    加载 PMML 文件,如果失败,则加载选项
    从 XML 文件。
-d
    设置模型输出文件。如果文件名以“.xml”结尾,
    只有选项保存到 XML 文件,而不是模型。

第二个

此外,在您生成模型后,使用第二次单击来保存和加载您的模型。看下图

第三个

你也可以为你的分类器生成java代码。这样您就可以保存分类器并再次使用它。请按照以下步骤操作。

  1. 单击更多选项按钮。
  2. 从打开对话的,选择输出源代码。
  3. 给 Classifier Name 赋予更有意义的名称。

这些步骤将为您的 j48 分类器输出 java 类。WekaJ48ForIris 下面的类是由 weka 创建的,用于 Iris 数据集。您可能需要对其进行一些重构以使其更有用。

class WekaJ48ForIris {

  public static double classify(Object[] i)
    throws Exception {

    double p = Double.NaN;
    p = WekaJ48ForIris.N26a305890(i);
    return p;
  }
  static double N26a305890(Object []i) {
    double p = Double.NaN;
    if (i[3] == null) {
      p = 0;
    } else if (((Double) i[3]).doubleValue() <= 0.6) {
      p = 0;
    } else if (((Double) i[3]).doubleValue() > 0.6) {
    p = WekaJ48ForIris.N18c079301(i);
    } 
    return p;
  }
  static double N18c079301(Object []i) {
    double p = Double.NaN;
    if (i[3] == null) {
      p = 1;
    } else if (((Double) i[3]).doubleValue() <= 1.7) {
    p = WekaJ48ForIris.N4544b022(i);
    } else if (((Double) i[3]).doubleValue() > 1.7) {
      p = 2;
    } 
    return p;
  }
  static double N4544b022(Object []i) {
    double p = Double.NaN;
    if (i[2] == null) {
      p = 1;
    } else if (((Double) i[2]).doubleValue() <= 4.9) {
      p = 1;
    } else if (((Double) i[2]).doubleValue() > 4.9) {
    p = WekaJ48ForIris.N3a0872863(i);
    } 
    return p;
  }
  static double N3a0872863(Object []i) {
    double p = Double.NaN;
    if (i[3] == null) {
      p = 2;
    } else if (((Double) i[3]).doubleValue() <= 1.5) {
      p = 2;
    } else if (((Double) i[3]).doubleValue() > 1.5) {
      p = 1;
    } 
    return p;
  }
}
于 2012-05-10T15:19:44.203 回答
2

misc 包中有一个特殊的类 SerializedClassifier,它以模型文件为参数,具有模拟训练阶段。

于 2011-03-17T11:15:28.990 回答