这几乎可以应用于任何Java对象,但我在机器学习的背景下,特别是libsvm。我有一个在一个实时Java系统上训练的SVM。有没有办法让系统保存这种对象的状态并将训练的对象移动到不同的 Java 系统?
谢谢。
是的,有几种方法。最简单的方法是像这样序列化训练svm_model
如下ObjectOutputStream
:
import java.io.*;
public class SerializeSVMModel {
public static void main(String [] args) {
// Set up your SVM model
svm_model model = svm_train(...);
// ...
try {
FileOutputStream fileOutputStream = new FileOutputStream("c:/svm/serialized_svm_model.ser");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream );
// Writes the object
objectOutputStream .writeObject(model );
} catch(IOException e) {
e.printStackTrace();
} finally {
if (objectOutputStream != null) {
objectOutputStream.close();
}
}
}
}
要反序列化model
,请使用ObjectInputStream
。
另一种方法是使用 Java Architecture for XML Binding(JAXB)。在这种情况下,您需要编写一个包装类才能访问 svm_model
的字段,因为您需要用注释标记它们。这种方法更好,因为您具有人类可读的 XML 输出文件或其他自定义格式。但是,为此,您需要大量进一步阅读。