機械学習の手法について少しまとめてみた

本記事は金沢工業大学の学生が書く KIT Developer Advent Calendar の2３日目です。

# はじめに

昨今、機械学習やAIが話題になっており、自分も以前から興味を持っていたので自分が調べた機械学習の手法みたいなのをまとめてみようと思います。
⚠︎テーブルに表示されているカラムのa、bは特に意味はないです。(カラム名が思い付かなかっただけです笑)

# 回帰

## 線形回帰
回帰によって連続値を予測する手法。説明変数の係数と切片によって値を予測。最小二乗法や最尤推定によって係数と切片を決定する。

|a  |b  |
|---|:---:|
|予測対象|連続値  |
|可読性  |○  |
|並列処理  |×  |
|過学習防止策  |ステップワイズ(AIC基準)による変数削減  |

予測式は以下である
`y = w[0] * x[0] + w[1] * z[1] + ..... + w[n] * x[1] + b`
w[0]は傾き、bはy雪片を意味する。特徴量がある場合には、wにはそれぞれの特徴量の軸に対する傾きが入る。

## ロジスティック回帰
回帰によって分類する手法。線形回帰の出力をロジット関数に入力することで、2分類問題に対応した回帰モデル。

|a  |b  |
|---|:---:|
|予測対象|分類  |
|可読性  |○  |
|並列処理  |×  |
|過学習防止策  |ステップワイズ(AIC基準)による変数削減  |

ロジスティック回帰は、目的変数と説明変数の関係を関係式で表します。
関係式は、以下となります。

```math
y=\frac{1}{1+ e^{-( a_{1}x_{1}+a_{2}x_{2}+...a_{n}x_{n}+b )} } 
```

## サポートベクタマシン
回帰によって分類する手法。マージン最大化を取り入れることで、少ないデータでも汎化性能が高い2分類回帰モデルを実現。ただし、学習時間は長くなる。

|a  |b  |
|---|:---:|
|予測対象|分類  |
|可読性  |○  |
|並列処理  |×  |
|過学習防止策  |ソフトマージン  |

> **ソフトマージン**
モデルに組み込まれている（マージン最大化)など識別子を許すことを前提としたマージンのこと

ソフトマージンは以下の2つを満たすようにする

- 境界線とデータとはなるべく離れていたほうがいい
- 誤判別はなるべく少ないほうがいい

# 木

## 決定木
木構造のモデルによって分類する手法。上から１つの説明変数とその閾値によってデータを２つに分け、さらに枝先で同様に別基準でデータを分けることによって、分類するモデル。説明変数の選択と閾値は、ジニ不純度やエントロピーといった基準を用いて決定する。非線形モデルでありながら可読性が高い数少ないモデル。

|a  |b  |
|---|:---:|
|予測対象|分類  |
|可読性  |○  |
|並列処理  |×  |
|過学習防止策  |木の最大深さを浅くする、基準の分割後の必要データ数の設定など |


## 回帰木
決定木を大量に生成し、各決定木の結果を集計して予測する手法。各決定木は独立しており、説明変数からのサンプリングまたは学習データからのサンプリングによって、異なる特性を持つように学習する。汎化性能が高く、処理の並列性も高いので人気のある手法である。

|a  |b  |
|---|:---:|
|予測対象|連続値(回帰木の場合)、分類  |
|可読性  |△（説明変数毎の採用量などから、重要度等の指標はわかる)  |
|並列処理  |○  |
|過学習防止策  |決定木の過学習防止策、決定木の本数を増やすなど |

## 勾配ブースティング木
決定木を大量に生成し、各決定木の結果を集計して予測する~手法。決定木を逐次的に増やしていき、生成済みの決定木が間違えてしまうケースのラベルを更新して、新たな決定木を生成していくイメージ。XGBoostという高速なライブラリが出現し、精度が非常に高く計算時間も実用的な時間に収まるようになり、最も人気な手法である。

