关于这个保存和载入分类器问我的人很多,其实这个问题网上已经有人写了Blog讲如何去做的了,这里我再翻译一下weka wiki上的两篇文章。
http://weka.wikispaces.com/Saving and loading models
http://weka.wikispaces.com/Serialization
你可以用-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
一个训练的模型可以用如下步骤保存,以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。
这里我们创建一个在/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);
下面的代码是将前面保存的模型反序列化为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");
联系客服