「クラウドではじめる機械学習 Azure ML でらくらく体験」書評

6 月に発売された書籍「クラウドではじめる機械学習 Azure ML でらくらく体験」を献本していただき、
書評を書くことになりました。

Azure Machine Learning の登場により、機械学習の専門の開発者でなくても、機械学習を Web で利用できるようになりました。
本書では機械学習の仕組みと Azure Machine Learning の手順が示されており、
実際のデータで機械学習を試しながら身に付けることができます。

クラウドではじめる機械学習 Azure ML でらくらく体験
クラウドではじめる機械学習 Azure ML でらくらく体験

 

主な章の構成

  • Chapter 3: 機械学習で実現できること
    • 機械学習とは何かを知るための概要
    • おそらく、多くの読者がまず知りたい部分
  • Chapter 4~7: 機械学習の各手法 (回帰、クラスタリングなど) についての理論と実践
    • 数学をベースとした、機械学習の仕組みの説明
    • Azure Machine Learning で各手法を使うための手順
  • Chapter 8: Web サービス化
    • 任意のアプリケーションから呼び出して使うには、機械学習の Web サービス化が必要
    • 主にソフトウェア開発者向け

 

本書の特徴

機械学習の各手法の理論について、数学をベースとした説明がなされているため、
アルゴリズムの選択やチューニングの指針の理解が深まり、応用範囲が広がるでしょう。
例えば、「線形回帰」と「ベイズ線形回帰」の違いや使い分けについて理解できるようになります。

 

対象となる読者

「難しそう」という先入観で機械学習に手を出せなかった人におすすめします。
想定されるロールは次のような感じでしょうか。

  • ソフトウェア開発者
  • データ分析者 (開発者とは限らない)

本書には、数学の知識があまりない人でも理解できるようにと義務教育レベルからの数学の解説があります。
しかし、機械学習の仕組みを理解するには数学 (とくに確率統計) への慣れが必要であり、さすがに無理を感じます。
数学の経験を持つ人でも機械学習を机上だけで理解するのは難しく、理論と実践の反復が必要になると思います。

とはいえ、とりあえず手順通りに実行してみればだんだん理解できるようになるのかもしれません。

 

不足を感じる部分

Azure Machine Learning についての説明がところどころ十分ではないように見えます。
例えば次の内容についてです。

  • データ型、カテゴリ、ラベルなど
  • Web Service Parameters

必要に応じて公式ドキュメントを参照するとよいでしょう。

 

Azure Machine Learning 自体のよいところ

Azure Machine Learning は Web 上のサービスとして提供されており、
しかもドラッグ アンド ドロップを中心とした GUI でモデリングができるため、
ワークフローを短時間で構築できて学習効率が高いです。

また、任意のアプリケーションから機械学習を利用できるようにするためには、
ワークフローを Web サービスとして発行する必要がありますが、ボタン 1 つで発行できるようになっています。

処理をカスタマイズしたい場合は、R や Python で処理を記述することもできます。

Azure Machine Learning で色のクラスタリング (3)

前回の Azure Machine Learning で色のクラスタリング (2) では、
学習済みのクラスタリング モデルを利用して、新たなデータをクラスターに割り当てる方法を示しました。

この学習済みのクラスタリング モデルは、保存して再利用することができます。
[Train Clustering Model] の出力の左側の ○ を右クリックして、
[Save as Trained Model] をクリックします。

image

名前を付けます。

image

これで保存ができました。

image

Experiment 上で [Trained Models] から選択できるようになります。

image

 

では次に、この保存した学習済みクラスタリング モデルを Web サービス化してみましょう。
学習済みモデルに [Assign to Clusters] を接続します。

image

さて、上の図のようにモデリングして、
最終的に ColorData.csv の部分を Web サービスの入力に差し替えればよいはずなのですが、
なぜかこの入力データの部分の行数が少ないと、
結果の Assignments がすべて行数未満の数値になってしまうという現象が発生しています。
(2 行のときは、0 または 1 にしかならない。)

image

 

仕方がないので、次の図のように、ダミーのデータを 10 件用意しておき、
入力データに追加して Assign to Clusters を通し、Execute R Script で削除するようにしました。

image

後方の 10 件を削除するための R のスクリプトは次の通りです。

[Prepare Web service] をクリックします。

image

すると、Web サービスの入力および出力を示す青色のモジュールが追加されます。
次の図のように線を接続します。

image

この状態で実行します。
完了すると、ボタンが [Publish Web service] に変わるので、これをクリックします。

image

 

これで、Web サービスが発行されました。

image

