【超入門】ブラウザだけで1日でできる、はじめてのAzure Machine Learning


# はじめに
ブラウザだけで実施できる、以下のチュートリアルをやってみます。

[Machine Learning のチュートリアル: Azure Machine Learning Studio で初めてのデータ サイエンス実験を作成する](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-create-experiment)

# 事前準備
## Microsoftの初心者向け動画を見る
私は機械学習そのものが初めてのため、以下の動画を見ました。
Azurreに限った話ではなく非常に勉強になりました。特に１～３がおすすめです。

動画は英語ですが、ページの下に日本語訳もあります。

- [初心者向けデータ サイエンス ビデオ 1: データ サイエンスが回答する 5 つの質問](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-data-science-for-beginners-the-5-questions-data-science-answers)
- [データ サイエンス用のデータの準備はお済みですか?](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-data-science-for-beginners-is-your-data-ready-for-data-science)
- [データで回答できる質問をする](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-data-science-for-beginners-ask-a-question-you-can-answer-with-data)
- [単純なモデルで回答を予測する](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-data-science-for-beginners-predict-an-answer-with-a-simple-model)
- [他のユーザーの成果物をコピーしてデータ サイエンスを実行する](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-data-science-for-beginners-copy-other-peoples-work-to-do-data-science)

## Machine Learning Studio へアクセス

[Machine Learning Studio ](https://studio.azureml.net/#)にアクセスして、Sign upする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/26414862-a256-4e6d-5966-0607806f0812.png)

## プランの選択
Freeプランを選択して、Microsoft アカウントでログインする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/bdd04e40-8312-3b52-4fbb-c2da14cadbb2.png)

# モデルの作成
## 手順１：データを取得する
### 実験の作成
画面下部のNEWをクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/eb1054c1-e01e-2f5f-c7d0-8adafff2f554.png)

Blank Experimentをクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/04615102-516c-d404-36bb-8658621b8647.png)

実験のタイトルに任意の名前を付ける。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/574dc206-0563-b08d-c592-f8263417e36d.png)

### データの取得
左側の検索ウインドウで、**automobile**で検索して、**Automobile price data(Raw)**を選択する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/6d3d0d49-43de-d240-9722-be529e5ac0c7.png)

選択した**Automobile price data(Raw)**を左側のキャンパスにドラッグする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/70e29c8c-3f4d-9352-2f68-e331a25e7c7c.png)

### データの視覚化
右クリック＞dataset＞Visualizeを選択する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/651b30e2-e684-dd31-ad5e-503e6e5a5050.png)

視覚化された情報が表示される。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/92717b9c-e893-c83b-ba73-9e91bf91b03c.png)


## 手順２：データを準備する
機械学習のデータは、下記4点が必要。

- 関連性があること
- 連続していること（表の中で値の抜けが無いこと）
- 正確であること
- 十分なデータ量があること

データの可視化した状態で、各列を選択すると、**Missing Values**で値が欠損している件数を表示してくれる。
nomarized-losses列は、41件のデータ欠損がある。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/90f90b53-2c59-322e-1919-9388e3a4497f.png)

### 列の除外
データセット内から、列の選択を行うモジュールを検索する。
**Select Columns in Dataset**で検索する。
![image](https://qiita-image-store.s3.amazonaws.com/0/98130/2bba758e-5a8d-34db-7acc-5054db546ec9.png)

検索したモジュールをドラッグして配置する。
その後、**Automobile price data(Raw)のコネクタをドラッグして、接続する。**

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/de8c9e55-e45e-1bc7-2f3d-c1854dc851a0.png)

右側のプロパティから、**Launch column selector (列セレクターの起動)**をクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/5ac11f87-04b2-9fdd-9dac-b74d7a7be2ae.png)

**WITH RULES**を選択して、Begin With から、**ALL COLUMNS**を選択する。
**Exclude（除外）**を選択して、**nomarized-losses列**を選択し、右下のチェックをクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/e23895b5-6b01-a50d-17b5-67e067d606eb.png)

列選択モジュールのプロパティに、**nomarized-losses列以外のすべての列を選択する**ことが表示される。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/69adab3a-ea1d-8141-2f6c-4df39679aedf.png)

#### コメントの入力
列選択モジュールをダブルクリックすると、コメントを入れることができる。
入力したコメントは、再度ダブルクリックすることで確認できる。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/ff3bdbd0-9b6f-02a5-b6fc-4b8b26610845.png)

### 欠損データのクリーンアップ
**clean missing data**で検索して、検索したモジュールをドラッグして配置する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/1435476a-f01c-038f-e5d8-e29585c7a753.png)

その後、**Select Columns in Dataset**モジュールと接続する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/ec03813b-bd67-7b00-1a9a-102abdec1f8e.png)

