在python中加载xgboost模型,该模型由R中的`xgboost :: save()`保存

时间:2019-06-08 11:42:29

标签: python r xgboost

我有一个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中使用它。

2 个答案:

答案 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中。