HTTP ベースのインターフェイスの説明をはじめとして、ヘルプ ページが自動的に生成されます。
API を呼び出すための Excel ファイルまで用意されています。

image

[Test] をクリックして、API のテストをしてみましょう。
必要な情報を入力して実行します (今回は色相だけ入力すれば十分です)。

image

結果は下の部分に表示されます。

image

 

さらに、C# のコンソール アプリケーションから API を呼び出してみましょう。
サンプル コードがヘルプ ページ上に生成されているので、これをコピーして使います。

image

NuGet で Microsoft.AspNet.WebApi.Client をインストールして、API キーを設定します。
あとは入力データを設定します (今回は色相だけ入力すれば十分です)。

image

実行します。
運が良ければ 1 秒程度で結果が返ってきますが、運が悪いと 20 秒くらいかかることもあります。

image

試してみた操作はこれで以上です。

 

まとめ・注意点

  • Machine Learning を利用するにあたり、.NET の知識は必要ありません。
    (Machine Learning 単体では、.NET とは直接関係ありません。)
  • クラスタリングはアルゴリズムの選定で迷うところがないので、とりあえずデータさえあればできるという印象です。
  • まったく同一のデータ ファイルおよびアルゴリズムで実行すれば結果は同じになりますが、
    評価に関係ない列の値が変わるだけで結果が変わることがあります。
  • 現在の Machine Learning は、米国中南部リージョンでのみ提供されています。

 

前回: Azure Machine Learning で色のクラスタリング (2)

作成したサンプル
Clustering Colors 4: Web service API (Azure ML Gallery)
AzureMLSample (GitHub)

Azure Machine Learning で色のクラスタリング (2)

前回の Azure Machine Learning で色のクラスタリング (1) では、
色データを色相でクラスタリングし、その結果をストレージに出力するところまで完了しました。

image

このクラスタリングの結果 (ColorData-Hue-10.csv) を WPF で視覚化したものがこちらです。
(全体のソースコードは GitHub の AzureMLSample にあります。)
クラスター数はもう少し大きめでよかったかもしれません。

image

 

いろいろ評価条件を変えてクラスタリングを試してみましょう。
次の図のように、先ほどのモデルの右側に、同様のモジュールを 3 種類追加します。
モジュールを複数選択して、コピー アンド ペーストすると速いです。

image

追加した 3 系統では、次のようにパラメーターを設定します。

(i)
クラスター数: 20
対象列: R, G, B
出力ファイル名: ColorData-RGB-20.csv

(ii)
クラスター数: 20
対象列: Hue, Saturation, Brightness
出力ファイル名: ColorData-HSB-20.csv

(iii)
クラスター数: 20
対象列: R, G, B, Hue, Saturation, Brightness
出力ファイル名: ColorData-All-20.csv

 

また、全列の値のスケールを合わせるため、[Normalize Data] を追加しています。
スケールを合わせないと、値の範囲の大きさにより列ごとに重みが変わります。
[Transformation method] で [MinMax] を選択すれば、0 から 1 までの範囲の値に線形変換されます。

image

 

実行して結果を見てみましょう。
全体的に、色相以外の彩度および明度の特徴も出ています。

(i) R, G, B

image

(ii) Hue, Saturation, Brightness

image

(iii) R, G, B, Hue, Saturation, Brightness

image

 

次に、学習済みのクラスタリング モデルを使って、新たな色データを各クラスターに振り分けてみましょう。

新たな色データとして、NIPPON COLORS – 日本の伝統色に記載されているものを利用します。
最初の ColorData.csv と同じようにデータを準備します。

image

この色データ (ColorData-JP.csv) をデータセットとしてアップロードし、
色相でクラスタリングしたときの Experiment を次のように変更します。

image

[Assign to Clusters] は、新たな入力データを学習済みのクラスターに振り分けるためのものです。
プロパティの対象列で Hue を選択します。

image

実行結果はこの通りです。
最初の ColorData-Hue-10.csv と同様のクラスターに色が振り分けられています。

image

 

次回は Web サービス化についてです。

前回: Azure Machine Learning で色のクラスタリング (1)
次回: Azure Machine Learning で色のクラスタリング (3)

作成したサンプル
Clustering Colors 2: by various features (Azure ML Gallery)
Clustering Colors 3: Assign new data to clusters (Azure ML Gallery)
AzureMLSample (GitHub)

参照
NIPPON COLORS – 日本の伝統色

Azure Machine Learning で色のクラスタリング (1)

