从字符串或缓冲区加载LightGBM模型

时间:2019-04-11 21:15:33

标签: python lightgbm

我想从字符串或缓冲区而不是磁盘上的文件加载LightGBM模型。

似乎有一种名为model_from_string documentation link的方法,但是...会产生错误,这似乎违反了我所理解的方法的目的。

import boto3
import lightgbm as lgb
import io

model_path = 'some/path/here'
s3_bucket = boto3.resource('s3').Bucket('some-bucket')

obj = s3_bucket.Object(model_path)
buf = io.BytesIO()
try:
    obj.download_fileobj(buf)
except Exception as e:
    raise e
else:
    model = lgb.Booster().model_from_string(buf.read().decode("UTF-8"))

会产生以下错误。...

TypeError: Need at least one training dataset or model file to create booster instance

或者,我认为我可以使用常规加载方法

lgb.Booster(model_file=buf.read().decode("UTF-8"))

...但是这也不起作用。

FileNotFoundError: [Errno 2] No such file or directory: ''

现在,我意识到我可以通过将缓冲区写入磁盘,然后读取它来创建解决方法。但是,这感觉非常多余且效率低下。

因此,我的问题是,如何在不指向磁盘上实际文件的情况下实例化用于预测的模型?

1 个答案:

答案 0 :(得分:1)

似乎有一个未记录的参数model_str可用于初始化lgb.Booster对象。

model = lgb.Booster({'model_str': buf.read().decode("UTF-8")})

来源:https://github.com/Microsoft/LightGBM/issues/2097#issuecomment-482332232

贷记到GitHub上的Nikita Titov aka StrikerRUS