3

我想使用序列化分类器对新实例进行分类。我找到了这门课,但我不明白。

arg[2]= 类属性名称和arg[3]= 从原始数据集预测的实例的基于 1 的索引

这是这个类的代码:

import weka.core.*;
import weka.classifiers.*;

import java.io.*;

/**
 * A little class for testing deserialization and prediction.
 * 
 * @author FracPete (fracpet at waikat dot ac dot nz)
 */
public class Blah {

   /**
    * Takes 4 arguments:
    * <ol>
    *   <li>serialized model</li>
    *   <li>ARFF file</li>
    *   <li>class attribute name</li>
    *   <li>1-based index of an instance to predict from original dataset</li>
    * </ol>
    */
   public static void main(String[] args) throws Exception {
      // read the arff training file
      BufferedReader reader = new BufferedReader(new FileReader(args[1]));
      Instances in = new Instances(reader);
      in.setClass(in.attribute(args[2]));

      // instance to classify
      int index = Integer.parseInt(args[3]) - 1;
      Instance toClassifyInstance = (Instance) in.instance(index).copy();
      toClassifyInstance.setClassValue(Instance.missingValue());

      // deserialize model
      Classifier cls = null;
      ObjectInputStream ois = new ObjectInputStream(new FileInputStream(args[0]));
      cls = (Classifier) ois.readObject();
      ois.close();

      // PREDICTION
      double clsLabel = cls.classifyInstance(toClassifyInstance);
      String classLabel = in.classAttribute().value((int) clsLabel);

      System.out.println(classLabel + " =?= " + in.instance(index).stringValue(in.classIndex()));
   }
}

提前致谢。

4

2 回答 2

4

第一个参数 args[0] 是用于分类的序列化分类器的路径名。下一个参数是 Instances 构造函数期望在 arff 文件中的数据集的路径。该集合必须具有与创建序列化分类器时使用的训练数据中的特征兼容的特征(因此,完全相同的特征以相同的顺序排列)。args[2] 是属性的名称,它是来自 arff 的数据集中的类属性,而 args[3] 是索引加上实例之一,该实例将在类的值之后分类其自身的副本标签已设置为缺失。

如果您尝试对“外部”实例进行分类,例如。如果您已经构建了一些代码,则实例在分类之前仍然必须具有指向某些兼容数据集的链接。这可以使用实例上的方法 setDataset(Instances) 来完成。没有进行兼容性检查,因此您可能需要检查实例上的 checkInstance(Instance)。

于 2011-05-14T22:02:33.553 回答
0

大多数分类器在预测之前需要一组训练数据。该训练数据用于创建模型,然后可用于进行分类。看起来这里发生的所有事情都是他们正在读取已序列化的模型,然后对其进行预测。也就是说,在搅动一些训练数据以创建分类器之后,很可能使用了 ObjectOutputStream (http://download.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html)。

如果这没有回答您的困惑,请进一步澄清您正在寻找的内容。

于 2011-05-09T22:45:55.867 回答