Microsoft Azure Machine Learnin(以下、AzureML)では、Pythonで独自の機械学習アルゴリズムを開発し、簡単にAPI化する事が可能です。
最近、機械学習の領域ではRやMATLABだけでなく、Pythonもよく使われる様になってきました。理由は様々ですが、データ分析者の目線だと、
numpy,
SciPy,
pandas,
matplotlib,
scikit-learn
といった、分析用ライブラリの充実によって分析が行いやすくなった点が挙げられます。 他にも、ディープラーニング周りで Dato社のgraphlabや Google Brain TeamのTensorFlowといった、強力なライブラリが使えるのが魅力的です。 ちなみに、弊社ではgraphlabやTensorFlowを用いたソリューション例もございます。さて、AzureMLといえば下の画面の様な、GUIで素早く前処理→モデリングが出来る所が特徴だと言うのはよく知られていると思います。 AzureMLには他にもPythonの開発が簡単だという利点もあります。 この記事では、実際にウェブサービスとして公開する所まで、手順を追って見ていきます。
Jupyter(IPython Notebook)とは、ブラウザ内で動くPythonの開発環境の一つです。
AzureMLでは、NOTEBOOKSという名前で用意されています。
NOTEBOOKSでは、Python2とPython3の両方が使用可能です。
この環境の中で、Pythonのコードを組み、アルゴリズムの実験をして、サービスとして公開するまでの作業を行うことになります。
ちなみに、グラフの出力や計算結果を直接DBへ蓄積するといったタスクもこの環境内で実現できます。
更にJupyterでは、コードと一緒に文章も保存しておく事ができます。
つまり、文芸的プログラミングができる環境ということです。
なので、データと文章がバラバラで扱うのが大変… といった事が起きにくくなります。
実際にJupyterを使っている様子は、こんな感じです。
このAzureML上にあるJupyter環境で利用できるモジュール一覧はここにある表で●がついているものです。
併せて、AzureMLのExperimentsで利用出来るモジュール一覧も列挙してあります。
実は、Notebooksにはディープラーニング用ライブラリでお馴染みのtheanoも入っているんです!
では、実際にどれだけ簡単にウェブサービス公開が出来るか、手順を追って見てみましょう。
ここではiris(あやめ)のデータを用い、花弁と萼の長さと幅から(4変数)をrest APIで投げると、どの品種か予測が返ってくるウェブサービスを公開してみます。
ここで作業したものと同じソースファイルを公開します。
irisデータを用意し、AzureMLのNotebooksにインポートして、接続用の文字列を置き換えればこの記事と同じ事が再現できます。
今回実験したスクリプトはPython2で実装しています。
ここでは、統計・機械学習の世界でお馴染みのirisのデータを使います。
このデータは、オープンデータでUCI Machine Learning Repositoryからダウンロードできます。
このデータセットには品種毎に、花弁(花びら)と萼(野菜で言うヘタの部分)の幅と長さがそれぞれ記録されています。
irisデータを予めローカルマシンにダウンロードしておき、AzureMLへアップロードします。
DATASETS→New→FROM LOCAL FILE でアップロードが完了です。
アップロードしたデータは、DATASETSに保存されています。
Pythonで使いたいファイルをチェックして、 GENERATE DATA ACCESS CODE…ボタンを押すと、自動的にデータをロードするPythonスクリプトが生成されます。
このソースをJupyterにコピペするだけで、データロードの準備は完了です。
これとは別に、OPEN IN NOTEBOOKで開いても、自動的にロード用コードが生成されます。
この場合は、Jupyter Notebookも自動的に作成されます。
それでは、先ほどのコードを使ってデータを読み込んで、print()で表示してみましょう。
問題なくロードできていますね!
先ほどのソースに続けて、機械学習を行うコードを書きます。
AzureMLのJupyterには、scikit-learnが用意されています。
なので、一般的に使われる機械学習アルゴリズムがほんの数行のコーディングで利用できます。
実際のケースでは、前処理やモデルの精度検証といった作業を行いますが、今回は割愛します。
今回は、多項ロジスティック回帰でモデリングしています。
scikit-learnがあるので、ほんの少しコードを書くだけで済みました!
これも、AzureML環境に用意されているモジュールを使えばすぐ終わります。
予測する処理を関数でまとめて、デコレータに
の3つを与えればOKです。
入力、出力は関数の引数と戻り値を書く様な要領で書けます。
この処理を実行すると、WEB SERVICES欄に定義した関数名と同じ名前でサービスが登録されます。
これで、機械学習を行うAPIサービスの公開が完了しました!
AzureMLには、作成したAPIサービスの動作を確認する為の機能があります。
この機能で、先ほど公開したサービスが正しく動いているか、実際に動かしてみます。
今回は、I. setosaのデータを1つ選び、元の値から0.1だけズラした値を投入してみます。
ちゃんとI. setosaだと判別されましたね!
これでちゃんとウェブサービスが公開できている事が確認できました。
更に、このAPIを叩くためのスクリプトも、AzureMLでは自動的に用意されています。
なので、公開したサービスを利用するアプリ開発も、素早く行う事ができます。
いかがでしたでしょうか?
AzureMLではPythonでも、素早く簡単に機械学習アルゴリズムをrest API化できる事が確認できたかと思います。
この環境のお陰で、環境構築やサービス化に手間を取られずに済みます。
これで、我々の様な分析者は、データやアルゴリズムそのものに注力でき、モデルを磨き上げる時間が確保できる様になりそうです。