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

Load LightGBM model from string or buffer

我想从字符串或缓冲区而不是磁盘上的文件加载 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: ''

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

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

似乎有一个未记录的参数 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