Azure Machine Learningを使ってラブライブのキャラのスリーサイズを元にクラスタリングを行う

Azure Machine Learningのクラスタリング機能を使うわかりやすい例として、アニメキャラのスリーサイズ値から「スタイルが良さそう」「普通」「残念」な３つのグループにクラスタリング分けをしてみます。


## CSVファイルを用意

元データ
http://www.lovelive-anime.jp/otonokizaka/member/member01.html

![スクリーンショット 2015-09-17 3.05.03.png](https://qiita-image-store.s3.amazonaws.com/0/36931/d0b40f5c-a2d6-2228-092f-a55a671da830.png)

LL.csvに保存

ExcelでCSVファイルを作るとSJISになるのでUTF8に変換しておく。

```
nkf -Lu LL.csv > LLu.csv
```

## Azure Machine Learning Stdioにデータを登録

https://studio.azureml.net/

![スクリーンショット 2015-09-17 3.07.41.png](https://qiita-image-store.s3.amazonaws.com/0/36931/67616f4a-9f5a-1b32-c91a-690253a7b831.png)

DATASETSを押下し左下の＋ボタンから登録


## Experiment のキャンバスにパーツを配置

![スクリーンショット 2015-09-17 3.09.18.png](https://qiita-image-store.s3.amazonaws.com/0/36931/fb71fd31-c383-b7bb-1250-493299525d27.png)

K-Means Clusteringの「Number of Centroids」は3に変更する。（クラスタを３つに分けるので３にする）
![スクリーンショット 2015-09-17 3.11.53.png](https://qiita-image-store.s3.amazonaws.com/0/36931/bfdc6a70-6536-bc83-f424-14755a194407.png)


### Train Clustering Modelのカラム設定

クラスタリングの計算対象のカラムを設定します


![スクリーンショット 2015-09-17 3.12.42.png](https://qiita-image-store.s3.amazonaws.com/0/36931/d03d7670-9d69-8f57-828e-6f496c968391.png)



### Project Columns カラム設定

結果を出力させたいカラムを設定します

AssignmentsがクラスタリングのグループIDになるので必須です。

![スクリーンショット 2015-09-17 3.12.51.png](https://qiita-image-store.s3.amazonaws.com/0/36931/fa927954-c9d7-f8c7-3755-4d8e51958d6b.png)



## RUNボタンを押下して実行

計算が終わったら（１分ぐらいで完了）「Project Columns」ボタンを右クリックしてResult Dataset->Visualizeを押下。

![スクリーンショット 2015-09-17 3.15.45.png](https://qiita-image-store.s3.amazonaws.com/0/36931/b8455070-d704-9096-c85f-5a6445580026.png)


Assignmentsにクラスタリング化されたグループIDが格納されています。

絵でわかりやすく表示するとこうなります。


![Venn diagram.png](https://qiita-image-store.s3.amazonaws.com/0/36931/79434933-ad9e-341e-792b-1d063c777e9e.png)


ラブライブのキャラに関してはウェストがメンバー全員ほとんど変わらないので、単純にHとBのスコアでのグループわけになっててわかりやすく、うまくグループ化されています。
個人的には納得の結果です。


## 念のためスリーサイズ値を正規化して再度実施

スリーサイズは　H　<->　W　<->　B　間の数値レンジのバラつきはそこまでないですが、年のため数値に正規化をかけて平等に比較されるようにします。

![スクリーンショット 2015-09-17 3.25.31.png](https://qiita-image-store.s3.amazonaws.com/0/36931/99dc5601-e5b0-e67d-2cb6-ca37b8521c32.png)

LLu.csvの後に「Normalize Data」(正規化)を追加
正規化対象のカラムを W B H に設定する

![スクリーンショット 2015-09-17 3.27.04.png](https://qiita-image-store.s3.amazonaws.com/0/36931/5ecdabcf-86d6-5c54-a10d-ebc9bff1276a.png)



## 正規化の結果

RUNで実行


![スクリーンショット 2015-09-17 3.28.55.png](https://qiita-image-store.s3.amazonaws.com/0/36931/83a9bc60-f486-ed6f-d477-addd6407a60d.png)

数値が正規化されてクラスタリングされているのがわかります。
絵でわかりやすくするとこうです

![Venn diagram Normal.png](https://qiita-image-store.s3.amazonaws.com/0/36931/4a11714c-5136-d7e7-db24-635fd000e246.png)

元々のスリーサイズ値をみても、そこまでおかしなグループ分けにはなっていません。
正規化をかけなかった時とくらべて更に正確にグループ分けがされた感じです。

![スクリーンショット 2015-09-17 3.05.03.png](https://qiita-image-store.s3.amazonaws.com/0/36931/d0b40f5c-a2d6-2228-092f-a55a671da830.png)



## Azure ML クラスタリング機能の応用例

- 戦闘機のスペック表からクラスタリング 「格闘機、地上攻撃機、マルチロール」などに区分け
- アイドル事務所の人が大量の応募者の女性のスリーサイズデータからとりあえずAzureMLを使ってスタイルのクラスタリングを作って面接候補リストを作る→「グラマー」「スレンダー」「残念」
- 婚活の候補一覧のスペック表からクラスタリング
- 飲食店の感想データからクラスタリング　「高いけどうまい店」「高いけどまずい店」「安いけどうまい店」「安くてまずい店」

・・など

今回は９人をターゲットとしましたが、もっと大量の人数をさばくときに特に有効でしょう。
それ以外にもクラスタリングの元となる計算方法がよくわからん！って人もAzureMLの基礎知識だけでクラスタリングが行えるのは超ベンリだと思います。