Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization weka序列化模型文件太大_Serialization_Weka_Random Forest - Fatal编程技术网

Serialization weka序列化模型文件太大

Serialization weka序列化模型文件太大,serialization,weka,random-forest,Serialization,Weka,Random Forest,我已经使用weka(java)构建了一个随机林分类器。 我将一个序列化分类器保存到磁盘。但是,序列化文件太大(约100 MB)。此外,如果我训练了更多的实例,文件会越来越大,所以我猜序列化模型也会保存数据。 有没有其他方法可以保存weka分类器?对于较小的输出文件(通常我认为大小应该只取决于模型架构)。 我使用了以下方法进行序列化,所有这些方法都产生相同的文件大小: Weka.core.serializationHelper.write()、Debug.saveToFile()、ObjectOu

我已经使用weka(java)构建了一个随机林分类器。 我将一个序列化分类器保存到磁盘。但是,序列化文件太大(约100 MB)。此外,如果我训练了更多的实例,文件会越来越大,所以我猜序列化模型也会保存数据。 有没有其他方法可以保存weka分类器?对于较小的输出文件(通常我认为大小应该只取决于模型架构)。 我使用了以下方法进行序列化,所有这些方法都产生相同的文件大小:
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分类器中移除样本?您可以训练一个更紧凑的模型。您当前使用的分类器是什么?随机林。我不认为大尺寸是由于模型容量(树的数量等)。它不应该取决于列车的大小。实例的数量会影响树的深度。