概要
optunaでlightGBMを使う際に、
----> 3 lgb.Dataset
AttributeError: module 'optuna_integration.lightgbm' has no attribute 'Dataset'
2 from optuna.integration import lightgbm as lgb
----> 3 lgb.Dataset
/usr/local/lib/python3.10/dist-packages/optuna/integration/lightgbm.py in __getattr__(self, name)
29
30 def __getattr__(self, name: str) -> Any:
---> 31 return lgb.__dict__[name]
32
33
KeyError: 'Dataset'
こういったエラーへの対処法。
結論
-
lightGBMをインストールする
pip install lightGBM
原因
optunaの内部でlightgbm.Datasetを使っているが依存関係で指定されていない。
lightgbmがimportできてなかったら、lgb.Datasetにもimportされず、使えない。
with try_import() as _imports:
import lightgbm as lgb
# Attach lightgbm API.
if _imports.is_successful():
# To pass tests/lightgbm_tuner_tests/test_optimize.py.
from lightgbm import Dataset
from optuna_integration._lightgbm_tuner import LightGBMTuner
from optuna_integration._lightgbm_tuner import LightGBMTunerCV
Google ColabではlightGBMが元からインストールされており、この問題にぶつかることはなかった。基本的にOptunaでlightGBmを使う際は、lightGBMが入っている環境だと思うが、初めてのリモート環境などでは注意が必要。
パッケージ管理はどうなってる
ここから下はエラーとは関係なく、知識として。
optunaは、tomlファイルでパッケージ管理を行っている。(requirements.txtより細かい設定ができるもの。)
[project.optional-dependencies]
のtestの部分に書いてあるパッケージも一緒にインストールする際は、
!pip install optuna-integration[test]
みたいにインストールできる
今回は、標準でlightGBMの依存関係がなかった。おそらく、optuna自体は他のモデルにも使えるために、lightgbmが必須ではないっぽい。でも、使うときにいい感じのエラーは出せないものかな。。。
パッケージ管理にはいろんな方法がある。以下はその例、まとめ。