代表的な機械学習手法一覧

# 概要
本ページは、代表的な機械学習の手法の特性について独自に簡単にまとめたページです。
（ご意見、ご指摘等あったらご連絡ください。）

世の中のスタンダードなものとして下記もあるので、それを踏まえてご参照いただければと思います。
- [ScikitLearn Choosing the right estimator](http://scikit-learn.org/stable/tutorial/machine_learning_map/)
- [Microsoft Azure Machine Learning Studio の機械学習アルゴリズム チート シート](https://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-algorithm-cheat-sheet/)
- [朱鷺の杜Wiki 機械学習](http://ibisforest.org/index.php?%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92)


# 手法一覧

教師データあり

- 回帰
  - (一般化)線形回帰
  - ロジスティック回帰
  - サポートベクターマシーン(SVM)
- 木
  - 決定木（CART)
  - 回帰木
  - ランダムフォレスト
  - 勾配ブースティング木
- ニューラルネットワーク(NN)
  - パーセプトロン
  - 畳み込みニューラルネットワーク(CNN)
  - 再起型ニューラルネットワーク(RNN)
  - 残差ネットワーク(ResNet)
- ベイズ
  - 単純ベイズ（ナイーブベイズ)
- 時系列
  - AR,MA,(S)ARIMAモデル
  - 状態空間モデル
- クラスタリング
  - k近傍法(KNN)
- アンサンブル学習
  - ブースティング
  - バギング
  

教師データなし

- クラスタリング
  - 階層型クラスタリング(ユークリッド距離＊ウォード法など)
  - 非階層型クラスタリング（k-meansなど)
  - トピックモデル（LDAなど)
- NN
  - 自己組織化マップ（SOM)
- その他
  - アソシエーション分析
  - 協調フィルタリング（アイテムベース、ユーザベースなど)

# 手法説明

## 教師データあり

### 回帰
- (一般化)線形回帰
  - 概要：  回帰によって連続値を予測する手法。説明変数の係数と切片によって値を予測。最小二乗法や最尤推定によって係数と切片を決定。
  - 予測対象: 連続値
  - 可読性： ○
  - 並列処理： ×
  - 過学習防止策： ステップワイズ(AIC基準)による変数削減, L1/2正則化など
  <br><br>
- ロジスティック回帰
  - 概要： 回帰によって分類する手法。線形回帰の出力をロジット関数に入力することで、2分類問題に対応した回帰モデル。
  - 予測対象: 分類
  - 可読性： ○
  - 並列処理： ×
  - 過学習防止策： ステップワイズ(AIC基準)による変数削減, L1/2正則化など
  <br><br>
- サポートベクターマシーン(SVM)
  - 概要： 回帰によって分類する手法。マージン最大化を取り入れることで、少ないデータでも汎化性能が高い2分類回帰モデルを実現。ただし、学習時間は長くなる。
  - 予測対象: 分類
  - 可読性： ○
  - 並列処理： ×
  - 過学習防止策： モデルに組み込まれている（マージン最大化)など

### 木
- 決定木
  - 概要： 木構造のモデルによって分類する手法。上から１つの説明変数とその閾値によってデータを２つに分け、さらに枝先で同様に別基準でデータを分けることによって、分類するモデル。説明変数の選択と閾値は、ジニ不純度やエントロピーといった基準を用いて決定する。非線形モデルでありながら可読性が高い数少ないモデル。
  - 予測対象: 分類
  - 可読性： ○
  - 並列処理： ×
  - 過学習防止策： 新たな基準を作成する際に必要な最小データ数の設定、新たな基準を作成する際に最適減必要な基準の改善量の設定、基準の分割後の必要データ数の設定、木の最大深さを浅くするなど
  <br><br>
- 回帰木
  - 概要： 決定木と回帰を合わせた手法。決定木によってデータを分割し、分割されたデータ群毎に生成した回帰モデルを利用して、予測を行う。大量のデータがなければ、簡単に過学習する。
  - 予測対象: 連続値
  - 可読性： ○
  - 並列処理： ○
  - 過学習防止策： (一般化)線形回帰と決定木の過学習防止
  <br><br>
