Serialization weka序列化模型文件太大
我已经使用weka(java)构建了一个随机林分类器。 我将一个序列化分类器保存到磁盘。但是,序列化文件太大(约100 MB)。此外,如果我训练了更多的实例,文件会越来越大,所以我猜序列化模型也会保存数据。 有没有其他方法可以保存weka分类器?对于较小的输出文件(通常我认为大小应该只取决于模型架构)。 我使用了以下方法进行序列化,所有这些方法都产生相同的文件大小:Serialization weka序列化模型文件太大,serialization,weka,random-forest,Serialization,Weka,Random Forest,我已经使用weka(java)构建了一个随机林分类器。 我将一个序列化分类器保存到磁盘。但是,序列化文件太大(约100 MB)。此外,如果我训练了更多的实例,文件会越来越大,所以我猜序列化模型也会保存数据。 有没有其他方法可以保存weka分类器?对于较小的输出文件(通常我认为大小应该只取决于模型架构)。 我使用了以下方法进行序列化,所有这些方法都产生相同的文件大小: Weka.core.serializationHelper.write()、Debug.saveToFile()、ObjectOu
Weka.core.serializationHelper.write()、Debug.saveToFile()、ObjectOutputStream.writeObject()您可以将其另存为GZIP。通常它更紧凑
File f = new File(path);
FileOutputStream fileOutputStream = new FileOutputStream(f);
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(fileOutputStream);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(gzipOutputStream);
objectOutputStream.writeObject(yourClassifier);
objectOutputStream.flush();
objectOutputStream.close();
gzipOutputStream.close();
fileOutputStream.close();
要加载它,您可以使用:
File f = new File(path);
FileInputStream fileInputStream = new FileInputStream(f);
GZIPInputStream gzipInputStream = new GZIPInputStream(fileInputStream);
ObjectInputStream objectOutputStream = new ObjectInputStream(gzipInputStream);
Classifier mlClassifier = (Classifier) objectOutputStream.readObject();
objectOutputStream.close();
gzipInputStream.close();
fileInputStream.close();
它将它从73MB减少到13MB,因此它工作正常。但是,模型本身仍然占用大量内存(导致java堆错误)。有没有办法从weka分类器中移除样本?您可以训练一个更紧凑的模型。您当前使用的分类器是什么?随机林。我不认为大尺寸是由于模型容量(树的数量等)。它不应该取决于列车的大小。实例的数量会影响树的深度。