機械学習(以下、ML)についてもそろそろやったおかないといけないので、Azure Machine Learning(以下、AzureML)を試してみました。 内容はこちらにあるチュートリアルです。
Create a simple experiment in Machine Learning Studio | Azure
こちらが上の日本語版です。
Machine Learning Studio での簡単な実験の作成 | Azure
AzureML の中では、一連の ML の流れをexperiment(実験)
と呼んでいるようです。
このチュートリアルでは、自動車の価格データを元に分析モデルを機械学習で構築するものです。
実験の手順を整理するとこちらの通りです。
- モデルの作成 2. データを準備する 2. データの前処理をする
- モデルのトレーニング 4. トレーニングとテストへモデルを分配 3. 学習アルゴリズムを選択して分析モデルを構築
- モデルへのスコア付けとテスト 4. 分析モデルを元に、新しいデータについての予測を行う 5. 結果を評価
ではやってみましょう。
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 の世界では特に大事な気がします。
2. モデルのトレーニング
続いて、作成したデータに特定の学習アルゴリズムを適用して分析モデルを構築していきます。
データが準備できると、分析モデルの構築に必要なのは、トレーニングとテストになります。分類と回帰は、2 種類の管理された機械学習の手法です。
- 分類(Classification)は、色 (赤、青、または緑) のような定義された一連の値から予測するために使用します。
- 回帰(Regression)は、人の年齢のような連続した一連の値から予測するために使用します。
今回予測する自動車の価格は、連続した値をとると予測できるので、最も単純な線形回帰
を用いて学習させていきます。
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 の深淵に触れられそうです。
既に面白いことやられている方もいるようで、目的に応じてカジュアルに使いこなせるようになるといいなと思います。