# 2022/8/27 PyData Osaka #25 ミートアップ (MLFlow+Optuna+Catboostでハイパラ探索の記録)
###### tags: `Meetup`
HackMDは共同でリアルタイムにMarkdownで編集が可能なWikiのようなものです。何か質問・メモなどありましたらご自由に書き込んでいただければと思います。
上部のペンや目の形などのアイコンをクリックすることで編集モード・編集&閲覧モード・閲覧モードを切り替え可能です。
最下部右側のあたりからキーバインドを変更することも可能です。
## PyData Osakaの紹介
PyData Osakaのウェブサイト https://osaka.pydata.org/
スライドへのリンク https://docs.google.com/presentation/d/1rjxxqk91ji09stdaOlS9Cf6OPu7v2XUZ13e58FpX1oc/edit?usp=sharing
## Zoom について
気軽に音声、ビデオオンオフしていただいて問題ありません。
音声質問してくださっても問題ありません。
## よしおかさん講義的なもののメモ
### 自己紹介
* Laboro aiという会社で1月からエンジニアリング部長
* 本日はMLFlow, CatBoostとOptunaを使ったハイパーパラメータのチューニングについて話す
* 機械学習はずっとやってきているが強化学習をメインでやってきた
### 今回の情報
* PyData Osakaのリポジトリのlearn-mlflowに存在
* https://github.com/PyDataOsaka/learn-mlflow
* スライドも中に存在している
* cloneしたリポジトリの learn-mlflow/notebook/optuna/MARP.md
* https://github.com/PyDataOsaka/learn-mlflow/blob/main/notebook/optuna/MARP.md
* vscodeにmarpのプラグインを入れることでスライド表示になる
### 環境構築
* 発表と並行して先に行っておく
* 環境構築方法はhttps://github.com/PyDataOsaka/learn-mlflow のREADME.mdに記載がある
* pyenvを使って入れたpython 3.9.0を使う
* (注;大橋)pyenvはwindowsだと使えないので代わりにpyenv-winを入れるか、あるいはpyコマンドを使って実際に実行するpythonを切り分けるといった必要が生じると思います
* https://www.python.jp/install/windows/py_launcher.html
* M1/M2 MacだとOPENBLASをbrewで入れたものにする必要がある
* pyenv install 3.9.0は割と時間がかかる
* `source venv/bin/activate` は Windows の場合 `source venv\Scripts\activate.bat` になるかもです。
* Windows + mambaforge 環境だと下記のようなエラーに遭遇
```
(venv) (base) C:\Users\hoge\Documents\GitHub\learn-mlflow>pip install --upgrade pip
Requirement already satisfied: pip in c:\users\hoge\venv\lib\site-packages (22.0.4)
Collecting pip
Downloading pip-22.2.2-py3-none-any.whl (2.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 1.3 MB/s eta 0:00:00
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 22.0.4
Uninstalling pip-22.0.4:
Successfully uninstalled pip-22.0.4
ERROR: Could not install packages due to an OSError: [WinError 5] アクセスが拒否されました。: 'C:\\Users\\hoge\\AppData\\Local\\Temp\\pip-uninstall-e0am5rq1\\pip.exe'
Check the permissions.
* mambaforge (== condaforge) 環境は `learn-mlflow` 用には適してないかもしれない。poetry installで下記が出るかも。 
* mamba/conda を使いたい場合は、必要なパッケージは基本的にpipではなくmamba/condaを使ってinstallした方がいいのかも。
* Windows で `learn-mlflow` を実行したい方は WSL2 環境内の Ubuntu あたりがいいかもです。
```
* 手順4でpoetryが存在していない場合はpip install poetryが必要
* macOS環境、Homebrew環境で`openblas`をインストールしていない場合は`brew install openblas`が必要
### スライド
https://github.com/PyDataOsaka/learn-mlflow/blob/main/notebook/optuna/MARP.md
### 目標
* ハイパーパラメータ探索結果の可視化
* MLflow Trackingによる実験管理
### 構成要素の説明
* Titanicデータセット
* タイタニック号沈没事故での搭乗者の属性の記録
* 元々UCLのデータリポジトリにあったが、今回はseabornのAPIを用いて取得
### 前処理
* dfはpandasのDataFrameのインスタンス
* ceはcategorical encoder
* pipelineの前処理として使用(後述)
### sklearnのpipeline
* 通常のsklearnのモデルと同じAPIで扱うことが可能
* `Pipeline([('名前', model), ('名前', model)])`
* pipelineの実行でmodelが順番に実行される
* 前処理をpipelineに挿入可能とするためには`transform()`と`fit_transform()`を定義したクラスを準備
### CatBoost
* アルゴリズムに興味がある場合はarxivの論文を読む
* XGBoostなどと比較しても良い性能を示すことが載っている
* 特徴
* パラメータチューニングなしで良い性能
* カテゴリカル特徴量をサポート(ライブラリ名の由来)
* 高速かつスケーラブルなGPUバージョン
* 正確
* 高速な予測
* 使う分に数式を理解する必要はない
* 他のscikit learnのモジュールと同じように使用することが可能(インスタンスを生成してfitを呼ぶ)
* ハイパーパラメータ
* depth, learning_rate, random_strength, l2_leaf_reg
* チューニングしてもあまり性能が今回は変わらなかった(後ほど見る)
### optuna
* PFNが開発しているOSSのハイパーパラメータ自動最適化フレームワーク
* 以下のインタフェースを提供
* `optuna.Trial`ハイパーパラメータの分布を定義
* 目的関数 - `optuna.Trial`を引数にとり目的値を出力する関数
* `optuna.study.study.optimize()`
* 目的関数を最適化
* 探索範囲の定義
* ベイズ最適化なのでpriorを定義
* objective関数は`optuna.Trial`を引数に取り、内部でパイプラインを実行しスコアを計算
* `optuna.study.Study`オブジェクトを生成しoptimize()の実行で最適化
### MLflow
* 4つのコンポーネントから構成
* MLflow Tracking -実験管理
* 最も手軽に使いやすい
* MLflow Projcects 再現可能なコード
* MLflow Models MLモデルの多様な環境へのデプロイ
* MLflow Model Registry MLモデルリポジトリ
### MLflow Tracking
* 実験をrunという単位で管理
---
### 15時まで休憩
---
### 考え方の共有
- optuna と scikit-learnの\*scoring の違いって何だろう ?
- optuna の方が端的に言ってかしこい
- optuna があったら mlflow って要るのかな?
- 実はoptunaにもパラメータに対するメトリクスの可視化機能とかはあると思う
- けど今回はよく用いられているmlflowを試したかったので上記機能をmlflowに担当させた形になる
{"metaMigratedAt":"2023-06-17T07:15:14.744Z","metaMigratedFrom":"Content","title":"2022/8/27 PyData Osaka #25 ミートアップ (MLFlow+Optuna+Catboostでハイパラ探索の記録)","breaks":true,"contributors":"[{\"id\":\"87a9bb52-b225-40a9-8ebc-f297340c2e25\",\"add\":36,\"del\":1},{\"id\":\"d7ce8608-61a6-40ce-92c9-19d313920ec2\",\"add\":1555,\"del\":35},{\"id\":\"703ee3d7-3768-484b-a388-486ab4e37cbe\",\"add\":2634,\"del\":3},{\"id\":null,\"add\":76,\"del\":0}]"}