💡

LightGBMのtrain関数の引数からコールバックへの移行

2023/10/28に公開

LightGBM: callback覚書

久々にLightGBMをアップデートしたらtrainの引数が変わって既存のコードが動かなくなっていたので移行手順を覚書。

1. early_stopping_rounds -> lgb.early_stopping()

early_stopping_roundstrainの引数からlgb.early_stopping()コールバックになってました。

Before

lgb.train(
    params,
    train_set,
    valid_sets=[train_set, valid_set],
    valid_names=['train', 'valid'],
    num_boost_round=1000,
    early_stopping_rounds=100, # ここが変わった
    verbose_eval=100,
)

After

lgb.train(
    params,
    train_set,
    valid_sets=[train_set, valid_set],
    valid_names=['train', 'valid'],
    num_boost_round=1000,
    callbacks=[lgb.early_stopping(100)], # ここが変わった
    verbose_eval=100,
)

2. evals_result -> lgb.record_evaluation()

学習経過を辞書で取得する際はevals_result引数に辞書を渡していましたが、lgb.record_evaluation()コールバックの引数として渡すようになりました。

Before

evaluations_result = {}
lgb.train(
    params,
    train_set,
    valid_sets=[train_set, valid_set],
    valid_names=['train', 'valid'],
    num_boost_round=1000,
    early_stopping_rounds=100,
    verbose_eval=100,
    evals_result=evaluations_result, # ここが変わった
)

After

evaluations_result = {}
lgb.train(
    params,
    train_set,
    valid_sets=[train_set, valid_set],
    valid_names=['train', 'valid'],
    num_boost_round=1000,
    callbacks=[lgb.record_evaluation(evaluations_result)], # ここが変わった
    verbose_eval=100,
)

3. verbose_eval -> lgb.log_evaluation()

学習中に経過を表示するverbose_eval引数はlgb.log_evaluation()コールバックになりました。

Before

lgb.train(
    params,
    train_set,
    valid_sets=[train_set, valid_set],
    valid_names=['train', 'valid'],
    num_boost_round=1000,
    early_stopping_rounds=100,
    verbose_eval=100, # ここが変わった
)

After

lgb.train(
    params,
    train_set,
    valid_sets=[train_set, valid_set],
    valid_names=['train', 'valid'],
    num_boost_round=1000,
    callbacks=[lgb.log_evaluation(period=100)], # ここが変わった
)

Discussion