Azure Machine Learning is the Best Place for LightGBM
Tags: azure, microsoft, machinelearning, lightgbm
Published: 2020-05-14 18:01:49

LightGBM は Microsoft が主導して開発を進めている勾配ブースティングのライブラリです。数多くの実績があり、Microsoft 社内でも利用されています。

{% github microsoft/LightGBM %}

本投稿では、Azure Machine Learning で LightGBM を利用するメリットや実装方法について説明します。

## Azure Machine Learning とは？

Azure が提供する機械学習プラットフォームです。 Python & R のプログラム言語、 機械学習に特化した UI も提供しています。統計解析、従来の機械学習、深層学習、強化学習 (Preview) まであらゆる機械学習要件に対応しています。

![azureml](https://azurecomcdn.azureedge.net/cvt-ad62c8e4101c4ba0d5a132036c66cdb539d5d9e75c449be079f49a6d4d29467e/mediahandler/files/videofiles/thumbnails/azure-ml-video/Capture.PNG)

Web ページ : [Azure Machine Learning](https://azure.microsoft.com/ja-jp/services/machine-learning/)

## LightGBM とは？

アルゴリズムの詳細については数多くのブログで説明されているので、ここでは説明を割愛させていただきます。特徴的な点は下記になると思います。

- 決定木がベースモデル
- アンサンブル学習としてブースティングを採用
- Leaf-wise tree growth
- ヒストグラム法
- 数多くのハイパーパラメータ

分析コンペなどで優秀な成績を残しています。
参考 : [Winning Solutions](https://github.com/microsoft/LightGBM/blob/master/examples/README.md#machine-learning-challenge-winning-solutions)

## モデル学習

### Automated Machine Learning

Microsoft の AutoML といえば、 Azure Machine Learning の自動機械学習 Automated Machine Learning です。 Microsoft Research が開発した _[協調フィルタリングとベイズ最適化の探索アルゴリズム](https://arxiv.org/abs/1705.05355)_ により効率的に高精度モデルを探索します。

![automated-machine-learning](https://azurecomcdn.azureedge.net/cvt-ad62c8e4101c4ba0d5a132036c66cdb539d5d9e75c449be079f49a6d4d29467e/images/page/services/machine-learning/automatedml/learning-models.gif?637250724766804509)

LightGBM は回帰、分類、時系列予測の全てのシナリオでアルゴリズム候補となっており、私の個人的な印象にはなりますが、上位の精度を出すことが多いです。

### LightGBM Estimator

LightGBM は並列学習に対応しており、大量データのハンドリングも出来ます。Microsoft 社内では、Bing のログ解析に LightGBM が利用されています。

また、Azure Machine Learning には LightGBM 専用の Estimator が提供されており、マネージドなインフラを利用できるので、すぐに大規模学習を実行することができます。

Bing チームも Azure Machine Learning の LightGBM Estimator を用いており、最大 13TB 以上のデータを 100台以上の計算環境で並列学習しています。

```python
training_data_list=["binary0.train", "binary1.train"]
validation_data_list = ["binary0.test", "binary1.test"]
lgbm = LightGBM(source_directory=scripts_folder, 
                compute_target=cpu_cluster, 
                distributed_training=Mpi(),
                node_count=100,  # 100台並列の場合
                lightgbm_config='train.conf',
                data=training_data_list,
                valid=validation_data_list
               )

experiment = Experiment(ws, name='lightgbm-estimator-test')
run = experiment.submit(lgbm, tags={"test public docker image": None})
```
ドキュメント : [Bing accelerates model training with LightGBM and Azure Machine Learning
](https://techcommunity.microsoft.com/t5/azure-ai/bing-accelerates-model-training-with-lightgbm-and-azure-machine/ba-p/1006099)

## ハイパーパラメータチューニング

### Hyperdrive
Hyperdrive は Azure Machine Learning が提供するハイパーパラメータチューニング機能になります。LightGBM を利用する際はパラメータチューニングすることが多いので、Hyperdrive の利用は欠かせません。

![hyperdrive-output1](https://docs.microsoft.com/ja-jp/azure/machine-learning/media/how-to-tune-hyperparameters/hyperparametertuningplot.png)
![hyperdrive-output2](https://docs.microsoft.com/ja-jp/azure/machine-learning/media/how-to-tune-hyperparameters/hyperparametertuningparallelcoordinates.png)

Hyperdrive のアウトプット例になります。パラメータ探索は、 `Grid Search`、`Random Search`、`Bayesian Optimization` をサポートしています。


ドキュメント : [Azure Machine Learning でモデルのハイパーパラメーターを調整する](https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-tune-hyperparameters)

## モデル推論

LightGBM は ONNX に変換することができます。[onnxmltools](https://github.com/onnx/onnxmltools) が変換ツールです。Azure Machine Learning で ONNX の推論環境を構築することもできます。

※ ONNX を利用してモデルの相互運用性が向上します。ONNX はオープンソースのモデルフォーマットで、あらゆるプログラム環境で動作します。

ドキュメント : [ONNX と Azure Machine Learning:ML モデルの作成と能率化](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-onnx)

## モデル解釈

LightGBM のモデルから出力される変数の重要度はモデルに影響している説明変数を理解するために用いられます。モデル解釈手法の `Global Surrogate` は、LightGBM のような解釈可能なサロゲートモデルを利用して、複雑な機械学習モデルのグローバル(広域的)解釈を行います。

Azure Machine Learning では Microsoft が OSS で公開しているモデル解釈フレームワーク Interpret Community を利用することができます。

{% github interpretml/interpret-community %}

`Global Surrogate`のようなグローバル解釈だけでなく、`SHAP`などのローカル(局所的)解釈もサポートしています。簡単なコーディングと使いやすいダッシュボードが特徴です。

```python
from interpret.ext.glassbox import LGBMExplainableModel
explainer = MimicExplainer(model, 
                           x_train, 
                           LGBMExplainableModel, 
                           augment_data=True, 
                           max_num_of_augmentations=10, 
                           features=breast_cancer_data.feature_names, 
                           classes=classes)
```

![interpret-community](https://camo.githubusercontent.com/096a1d278e5199fa95e5f2bda67a76d296102114/68747470733a2f2f646f63732e6d6963726f736f66742e636f6d2f656e2d75732f617a7572652f6d616368696e652d6c6561726e696e672f736572766963652f6d656469612f6d616368696e652d6c6561726e696e672d696e746572707265746162696c6974792d6578706c61696e6162696c6974792f676c6f62616c2d6368617274732e706e67)
　

## 他システムとの連携

- Optuna LightGBM Tuner
[Optuna](https://preferred.jp/ja/projects/optuna/) にて LightGBM 専用の Tuner を提供しています。Azure Machine Learning 上で Optuna のパラメータチューニングを行うことも可能です。

- Neural Network Intelligence
[Neural Network Intelligence](https://github.com/microsoft/nni)は、Microsoft Research が開発している AutoML Toookit です。

![nni-log](https://github.com/microsoft/nni/raw/master/docs/img/nni_logo.png)
![nni-flow](https://github.com/microsoft/nni/raw/master/docs/img/overview.svg?sanitize=true)

LightGBM における実装例は、下記ドキュメントをご参照ください。

ドキュメント : [GBDT in nni](https://github.com/microsoft/nni/blob/master/docs/en_US/TrialExample/GbdtExample.md)


## まとめ

Azure Machine Learning は LightGBM に関する機能を数多くご提供しています。ぜひ一度使ってみてください。

## 参考情報

- [Azure 無料アカウントの作成](https://azure.microsoft.com/ja-jp/free/services/machine-learning/)

- [チュートリアル:Python SDK で初めての ML 実験を作成する](https://docs.microsoft.com/ja-jp/azure/machine-learning/tutorial-1st-experiment-sdk-setup)

- [Channel 9 AI Show](https://channel9.msdn.com/Tags/ai?lang=en&lang=ja) (Azure AI の最新機能や動向を動画で紹介)