我想从字符串或缓冲区而不是磁盘上的文件加载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: ''
现在,我意识到我可以通过将缓冲区写入磁盘,然后读取它来创建解决方法。但是,这感觉非常多余且效率低下。
因此,我的问题是,如何在不指向磁盘上实际文件的情况下实例化用于预测的模型?
答案 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。