我有一个xgboost .model文件,该文件是在R中使用lst = ["b","f","j"]
nested_lst = [["a","c","d"],["e","g","h"],["i","k","l"]]
[[j, i, *k] for i,(j, *k) in zip(lst, nested_lst)]
# [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l']]
生成的。现在,我想加载它并在python中使用它。
答案 0 :(得分:1)
由于python的实现无法从字节串加载模型,这似乎是不可能的(编辑:在标准python xgboost库中),根据this github thread
该线程中的注释使用xgboost.core库提供了一种变通方法:
import ctypes
import xgboost
import xgboost.core
def xgb_load_model(buf):
if isinstance(buf, str):
buf = buf.encode()
bst = xgboost.core.Booster()
n = len(buf)
length = xgboost.core.c_bst_ulong(n)
ptr = (ctypes.c_char * n).from_buffer_copy(buf)
xgboost.core._check_call(
xgboost.core._LIB.XGBoosterLoadModelFromBuffer(bst.handle, ptr, length)
)
return bst
如果您使用以下方式读取二进制文件:
with open('xgb_model.model','rb') as f:
raw = f.read()
您应该能够从字节串中加载:
model = xgb_load_model(raw)
答案 1 :(得分:0)
如果您在R中使用xgboost::save("/path/to/file")
保存了模型,则模型将保存在xbgoost-internal binary format
中,
可以通过Python的xgboost
包读取。
首先,通过以下方式在Python中安装
:pip install xgboost
或者如果您是像我这样的conda用户:
conda install -c conda-forge xgboost
然后,通过以下方式加载到Python中:
import xgboost
from xgboost import Booster
booster = Booster()
model = booster.load_model("/path/to/file")
使用R(saveRDS()
)进行保存的其他方式不允许将其轻松转移到Python中。