2015-04-16

Azure Machine Learningをやってみた

機械学習(以下、ML)についてもそろそろやったおかないといけないので、Azure Machine Learning(以下、AzureML)を試してみました。
内容はこちらにあるチュートリアルです。

Create a simple experiment in Machine Learning Studio | Azure

こちらが上の日本語版です。

Machine Learning Studio での簡単な実験の作成 | Azure

AzureMLの中では、一連のMLの流れをexperiment(実験)と呼んでいるようです。
このチュートリアルでは、自動車の価格データを元に分析モデルを機械学習で構築するものです。
実験の手順を整理するとこちらの通りです。

  1. モデルの作成
    1. データを準備する
    2. データの前処理をする
  2. モデルのトレーニング
    1. トレーニングとテストへモデルを分配
    2. 学習アルゴリズムを選択して分析モデルを構築
  3. モデルへのスコア付けとテスト
    1. 分析モデルを元に、新しいデータについての予測を行う
    2. 結果を評価

ではやってみましょう。

1. モデルの作成

1.1. データを準備する

まず、学習するためのデータを準備します。今回は、AzureMLにビルトインされているAutomobile price data (Raw)データを利用します。

実験キャンバスの左側の「データセットとモジュールのパレット(以下、パレット)」からAutomobile price data (Raw)を選択して、実験キャンバスにDrag&Dropします。

データの表示は、データセットの下の出力ポートを右クリックしてVisualizeを選択するとできます。

これでデータの準備はOKです。

1.2. データの前処理をする

分析を行うためにデータ前処理(加工)を行います。ここでは歯抜けになっている列や行を削除します。

normalized-losses行を削除する。

データの前処理はProject Columnsモジュールを利用して行います。パレットから選択してください。

Project Columnsモジュールを選択すると、右のプロパティウィンドウで内容を参照できます。

Launch column selectorボタンをクリックすると編集ダイアログが表示されます。

内容を変更するとプロパティウィンドウで内容を参照できます。

歯抜けになっている行の除去

歯抜けデータ除去は、Missing Values Scrubberモジュールを利用して行います。パレットから選択してください。

プロパティウィンドウで内容を変更します。

下部メニューのRUNをクリックすると、実験を実行できますので、ここまでで実行してみてください。
結果の表示はモジュールの下の出力ポートを右クリックしてVisualizeを選択するとできます。

なんとなくですが、歯抜けデータの間引きができているようです。

分析対象列のフィルタリング

最後に分析するデータをフィルタリングします。フィルタリングはProject Columnsモジュールを利用して行います。パレットから選択してください。

プロパティウィンドウで内容を変更します。

実験をRUNしてみると、データが正しくフィルタリングできていることが確認できます。

ここまでで、データの作成部分が終わりました。
情報処理の世界にある、「ガーベジイン・ガーベジアウト」という言葉について、MLの世界では特に大事な気がします。

GIGO

2. モデルのトレーニング

続いて、作成したデータに特定の学習アルゴリズムを適用して分析モデルを構築していきます。

データが準備できると、分析モデルの構築に必要なのは、トレーニングとテストになります。分類と回帰は、2 種類の管理された機械学習の手法です。

  • 分類(Classification)は、色 (赤、青、または緑) のような定義された一連の値から予測するために使用します。
  • 回帰(Regression)は、人の年齢のような連続した一連の値から予測するために使用します。

    Machine Learning Studio での簡単な実験の作成 | Azureより

今回予測する自動車の価格は、連続した値をとると予測できるので、最も単純な線形回帰を用いて学習させていきます。

2.1. トレーニングとテストへモデルを分配

作成したモデルをトレーニングとテストへ分配します。今回は75%をトレーニング、残りの25%をテストに割り振ります。

分配は、Splitモジュールを利用して行います。パレットから選択してプロパティウィンドウで内容を変更します。

プロパティウィンドウで内容を変更します。

2.2. 学習アルゴリズムを選択して分析モデルを構築

線形回帰は、Linear Regressionモジュールを利用して行います。トレーニングは、Train Modelモジュールを利用して行います。

ぞれぞれパレットから選択してください。

先ほどのSplitモジュールの左の出力ポートとLinear Regressionモジュールの出力ポートをTrain Modelモジュールに接続します。

Train Modelモジュールのプロパティウィンドウで分析するカラムを選択します。今回はpriceを選択します。

3. モデルへのスコア付けとテスト

最後に、モデル分割で残っている25%のデータについて、先ほど学習した分析モデルを元に結果の予測を行います。

3.1. 分析モデルを元に、新しいデータについての予測を行う

線形回帰は、Score Modelモジュールを利用して行います。パレットから選択してください。

Splitモジュールの右の出力ポートとTrain Modelモジュールの出力ポートをScore Modelモジュールに接続します。

ここまででRUNすると実験を開始できます。Score ModelモジュールにてVisualizeすると統計分析の結果がみることでできます。

今回は価格での分析でしたのでPrice列を選択した後に、右のVisualizationsにある、compare to 〜の部分を選択します。

例えば、メーカー対価格
volvoが突出して高いですね。

車種対価格
セダンはピンキリですが、全体的に中心より下の価格対が多いようです。

エンジンサイズ対価格
エンジンサイズと価格は正比例のようです。

馬力対価格
正比例のようですが、うーんちょっとわかりませんね。

ここまででも、結構楽しいです。

3.2. 結果を評価

最後に、分析モデルの予測結果に対する評価を行います。評価は、Evaluate Modelモジュールを利用して行います。パレットから選択してください。

RUNしてEvaluate Modelモジュールの結果をVisualizeすると次のような結果になります。

各統計値は以下の通りです。

  • 平均絶対誤差(Mean Absolute Error)
     * 絶対誤差の平均です (誤差とは、予測された値と実際の値との差です)。
  • 二乗平均平方根誤差(Root Mean Squared Error)
     * テスト データセットに対して実行した予測の二乗誤差平均の平方根です。
  • 相対絶対誤差(Relative Absolute Error)
     * 実際の値とすべての実際の値の平均との絶対差を基準にした絶対誤差の平均です。
  • 相対二乗誤差(Relative Squared Error)
     * 実際の値とすべての実際の値の平均との二乗差を基準にした二乗誤差の平均です。
  • 決定係数(Coefficient of Determination)
     * R squared valueともいいます。どの程度モデルが高い精度でデータと適合するかを示す統計指標です。

各誤差の統計値は、小さいほど優れています。つまり値が小さくなるほど、予測が実際の値に近くなることを意味します。
決定係数では、値が 1 (1.0) に近づくほど、予測の精度が高くなります。
Machine Learning Studio での簡単な実験の作成 | Azureより

す、すみません。まったくわかりません。

今回の分析モデルに関しては決定係数が1に近いので、精度としては良いという評価なんでしょうかね?

最後に

やってみた系の記事でした。まだ全体像がよくわかっていないのでなんとも・・・うーん。

とっかかり難しそうなMLですが、AzureMLを利用すると一連の実験の流れについては準備されているので、わりとカジュアルに入門できそうです。

MLを行う上で大事な事は「分析モデル」だなと感じました。分析モデルを構築する上で、留意するべきことは次のような部分ですかね。

  • データの準備と前処理
  • 分析モデルを構築する上での学習アルゴリズムの選定
  • 分析モデルの評価方法

まだ、表面的に触っただけなので、この辺りに足を踏み入れるとMLの深淵に触れられそうです。

既に面白いことやられている方もいるようで、目的に応じてカジュアルに使いこなせるようになるといいなと思います。

Azure Machine LearningとIoTを駆使して室温予測システムを構築してみた - がりらぼ