Article

2020年1月30日

2020/01/23にMicrosoftのオフィスで開催された、AutoMLハンズオンに参加してきたのでその内容について簡単にブログに残します。
AutoMLと聞くと多くのGoogle社のものを想像されると思いますが、今回はMicrosoftのAzure上で利用できる、Azure Machine Learning(AzureML)というサービスのうちの1機能であるAutoMLのことを指しています。
筆者はデータサイエンスや機械学習専門の人間ではないのですが、AutoMLはまさにそういう人材が使えるためのツールだと考えているので、本ハンズオンを通じて実際に自分の手を動かしてモデルを学習してみました。
なお、記事の内容については専門知識の不足もあり、間違った解釈をしている場合がありますのでご了承ください。

1. Azure AutoMLとは

機械学習モデルをすばやく構築してデプロイすることを目的とした、企業向けのサービスです。
https://azure.microsoft.com/ja-jp/services/machine-learning/
具体的には、データセットとそこから予測したいラベルを渡すと、様々な機械学習手法(線形モデルやランダムフォレスト、LightGBMなど)のモデルを学習し、それらの中から良いものを自動で提案してくれます。
また、予測結果に対して、その理由を人間が理解しやすいように説明してくれる機能もあります(らしい)。

特徴

  • 基本はテーブルベースのデータを利用した機械学習手を行うことができる(線形回帰など)
  • webブラウザ上でjupyter-notebookを使ってプログラムを書くことができる
  • 学習の結果をGUIで操作・調査できる
  • SDKが公開されているので、ローカルのPython処理系で実行もできる
  • 特定のアルゴリズムしか探索しないなどの制限が可能

個人的に印象に残った点

  • 結果のデータを見るためのGUIが使いやすい
  • 現状はテーブルデータを利用する機械学習がメインだが、ディープラーニングはオプションで有効にできる (ネットワークは固定で、NASで生成するわけではない)
  • AutoMLに関連して紹介してもらった、MSが扱っている機械学習テクノロジ一覧がとても参考になった
  • 条件によるが、お金がほぼかからないで利用ができる(2020/01/23現在)

WebのGUIを使った作業方法は別の人が書いてくれると思うので、ここでは手元で作業することになれているプログラマやエンジニアを対象に、ローカルのPythonを使ってAzureMLのAutoMLを学習した後、jupyter notebookで結果を視覚化する方法を紹介します。

上述したように、Azure MLはwebブラウザベースのGUIとpythonからのSDK(他言語もありそう)で利用できます。
料金はクラウド上でJupyterノートブックや機械学習を行うために計算資源(VM)を使うことで発生しますが、
ローカルのPythonでAzureMLのSDKを動かせば、それらが必要なくなるので基本的に無料で利用できます。

AutoMLのモデルの選択処理を実行するために、プログラム中にAzure上のサーバにAPIで問い合わせる処理が入りますが、これも無料だそうです。

2. Azure AutoMLをローカルのPythonで使ってみる

ワークショップでは、自動車の様々な特徴からその価格を予測する回帰問題を解くモデルを、AutoMLを用いて作りました。
資料はLinkedInで見ることができます。

1. 準備

はじめに、上の資料に沿って、ブラウザ上でAzure Machine Learning Studioが使えるように準備をして、ComputeNotebook VMsTraining clusterを作成してください。

1. データセットの作成

次に実際に学習に使うデータセットを登録します。AzureのAutoMLではクラウド上にデータセットを作成して保存しておき、学習する際にそれをIDで参照して利用することができます。
ローカルでもデータセットは普通に作れる(Pandas?)ようですが、今回はデータセットをクラウドで作ることにします。
今回はサンプルに入っている data/automobile.csv を利用します。

