关于这个保存和载入分类器问我的人很多,其实这个问题网上已经有人写了Blog讲如何去做的了,这里我再翻译一下weka wiki上的两篇文章。 http://weka./Saving and loading models http://weka./Serialization Classifiers命令行你可以用-d(dumping)命令保存一个训练后的分类器,比如: java weka.classifiers.trees.J48 -t /some/where/train.arff -d /other/place/j48.model 你可以用-l(load)命令载入一个分类器,并将它用于分类测试数据集,比如: java weka.classifiers.trees.J48 -l /other/place/j48.model -T /some/where/test.arff Explorer一个训练的模型可以用如下步骤保存,以J48为例: 1. 用/some/where/train.arff训练你的模型(也就是分类器)。 2. 在Results list上右击你想要保存的模型。 3. 选择Save model并将它保存到/other/place/j48.model 你可以将上述保存的模型用下面的步骤载入: 1. 用Supplied test set按钮将你的测试数据集/some/where/test.arff载入。 2. 在Results list上右击,选择Load model并选择/other/place/j48.model 3. 在Results list上右击,选择re-evaluate on current test set。 Serializing 这里我们创建一个在/some/where/da //create J48 Classifier cls = new J48();
// train Instances inst = new Instances(new BufferedReader(new FileReader( "/some/where/da inst.setClassIndex(inst.numAttributes() - 1); cls.buildClassifier(inst);
// serialize model ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( "/some/where/j48.model")); oos.writeObject(cls); oos.flush(); oos.close(); 注意: 在version>3.5.5时,这将更简单,最后几行可以缩减为: // serialize model SerializationHelper.write("/some/where/j48.model", cls); Deserializing下面的代码是将前面保存的模型反序列化为cls,cls可以再将用于分类: //deserialize model ObjectInputStream ois = new ObjectInputStream(new FileInputStream( "/some/where/j48.model")); Classifier cls = (Classifier) ois.readObject(); ois.close(); 注意: 在version>3.5.5时,代码更加简单: // deserialize model Classifier cls = (Classifier) weka.core.SerializationHelper .read("/some/where/j48.model");
|
|