Azureで機械学習プロジェクトを行う流れをまとめておく
[toc]
はじめに
これまでAzureを利用したことないシステムエンジニアが 機械学習プロジェクト(教師あり学習)を試した際の流れを自身のためにまとめておきます。
ネタは、kaggleのTitanic: Machine Learning from Disasterを使います。
大きく以下の3点の処理をAzure上で実現するのが目的。
準備
ワークスペースの作成
ポータルページから「Machine Learning Studio ワークスペース」を押す
「追加」を押し、以下のように項目を埋め、「作成」を押す ※よくわからない箇所は適当 ※無料プランにした
作成できたら「概要」->「Machine Learning Studioの起動」を押すとスタジオページに移動する。
データファイルのアップロード
学習用評価用などのデータをkaggleからローカルPCにダウンロードしておき、 左カラム「DATASETS」から、「NEW」を押しファイルをアップロードしておく。 ※S3のようなストレージに格納されているようだ。
ファイルアクセス用のスニペットを確認
また、適当なファイルを選択し、「GENERATE DATA ACCESS CODE」を押し後に使うノートブックからのアクセス用スニペット(python or R)を確認しておく。
以下が専用のライブラリのようだ。 https://github.com/Azure/Azure-MachineLearning-ClientLibrary-Python https://github.com/Azure/Azure-MachineLearning-ClientLibrary-R
データの前処理とアルゴリズムを試す
ノートブックを起動する
左カラム「NOTEBOOKS」から、「NEW」を押し 「Microsoft Samples」として、様々な種類のノートブックが選択できる。 今回は「Python3 Blank Notebook」を選んだ。 いつものjupyter notebooksが立ち上がるのでここでデータの前処理する。
あとは、学習に使うアルゴリズムを試していけばよい。
TIPS
datasetsからのノートブックへファイルの読み込み
:point_up:先程のスニペットを使う。
ノートブックからdatasetへのファイルの書き出し
import datetime from azureml import Workspace ws = Workspace( workspace_id='xxxxxx', authorization_token='xxxxx', endpoint='xxxxx' ) now = datetime.datetime.now() dataset = ws.datasets.add_from_dataframe( dataframe=df_predictions, data_type_id='GenericCSV', name='logistic_regression_submission_{0:%Y%m%d%H%M%s}.csv'.format(now), description='output' ) # 結果をデータセットに保存
予測結果をファイルに書き出したりする場合は、こんな感じ。 ファイル名が同一だとエラーになるので、日時つけて別名にしたほうがいいかも。
(疑問)「datasets」以外、「trained models」などにはノートブックからデータの読み書きはできない??
学習・パラメータチューニング
「Experiments」を使って GUIで前処理->モデル化->評価の流れの自動化を行う
左カラム「Experiments」から、「NEW」を押し:point_right: 「Blank Experiments」を選択する。 適当に名前をつける(今回は「Titanic survival predictor(2class decision forest)」とした) また、今回はTwo-Class Decision Forestのアルゴリズムを使うことにする。
- 左の「Experiments item」からのようにitemをDDして、コネクタでつなげる。
- それぞれのitemを押して以下のパラメータを変更する
- train.csv
- 右クリで可視化できる
- Select Columns in Dataset
- 学習に必要な特徴量のカラムのみ選択する
- Split Data
- Fraction of rows in the first output datasetを0.8
- Two-Class Decision Forest
- Train Model
- Selected columns:Survivedを選択
- Score Model
- (run後)右クリで可視化できる
- Evaluate Model
- (run後)右クリで可視化できる
- 下部の「Run」を押すと処理が流れる。全部グリーンになればOKっぽい。
- Score Model/Evaluate Modelの中を確認する
(疑問)ここで作成したワークフロー?はコード化できない??
モデルの作成
下部の「Set Up Web Service」 を押す:point_up:と 「Predictive Web Service」が2つあるので(Recomended)のほうを選択してみる。(:question:疑問:question:)
自動でワークフローが変更され、item「Web service input/output」が作られる。 今回は、:point_up:のようにコネクタを繋ぎ変えた。
下部の「RUN」を押すと、モデルの作成が始まり、OKだと 左カラム「trained models」にモデルができている。
システムに組み込む(API化)
また「Experiments」の画面:point_up:の下部「Deploy Web Service」を押す:point_right:と、(classic)と(New)がある、 今回は(new)を使ってみる。
すると、「Azure Machine Learning Web Services」なるページに飛ばされる。 先程作成したモデルがAPIの環境にデプロイされ、
モデルのテストや、swagger形式でwebサービスやバッチ処理のエンドポイント公開されr、その設定やメトリックスの確認まで行えるようだ。
まとめ
- ひと通りazure上での進め方を知った
- azure上のサービスも現在進行中で開発中のようなので、都度できることできないこと確認しながら進めたい
- (:question:疑問:question:)他にもノートブックサービスがあるようだけどどういう違いがあるんだろhttps://notebooks.azure.com/