【问题标题】:Porting Java object including state (trained LIBSVM)移植包含状态的 Java 对象(经过训练的 LIBSVM)
【发布时间】:2016-08-21 21:41:44
【问题描述】:
这几乎可以应用于任何 Java 对象,但我是在机器学习的上下文中询问的,特别是 libsvm。我有一个在一个实时 Java 系统上训练的 SVM。有没有办法让系统保存此类对象的状态并将经过训练的对象移动到不同的 Java 系统?
谢谢。
【问题讨论】:
标签:
java
oop
object
machine-learning
libsvm
【解决方案1】:
是的,有几种方法。最简单的方法是像这样用ObjectOutputStream 序列化训练好的svm_model:
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 输出文件或其他自定义格式。但是,您需要大量进一步阅读。