最近ついに正式版となった Microsoft Azure Machine Learning では、
次に挙げるようなさまざまな種類の機械学習アルゴリズムをクラウドの PaaS として利用できます。

  • Supervised Learning (教師あり学習)
    • Classification (分類)
          非連続値を対象とする場合
          two-class (二値) と multi-class (多値) がある
    • Regression (回帰)
          連続値を対象とする場合
  • Unsupervised Learning (教師なし学習)
    • Clustering (クラスタリング)
    • Recommendation (レコメンデーション)

このほか、GUI ベースでモデリングできることや Web API として迅速に公開できることなども特徴です。

 

以下では Microsoft Azure Machine Learning を利用して、色のデータをクラスタリングしてみます。
今回は、色相を基準にクラスタリングして、その結果をストレージに出力することにします。

まず、次のコンソール アプリケーションにより、System.Drawing.Color で定義されている色のデータセットを作成します。

これを実行して、140 件の色のデータ ファイル (ColorData.csv) ができました。
(Cyan と Aqua はともに #00FFFF、Magenta と Fuchsia はともに #FF00FF で同じ色です。)

image

 

では次に、Azure の管理ポータルで、Machine Learning のワークスペースを作成します。

image

作成が完了したら、ワークスペースを選択して [Studio で開く] をクリックします。
これで、Machine Learning Studio が新しいタブで開きます。

image

 

ここからは Machine Learning Studio での操作です。

Experiment を作成する前にまず、データセットをアップロードしておきましょう。
先ほどの CSV ファイルを選択します。
アップロードすると、自動的にストレージにコンテナーが作成され、そこにファイルが保存されます。

image

次に、本題の [Blank Experiment] を作成します。
(なお、多くのサンプルが用意されているので、いろいろ試してみると理解につながるでしょう。)

image

 

この Experiment でモデリングや実行ができます。
まず、[Saved Datasets] から [ColorData.csv] を選べるようになっているので、
これを中央のスペースにドラッグ アンド ドロップします。

image

 

残りのモジュールもドラッグ アンド ドロップで配置していきます。とりあえずは、次のように配置します。
各モジュールには ○ の部分があり、上側は入力、下側は出力を表しています。
それぞれを矢印で結ぶには、○ の部分を始点から終点までドラッグします。

image

クラスタリングで選べるアルゴリズムは [K-Means Clustering] (k 平均法) のみです。
プロパティの [Number of Centroids] はクラスターの数を表します。
この値は実行時に決まるわけではなく、あらかじめ指定されなければなりません。
今回は 10 に設定しておきます。

image

[Execute R Script] では、次のスクリプトを指定します。
元の色データでは、Saturation (彩度) が 0 の色の Hue (色相) が 0 になってしまっているため、
赤とグレースケールが混同してしまいます。
そこで、グレースケールの Hue を便宜的に -60 に補正します。

[Train Clustering Model] では、クラスタリングに用いるための特徴を指定する必要があります。
[Launch column selector] をクリックします。

image

今回は、とりあえず色相のみで判定させることにします。Hue のみを選択します。

image

ここでいったん、[Run] をクリックして Experiment を実行します。
実行が完了すると、緑色のチェック マークが付きます。
これで、クラスタリング モデルの学習までできました。

image

 

結果を出力するため、モジュールを 2 つ追加します。

image

[Project Columns] では、最終的に出力する列を絞ります。
Assignments 列に、実行結果のクラスターの番号が入ります。
なお、先ほどの時点で Experiment を実行しておかないと、列名の候補が自動で出てきません。
こまめに実行しながらモデリングを進めるとよいでしょう。

image

 

ここで、いったん Azure 管理ポータルに戻り、結果データの出力先となるコンテナーをストレージに作成しておきます。

image

[Writer] に出力先の情報を設定します。
アカウント情報は、ストレージのダッシュボードの [アクセスキーの管理] から取得できます。

image

 

これで一通り完成したので実行します。
完了すると、コンテナーに結果データ (CSV) が保存されます。

image

なお、実行が完了している場合、
各モジュールの出力 (下側の ○ の部分) を右クリックするとコンテキスト メニューが有効になります。

image

[Visualize] を選択すると、出力結果を表やグラフで見ることができます。

image

 

次回は、出力結果の色データの視覚化と、学習済みクラスタリング モデルの利用についてです。

次回: Azure Machine Learning で色のクラスタリング (2)

作成したサンプル
Clustering Colors 1: by Hue (Azure ML Gallery)
AzureMLSample (GitHub)

参照
Microsoft Azure Machine Learning Gallery
Machine Learning Studio とは
How to choose an algorithm in Azure Machine Learning