如何掌握LightGBM培训进度

时间:2019-04-25 16:58:09

标签: python lightgbm

我使用LightGBM模型,它是方法train。并且有一个参数verbose_eval=1打印LightGBM的进度。

lgb.train(params,dataset, verbose_eval=1)

我想了解这一进展(保存在变量中):我从Flask开始训练模型,因此我需要通过REST API发送此进展。

有可能吗?

P.S。一件事使我的问题更加棘手:我使用多处理模块(Process)。我同时运行多个模型。 因此,我不能使用@Mykhailo Lisovyi方法:模型将打印成一个流程。我无法确定来自哪个模型的数据。

1 个答案:

答案 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)

其中mdllgb.LGBMRegressor,train_X,train_y是numpy数组,params_fit是用于配置提前停止的参数