Python PR

AutoMLライブラリのFLAMLで機械学習モデルの作成を自動化する

FLAMLで機械学習モデルの作成を自動化する
記事内に商品プロモーションを含む場合があります

こんにちは。現役エンジニアの”はやぶさ”@Cpp_Learningです。

今回はAutoMLライブラリのFLAMLを使い、機械学習モデルを自動作成する方法を紹介します。

AutoMLとは

AutoMLとは、Automated Machine Learningの略称で「手動で行っていた機械学習関連のあらゆる作業を自動化すること」を英語でクールに言ったものです。

本サイトで公開しているAutoMLの記事が以下です。

optunaでハイパーパラメータ最適化 pytorch-ligthning編
Optunaでハイパーパラメータの自動チューニング -Pytorch Lightning編-ハイパーパラメータ自動最適化フレームワークOptunaについて、入門から実践まで学べる記事を書きました。基本的な使い方からpytorch-lightningへの適用例までソースコード付きで公開しています。ご参考までに。...
【Tune-sklearn】機械学習のハイパーパラメータを自動チューニングする -skorch(Pytorch)編-
【Tune-sklearn】機械学習のハイパーパラメータを自動チューニングする -Pytorch(using skorch)編-こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。仕事でもプライベートでも機械学習で色々やってます。 ...
データサイエンス
【AutoML】Laleでパイプライン構築からハイパーパラメータ チューニングまで自動化するこんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。仕事でもプライベートでも機械学習で色々やってます。 ...

本稿はAutoML記事の第4弾になります。

FLAMLとは

FLAMLとは、Microsoft製の高速なAutoMLライブラリ(A Fast Library for Automated Machine Learning & Tuning)です。

特にFastの部分がポイントのようですが、詳細については公式サイトをご確認ください。

スポンサーリンク

実践!FLAMLで機械学習モデルの自動生成

FLAMLで、どれだけ手軽に機械学習モデルを自動生成できるのか実践してみます。

インストール

最初に以下のコマンドで FLAML をインストールします。

pip install flaml

以降からコードを書いていきます。

Import

まずはimportから

【前準備】データセット作成

こちらの記事と同じデータセットを作成します。

このコードで作成したデータが下図です(可視化コードは割愛)。

t-SNEで次元圧縮して可視化

上図のデータ(2クラス)を分類するモデルを、FLAMLで自動生成します。

AutoMLの設定

最初に 探索時間、Metric、Task などを設定します。

estimatorリスト を設定しない場合は、 以下がデフォルト設定(=探索対象)となります。

estimators (task type is classification)
  • lgbm
  • xgboost
  • xgb_limitdepth
  • catboost
  • rf
  • extra_tree
  • lrl1

手動ではツライ「複数の Estimator を比較する作業」を、AutoMLが自動でやってくれるので、「気になる Estimator 2~3個のみを比較したい」などの理由がないなら、デフォルト設定で良いと思います。

FLAMLがサポートしている Metrics Estimators については、以下を参考にしてください。

 学習&探索

scikit-learn 同様、 fit で学習 します。scikit-learn と異なる点は、「Estimator選定」や「ハイパーパラメータ調整」などの探索も fit で完結することです。

[flaml.automl: 03-05 02:47:52] {2068} INFO – task = classification
[flaml.automl: 03-05 02:47:52] {2070} INFO – Data split method: stratified
[flaml.automl: 03-05 02:47:52] {2074} INFO – Evaluation method: cv
[flaml.automl: 03-05 02:47:52] {2155} INFO – Minimizing error metric: 1-accuracy
[flaml.automl: 03-05 02:47:52] {2248} INFO – List of ML learners in AutoML Run: [‘lgbm’, ‘rf’, ‘xgboost’, ‘extra_tree’, ‘xgb_limitdepth’, ‘lrl1’]
[flaml.automl: 03-05 02:47:52] {2501} INFO – iteration 0, current learner lgbm
[flaml.automl: 03-05 02:47:52] {2617} INFO – Estimated sufficient time budget=432s. Estimated necessary time budget=10s.
[flaml.automl: 03-05 02:47:52] {2669} INFO – at 0.1s, estimator lgbm’s best error=0.0619, best estimator lgbm’s best error=0.0619
[flaml.automl: 03-05 02:47:52] {2501} INFO – iteration 1, current learner lgbm
[flaml.automl: 03-05 02:47:52] {2669} INFO – at 0.1s, estimator lgbm’s best error=0.0524, best estimator lgbm’s best error=0.0524
[flaml.automl: 03-05 02:47:52] {2501} INFO – iteration 2, current learner lgbm

(略)

