機械学習プラットフォーム Azure Machine Learning を使ってみた
Microsoft Azure ML (Machine Learning) にふれてみた話です。機械学習の知識はないですが、簡単に使えて、すぐに Web サービスなどに使えそうだったので、トライしてみました。
そもそも、どんなことができるかは、提供されている サンプル一覧 を見るとなんとなくわかります。
Microsoft Azure Machine Learning Gallery
映画のリコメンド、Wiki の説明文から似ている会社を探す、手書き文字の認識(予測)、自動車の価格予測など、いろいろあります。
私が今、Azure ML とあわせて使ってみたいデータはツイートデータですが、ここでは、Azure ML のサンプルを元に紹介します。
Azure ML ワークスペースの作成と ML Studio
はじめに、manage.windowsazure.com でワークスペースを作成します。
作成すれば、ML Studio というものにサインインできます。この ML Studio で、作業します。
Experiment の作成
ML Studio で、Experiment という単位の実験環境を作り、ここで、入力データや学習モデルなどのモジュールを組み合わせて、実行して結果を得ます。そのまま Web サービス化もできます。
新規作成(左下 NEW ボタン)から、元になるサンプルを選びます。サンプルやユーザー投稿が掲載されている、Gallery の各記事にある「OPEN STUDIO」ボタンからも簡単に、その環境をコピーできます。
ここでは、内容がわかりやすかった「Clustering: Group iris data」を選びます。
3種類のアヤメ(iris)の、萼片(がくへん)の長さと幅、花弁の長さと幅のデータセットで、萼片・花弁の情報を元に、3種類に分類するという内容です。UCI Machine Learning Repository で公開されているデータで、人気 No.1 の有名なデータみたいです。
Experiment の画面
入力データの指定とデータの整形のモジュール、機械学習を行うモジュール、結果を整形するモジュールなどが配置されていて、各モジュールの入出力がつながっています。
モジュールを入れ替えて、別の手法を試すのも簡単です。
実行する
このサンプルでは、k-means clustering(k平均法)と multiclass logistic regression(多クラスロジスティック回帰)という手法を使って機械学習し分類しています。
とりあえず、結果をみてみましょう。「RUN」ボタンで実行します。
このサンプルは、数分で結果が出ます。実行中は右上に経過時間が表示され、処理が終わったモジュールには、チェックマークが付きます。
データを見る
処理が終わったモジュールのデータを見るには、出力を表す丸部分をクリックして、Visualize を選びます。
入力データ
入力データはこのような感じ。
Col1~Col4 が萼片・花弁のデータ、Col5 がアヤメの種類です。列を選択すれば、右側の Statistics や Visualizations で値の範囲や分布などもわかって便利です。
K-Means Clustering による結果
次に、結果を見てみましょう。「K-Means Clustering」がつながっている「Train Clustering Model」の先、「Project Columns」のデータを見ます。
Label 列は、入力データからのアヤメの種類。Assignments 列が、萼片・花弁の特徴量を使って、機械学習によって分類された値(0~2)です。
Assignments 列を選択して、右側の Visualizations で「compare to Label」を選びます。
実際のアヤメの種類(Label 列)と、分類した値(Assignments)を比較できます。Iris-versicolor という種類だけ2件、Iris-virginica という種類に分類してしまったことがわかります。
テストデータの結果
このサンプルでは、入力データを分割(Split)して、90個を機械学習に利用して、残りの60個を学習結果のモデルに入力し、テストしています。
モジュールの入力と出力が何かは、接続部分にカーソルを合わせるとわかります。また、クリックして選択した状態では、画面右下の「Quick Help」にも説明とドキュメントへのリンクがあります。
各モジュールの出力をいろいろ見てみるとデータの流れや動作がわかると思います。
「Assign to Clusters」の先の「Project Columns」の結果を見てみましょう。学習済みモデルを使って、分類されているのがわかります。
Multiclass Logistic Regression による結果
Multiclass logistic regression の方は、「Score Model」に学習した結果とテストデータが入力されています。
「Score Model」の出力データを見ると、k-means clustering と形式が違いますが、Scored Labels 列が、分類された結果です。Label 列と比較してみましょう。
「Score Model」はさらに「Evaluate Model」につながり、分類結果の評価を見れます。
Web サービス化する
この Experiment では、ふたつの手法を使っていて、入力データを分割してテストしていますが、実際にサービス化するときは、不要ですよね。少しつなぎかえて次のようにしました。
「Split」を削除して、全データを学習に使います。また、Multiclass Logistic Regression の手法だけにしました(K-Means Clustering の方は、うまく Web API で結果を出す方法がわからなかったので……)。
「Score Model」に、Web Service モジュールを追加して input/output を設定します。「Score Model」の左の入力に接続しているのは、学習済みモデルです。Web API では、学習済みモデルを使ってクラスタリングします。
Experiment 画面の下側に、Experiment/Web Service view 切り替えのトグルがあります。
Web サービスの発行
「PUBLISH WEB SERVICE」ボタンから Web サービスを作れます。
クリックすると Web サービス画面に移動します。
リクエスト/レスポンス タイプとバッチ実行タイプの Web サービスができました。エンドポイントの URL にアクセスすることで API を実行します。API のヘルプドキュメントもできています。
リクエスト/レスポンス タイプは、Web Service モジュールで指定した input データをリクエスト時に送ると、output 部分のデータをレスポンスとして得ます。データは JSON でやりとりします。
バッチ実行タイプは、API で、処理の開始指示や、実行状態の確認ができます。
サービスのテスト
リクエスト/レスポンス タイプは、「Test」をクリックして動作確認できます。
input データを入力します。
フッターのメッセージ欄に結果が出ます。
おわりに
……という感じで、いろいろなサンプルの記事を読んで、実行して、結果を見てみると、いろいろ使えそうです。
データの整形
入力データは、Web や SQL Server、アップロードした CSV などいろいろ対応しています。空白行削除や、空白を 0 に置き替えなど簡単の整形であれば、用意されているモジュールが使えます。
また、入出力データの整形には、R 言語と Python も使えます。
他には、OpenCV ライブラリモジュールや、Feature Hashing などテキスト解析用のモジュールも用意されています。
機械学習モジュール
機械学習で用意されているモジュールは次の通りです。詳しくは、Machine Learning Module Reference を参照してください。