#はじめに
Microsoft Azure Machine Learning Studioで、分析モデルを作成するにあたり、アルゴリズムが数多くあって、正直なところどれを選べばよいのかよく分からないといった声を良く聞きます。
本家サイトでも以下のように明記されています。
「どのような機械学習アルゴリズムを使用すべきか」という質問への答えは、 常に「場合による」です。
その分析モデルを使ったサービスを利用する側にしてみれば 「何でもいい感じに返して!」 という事になると思いますが、実際の所そういった万能なものはありません。
一応チートシートも用意されていますが、分かり辛いところもあるので、それをベースに自分なりの考察含め、どのアルゴリズムを使用すればよいのかを決める為の手順をまとめてみようと思います。
#1.アルゴリズム分類
まずは作成する分析モデルから何を得たいか?という内容で、そのモデルで使用するアルゴリズムの分類が決まります。
1.教師データを与え、カテゴライズ(予測)したい
→ 分類(Classification)
2.教師データを与え、予測値を得たい
→ 回帰(Regression)
3.教師なしのデータを与え、異常データの検出をしたい
→ 異常検出(Anomaly detection)
4.教師なしのデータを与え、自動でクラスタ化して予測値を得たい
(チートシートでは「構造の発見」と表現)
→ クラスタリング(Clustering)
→ K-means
#2.詳細分類
次に種別毎にある複数のアルゴリズムからどれを選択するか決めて行きます。
チートシートと本家サイトを参考に、ざっくりと分かりやすくまとめてみました。
1.分類モデル
分類したい数によって大きく分けられます。
1.1 出力する分類の選択肢が2つ
→ 2クラス分類
・性能優先
→ Logistic regression
・精度優先
・性能優先
→ Decision forest
→ Decision jungle
→ Boosted decision
・性能問わず
→ Neural network
・どちらでもない
→ Averaged perceptron
→ Bayes point machine
→ SVM
→ Locally deep SVM
1.2 出力する分類の選択肢が3つ以上
→ 多クラス分類
・性能優先
→ Logistic regression
・精度優先
・性能優先
→ Decision forest
→ Decision jungle
・性能問わず
→ Neural network
・その他(選択した2クラス分類のアルゴリズムに依存)
→ One-vs-all
2.回帰モデル
教師データにどういった傾向があるかによって大きく分けられます。
2.1 特徴となるデータが線形的(線形分離可能)
特定カテゴリに有効なアルゴリズムがある為、その場合優先します。
・順位のようなランク予測
→ Ordinal Regression
・事象の発生回数のようなカウント予測
→ Poisson Regression
・それ以外
・教師データが十分ある
→ Linear Regression
・教師データが少ない
→ Bayesian linear Regression
2.2 特徴となるデータが非線形的(線形分離不可能)
・分布予測
→ Fast forest quantile Regression
・それ以外
・性能優先
→ Boosted decision tree Regression
→ Decision forest Regression
・性能問わず
→ Neural network Regression
3.異常検出
回帰モデル同様に、教師データにどういった傾向があるかによって大きく分けられます。
3.1 特徴となるデータが離散的で数が多い(100以上)
→ One-class SVM
3.2 特徴となるデータの分布が集合的
→ PCA-based anomaly detection
#3.まとめ
上記はあくまで表面的な手順であり、実際はデータに依存する部分が多くあるのが実状です。
これを言ってしまうと身も蓋もありませんが、本家サイトでも以下のように述べられています。
複数のデータ科学者が、最善のアルゴリズムを探す唯一の方法はすべてを試してみることであると言っています。
Azure Machine Learning Studioは、簡単にアルゴリズムを変える事ができます。
作成した分析モデルで十分な精度が出なかった場合、そのメリットを生かして、様々なアルゴリズムのモデルを作成し試してみるという事も一つの方法であると思います。