|a  |b  |
|---|:---:|
|予測対象|連続値(回帰木の場合)、分類  |
|可読性  |△（説明変数毎の採用量などから、重要度等の指標はわかる)|
|並列処理  |○  |
|過学習防止策  |決定木の過学習防止策、決定木の本数を減らす（ブースティングを早めに止める)|

# ニューラルネットワーク

## パーセプトロン
入力、中間、出力の3層からなるニューラルネットワークの手法。バックプロパゲーションを用いた学習が一般的。複雑な表現を再現できるが、その分過学習もしやすい。ディープラーニングが登場する前の代表的なニューラルネットワークの手法。

|a  |b  |
|---|:---:|
|予測対象|連続値、分類  |
|可読性  |×|
|並列処理  |○  |
|過学習防止策  |ニューロン数を減らす、適切な学習率など非常に多い|

## 畳み込みニューラルネットワーク(CNN)
畳み込み層、プーリング層からなるニューラルネットワークの手法。前段の層では、情報の圧縮(次元集約)を行い、後段の層では特徴抽出を行うイメージ。現状では、特に画像において有用な結果が現在示されている。

|a  |b  |
|---|:---:|
|予測対象|連続値、分類  |
|可読性  |×|
|並列処理  |○  |
|過学習防止策  |Weight decay, DropOutなど非常に多い|

## 再帰型ニューラルネットワーク(RNN)
連続的な情報の入力に対応したニューラルネットワークの手法。ニューラルネットワークの内部にMemory(過去の入力による影響を保持する)によって、連続的な情報に対応している。現状では、特に文章において有用な結果が示されている。

|a  |b  |
|---|:---:|
|予測対象|連続値、分類  |
|可読性  |×|
|並列処理  |○  |
|過学習防止策  |Weight decay, DropOutなど非常に多い|

## 残差型ネットワーク(ResNet)
スキップ構造を取り入れたニューラルネットワークの手法。層を深くしすぎると学習がうまくいかないが、スキップ構造によってこれを緩和した。

|a  |b  |
|---|:---:|
|予測対象|連続値、分類  |
|可読性  |×|
|並列処理  |○  |
|過学習防止策  |Weight decay, DropOutなど非常に多い|

# ベイズ

## 単純ベイズ（ナイーブベイズ)
各要素(説明変数)が独立に予測対象に影響を与えていると仮定して、ベイズの定理を活用し、最もその分類が発生する確率が高いものを予測とする手法。主に文章に利用され、文章の単語をベースにした分類に使われる。

|a  |b  |
|---|:---:|
|予測対象|分類  |
|可読性  |×|
|並列処理  |×  |
|過学習防止策  |説明変数の集約(同じ意味の単語の集約など)など|

# 時系列

## AR,MA,(s)ARIMAモデル
時系列データを実績値のみから予測する手法。過去の値からの回帰(AR)や過去の共通要素(MA)から値を予測する。また直接値を予測するのではなく、階差(I)を予測し、階差から値を計算する方法もある。さらに、周期性(s:季節性)を加えることもできる。

|a  |b  |
|---|:---:|
|予測対象|連続値  |
|可読性  |○(ただし次数や階差が大きいと把握することが難しくなる)|
|並列処理  |×  |
|過学習防止策  |AR、MA次数を下げる、階差を減らす|

## 状態空間モデル
時系列データを予測対象外の時系列の説明変数から予測する手法。状態モデル(時系列で変わる状態を定義)と観測モデル(ある状態から観測される予測対象値を定義)を利用した予測を行う。自由度が高いが、学習が収束しないことも多く、注意が必要である。

|a  |b  |
|---|:---:|
|予測対象|連続値|
|可読性  |○|
|並列処理  |×  |
|過学習防止策  |説明変数を減らす|

# まとめ

長々と書いてきましたが、機械学習の手法は色々あるんだなと思いました。