バイアス・バリアンス分解の解説

# はじめに
- 本記事は　はじめてのパターン認識　第二章　「バイアス・バリアンストレードオフ」パートの深堀りです。
- 読んでいて疑問に思った箇所をいろいろ調べたので、他の方にとっても役立つと幸いです。

# 具体的なモデルに対する評価関数としてのMSE

あるモデル化したい（あるいは機械学習で予測）実測値 $t$ が、実際にはその真の成分 $h(x)$ と誤差 $\varepsilon$ から成ると考えます。
つまり、以下の式になります。
```math
t = h(x) + \varepsilon
```

このような $t$ を予測する関数 $y(x)$ を得たとき、$y(x)$ がどれだけ $t$ をうまく予測できているのか定量的に評価したいと考えます。
そのひとつの方法として **MSE** (mean square error)があります。

今、各種データについて記号を以下のように置くと、
```math
x : 説明変数,\; t : 実測値,\; D : 具体的なx,tの組からなるデータセット \\
y(x;D) : データセットDから生成される予測モデル \\
E : 様々なx,tを考えたときの期待値
```

MSEは以下のように定義されます。
```math
MSE = \iint(y(x;D)-t)^2 p(x,t)dxdt = E\{ (y(x;D)-t)^2 \}
```

つまり、「あるデータセットに基づいて生成された予測モデルの予測値」と「実測値」の差の二乗を、あらゆる説明変数と実測値のパターンで足し合わせている、ということです。
言い換えると、あるデータセットDについて二乗誤差の期待値を計算していることに他なりません。
機械学習の経験がある方にとっては、損失関数や評価関数として馴染みのあるMSEでしょう。

# モデルの汎化性能の評価としてのMSE

一方、 **モデルの汎化性能を計る文脈で使われるMSEは上記とは視点が異なります。**
上記では「あるデータセットに基づいて生成された予測モデルの予測値」と「実測値」の差の二乗を評価しましたが、これはたまたま得られた具体的なデータセットに対する評価であり、モデルの持つ本質的な性能の評価とは言い難いです。

そこで、様々なデータセットに対して予測の性能を評価する、という視点を持つと、「様々なデータセットDで学習した $y$ の $x$ における予測値と、$x$ における実測値 $t$ の差の期待値」を知りたいと考えることができます。
さらにかみ砕いていうと、サンプリングしたデータセットの数だけ異なる予測モデルが生成でき、その異なるモデルごとに $x$ における予測値は当然異なるが、それは平均的にどれだけ予測対象である $t$ と異なるか、ということです。

今、各種データについて記号を以下のように置くと、

```math
x : 説明変数,\; t : 実測値,\; D : 具体的なx,tの組からなるデータセット \\
y(x;D) : データセットDから生成される予測モデル \\
E_D : 様々なデータセットDを考えたときの期待値
```

これは以下のように定義できます。

```math
MSE_D = E_D\{ (y(x;D)-t)^2 \}
```

これを最終的なモデルの評価関数とします。

# MSEについて整理

さて、この私がこの記事を執筆するにあたって最もお伝えしたかったことは上記のMSEの区別についてです。
Web上のいろいろな解説や、はじパタの中でもMSEが予測誤差の**なにについての期待値なのか**明確に書かれていないように思えます。
つまり、「具体的なモデルを評価するために、異なるxについてまとめられた期待値」なのか「モデルの本質的な性能を評価するために、異なるデータセットについてまとめられた期待値」なのか明示的に区別することが、理解のキモだと思います。





# バイアス・バリアンス　分解

それでは本題のバイアス・バリアンス分解を行っていきます。
そのためにまず、$MSE_D$の期待値の中身、 $(y(x;D)-t)^2$ 部分を式変形していきます。

```math
\begin{align}

(y(x;D)-t)^2 &= (y(x;D) - t + (E_D\{y(x;D)\} - (E_D\{y(x;D)\} )^2 \\
&= ((y(x;D) - E_D\{y(x;D)\}) + (E_D\{y(x;D)\} - t) )^2 \\
&= (y(x;D) - E_D\{y(x;D)\})^2 + (E_D\{y(x;D)\} - t)^2 \\
&+ 2(y(x;D) - E_D\{y(x;D)\})(E_D\{y(x;D)\} - t) \\
&= (y(x;D) - E_D\{y(x;D)\})^2 + (E_D\{y(x;D)\} - h(x) -\varepsilon )^2 \\
&+ 2(y(x;D) - E_D\{y(x;D)\})(E_D\{y(x;D)\} - h(x) -\varepsilon ) \\
&= (y(x;D) - E_D\{y(x;D)\})^2 + (E_D\{y(x;D)\} - h(x)) ^2 -2\varepsilon(E_D\{y(x;D)\} - h(x)) + \varepsilon^2  \\
&+ 2(y(x;D) - E_D\{y(x;D)\})(E_D\{y(x;D)\} - t ) \\



\end{align}

```

