Azure Machine Learning Studio での分析アルゴリズム選択マニュアル

#はじめに

Microsoft Azure Machine Learning Studioで、分析モデルを作成するにあたり、アルゴリズムが数多くあって、正直なところどれを選べばよいのかよく分からないといった声を良く聞きます。
[本家サイト](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-algorithm-choice)でも以下のように明記されています。
>「どのような機械学習アルゴリズムを使用すべきか」という質問への答えは、 常に「場合による」です。


その分析モデルを使ったサービスを利用する側にしてみれば **「何でもいい感じに返して！」** という事になると思いますが、実際の所そういった万能なものはありません。

一応[チートシート](http://download.microsoft.com/download/A/6/1/A613E11E-8F9C-424A-B99D-65344785C288/microsoft-machine-learning-algorithm-cheat-sheet-v6.pdf)も用意されていますが、分かり辛いところもあるので、それをベースに自分なりの考察含め、どのアルゴリズムを使用すればよいのかを決める為の手順をまとめてみようと思います。

#１．アルゴリズム分類

まずは作成する分析モデルから何を得たいか？という内容で、そのモデルで使用するアルゴリズムの分類が決まります。

１．教師データを与え、カテゴライズ（予測）したい
　　　→　分類（Classification）
２．教師データを与え、予測値を得たい
　　　→　回帰（Regression）
３．教師なしのデータを与え、異常データの検出をしたい
　　　→　異常検出（Anomaly detection）
４．教師なしのデータを与え、自動でクラスタ化して予測値を得たい
　　（チートシートでは「構造の発見」と表現）
　　　→　クラスタリング（Clustering）
　　　　　→　*<FONT color="blue">K-means</FONT>*

#２．詳細分類
次に種別毎にある複数のアルゴリズムからどれを選択するか決めて行きます。

[チートシート](http://download.microsoft.com/download/A/6/1/A613E11E-8F9C-424A-B99D-65344785C288/microsoft-machine-learning-algorithm-cheat-sheet-v6.pdf)と[本家サイト](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-algorithm-choice)を参考に、ざっくりと分かりやすくまとめてみました。

１．分類モデル
　　　分類したい数によって大きく分けられます。
　　　１．１　出力する分類の選択肢が２つ
　　　　　　　　→　２クラス分類
　　　　　　　　　　・性能優先
　　　　　　　　　　　　→　*<FONT color="blue">Logistic regression</FONT>*
　　　　　　　　　　・精度優先
　　　　　　　　　　　　・性能優先
　　　　　　　　　　　　　　→　*<FONT color="blue">Decision forest</FONT>*
　　　　　　　　　　　　　　→　*<FONT color="blue">Decision jungle</FONT>*
　　　　　　　　　　　　　　→　*<FONT color="blue">Boosted decision</FONT>*
　　　　　　　　　　　　・性能問わず
　　　　　　　　　　　　　　→　*<FONT color="blue">Neural network</FONT>*
　　　　　　　　　　・どちらでもない
　　　　　　　　　　　　→　*<FONT color="blue">Averaged perceptron</FONT>*
　　　　　　　　　　　　→　*<FONT color="blue">Bayes point machine</FONT>*
　　　　　　　　　　　　→　*<FONT color="blue">SVM</FONT>*
　　　　　　　　　　　　→　*<FONT color="blue">Locally deep SVM</FONT>*



　　　１．２　出力する分類の選択肢が３つ以上
　　　　　　　　→　多クラス分類
　　　　　　　　　　・性能優先
　　　　　　　　　　　　→　*<FONT color="blue">Logistic regression</FONT>*
　　　　　　　　　　・精度優先
　　　　　　　　　　　　・性能優先
　　　　　　　　　　　　　　→　*<FONT color="blue">Decision forest</FONT>*
　　　　　　　　　　　　　　→　*<FONT color="blue">Decision jungle</FONT>*
　　　　　　　　　　　　・性能問わず
　　　　　　　　　　　　　　→　*<FONT color="blue">Neural network</FONT>*
　　　　　　　　　　・その他（選択した２クラス分類のアルゴリズムに依存）
　　　　　　　　　　　　→　*<FONT color="blue">One-vs-all</FONT>*

２．回帰モデル
　　　教師データにどういった傾向があるかによって大きく分けられます。

　　　２．１　特徴となるデータが線形的（線形分離可能）
　　　　　　　　特定カテゴリに有効なアルゴリズムがある為、その場合優先します。
　　　　　　　　・順位のようなランク予測
　　　　　　　　　　　→　*<FONT color="blue">Ordinal Regression</FONT>*
　　　　　　　　・事象の発生回数のようなカウント予測
　　　　　　　　　　　→　*<FONT color="blue">Poisson Regression</FONT>*
　　　　　　　　・それ以外
　　　　　　　　　　　・教師データが十分ある
　　　　　　　　　　　　　→　*<FONT color="blue">Linear Regression</FONT>*
　　　　　　　　　　　・教師データが少ない
　　　　　　　　　　　　　→　*<FONT color="blue">Bayesian linear Regression</FONT>*


　　　２．２　特徴となるデータが非線形的（線形分離不可能）
　　　　　　　　・分布予測
　　　　　　　　　　→　*<FONT color="blue">Fast forest quantile Regression</FONT>*
　　　　　　　　・それ以外
　　　　　　　　　　・性能優先
　　　　　　　　　　　　→　*<FONT color="blue">Boosted decision tree Regression</FONT>*
　　　　　　　　　　　　→　*<FONT color="blue">Decision forest Regression</FONT>*
　　　　　　　　　　・性能問わず
　　　　　　　　　　　　→　*<FONT color="blue">Neural network Regression</FONT>*


３．異常検出
　　　回帰モデル同様に、教師データにどういった傾向があるかによって大きく分けられます。
　　　３．１　特徴となるデータが離散的で数が多い（１００以上）
　　　　　　　　→　*<FONT color="blue">One-class SVM</FONT>*

　　　３．２　特徴となるデータの分布が集合的
　　　　　　　　→　*<FONT color="blue">PCA-based anomaly detection</FONT>* 


#３．まとめ
上記はあくまで表面的な手順であり、実際はデータに依存する部分が多くあるのが実状です。
これを言ってしまうと身も蓋もありませんが、[本家サイト](https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-algorithm-choice)でも以下のように述べられています。

>複数のデータ科学者が、最善のアルゴリズムを探す唯一の方法はすべてを試してみることであると言っています。

Azure Machine Learning Studioは、簡単にアルゴリズムを変える事ができます。
作成した分析モデルで十分な精度が出なかった場合、そのメリットを生かして、様々なアルゴリズムのモデルを作成し試してみるという事も一つの方法であると思います。