**clean missing data**モジュールをクリックして、右側のプロパティの**clearning mode**を選択する。
リストから、**Remove entire row（行全体を削除）**を選択する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/7752364c-8381-80c9-5a8e-a019bd04e463.png)

#### データのクリーンアップの実行
画面下部の**RUN**をクリックして実行する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/16b2625d-4251-cc8b-08c4-a1266e02bd93.png)

成功したモジュールには、**右側に緑色でチェックがつく。**

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/fc54ab37-ae6e-6b22-2207-c70048b98175.png)

#### データのクリーンアップの結果確認
**clean missing data**モジュールをクリックして、右クリック＞dataset＞Visualizeを選択する。
クリーンアップ対象となった、**nomarized-losses列が除外されていることを確認。**

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/f23a047b-a8cd-eeaf-b76c-ef89bbb512b8.png)

## 手順３：特徴を定義する
city-mpg と highway-mpg は、それぞれ燃費を表す項目。（市内の燃費と高速道路での燃費）
密接に関連している項目であるため、片方は削除することができると言える。

### モデルの定義
今回は以下8つの列からモデルを生成する。

- make（メーカー）
- body-style（ボディタイプ）
- wheel-base（ホイールベース）
- engine-size（エンジンサイズ）
- horsepower（馬力）
- peak-rpm（最高出力）
- highway-mpg（高速道路での燃費）
- price（価格）

### データセット内の列選択モジュールの追加
2つ目の列選択モジュールを追加する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/23726741-42d6-a272-c334-f07ba96b970f.png)

**clean missing data**モジュールに接続する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/c6b66c12-b819-0735-bb77-dbdaeac62874.png)

コメントを入力する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/6d30dd8d-ce71-2d4e-2d31-9d556e9796bd.png)

### モデルの作成
プロパティから列のセレクタをクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/5a66a804-5d9a-0a39-c2eb-af8b839f43fb.png)

**NO COLUMNS**を選択し、**Include column names**を選択してから、
モデルとして利用する8つの列を選択して、チェックをクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/422ab6ec-0d97-c0b0-255a-e1fb334e7732.png)

プロパティに生成したモデルが表示される。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/c9de2e23-c9ce-ca90-254f-c5e1383db6c7.png)

# モデルのトレーニング
## 手順４：学習アルゴリズムを選択して、適用する
質問に対する答えを求めるアルゴリズムは以下の5つ。

- AかBか？（分類アルゴリズム）
- 異常か？（異常検出アルゴリズム）
- どのくらいの量、数か？（回帰アルゴリズム）
- どのような構成か？（クラスタリングアルゴリズム）
- 次に何をすべきか？（強化学習アルゴリズム）

今回は、自動車の価格を予想したいため、**回帰アルゴリズム**を使用する。
直線回帰で学習する。

### モデルのトレーニング

#### データ分割モジュールの配置
**split data**で検索する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/70291153-51d7-b993-06bf-10893352b732.png)

データ分割モジュールをドラッグして配置して、最後の列選択モジュールとつなげる。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/6458ca49-887a-89a3-6077-a68ff66ceb18.png)

#### データ分割の配分を設定する
データ分割モジュールのプロパティ内の、**Fraction of rows in the first output dataset (最初の出力データセットにおける列の割合)**を選択して、**0.75**を入力する。
データの75％をモデルのトレーニングに使用して、残りの25％をテスト用に保持する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/2248fa89-0598-8f10-7728-2476c9ce907d.png)

#### 実験の実行
下部の**RUN**を実行する。
これまでと同様に成功したモジュールには緑色のチェックがつく。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/0616fd83-1090-0add-3ccd-5725731f57e9.png)

#### 線形回帰モジュールの配置
学習アルゴリズムのモジュールを配置する。今回は線形回帰を使用する。
左側のメニューから、**Machine LearningカテゴリのInitialize Modelを展開する。**
展開したメニューから、**Linear Regression（線形回帰）**を選択してドラッグする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/1b6eddc6-e32b-39a2-e4a1-708ea449796b.png)

#### モデルのトレーニングモジュールの配置
同じく、左側のメニューから、**Train Mode（モデルのトレーニング）l**を選択して、ドラッグする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/8b533f85-f526-659b-b734-49b9c5eb83ee.png)

#### モジュールの接続
直線回帰モジュールの出力を、モデルのトレーニングモジュールの左側に接続し、
データ分割モジュールのトレーニングデータ出力を、モデルのトレーニングモジュールの右側に接続する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/625f5e7d-ec8f-eb5b-a51e-a252d3054926.png)

#### 予測値の設定
モデルのトレーニングモジュールをクリックし、列のセレクタをクリックする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/a169542e-6453-2f2f-888b-61bba40cbfd6.png)