- ランダムフォレスト（決定木 × バギング)
  - 概要： 決定木を大量に生成し、各決定木の結果を集計して予測する手法。各決定木は独立しており、説明変数からのサンプリングまたは学習データからのサンプリングによって、異なる特性を持つように学習する。汎化性能が高く、処理の並列性も高いので人気のある手法である。
  - 予測対象: 連続値(回帰木の場合)、分類
  - 可読性： △（説明変数毎の採用量などから、重要度等の指標はわかる)
  - 並列処理： ○
  - 過学習防止策： 決定木の過学習防止策、決定木の本数を増やすなど
  <br><br>
- 勾配ブースティング木（決定木 × ブースティング)
  - 概要： 決定木を大量に生成し、各決定木の結果を集計して予測する手法。決定木を逐次的に増やしていき、生成済みの決定木が間違えてしまうケースのラベルを更新して、新たな決定木を生成していくイメージです。XGBoostという高速なライブラリが出現し、精度が非常に高く計算時間も実用的な時間に収まるようになり、最も人気な手法である。
  - 予測対象: 連続値(回帰木の場合)、分類
  - 可読性： △（説明変数毎の採用量などから、重要度等の指標はわかる)
  - 並列処理： ○
  - 過学習防止策： 決定木の過学習防止策、決定木の本数を減らす（ブースティングを早めに止める)

### ニューラルネットワーク(NN)
- パーセプトロン
  - 概要： 入力、中間、出力の3層からなるニューラルネットワークの手法。バックプロパゲーションを用いた学習が一般的。複雑な表現を再現できるが、その分過学習もしやすい。ディープラーニングが登場する前の代表的なニューラルネットワークの手法。
  - 予測対象: 連続値、分類
  - 可読性： ×
  - 並列処理： ○
  - 過学習防止策： ニューロン数を減らす、適切な学習率など非常に多い
  <br><br>
- 畳み込みニューラルネットワーク(CNN)
  - 概要： 畳み込み層とプーリング層からなるニューラルネットワークの手法。前段の層では、情報の圧縮(次元集約)を行い、後段の層では特徴抽出を行うイメージ。現状では、特に画像において有用な結果が現在示されている。
  - 予測対象: 連続値、分類
  - 可読性： ×
  - 並列処理： ○
  - 過学習防止策： Weight decay, DropOutなど非常に多い
  <br><br>
- 再起型ニューラルネットワーク(RNN)
  - 概要：連続的な情報の入力に対応したニューラルネットワークの手法。ニューラルネットワークの内部にMemory(過去の入力による影響を保持する)によって、連続的な情報に対応している。現状では、特に文章において有用な結果が示されている。
  - 予測対象: 連続値、分類
  - 可読性： ×
  - 並列処理： ○
  - 過学習防止策： Weight decay, DropOutなど非常に多い
  <br><br>
- 残差ネットワーク(ResNet)
  - 概要：スキップ構造を取り入れたニューラルネットワークの手法。層を深くしすぎると学習がうまくいかないが、スキップ構造によってこれを緩和した。
  - 予測対象: 連続値、分類
  - 可読性： ×
  - 並列処理： ○
  - 過学習防止策： Weight decay, DropOutなど非常に多い

### ベイズ
- 単純ベイズ（ナイーブベイズ)
  - 概要： 各要素(説明変数)が独立に予測対象に影響を与えていると仮定して、ベイズの定理を活用し、最もその分類が発生する確率が高いものを予測とする手法。主に文章に利用され、文章の単語をベースにした分類に使われる。
  - 予測対象: 分類
  - 可読性： ×
  - 並列処理： ×
  - 過学習防止策： 説明変数の集約(同じ意味の単語の集約など)など

### 時系列
- AR,MA,(s)ARIMAモデル
  - 概要： 時系列データを実績値のみから予測する手法。過去の値からの回帰(AR)や過去の共通要素(MA)から値を予測する。また直接値を予測するのではなく、階差(I)を予測し、階差から値を計算する方法もある。さらに、周期性(s:季節性)を加えることもできる。
  - 予測対象: 連続値
  - 可読性： ○(ただし、次数や階差が大きいと把握することが難しくなる)
  - 並列処理： ×
  - 過学習防止策： AR,MA次数を下げる、階差を減らす
  <br><br>
- 状態空間モデル
  - 概要： 時系列データを予測対象外の時系列の説明変数から予測する手法。状態モデル(時系列で変わる状態を定義)と観測モデル(ある状態から観測される予測対象値を定義)を利用した予測を行う。自由度が高いが、学習が収束しないことも多く、注意が必要である。
  - 予測対象: 連続値
  - 可読性： ○
  - 並列処理： ×
  - 過学習防止策： 説明変数を減らす