[flaml.automl: 03-05 02:48:20] {2501} INFO – iteration 94, current learner lgbm
[flaml.automl: 03-05 02:48:20] {2669} INFO – at 28.2s, estimator lgbm’s best error=0.0190, best estimator lgbm’s best error=0.0190
[flaml.automl: 03-05 02:48:20] {2501} INFO – iteration 95, current learner extra_tree
[flaml.automl: 03-05 02:48:22] {2669} INFO – at 30.0s, estimator extra_tree’s best error=0.0333, best estimator lgbm’s best error=0.0190
[flaml.automl: 03-05 02:48:22] {2895} INFO – retrain lgbm for 0.0s
[flaml.automl: 03-05 02:48:22] {2900} INFO – retrained model: LGBMClassifier(colsample_bytree=0.5853444225011881, learning_rate=1.0,
max_bin=255, min_child_samples=10, n_estimators=4, num_leaves=5,
reg_alpha=0.04962236929536828, reg_lambda=1.4517932110796898,
verbose=-1)
[flaml.automl: 03-05 02:48:22] {2277} INFO – fit succeeded
[flaml.automl: 03-05 02:48:22] {2279} INFO – Time taken to find the best model: 8.27527928352356
CPU times: user 7.69 s, sys: 591 ms, total: 8.28 s
Wall time: 30 s

設定通りの30秒で学習および探索が終了しました。96回試行した結果、LGBMがベストモデルだったようです。

ベストモデルの確認

以下のコードでベストモデルの情報を確認できます。

Best ML leaner: lgbm
Best hyperparmeter config: {‘n_estimators’: 4, ‘num_leaves’: 5, ‘min_child_samples’: 10, ‘learning_rate’: 1.0, ‘log_max_bin’: 8, ‘colsample_bytree’: 0.5853444225011881, ‘reg_alpha’: 0.04962236929536828, ‘reg_lambda’: 1.4517932110796898}
Best accuracy on validation data: 0.981
Training duration of best run: 0.0111 s

今回の問題設定なら、ベストモデルを探索するのに 0.0111sec あれば十分だったようです。

はやぶさ
はやぶさ
はえー

AutoML ログ

AutoMLの過程は automl.log に記録されます。以下のコードで可視化もできます。

FLAMLで機械学習モデルの作成を自動化する

feature importance(特徴量重要度)

以下のコードで feature importance(特徴量重要度)を可視化できます。

FLAMLで機械学習モデルの作成を自動化する

今回はダミーデータなので、重要な特徴量を把握した所で、何の旨味はありませんが、特徴量重要度や特徴量選定を重要視するケースもあります(下記参照)

sklearn.feature_selection.SelectFromModel
sklearn.feature_selectionで特徴量選定【scikit-learn】こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。仕事でもプライベートでも機械学習で色々やってます。 ...

推論

scikit-learn 同様に predict で推論 します。

Predicted labels [0 0 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 0 0 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 1 1 0 1 0 0 1 1 1 1 1]
True labels          [0 0 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 0 0 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 1 0 1 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1]

今回のテストデータの場合、真値と推論結果で異なるのは2か所でした。

モデルの評価

モデルの評価レポート作成には、scikit-learn のAPIを使うのが楽です。

FLAMLで機械学習モデルの作成を自動化する

問題設定が簡単だった可能性もありますが、複数のEstimator のハイパーパラメータをチューニングしながら、ベストモデルの探索が30秒(=設定時間)で完了しました(前述した通り、結果的には 0.0111sec の探索時間で十分だったようですが)。

くるる
くるる
すごい!
はやぶさ
はやぶさ
素敵!!

フクロウも人間も驚きの性能です。AutoML恐るべし、FLAMLすげー。

学習済みモデルの保存

学習済みモデルは、以下のコードで保存できます。

FLAMLに関係なく、オブジェクトを pickle で保存するのは、よくやる処理です

学習済みモデルの読み込みと推論

先ほど保存した 学習済みモデル:automl.pkl を読み込んで、学習にも評価にも未使用なデータを分類するコードが以下です。

result: [1]

以上で、FLAMLの実践は終了です。

まとめ -FLAMLで機械学習モデルの作成を自動化-

AutoMLライブラリのFLAMLを使い、機械学習モデルを自動作成する方法を紹介しました。

手動ではツライ、機械学習関連の以下の作業を自動化できるのが素敵でした。

  • Estimator選定
  • ハイパーパラメータ調整
  • ベストモデル探索

他のAutoMLライブラリと探索速度を比較したことはありませんが、Fast な印象を受けました。

はやぶさ
はやぶさ
FLAML便利なので、今後も積極的に活用したいと思います

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python