はじめに
最近JupyterLabを使って機械学習の勉強をやっている。
その中でGoogleでの検索結果が古かったOptunaのLightGBMハイパーパラメーター最適化についての調査を記事にしてみようかなと思いたった。
環境
-
jupyter/tensorflow-notebook
- 上記Dockerイメージを起動時に
jupyter lab
を指定している
- 上記Dockerイメージを起動時に
- optuna 2.1.0
やったこと
最初にざっくりまとめ
- OptunaでLightGBMのパイパーパラメーターの最適化がしたい
- ググって出てきたコードをコピペしてもうまく動かない
- なんかbest_paramsなんで引数ないぞと言われる
- 公式ドキュメントをあたる
- 公式ドキュメントのサンプルを試す → 動く
- Githubから過去のサンプルを確認して1.3時点ではbest_paramsがあることを確認 1.4以降はなさそう
- 困った時は公式ドキュメントを読もうね
- ネットの情報と挙動が異なる場合はライブラリとかのバージョンを確認してみるのがいいよね
OptunaでLightGBMのハイパーパラメーター最適化がしたい
まずググってみて出てきたのがこれ
Optuna の拡張機能 LightGBM Tuner によるハイパーパラメータ自動最適化
以下上記ページ記載のコード抜粋
booster = lgb.train(params, dtrain, valid_sets=dval,
verbose_eval=0,
best_params=best_params,
tuning_history=tuning_history)
上記を試してみたところ、以下のエラーが発生した。
TypeError: __init__() got an unexpected keyword argument 'best_params'
ふむ。best_params
なんてキーワード引数ないよ。と言われている。
公式ドキュメント確認
引数が異なるってことはバージョン違いかな?と思ったので公式ドキュメントを確認してみることにした。
Optuna
Githubへのリンクがあったのでそちらに移動
optuna/optuna
公式ドキュメントのサンプルを試す → 動く
optuna/optunaでlightgbm
でリポジトリ内検索
リポジトリ内検索結果
検索結果からそれっぽいものないかなーと見てるとexamples/README.mdがサンプルっぽかったのでそれを確認。
examples/lightgbm_tuner_simple.py
# 引用元を比較しやすいように一部改行してます
model = lgb.train(
params, dtrain, valid_sets=[dtrain, dval],
verbose_eval=100,
early_stopping_rounds=100
)
こちらにはbest_params
がないので現行Verはこれっぽい。
上記で試してみたところ、無事動いた!やったぜ。
ちなみに確認したところ、v1.3.0まではbest_params
あり、v1.4.0からはbest_params
なしになっていた。
解決&感想
実際は上記以外のページとかも確認したりしたけど特に成果がなかったものは割愛している(というか失念しちゃってる)
こういう問題やエラーの調査・解決って成果が出ないときはとことん出ない。成果が出なくてつらくなる。
そういうときは日を改めたり他の人に軽く相談してみたりすると意外と活路が見えたりするのでオススメです。
まとめ
ググった結果でうまく動かない場合は環境やバージョンが異なることが原因であることが多いよ。
仕様やサンプルが公開されているものであれば公式ドキュメントやGithubを参考にすると問題解決の近道であることが多いよ。
(今回は違うけど)エラーメッセージ内容を確認・メッセージで検索してみることも大事だよ。
引数の数や引数自体が違う場合はバージョンが異なる可能性が高いよ。
解決策が見つからないときは他の人に相談してみたり日を改めたりするのも大切だよ。