### クラスタリング
  - k近傍法(KNN)
    - 概要: データを分類する手法。指定した説明変数からデータ間の距離を計算し、分類するデータに近いk個(入力値)の分類内容から最も多い分類を採用する。正解データが密である場合や傾向がドラスティックに変わらないケースに有効である。
    - 予測対象: 分類
    - 可読性： ○
    - 並列処理： ○
    - 過学習防止策：k数を大きくするなど

### アンサンブル学習
  - ブースティング
    - 概要: 複数の弱学習器を用いて、精度を向上する手法。弱学習器を逐次増やすことによって、徐々に予測精度を改善していく。ただし、同時に過学習も発生してくるので適切なタイミングで止めることが重要。また、並列処理が不可能なため計算時間もかかりやすい。
    - 並列処理： ×
    - 過学習防止策： 弱学習器の数を減らす（ブースティングを早めに止める)
  <br><br>
  - バギング
    - 概要: 複数の弱学習器を用いて、精度を向上する手法。弱学習器を並列に(独立に)増やすことによって、予測精度を向上させる。説明変数や学習データのサンプリングや採用する機械学習手法によって、弱学習器の多様性を担保する。また並列処理が可能なので、計算リソースさえあれば計算時間を短くできる。
    - 並列処理： ○
    - 過学習防止策： 弱学習器の数を増やす(ただし、サンプル数を減らしすぎないように)など


## 教師データなし

### クラスタリング
  - 階層型クラスタリング(ユークリッド距離＊ウォード法など)
    - 概要： 与えられたデータを分類する手法。指定された変数からデータ間の距離を定義し、その距離を用いて指定したルールを用いてデータをグループ化する。クラスタ数(分類数)は、計算後に指定して変更できる。
    - 可読性： ○
    - 並列処理： ×
  <br><br>
  - 非階層型クラスタリング（k-meansなど)
    - 概要： 与えられたデータを分類する手法。指定されたクラスタ数(分類数)に従って各データをランダムに各クラスタに割り当て、重心とデータ間の距離から再度データにクラスタを割り当てる処理を繰り返し、データをグループ化する。クラスタ数(分類数)は、事前に指定する必要があり、後から変更はできない。並列処理ができ、階層型クラスタリングより高速化できるが、初期値によって結果が異なる点などの問題がある。
    - 可読性： ×
    - 並列処理： ○
  <br><br>
  - トピックモデル（LDAなど)
    - 概要： 与えられたデータを分類(トピック)毎のスコアを計算する手法。同じデータ内に存在する要素は共通のトピックを持っている可能性が高いという前提から、トピック毎に各要素の出現率を計算し、さらにそれを各データに再度適用して、各データのトピックスコアを計算する。トピック数は入力値として与える。計算量が非常に多い。
    - 可読性： ×
    - 並列処理： ○

### NN
  - 自己組織化マップ（SOM)
    - 概要： データの指定した次元(一般的には低次元)にマッピングする手法。2層のニューラルネットワークに相当。次元圧縮やクラスタリングの可視化(2次元マップにクラスタ集合を表示)に利用する。
    - 可読性： ○
    - 並列処理： ○

### その他
  - アソシエーション分析
    - 概要： 組み合わせを集計し、相性の良い組み合わせを発見する手法。主にPOS分析に利用される。選択肢A -> 選択肢Bという情報に対して、Support(全体において共に出現確率)、confidence(選択肢Aが出現した時において選択肢Bも出現される確率)、リフト(選択肢Aが出現することで、選択肢Bが出現する確率の変動倍率)を計算することで、ついで購買を勧められる商品などをみつけることができる。
    - 可読性： ○
    - 並列処理： ○
  <br><br>
  - 協調フィルタリング（アイテムベース、ユーザベースなど)
    - 概要： 類似性から未知の組み合わせに対する答えを予測する手法。主にレコメンドに利用される。カスタマー＊アイテムの購買の0/1や5段階評価から、カスタマーやアイテムの類似性を提示し、レコメンド内容を決める。大規模データに対しても、並列処理によって実用時間内に計算できることや実問題の実績が多く挙げられていることから、よく利用される。
    - 可読性： ×
    - 並列処理： ○