簡體   English   中英

Python:使用舊版本的 xgboost 重新保存 model 會影響 model 的性能嗎?

[英]Python: Will resaving model with older version of xgboost affect model performance?

我有一個 model 使用 Python 3.9.6 和 xgboost==1.6.1 保存在我的本地計算機上。 我使用以下方法保存了它:

filename = 'model.sav'
pickle.dump(model, open(filename, 'wb'))

但是,我必須將它加載到使用 Python 3.6.9 和 xgboost==1.5.2 的環境中。 我無法在那個環境中升級 Python 以便我可以使用 xgboost==1.6.1。 有什么辦法可以讓我在這個單獨的環境中打開我的 model 嗎? 如果我在本地機器上卸載並重新安裝舊版本的 xgboost 以保存它,這會影響我的 model 嗎?

更新:我嘗試了 James 給出的解決方案,但隨后出現錯誤:

File "/home/ubuntu/.local/lib/python3.6/site-packages/xgboost/core.py", line 218, in _check_call
    raise XGBoostError(py_str(_LIB.XGBGetLastError()))
xgboost.core.XGBoostError: [14:36:00] ../include/xgboost/json.h:73: Invalid cast, from Integer to Boolean
Stack trace:
  [bt] (0) /home/ubuntu/.local/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(+0xcb05d) [0x7fe0cb50b05d]
  [bt] (1) /home/ubuntu/.local/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(+0xd40a5) [0x7fe0cb5140a5]
  [bt] (2) /home/ubuntu/.local/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(+0x24a7f0) [0x7fe0cb68a7f0]
  [bt] (3) /home/ubuntu/.local/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(+0x1996f2) [0x7fe0cb5d96f2]
  [bt] (4) /home/ubuntu/.local/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(+0x17a712) [0x7fe0cb5ba712]
  [bt] (5) /home/ubuntu/.local/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(+0x1b6432) [0x7fe0cb5f6432]
  [bt] (6) /home/ubuntu/.local/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(XGBoosterLoadModel+0x5c8) [0x7fe0cb4dec08]

根據 xgboost 文檔,使用

model.save_model("model.json")
model.load_model("model.json")

從不同版本的 XGBoost 加載腌制文件

如前所述,腌制 model 既不便攜也不穩定,但在某些情況下腌制模型很有價值。 將來恢復它的一種方法是使用特定版本的 Python 和 XGBoost 將其加載回來,通過調用 save_model 導出 model。

關於模型和 memory 快照的向后兼容性的說明

我們保證模型的向后兼容性,但不保證 memory 快照的向后兼容性。

模型(樹和目標)使用穩定的表示,因此在早期版本的 XGBoost 中生成的模型可以在更高版本的 XGBoost 中訪問。 如果您想存儲或歸檔 model 以進行長期存儲,請使用 save_model (Python) 和 xgb.save (R)。

另一方面,memory 快照(序列化)捕獲了 XGBoost 內部的許多內容,其格式不穩定且經常更改。 因此,memory 快照僅適用於檢查點,您可以在其中保留訓練配置的完整快照,以便您可以從可能的故障中穩健地恢復並恢復訓練過程。 加載由早期版本的 XGBoost 生成的 memory 快照可能會導致錯誤或未定義的行為。 如果 model 使用 pickle.dump (Python) 或 saveRDS (R) 持久化,則在 XGBoost 的更高版本中可能無法訪問 model。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM