PRML復活の呪文 part15 (4.2 - 4.2.4)

#TL;DR

- クラスの条件付確率密度$p(x | C_k)$がパラメトリックであれば最尤推定が使える
- クラスの条件付確率密度にガウス分布を仮定し、さらにガウスの共分散がすべてのクラスで同じならば、事後確率は一般化線形モデル＝入力空間上で決定境界が線形になる


# 4.2 確率的生成モデル

4.1節「識別関数」では、データ$x$を入力するとクラスがコレと決まる決定論的アプローチであった。
本節では確率論的な視点から考える。

クラスの事前確率$p(C_k)$とクラスの条件付き確率密度$p(x|C_k)$をモデル化し、ベイズの定理から事後確率$p(C_k|x)$を求める。
なお、クラスの条件付き確率密度$p(x|C_k)$がモデル化するということは、このモデルからサンプリングすることで人工データ$x$を生成できる。なので、生成モデルと呼ばれる。

まず2クラスの場合について考える。クラス$C_1$に対する事後確率は

```math
\begin{align}

p(C_1 | x) &= \frac{ p(x|C_1)p(C_1) }{ p(x|C_1)p(C_1)+p(x|C_2)p(C_2) } \\
&= \frac{1}{1 + \frac{p(x|C_2)p(C_2)}{p(x|C_1)p(C_1)} } \\
&= \frac{1}{1 + \exp(-a)} = \sigma(a) \tag{4.57}
\\ \\
a &= \ln \frac{p(x|C_1)p(C_1)}{p(x|C_2)p(C_2)} \tag{4.58}
\end{align}
```

ここで、$\sigma(\cdot)$は、以下の式で定義されるシグモイド関数である。

$$
\sigma(a) = \frac{1}{1+ \exp(-a) } \tag{4.59}
$$

多クラスの場合の事後確率$ p(C_k | x) $は

```math
\begin{align}

p(C_k|x) &= \frac{p(x|C_k)p(C_k)}{ \sum_j p(x|C_j)p(C_j)} \\
&= \frac{ \exp(a_k) }{ \sum_j \exp (a_k) } \tag{4.62} \\
\\
a_k &= \ln ( p(x|C_k)p(C_k) ) \tag{4.63}

\end{align}
```

いま、$ a_1, a_2, a_3 = 10, 20, 30$だったとしよう。これを式(4.62)に従って計算すると$ p(C_1|x), p(C_2|x), p(C_3|x) \simeq 0, 0, 1$となり、$ \sum_j p(C_j|x) = 1 $となるように正規化されていることが分かる。
そのため、この関数は正規化指数関数とよばれ、シグモイド関数の多クラスへの一般化とみなすことができる。
また、すべての$ j \neq k$に対して$ a_k >> a_j $である場合に$p(C_k|x) \simeq 1, p(C_j | x) \simeq 0$となっている。
つまり、マックス関数の滑らかなバージョンを意味しており、ソフトマックス関数 (softmax function) としても知られている。深層学習の分野でも非常によく用いられる。

# 4.2.1 連続値入力

クラスの条件付き確率密度$p(x|C_k)$がガウス分布であると仮定して、事後確率がどうなるかを見てみよう。
また、すべてのクラスで共分散行列$ \Sigma $が同じと仮定する。
つまり、$p(x|C_k)$は

$$
p(x|C_k) = \frac{1}{ (2 \pi)^{(D/2)} } \frac{1}{ |\Sigma| } \exp
\left\\{ 
- \frac{1}{2} (x - \mu_k)^T \Sigma^{-1} (x - \mu_k)
\right\\} \tag{4.64}
$$

まず2クラスの場合から考える。式(4.57)より$p(C_1 | x) = \sigma(a) $なので、$a$を求める。
2章のガウス分布の計算でやったように、式(4.64)のexpの中身は

$$
-\frac{1}{2} x^T \Sigma x + x^T \Sigma^{-1} \mu - \frac{1}{2} \mu^T \Sigma^{-1} \mu
\tag{2.71}
$$

であることを利用する。

```math
\begin{align}

a &= \ln \frac{p(x|C_1)p(C_1)}{p(x|C_2)p(C_2)} \\
&= \ln \frac{p(x|C_1)}{p(x|C_2)} + \ln \frac{p(C_1)}{p(C_2)}

\end{align}
```

![キャプチャ48.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140135/ad7a3678-0a02-3623-e020-37a955835ad6.png)


以上のように、$x^2$に関する項（や正規化項）はキャンセルするため、結局1次の項が残るので、下式の一般化線形モデルで書けることが分かる。