**AVAILABLE COLUMNSから、price列を選択し、＞ボタンをクリックする。**
ここで選択したpriceが、モデルが予想する値になる。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/22b3c22a-2a5b-42a2-c9db-fcded8804c06.png)

#### 実験の実行
下部の**RUN**を実行する。
成功したモジュールに緑色のチェックがつく。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/7b17905b-d584-c866-a877-383f0c5e1241.png)


# モデルのスコア付けとテスト
## 手順５：新しい自動車の価格を予想する
データの75％を使ってモデルをトレーニングしたため、残りの25％のデータにスコアをつけてモデルの機能の効果を確認する。

### モデルのスコア付け
#### モデルのスコア付けモジュールの配置
左側のメニューから、**Machine LearningカテゴリのScoreを展開する。**
展開したメニューから、**Score Model（モデルのスコア付け）**を選択してドラッグする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/f89564ad-dac7-818a-718d-8dd464d51847.png)

モデルのトレーニングモジュールの出力を、モデルのスコア付けモジュールの左側の入力ポートに接続し、
データ分割の出力を、モデルのスコア付けモジュールの右側の入力ポートに接続する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/49445a2a-10de-1d17-9963-f038377e5555.png)

#### 実験の実施
データ下部の**RUN**をクリックする。
正常終了したモジュールの右側に緑色のチェックがつく。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/f895da4f-1d3a-b642-06a1-6b293a98155b.png)

### スコア付けの結果確認
スコア付けモジュールをクリックして、右クリック＞Scored dataset＞Visualizeを選択する。
price列は既知の値、**Scored Labelsが予測された価格の値**が出力される。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/24c3500a-1233-eea8-903c-2e41ad771a4a.png)

### 結果の評価
左側のメニューから、**Machine LearningカテゴリのEvaluateを展開する。**
展開したメニューから、**Evaluate Model（モデルの評価）**を選択してドラッグする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/8e45a47f-19d5-27bf-3088-18bb679c3a04.png)

モデルのスコア付けモジュールの出力を、モデルの評価モジュールの左側の入力ポートにドラッグする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/a3d568fa-169b-6f58-2ed1-4f6efc636647.png)

#### 実験の実施
データ下部の**RUN**をクリックする。
正常終了したモジュールの右側に緑色のチェックがつく。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/5b5cd5a2-40e7-5a87-1e9b-76190cd4b8ab.png)

### モデルの評価結果確認
Evaluate Model（モデルの評価）モジュールをクリックして、右クリック＞Scored dataset＞Visualizeを選択する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/8ed1139e-cdf0-61c5-40c7-361b6cef887a.png)

結果の見方は以下の通り。

- Mean Absolute Error（平均絶対誤差）
    - 略称はMAE
    - 絶対誤差の平均。（誤差とは、予測された値と、実際の値の差）
    - モデルの予測精度の”悪さ”を表すため，0 に近い値であるほど優れているとのこと。
- Root Mean Squared Error（二乗平均平方根誤差）
    - 略称はRMSE
    - テストデータセットに対して実行した予測の二乗平均誤差の平方根。
    - モデルの予測精度の”悪さ”を表すため0 に近い値であるほど優れているとのこと。
- Relative Absolute Error（相対絶対誤差）
    - 実際の値と、すべての実際の値の平均との絶対差を基準にした絶対誤算の平均。
- Relative Squared Error（相対二乗誤差）
    - 実際の値とすべての実際の値の平均との二乗差を基準にした二乗誤差の平均。
- Coeffcient of Determination（決定係数）
    - R-2 乗値という。
    - どの程度モデルが高い精度でデータと適合するかを示す。
    - 1.0に近いほど予測の精度が高くなる。

# 所感
- 実際のpriceの値と、予測した値を比較して見ると、完全に一致している数値はない。
- MAEの値が、1656.147651であることから、全体的に1656ドル価格がずれている。まだまだ誤差が大きいと言える。
- 唯一、hondaのデータで、**price：9095、予測値：9080.524468**という惜しいデータがあるが、それ以外は大きく誤差が出ている状況。
- **決定係数の値は0.91(91%）であることから、今回作成したモデル（8項目）から価格を導き出す精度は高いと言える。**
- **MAEも、RMSEも、0に近い値であるとは言えないため、まだチューニングが必要な結果と思われる。**

![image](https://qiita-image-store.s3.amazonaws.com/0/98130/7cbf7441-16e8-d45d-0dac-21f2c33f0d51.png)

# おわりに
はじめてAzureで機械学習をやってみました。
これが無料で試せるなんて、すばらしい時代になりましたね。
これから自分でもモデルを作って、いろいろ検証したいと思います。