2017-05-25 56 views
0

我使用weka(在java中)構建了一個隨機森林分類器。 我將一個序列化的分類器保存到磁盤。但是,序列化文件太大(大約100 MB)。此外,如果我對更多的實例進行了訓練,文件變得越來越大,所以我猜測序列化模型也會保存數據。 還有另一種方法來保存weka分類器嗎?而對於較小的輸出文件(通常我認爲大小應該僅取決於模型架構)。 我用下面來serilization,所有產生相同的文件大小: Weka.core.serializationHelper.write(),Debug.saveToFile(),ObjectOutputStream.writeObject()weka序列化模型文件太大

回答

0

您可以將其保存爲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(); 
+0

其從73 MB減少它只有13 MB - 所以它的工作。 但是,模型本身仍然佔用大量內存(導致java堆錯誤)。有沒有辦法從weka分類器中移除樣本? –

+0

您可以訓練更緊湊的模型。你目前使用什麼分類器? – AndreyF

+0

隨機森林。我不認爲這個龐大的規模可以模擬容量(樹木數量等)。它不應該取決於火車的大小。 –