```math
\begin{align}

p(C_1|x) &= \sigma (w^T x + w0) \tag{4.65} \\
w &= \Sigma^{-1} ( \mu_1 - \mu_2) \tag{4.66} \\
w_0 &= -\frac{1}{2} \mu_1^T \Sigma^{-1} \mu_1 + \frac{1}{2} \mu_2^T \Sigma^{-1} \mu_2 +
\ln \frac{ p(C_1) }{ p(C_2) } \tag{4.67}

\end{align}
```

決定境界は事後確率が一定の超平面である（参照⇒[part13](https://qiita.com/yosshun/items/45ee5ed91f3569c59fac#4%E7%AB%A0%E7%B7%9A%E5%BD%A2%E8%AD%98%E5%88%A5%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E6%BA%96%E5%82%99)）ことを思い出すと、ある2クラスの**ガウス分布の共分散行列が同じならば**入力空間上で決定境界は式(4.67)より線形になる。
一方、ある2クラスのガウス分布の共分散が異なっていれば、上記の式変形で$x^2$に関する項のキャンセルがなくなるので、決定境界は2次関数で与えられる。
これを図で表したものが下になる。

![キャプチャ49.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140135/2c6ff4a2-d863-8191-c747-1d7f71d7b8de.png)

- 緑クラスと赤クラスはガウス分布の共分散が同じなので、左図で確率密度の等高線の形が同じになっている。そして、緑クラスと赤クラスの決定境界は右図のように線形（直線）となっている
- 青クラスとその他のクラスのガウス分布共分散は異なるので、左図での等高線の形が異なっている。そして、青クラスとその他のクラスの決定境界は2次関数の形になっている

# 4.2 最尤解

前節の内容で、2クラス問題の事後確率$p(C_1|x)$は式(4.65-4.67)で書けると分かった。
なので、$ \Sigma, \mu_1, \mu_2, p(C_1) $が求まれば事後確率が決まる[^1]。これらを求めよう。

クラスの条件付き確率密度$p(x|C_k)$をパラメトリックな関数形にすれば、クラスの事前確率$p(C_k)$と$ \Sigma, \mu_1, \mu_2, p(C_1) $が最尤推定で求められる。

2クラス問題の各クラスの条件付き確率密度はガウス分布、かつ共通の共分散行列を持つとする。
訓練データ集合$ \\{ x_n, t_n \\}, \quad n=1, \cdots, N $が与えられている。
目標変数$t_n = 1$はクラス$C_1$、$ t_n = 0 $はクラス$C_2$を表す。
クラスの事前確率$ p(C_1) = \pi, p(C_2) = 1 - \pi $である。

尤度関数、すなわちパラメータ$ \Sigma, \mu_1, \mu_2, p(C_1) $が固定としたときにデータ集合$ \\{ x_n, t_n \\} $が生成される確率は

$$
p(\mathbf{t}, X | \pi, \mu_1, \mu_2, \Sigma) = \prod_n p(x_n, C_1)^{t_n} p(x_n, C_2)^{1 - t_n}
$$

と書ける。ここで、$ \mathbf{t} = (t_1, \cdots, t_N)^T, X= (x_1, \cdots, x_N)^T $である。

右辺に現れる同時確率は：

```math
\begin{align}

p(x_n, C_1) &= p(C_1) p(x_n | C_1 ) = \pi N(x_n | \mu_1, \Sigma) \\
p(x_n, C_2) &= p(C_2) p(x_n | C_2 ) = ( 1 - \pi) N(x_n | \mu_2, \Sigma)

\end{align}
```

なので尤度関数を書き直すと

$$
p(\mathbf{t}, X | \pi, \mu_1, \mu_2, \Sigma) = \prod_n
[ \pi N(x_n | \mu_1, \Sigma) ]^{t_n}
[ ( 1 - \pi) N(x_n | \mu_2, \Sigma) ]^{ 1 - t_n} \tag{4.71}
$$

よって対数尤度関数は

$$
\ln p(\mathbf{t}, X | \pi, \mu_1, \mu_2, \Sigma) = 
\sum_n t_n \ln \\{ \pi N(x_n | \mu_1, \Sigma) \\} + 
\sum_n (1 - t_n) \ln \\{ ( 1 - \pi) N(x_n | \mu_2, \Sigma) \\} \tag{4.71'}
$$

### 事前確率πを求める

対数尤度関数(4.71')を$\pi$について偏微分＝０、を解くといういつもの流れ。
$N_1, N_2$をそれぞれ$C_1, C_2$のデータの総数とすると

```math
\begin{align}

(4.71')から\piに関する項を抜き出すと \\
\sum_n \{
t_n \ln \pi + (1 - t_n) \ln (1- \pi) \} \\
N_1 \ln \pi + N_2 \ln(1 - \pi) \\
上式を\piについて偏微分＝０、の方程式を解くと \\
\pi = \frac{N_1}{N_1 + N_2} \tag{4.73}
\end{align}
```

### ガウスの平均μ_1を求める（μ_2も同様のやり方）

```math
\begin{align}

(4.71')から\mu_1に関する項を抜き出すと \\
\sum_n t_n \ln \{ N(x_n | \mu_1, \Sigma) \} \\
さらにN(x_n | \mu_1, \Sigma)の\mu_1に関する項は\expの中身だから \\
\sum_n t_n \left\{ 
-\frac{1}{2} (x_n - \mu_1)^T \Sigma^{-1} (x_n - \mu_1)
\right\} \\
上式を\mu_1について偏微分＝０、の方程式を解く。\\
線形代数のテクニック\frac{\partial}{\partial x}(x^T A x) = (A + A^T) xを使って\\
- \frac{1}{2} \sum_n t_n (2 \Sigma^{-1})(x_n - \mu_1)(-1) = 0 \\
\therefore \mu_1 = \frac{1}{N_1} \sum_n t_n x_n \tag{4.75}

\end{align}
```

### 共分散行列Σを求める

やり方はこれまでと同じように対数尤度から$\Sigma$に関する項を抜き出して、偏微分＝０。
ただし、この式変形はややこしく、テキストもさらっと流しているので深追いしない。

結果だけを記す。

```math
\begin{align}

\Sigma &= \frac{N_1}{N} S_1 + \frac{N_2}{N} S_2 \tag{4.78} \\
S_1 &= \frac{1}{N_1} \sum_{n \in C_1} (x_n - \mu_1) (x_n - \mu_1)^T \tag{4.79} \\
S_2 &= \frac{1}{N_2} \sum_{n \in C_2} (x_n - \mu_2) (x_n - \mu_2)^T \tag{4.80} \\

\end{align}
```

各クラスの共分散行列の重み付き平均で与えられる、という直観と一致した結果になっている。

多クラスに拡張したときも同じような手順で計算できるらしい...が演習問題になっているので略。
出来そうだな～、という雰囲気が感じられたということで納得しよう。

[^1]: $p(C_2)$は$1 - p(C_1)$で求まるので$p(C_1)$だけ分かれば十分。

# 4.2.3 離散特徴

自然言語処理などでよく使われるナイーブベイズという手法の簡単な紹介。
特徴$x_i$が離散値の場合を考える[^2]。簡単のため、2値$ x_i \in \\{ 0,1 \\} $とする。
特徴数が1個の場合は、$p(x_1 = 0) = 0.2, p(x_1 = 1 ) = 0.8$のように、分布は$2^1$個の表に相当する。
特徴数が2個なら、$p(x_1 = 0, x_2 = 0) = 0.1, p(x_1 = 0, x_2 = 1) = 0.2, p(x_1 = 1, x_2 = 0) = 0.3, p(x_1 = 1, x_2 = 1) = 0.4$のように、分布は$2^2$個の表に相当する。また、分布の総和は必ず1となるので、独立変数は$2^2 -1$個である。

より一般的に特徴数が$D$個であれば、分布は$2^D$個で独立変数は$2^D - 1$個である。
これでは特徴数が指数関数的に増加してしまうので、扱えなくなる。
なので、ナイーブベイズとモデルでは、特徴値がクラス$C_k$に対して条件付き独立であるとする。
つまり、特徴数が2個なら$ p(x_1, x_2) = p(x_1) p(x_2) $であると仮定する。

この仮定により、クラスの条件付き確率分布は：

$$
p(x | C_k) \prod_{i=1}^D \mu_{ki}^{x_i} (1 - \mu_{ki} )^{1 - x_i}  \tag{4.81}
$$

ここで、$\mu_{ki}$はクラス$C_k$の$i$番目の特徴が1である確率である。

これを式(4.63)に代入すると以下が得られる。

$$
a_k(x) = \sum_{i=1}^D \\{
x_i \ln \mu_{ki} + (1 - x_i) \ln (1 - \mu_{ki}) \\} + \ln p(C_k) \tag{4.82}
$$

入力値$x_i$について線形関数であることに留意（ソフトマックス関数の一般化線形モデルとなっている）。
これを式(4.62)に代入するとクラスの事後確率$p(C_k|x)$が得られるので、入力値$x$をどのクラスに識別すればよいかの情報が得られる。


[^2]: 例えば、自然言語処理では文章中にある単語が何回出てくるか、という離散値を特徴として扱う。

# 4.2.4 指数型分布族

クラスの条件付き確率が式(4.81)のようにベルヌーイ分布としたとき、あるいは式(4.61)のようにガウス分布としたとき、クラスの事後確率はシグモイド関数またはソフトマックス関数の一般化線形モデルで与えられた。
これは、クラスの条件付き確率が2.4節で扱った指数型分布族としたときに得られる結果であるらしい。

つまり、事後確率を一般化線形モデルにしたいときは、クラスの条件付き確率は必ず指数型分布族であると仮定すればよい。