我使用LightGBM模型,它是方法train
。并且有一个参数verbose_eval=1
打印LightGBM的进度。
lgb.train(params,dataset, verbose_eval=1)
我想了解这一进展(保存在变量中):我从Flask开始训练模型,因此我需要通过REST API发送此进展。
有可能吗?
P.S。一件事使我的问题更加棘手:我使用多处理模块(Process
)。我同时运行多个模型。
因此,我不能使用@Mykhailo Lisovyi方法:模型将打印成一个流程。我无法确定来自哪个模型的数据。
答案 0 :(得分:2)
您直接捕获catch stdout和stderr。我使用了this gist中的解决方案。我没有使用本机培训API的经验。但是,使用lightgbm的sklearn API可以做到:
import sys
from io import StringIO
def capture_out(func):
try:
old_stdout = sys.stdout
result = StringIO()
sys.stdout = result
func()
result_string = result.getvalue()
return result_string
finally:
sys.stdout = old_stdout
def fit_model():
mdl.fit(train_X, train_y, **params_fit)
capture_out(fit_model)
其中mdl
是lgb.LGBMRegressor
,train_X,train_y是numpy数组,params_fit
是用于配置提前停止的参数