はじめに
データ分析の勉強をおろそかにしていたため、コンペを通して実践的に学ぼうと取り組んでいます。
そんな中、LightGBM
をOptuna
でハイパーパラメータチューニングしようとしたときに問題が起きたので、この記事を書きました。
また、このエラーがほぼネットに解決法がなかったです。しかし、起きることがありそうなので早く解決する手助けになればと思います。
環境
- Windows
- Docker
- Python3
- JupyterNotebook
今回の環境はこちらを参考にほぼ同じように作成しています。
あとで詳細は書きますが、これが原因となっていました。
問題
JupyterNotebookで以下のコードでハイパラチューニングをしました。
import lightgbm as lgb
import lightgbm
import optuna.integration.lightgbm as lgbo
trains = lgb.Dataset(train_x, train_y)
valids = lgb.Dataset(val_x, val_y)
params = {'objective': 'regression',
'metric': 'mae'
}
gbm_o = lgbo.train(params,
trains,
valid_sets=valids,
early_stopping_rounds=100,
num_boost_round = 1000,
verbose_eval=200,)
すると以下のエラーが出ます。
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-47-4c0b4b7f1bdb> in <module>()
7 import optuna.integration.lightgbm as lgbo
8
----> 9 opt=lgbo.train(
10 opt_params,
11 trains,
AttributeError: module 'optuna.integration.lightgbm' has no attribute 'train'
optuna.integration.lightgbmにtrainはないよとエラーになっています。
ライブラリは読み込まれているようなので、なぜだろうとなりました。
解決方法
DOckerfileで利用しているイメージが古いのが原因でした。
いまのOptunaで利用されているライブラリを利用しているので、昔のイメージ(ライブラリ)では対応していませんでした。
こちらを全く同じく利用していたため、古いimageでバージョンが固定されています。
# kaggleのpython環境をベースにする
FROM gcr.io/kaggle-images/python:v56
(以下省略)
ですので、最新版にDockerfileで利用しているイメージを変更します。
# kaggleのpython環境をベースにする
FROM gcr.io/kaggle-images/python:latest
(以下省略)
こちらで無事動くようになりました。
おわりに
データ分析をいざやってみようとするとわからないことばかり(知識ばかり)で、実際やってみるとやることはわかるがコードを動かせないという壁に当たってしまいます。
これは毎日ひたすらやっていくしかないなと思いました。
がんばります。
参考サイト