データセットの作成は、Azure Machine Learning Studioから行います。

  1. Datasetsタブから”Create Dataset”を選択


  2. データセットの基本情報を入力
    ここで作成したデータセットは、後に名前によってプログラムから呼び出されるので、適切に決めてください。ここでは “automobile” としておきます。
    データセットのタイプはそのまま”Tabular”にしておきます。


  3. “Browse”をクリックし、ローカルから対象のcsvを選択


  4. データを確認し、”Column headers”を”Use Headers from the first file”に変更して、”Next”をクリック
    ここでは各データに割当てるデータ型を指定する事ができます。例えば ID -> Int を ID -> String に変換することができます。


  5. 次の画面で”Next”をクリック
  6. “Create”をクリック

2. データセットの情報を取得する

  1. データセットが作成されている事がわかるので、”automobile”をクリックする


  2. “Sample Usage”にあるsubscription_id, resource_group, workspace_name を確認しておく


3. サンプルプロジェクトを取得する

ワークショップで利用したサンプルコードは以下。
git clone https://github.com/konabuta/Automated-ML-Workshop.git
READMEに従って、開発環境をセットアップしてください。今回はcondaを使用しましたが、普通にpipを使用しても大丈夫たと思います。

cd Automated-ML-Workshop
conda env create -f environment.yml
conda activate automl-workshop
python -m ipykernel install --user --name automl-workshop --display-name "Python (automl-workshop)"

3. サンプルプロジェクトを修正する

サンプルコードはリポジトリ内の Sample/Azure-Machine-Learning/Automobile-regression-explainer-remote.ipynb にあります。
このサンプルは元々AzureMLのクラウド上で使うことを前提としているため、ローカルのPythonで動かす場合は以下のように変更する必要があります。

  1. WorkspaceのインスタンスをIDを用いて生成するように変更
# ws = Workspace.from_config() <- コメントして以下を追加
subscription_id = '{your-subscription_id}'
resource_group = '{your-resource_group}'
workspace_name = '{your-resource_group}'
ws = Workspace(subscription_id, resource_group, workspace_name)

上記のsubscription_id, resource_group, workspace_name は作成したデータセットのから取得したものです。

  1. AutoMLの実行時にクラウドのリソースを使用しないように修正
# from azureml.core.compute import ComputeTarget   <- コメントアウト
# compute_target = ComputeTarget(ws, "cpucluster") <- コメントアウト

...

automl_config = AutoMLConfig(task = 'regression',
                             training_data = train_dataset,
                             label_column_name = label,                             
                             # compute_target=compute_target, <- コメントアウト
                             model_explainability = True,
                             **automl_settings
                            )

4. AutoMLを実行する

環境の準備は終わったので、あとはjupyer-notebookで実際に機械学習を行っていきます。
jupyter-notebookを使わずにVSCodeなどのエディタで開発をしたい方は、notebookは起動せずにそのまま自身の環境で作業を行ってください。ただし、学習を終えてデータを視覚化する際に、VSCodeのPythonプラグインによるnotebookの描画機能やJupyter Labでは、正しく表示できない部分があります。(MSの方曰く、現状は未対応だが将来的に対応予定とのことです)

jupyter notebook

サンプル中のexperiment.submit(...)を実行すると、実際にAutoMLの処理が走り出します

Screen_Shot_2020-01-28_at_12.55.08

以下のようになったら終了です。今回のサンプルは5~10分くらいで処理が完了すると思います。

Screen_Shot_2020-01-28_at_13.01.04

最後に、AzureMLのRunDetailsを利用して、自動で生成された機械学習モデルの結果を確認します。

Screen_Shot_2020-01-!28_at_13.02.50

グラフにプロットすることもできます (以下は正規化平均絶対誤差)。

Screen_Shot_2020-01-28_at_13.08.09

また、AzureMLには自動で生成されてもモデルを人間的に解釈する仕組みがあります。これはデータを描画しつつインタラクティブに操作できるので、人間がモデルの解釈をする作業を効率化できて大変便利です。 この辺の詳細は公式をご参照ください。

まとめ

上の印象に残った点にも書きましたが、Jupyter上でのGUIが大変使いやすいと感じました。また、Microsoftは機械学習モデルの解釈に対してすごく力を入れており、この辺は色々学んでみたいと感じました。

Tags

About Author

takato.yamada

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Recent Comments

Social Media