上記を以下のように呼びことにします。
```math
第1項 = (y(x;D) - E_D \{ y(x;D)\})^2 \\
第2項 = (E_D\{y(x;D)\} - h(x)) ^2 \\
第3項 = -2\varepsilon(E_D\{y(x;D)\} - h(x)) + \varepsilon^2\\
第4項 = 2(y(x;D) - E_D\{y(x;D)\})(E_D\{y(x;D)\} - t) \\
```

すると、$MSE_D$の式は以下のように式変形できます。

```math
\begin{align}

MSE_D &= E_D \{ (y(x;D)-t)^2 \} \\
&= E_D\{第1項 \} + E_D\{ 第2項 \} + E_D\{ 第3項\} + E_D\{ 第4項\} 
\end{align}
```

それぞれについて見ていきます。


```math
\begin{align}

E_D\{第1項 \} &= E_D\{(y(x;D) - E_D \{ y(x;D)\})^2 \} \\
&= バリアンス
\end{align}
```




```math
\begin{align}

E_D\{第2項\} &= E_D\{(E_D\{y(x;D)\} - t)^2\} \\
&= (E_D\{y(x;D)\} - t)^2 \\
&= バイアス
\end{align}
```


```math
\begin{align}

E_D\{第3項\} &= E_D\{ -2\varepsilon(E_D\{y(x;D)\} - h(x)) + \varepsilon^2 \} \\
&= -2E_D\{\varepsilon\}(E_D\{y(x;D)\} - h(x)) + E_D\{ \varepsilon^2\} \\
&= 0 + E_D\{ \varepsilon^2\} \\
&= 誤差
\end{align}
```

```math
\begin{align}

E_D\{第4項\} &= E_D\{ 2(y(x;D) - E_D\{y(x;D)\})(E_D\{y(x;D)\} - t) \}\\ 
&= 2E_D\{ y(x;D)E_D\{y(x;D)\} -ty(x;D) -E_D\{y(x;D)\}^2 + tE_D\{y(x;D)\}  \} \\
&= 2( E_D\{y(x;D)\}^2 -tE_D\{y(x;D)\}  -E_D\{y(x;D)\}^2 + tE_D\{y(x;D)\}) \\
&= 0
\end{align}
```

以上より、$MSE_D$はバリアンス、バイアス、誤差に分解されました。

```math
\begin{align}

MSE_D &= E_D\{(y(x;D) - E_D \{ y(x;D)\})^2 \} + (E_D\{y(x;D)\} - t)^2 + E_D\{ \varepsilon^2\} \\
&= バリアンス + バイアス + 誤差

\end{align}
```

上記の意味するところは、様々なデータセットでモデルを作成したとき、バリアンスはあるxに対する予測値の変動であり、バイアスは予測対象の真の成分に対する差の大きさです。
誤差は取り除くことができないため、バリアンスとバイアスを小さくすることで $MSE_D$ を小さくする必要があります。

とはいえ、バイアスの低減を追求してモデルを複雑化すると、モデルは学習データセットに過適合してしまいバリアンスが大きくなります。反対に、バリアンスの低減を追求してモデルを簡素化すると、モデルは予測対象の真の成分を十分に予測できなくなり、バイアスが大きくなります。
これが　バイアス・バリアンストレードオフというのでした。


# モデル全体の汎化性能の評価としてのMSE

最後におまけですが、ここまでは以下の2種類のMSEを考えてきました。
- $MSE$ : 具体的なモデルを評価するために、異なるxについてまとめられた誤差の期待値
- $MSE_D$ : モデルの本質的な性能を評価するために、異なるデータセットについてまとめられた誤差の期待値

前者では異なるデータセットの場合を評価していないし、後者では異なるデータ点での評価をしていません。
そこで、双方を統合した「あらゆるデータセットで学習した複数のモデルであらゆるデータ点xを予測したときに、期待される誤差」を考えてみます。

すると、これは$MSE_D$ を $x$ についてまとめた期待値と考えられるので、以下のようになります。

```math
\begin{align}

E_X[MSE_D] &= E_X[バリアンス + バイアス + 誤差] \\
&= E_X[バリアンス] + E_X[バイアス] + 誤差

\end{align}
```


# 参考
- (日本語版よりかなり詳しいです) https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff
- https://www.bananarian.net/entry/MachineLearning/Bias/Variance
- はじめてのパターン認識