LoginSignup
10
6

More than 3 years have passed since last update.

Optunaを使用したLightGBMハイパーパラメーター最適化やりかた調査ログ

Posted at

はじめに

最近JupyterLabを使って機械学習の勉強をやっている。
その中でGoogleでの検索結果が古かったOptunaのLightGBMハイパーパラメーター最適化についての調査を記事にしてみようかなと思いたった。

環境

やったこと

最初にざっくりまとめ

  • 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/optunalightgbmでリポジトリ内検索
リポジトリ内検索結果

検索結果からそれっぽいものないかなーと見てると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を参考にすると問題解決の近道であることが多いよ。
(今回は違うけど)エラーメッセージ内容を確認・メッセージで検索してみることも大事だよ。
引数の数や引数自体が違う場合はバージョンが異なる可能性が高いよ。
解決策が見つからないときは他の人に相談してみたり日を改めたりするのも大切だよ。

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6