機械学習いつどれパターンまとめ

# 概要
今回の記事では、機械学習の特定の手法を解説するのではなく、**「どんな問題の時に(いつ)、どの機械学習の手法(どれ)を使えばよいのか」**という点、つまり機械学習の**「いつどれパターン」**を整理していきます。

理由は、インターネット上では様々な手法に関する詳細な情報を(時にはコード付きで)集められる一方で、「結局どれを使えばいいのさ！」という疑問が僕個人、払拭できていないからです。

そんな駆け出しデータサイエンティストが少しでも成長できるように、勉強したことを随時書き留めていきます！

# 使用する文献
Trevor Hastie, Robert Tibshirani, Jerome Friedman 著 
[『統計的学習の基礎 データマイニング・推論・予測』](https://www.amazon.co.jp/統計的学習の基礎-―データマイニング・推論・予測―-Trevor-Hastie/dp/432012362X/ref=sr_1_1?__mk_ja_JP=カタカナ&dchild=1&keywords=統計的学習の基礎&qid=1588394413&sr=8-1)
![スクリーンショット 2020-05-02 13.41.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357086/54b64bca-9814-5a63-bd8c-27ea87910b00.png)
上記の文献をベースにまとめていきます！ (学生には少々高価な買い物でした…笑)

ちなみにこの本、**ちゃんと読むと2~3年かかる**そうですが、今回の目標としては**1ヶ月**で大まかな内容だけを理解し、**「いつどれパターン」**を習得していきます！
(大体800ページあるので、**30ページ/日**のペースでしょうか…笑)

# 全体の構成
まずは目次をざっと確認してみます。

第１章 序章
第2章 教師あり学習の概要
第３章 回帰のための線形手法
第４章 分類のための線形手法
第５章 基底展開と正則化
第６章 カーネル平滑化法
第７章 モデルの評価と選択
第８章 モデル推論と平均化
第９章 加法的モデル, 木, および関連手法
第１０章 ブースティングと加法的木
第１１章 ニューラルネットワーク
第１２章 サポートベクトルマシンと適応型判別
第１３章 プロトタイプ法と最近傍探索
第１４章 教師なし学習
第１５章 ランダムフォレスト 
第１６章 アンサンブル学習
第１７章 無向グラフィカルモデル
第１８章 高次元の問題：p>>N

章の構成をざっくり整理すると、まず3~8章で線形回帰を用いた基本的な機械学習のアプローチを抑えていそうですね。
そこから木, ニューラルネットワーク, サポートベクトルマシンと複雑な手法へと発展しています。
次の最近傍探索はモデルのベースライン(プロトタイプ法)として使われるようですね。
教師なし学習は14章だけなので、やっぱり用途が限られているのですかね？
ランダムフォレストやアンサンブル学習は有名ですが、なぜ最後の方に持ってきたのか…
あと17, 18章の内容は聞いたこともありません。笑

ということで、目次は以下のように整理できます。

第１章 序章　            　**-導入-**
第2章 教師あり学習の概要

第３章 回帰のための線形手法　　**-線形手法を用いた基本の流れ-**
第４章 分類のための線形手法
第５章 基底展開と正則化
第６章 カーネル平滑化法
第７章 モデルの評価と選択
第８章 モデル推論と平均化

第９章 加法的モデル, 木, および関連手法　　**-より複雑な手法に発展-**
第１０章 ブースティングと加法的木
第１１章 ニューラルネットワーク
第１２章 サポートベクトルマシンと適応型判別

第１３章 プロトタイプ法と最近傍探索　　**-ベースラインモデルの作り方-**

第１４章 教師なし学習　　**-教師なし学習まとめ-**

第１５章 ランダムフォレスト　　**-複数の木を用いた手法-**
第１６章 アンサンブル学習

第１７章 無向グラフィカルモデル　　**-未知の領域(笑)-**
第１８章 高次元の問題：p>>N

# 教師あり学習の概要
## 予測のためのベースアプローチ
教師あり学習で回帰あるいは分類の予測を行う場合、以下の2つのアプローチが全ての手法のベースとなります。

**最小二乗法** : 線形モデルによって直線的に予測値あるいは決定境界を近似
　**最近傍法** : 入力空間内で入力値 $x$ に近いk個の訓練データ $x_i$ の出力平均より予測

ここで抑えておくべきことは以下の特徴です。

**最小二乗法**
→ 予測の際に線形という過程に過度に依存。
→ 予測の分散が小さく、*バイアスが大きい。

**最近傍法**
→ データの生成過程に厳密な仮定を設けていない。
→ 予測の分散が大きく、*バイアスが小さい。

※ バイアス : 母集団から抽出した標本の分布が、どれくらい母集団の分布から乖離しているかを表す。

**つまり、極端に制約が強い手法が最小二乗法、極端に柔軟性の高い手法が最近傍法ということになります。**

## 最小二乗法と最近傍法の問題点

よって、もし1分で機械学習のモデルを作れと言われたら、最小二乗法と最近傍法の二択で考えればOKです。笑

しかしこれらのアプローチは。良くも悪くも**極端な手法**と言えます。
ゆえに以下のような問題が生じてしまいます。

**最小二乗法**
→ 線形近似という制約が強く、仮定が正しくなければ精度は悪化。
→ 特に入力次元数が増加すれば、全ての特徴が線形という仮定に縛られる。

**最近傍法**
→ 入力次元数が増加すると、最近傍点が目標点から乖離し誤差が大きくなる可能性が高い。
→ 制約条件がほとんどないため、データの生成過程を再現しにくい。

したがって、実際に機械学習のモデルを作る場合には、

**1. 最小二乗法の制約を緩める。**
**2. 最近傍法に制約を追加する。**

といういずれかのアプローチをとります。

**つまり、世の中に存在する機械学習の様々な手法は全て、最小二乗法と最近傍法の中間的な位置にあります。**

## 制限付き推定法
最小二乗法または最近傍法に制限(仮定)を設ける方法としては、次の3つがあります。

**1. 罰則関数・正則化**
→ 「最小二乗法の制約を緩める」タイプの制限を設ける。
→ 推定対象の関数に滑らかさを持たせ、過学習を防ぐ。

**2. カーネル法と局所関数**
→ 「最近傍法に制約を追加する」タイプの制限を設ける。
→ 局所的な近傍の決め方、どのような関数を局所的に当てはめるかをカーネル関数によって指定する。

**3. 基底関数と辞書による方法**
→ 「最近傍法に制約を追加する」タイプの制限を設ける。
→ 特定の基底関数の組み合わせ(線形展開)によって推定を行う。

# 回帰のための線形手法

線形モデルでは**説明変数 $X_i$ の係数 $β_i$ に関して線形であることを仮定**しており、主に最小二乗法によって求められる。

また説明変数 $X_i$ は単なる量的入力だけでなく、logや√に変換されたり、基底展開による多項式、カテゴリ変数のダミー変数化など様々な値をとる。

また変数間のスケールの違いによる影響をなくすために、しばしば**標準化**を行う。

**そしてこの線形モデルは、訓練データ数の少ない場合や、信号対雑音比が低い、もしくは疎なデータが与えられた時に効果を発揮する。**

## 変数選択

しかし、以下の理由で線形モデルは満足のいくモデルとは言い難い。

**1. 予測精度 : バイアスが小さい反面、予測値の分散が大きい。(最小二乗法)**

**2. 解釈性 : 予測変数の数が多いと、より影響の大きい変数の部分集合を集めたくなる。**

よってここでは、**線形モデルの係数を縮小したり、いくつかの係数をゼロにする**ことで、これらの問題点を解消していく。

言い換えると、「最小二乗法の制約を緩める」タイプの制限を設け、**罰則関数・正則化**を取り入れていく。

### 最良部分集合選択による回帰

この方法では最も小さい残差二乗和が得られる大きさkの変数部分集合を求める。

**そのため、指定したk個の説明変数だけで最良なモデルを構築することができる。**

しかしこのkの個数は、効率的な跳躍限定法でもせいぜい30~40程度しか扱えず、また残差二乗和は部分集合の大きさkの値が大きくなるほど小さくなっていくため、kの最適値を求めるのは難しい。

### リッジ回帰

リッジ回帰では、回帰係数の大きさに罰則を課すことによって、係数の値を縮小させる。

このリッジ回帰係数は、罰則付き残差二乗和を最小化することで求める。

```math
β^{ridge} = argmin_b{\sum_{i=1}^{N}}(y_i - β_0 - {\sum_{j=1}^{p}}{x_{ij}β_{j}})^2 + λ{\sum_{j=1}^{p}}{β_{j}^2}
```

ここでリッジ回帰の解は入力変数の大きさに対して不変ではないため、**入力変数は標準化しておく必要がある。**

またリッジ回帰は入力変数 $X$ の主成分とも関連を持ち、小さい主成分、つまり $X$ **の列空間において小さい分散を持つ方向の成分(回帰係数)を最も縮小させる。**

### lasso

lassoはリッジ回帰と同様、罰則付き残差二乗和を最小化することで求めるが、最小化式は以下のように定義される。

```math
β^{ridge} = argmin_b{\sum_{i=1}^{N}}(y_i - β_0 - {\sum_{j=1}^{p}}{x_{ij}β_{j}})^2 + λ{\sum_{j=1}^{p}}{|β_{j}|}
```

つまり、後半の罰則項が二乗ではなく絶対値に置き換わる。

そして、この制約の性質上、**回帰係数のいくつかはゼロ**になる。

**ゆえにlassoはある種の連続的な変数選択を行うことができる。**

### 最小角回帰

この手法は**前向き漸次的回帰**に分類され、**切片の値から開始して順次モデルに最善な説明変数を加えていく**アプローチをとる。

(ちなみに、リッジ回帰やlassoは後向き漸次的回帰と呼ばれ、全ての説明変数のうち影響の小さい変数を順次除外していく。)

また最小角回帰はlassoとの深い関連性を持ち、**lassoの完全な解経路を計算することができる。**

さらに予測変数の数がp個の時、lassoは完全な最小二乗推定を得るためにp回以上の操作を要することもあるが、**最小角回帰は常にp回の操作で推定可能という効率性も有している。**

### グループlasso

最後にグループlassoでは、p個の変数が**L個のグループ**に分割されると仮定した上で推定を行う。

これは同じ対象の数値群やカテゴリ変数から求めたダミー変数群をひとまとまりのグループとして扱い、**同じグループの変数を同時に縮小・選択することができる。**

つまりこの手法では、グループと個々の変数両方をゼロにするような最適化がなされるため、**λの値によっては全ての変数グループがモデルから除外される。**

# 分類のための線形手法

線形手法では、**線形な決定境界**によって入力空間をラベルの付いた複数の領域に分割する。

また線形な決定境界でも、**入力変数をn次多項式に拡張することで、決定境界はn次関数**で表される。
そして一般的に、**クラス数Kが3以上**の問題を解くためには、**(K-1)次の多項式が必要**となる。

## 線形判別分析

この手法は、**各クラスが共通の共分散行列を持つと仮定**した分類手法であり、**それぞれのクラス密度が多変量ガウス分布に従う**必要がある。

そして線形判別分析には**データを意味のある低次元に投影して見ることができる**という利点がある。

そのためp次元入力空間においてK個のクラスに分類する場合、**線形判別分析では(K-1)次元の部分空間でデータを扱うことが可能**となり、**次元削減**の役割を果たす。

よって、pがKよりも非常に大きい場合、線形判別分析でかなりの次元を削減できる。

しかしながらこの手法は、**外れ値の影響を受けやすい**というデメリットを持つ。

## ２次判別分析

線形判別分析では各クラスが共通の共分散行列を持つと仮定したが、この**共通の共分散行列という仮定を無くしたガウス分類器**が２次判別分析である。

そのためこの手法では**２次の決定境界による柔軟な分類を行える**一方で、**各クラスの共分散行列を推定しなくてはならない**。

よって、**入力空間の次元数pが大きくなるほど、パラメータの数が劇的に増加する**。

しかし２次判別分析や線形判別分析は、**単にデータが２次もしくは線形のような単純な決定境界を支持しているケースが多い**ことや、**ガウスモデルを用いた推定値が安定している**ことから、多様な分類タスクでうまく動作する。


## ロジスティック回帰

この手法は、値域が[0,1]で総和が1になるような線形関数を用いてK個のクラス事後確率をモデルにする。

そのため線形判別分析などよりも**少ない仮定しか用いない**ことから、**汎用的で外れ値にも強い**方法と言える。

またロジスティック回帰は**結果の解釈性が高く、入力変数の役割や重要度を理解しやすい**。

具体的には、モデルの各係数に対する**Zスコア(各係数を入力変数ごとの標準誤差で割った値)の有意性**によって、不必要な係数を除去することができる。

※ Zスコアの絶対値が2よりも大きいならば、5%水準で有意と言える。

# 基底展開と正則化

ここからは入力 $X$ を $X$ **の変換により得られる新たな入力変数で補ったり、置き換えたりする**ことで得られる新しい特徴空間において線形モデルを用いていく。

特にここでは、**基底関数** $h_m$ **を用いて以下のように** $X$ **の線形基底展開**を行い、新たな変数 $f(X)$ を生成する。

```math
f(X) = {\sum_{m=1}^{M}}{β_m}{h_m}(X)
```

## スプラインとは

スプラインとは、**点の集合である元の入力データを、連続的な入力変数に変換する**方法である。

具体的には、入力 $X$ の領域を隣接した区間へと分割し、**区間を跨ぐ節点において連続になるような制約を課した区分的多項式**と言える。

特に**節点をK個持つ次数Mのスプラインは次数Mの区分的多項式**であり、主によく使われる３次スプラインはM=4, 1次スプライン(区分的定数関数)はM=1, 2次スプライン(連続区分的線形関数)はM=2である。

その中でも**回帰スプラインは節点が固定されたスプライン**であり、スプラインの次数に加えて節点数とその配置がパラメータとなる。

## 平滑化スプライン

回帰スプラインでは節点選択に関して問題が生じうるが、**全ての入力データ点を節点とし、それらを正則化によって制御する**ことで問題を回避したスプラインを**平滑化スプライン**という。

この平滑化スプラインはパラメータとして、**正則化の強さを表す罰則パラメータ** $λ$ **のみ**を持ち、リッジ回帰と同様に２次の罰則項によって正則化を行う。

これにより**時系列の入力データ点などの分布傾向を表す、連続性を持った滑らかな曲線**を得ることができる。

また事前に選ばれた $λ$ を用いた平滑化スプラインを**線形平滑化**とも言い、この $λ$ の値はいくつかの候補値の中から Cross Validation などによって求める方法が一般的である。

## ウェーブレット変換

ウェーブレットは**離散信号や画像、時系列のようにデータが均一格子上で観測されている場合に有用**な方法である。

具体的には、**N個の均一に配置された観測データにおけるN×Nの正規直交ウェーブレット基底行列** $W$ (元の信号を形成する任意の数の起源波の組み合わせ)を用いて、応答ベクトル $y$ を以下のように変換する。

```math
y^* = W^Ty
```

このような変換方法を**ウェーブレット変換**と言い、**平滑化スプラインが滑らかさを課す**ことで元の信号(データ)を圧縮するのに対し、**ウェーブレットは任意の数の起源波(マザーウェーブレット)の組み合わせによる疎性(スパースさ)を要求する**ことで圧縮を行う。

# カーネル平滑化法

ここでは**局所的限定**と呼ばれる、観測点 $x_i$ に対象点 $x_0$ からの**距離に基づく重みを付与**することで柔軟な推定を行う。

## 1次元カーネル平滑化法

k最近傍では対象点 $x_0$ を**平均値を用いて推定するため離散的な変化をする不連続な値になる**のに対し、**1次元カーネル平滑化法ではカーネルと呼ばれる関数によって着目点からの距離に応じて滑らかに減少する重みを与え、連続的な値を算出する**。

ここでカーネルは**近傍の幅を決めるパラメータλ**によって特徴付けられる。

またカーネルに用いる関数にはその用途や前提とする仮定に基づき、イパネクニコフ関数やガウス関数などを用いる。
(関数の種類によって近傍の幅を決めるパラメータλの意味合いも変化する。)

## 局所線形回帰

重み付きカーネルと最小二乗法を組み合わせることで、**等価カーネル**と呼ばれる局所的な回帰を連続したカーネル平滑化法が実現できる。

特に局所線形回帰の利点としては、**データの境界領域や等間隔でない内部領域におけるバイアスを除去**することができる。

また局所線形回帰は**多項式に拡張**することもでき、特に**局所2次当てはめでは領域内部の関数の湾曲に起因するバイアスを除去できる**。

(しかしながら**局所2次当てはめでは境界領域におけるバイアスを除去しにくくなってしまう**ため用途に応じた使い分けが必要になる。)

加えて、入力次元(特徴量)が2,3次元よりもはるかに高次元の場合、局所回帰は有用ではなくなってしまう。

## カーネル密度推定

カーネル密度推定は教師なし学習の手法の１つであり、対象点 $x_0$ からの**距離に応じて減少する重みを割り引く**ことで、以下のように確率密度 $fx$ を推定する。

```math
fx(x_0) = \frac{1}{Nλ}{\sum_{i=1}^{N}}K_λ(x_0, x_i)
```

また、Jクラスの分類問題に対し、それぞれのクラスで別々に密度推定値 $f'_j(X)$ と事前確率 $π'_j$ (通常は標本比)が与えられている場合、以下のように**カーネル密度分類器**を実装することができる。

```math
Pr(G = j | X = x_0) = \frac{π'_j f'_j(x_0)}{{\sum_{k=1}^{J}}π'_k f'_k(x_0)}
```

加えて、**入力次元(特徴量)pが高次元で正確な密度推定が困難な場合**、与えられたクラス $G = j$ において**特徴** $X_k$ **が独立であると以下のように仮定**することにより、**単純ベイズ分類器**を実装することができる。

```math
f_j(X) = {\prod_{k=1}^{p}}f_{jk}(X_k)
```

この場合、個々のクラス条件付き周辺密度 $f_{jk}$ は**個別に1次元カーネル密度推定を用いる**ことで推定が可能となる。

# モデルの評価と選択

モデルを生成する際には、**訓練データに対する過学習を防ぎ、汎化性能を高める**ことが必要である。

そのために基本的にはまず、データを**訓練集合、確認集合、テスト集合**の３種類にランダム分割する。
(おおよその目安は、50%, 25%, 25% ぐらい)

そして訓練集合を**モデルの当てはめ**に、確認集合を**モデル選択**のために、最後にテスト集合は
**モデルの汎化誤差の評価**に用いる。

しかし**データ量が不十分で３種類の集合の要素数を十分に確保できない場合**が多く、その際には以下のようなアプローチをとる。

## 交差確認(Cross Validation)

### K分割交差確認

データをほほ等しいサイズでK個に分割した後、 $k$ **番目の部分を評価用に確保しておき、他の** $K-1$ **ブロックのデータをモデル当てはめに使用**する。

※ Kの値としては、5や10が選ばれることが多い。

評価用のk番目の集合はfor文などで順に交換していくことで、より汎用的なモデルを選択できる。

### １つ抜き交差確認(Leave one out)

$K=N$ の場合、データのうち $i$ **番目の観測値**に対して、 $i$ **番目以外の全てのデータを用いてモデル当てはめ**を行う。

## 交差確認の正しい方法と間違った方法

交差確認の際には、あらゆる選択や当てはめなどの操作が**実行される「前」**に、**評価用の標本は抜き出されていなければならない**。

基本的に**学習時のデータと評価用のデータは独立でなければならない**ため、特徴量選択のためのデータ参照などでも学習時のデータと評価用のデータを混在してはならない。

(ただし、**クラスラベルなどを含まない教師なし学習**は、例外的に標本が抜き取られる前に行うことも可能。)

## ブートストラップ法

**高次元の分類問題において交差確認を行う**場合などに、**特徴量に対してデータが不足**してしまうケースは生じやすい。

その際には、データから**重複を許してランダムサンプリング(復元抽出)**することで標本集合を増加させ、データ量を補う。

ただしこの場合、 $i$ 番目の観測値に対して、その観測値を含まないブートストラップ標本のみを用いて予測を行う**１つ抜きブートストラップ推定法**を使用する。
(考え方としては、leave one outの拡張版とも言える。)

# モデル推論と平均化

## ブートストラップと最尤推定法

ブートストラップ法は**訓練データから標本抽出することで不確実性を直接的に見積もる方法**であり、主に2つの方法が存在する。

1. **ノンパラメトリックブートストラップ**
→ 新たなデータ集合を生成するのに生のデータを用い、**何か特別なパラメトリックモデルを用いていない**手法。

2. **パラメトリックブートストラップ**
→ ブートストラップ標本から推定する予測値に適切なノイズ成分を加えるなど、**事前情報を含めた**手法。

そして、ブートストラップ法は本質的には**最尤法を計算機で実現したもの**であり、標準誤差やその他の量の**最尤推定量を尤度が明示的に求められなくても計算できる**利点がある。

## EMアルゴリズム

EMアルゴリズムは難しい最尤推定の問題を解くためによく使われる方法であり、2つのステップから構成されている。

1. **期待値ステップ**
→ パラメータに現状の推定値を用いて、観測点での各モデルの負担率(隠れ変数の期待値)を計算する。

2. **最大化ステップ**
→ 負担率を用いて重み付き最尤推定を行い、パラメータの推定量を更新する。

※ 上記のステップを繰り返すことで、推定量を収束させる。

## ギブスサンプリング

ギブスサンプリングは逐次的に条件付き分布から標本抽出を行い、標本系列を安定化させる。

具体的には以下のような手順で行う。

1. **推定するパラメータ群の中から１つだけに注目し、その他のパラメータを現状の推定値で固定したままサンプリングを行う**。

2. **サンプリング結果から注目したパラメータの推定値を更新する**。

3. **注目するパラメータを変更し、上記と同様に推定量を更新していく**。

また、**ギブスサンプリングとEMアルゴリズムはパラメータの推定方法が異なるだけで本質的には同じ**ことを行なっている。

## バギング

バギングは**予測値をブートストラップ標本上で平均化**し、**バイアスを保ったまま分散を減少させる**方法である。

またバギング推定量は**近似的なベイズ事後平均**となっている。

ここでモデルのバギングは強力な反面、**モデルのいかなる構造も失われてしまう**ためモデルの**解釈性に難点**がある。

## バンピング

バンピングではバギングと同様に**ブートストラップ標本を生成して各標本にモデルを当てはめる**が、予測値を平均化するのではなく、**元の訓練データに最もよく当てはまるモデルを選択する**。

よってモデル間の比較可能性を担保するために、**それぞれのモデルが同じような複雑さ**を持っておく必要がある。

また、この方法は**当てはめ規準を最適化することが難しい問題でも有用**であり、**良くない局所解から抜け出す**のにも役立つ。

# 加法的モデル、木、および関連手法

## 一般化加法的モデル

一般化加法的モデル(GAM)は線形モデルの拡張として、**解釈性を保持したまま非線形を含むより柔軟なフィッティングができる**方法である。

具体的には、反復的なアルゴリズム(後退当てはめ法など)によって**各特徴にフィットする3次スプライン関数の推定を同時に行う**。

また、本来であれば人力で設定する必要のあった**特徴量エンジニアリングをアルゴリズムによって自動化できる**点が非常に有用と言える。

しかしながら、加法的モデルは特徴の選択は人力で行う必要があるため、大規模なデータマイニングへの適用では限界がある。

※ そのため最近の研究ではlasso型の罰則により疎な加法的モデル(COSSO法, SpAMなど)が提案され始めている。