ガウス分布とガウス過程の性質をまとめてみた

この記事は古川研究室 [Advent_calendar][link-0] 17日目の記事です。
[link-0]:https://qiita.com/advent-calendar/2019/flab
本記事は古川研究室の学生が学習の一環として書いたものです。内容が曖昧であったり表現が多少異なったりする場合があります。


# はじめに
現在、自分が所属している古川研究室では「ガウス過程と機械学習」という本の読後会を行なっています.
そこでガウス過程の勉強をみんなでしてるのですが、そのアウトプットとしてメモ程度にガウス過程とガウス分布の性質をまとめてみました.
性質をまとめることでガウス過程は無限次元のガウス分布であるという話やそれらの性質がどういうところで活かされているのかを整理したいなと思います.

# 概要
こちらで、ガウス分布とガウス過程の性質をまとめてみました.
後の章で、細かくみていきたいと思います.

### 1. サンプリングが可能
* ガウス分布: ベクトル(またはスカラー)をサンプリングできる
* ガウス過程: 関数(無限次元のベクトル)をサンプリングできる

### 2. 周辺化した分布もガウス分布にしたがう
* ガウス分布: 周辺化した分布はガウス分布に従う
* ガウス過程: 有限個の確率変数を持つ分布がガウス分布であればガウス過程に従う

### 3. 条件付き分布もガウス分布、ガウス過程
* ガウス分布:一部の確率変数が観測されてもその条件付き分布はガウス分布である
* ガウス過程:一部の確率変数が観測されてもその条件付き分布はガウス過程に従う

## 1. サンプリングが可能
ガウス分布やガウス過程は確率分布に基づいてサンプリングを行うことができます.
多変量ガウス分布は確率分布にしたがってベクトルをサンプリングすることができます.
例として２次元ガウス分布からサンプリングを行なってみました.
今回は平均$\mathbf{\mu}$や共分散行列$\Sigma$を以下のようにしました.

```math
\mathbf{\mu}=(0.0,5.0)^{T},
\Sigma=\left(\begin{array}{ll}{\sigma_{1}^{2}} & {\sigma_{12}} \\ {\sigma_{12}} & {\sigma_{2}^{2}}\end{array}\right)
```

青点は２次元ガウス分布からサンプリングした点で、赤点は平均$\mathbf{\mu}$を表しています.
中心近くに点が生成される確率が高く、平均から離れるほど、そこに点が生成される確率は低くなります.
以下はプログラムとプログラムを走らせた結果を載せています.

```python
import numpy as np
import matplotlib.pyplot as plt

mu=np.array([0.0,5.0])#平均
Sig = np.array([[0.4 ** 2, 0.3 ** 2], [0.3 ** 2, 0.4 ** 2]]) #共分散行列


#ガウス分布からランダムにサンプリング
X=np.random.multivariate_normal(mean=mu,cov=Sig,size=100)

mean=np.mean(X,axis=0)

#サンプルの描画
fig=plt.figure()
plt.scatter(X[:,0],X[:,1],color="blue")
plt.scatter(mean[0],mean[1],color="red")
plt.show()
```

![sample_gauss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/466676/7c7ad077-0592-d25c-efdc-ad8f7a3ef362.png)



次はガウス過程の例をあげてみます.
ガウス過程では、無限次元のベクトルとして関数をサンプリングすることができます.
図では平均関数を$\mu(x)=0$とし,カーネル関数$k(x,x^{\prime})$をRBFカーネルとしています.
青線はガウス過程から生成した関数で赤線はガウス過程から生成した関数の平均をとったものです.
ガウス過程では、平均関数$\mu(x)$近くで関数が生成される確率が高く、平均から離れたところに関数が生成される確率は低くなります.
以下はプログラムとプログラムから得られた図を載せています.

```python
import numpy as np
import matplotlib.pyplot as plt

N=100#1つの関数をN点で表現する
x=np.linspace(-1,1,N)

K=np.zeros((N,N))
theta=0.5#カーネルのパラメータ

#RBFカーネル
for i in np.arange(N):
    for j in np.arange(N):
        K[i,j]=np.exp(-(x[i]-x[j])**2/theta)


f=np.random.multivariate_normal(mean=np.zeros(N),cov=K,size=10)#関数を生成
g=np.mean(f,axis=0)#生成した関数の平均
#描画
fig=plt.figure()
z=np.linspace(-1,-1,N)
for i in np.arange(10):#10点関数を生成
    plt.plot(x,f[i,:],label="f",color="blue")
plt.plot(x,g,label="g",color="red")![sample_gauss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/466676/a62ca00b-2e5b-3b53-bcb8-568d52e5f298.png)
plt.show()
```


![sample_GP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/466676/ce780b4d-1223-4b51-d7c9-07630c85f377.png)




## 2. 周辺化してもガウス分布(ガウス過程)に従う
$N$個の確率変数$x_1,x_2,...,x_N$があり、確率分布$p(x_1,x_2,...,x_N)$がガウス分布である時,
L個の確率変数を周辺化した確率分布$p(x_1,x_2,...,x_{N-L})$もガウス分布になります.
例として、2次元ガウス分布を例として考えてみます.
平均を$\mathbf{\mu}$,共分散を$\Sigma$,確率変数を$\mathbf{x}$、２次元ガウス分布を$p(\mathbf{x})$とします.

```math
\mathbf{\mu}=(\mu_{1},\mu_{2})^{T}, 
\Sigma=\left(\begin{array}{ll}{\sigma_{1}^{2}} & {\sigma_{12}} \\ {\sigma_{12}} & {\sigma_{2}^{2}}\end{array}\right),\mathbf{x}=(x_{1},x_{2})^{T}\\

p(\mathbf{x})=\frac{1}{\sqrt{(2 \pi) \operatorname{det} \Sigma}} \exp \left\{-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^{T} \Sigma^{-1}(\mathbf{x}-\boldsymbol{\mu})\right\}

```
$x_{2}$を周辺化した分布$p(x_1)$は以下のようになり、$p(x_1)$もガウス分布になります.

```math
\begin{aligned} p(x_1)&=\int p(x_{1},x_{2}) dx_{2}\\
&=N(x_1|\mu_1,\sigma_{1}^{2})
\end{aligned}

```


**ここで重要なのは$p(x_{1},x_{2})$がガウス分布に従う場合、それを$x_2$に関して周辺化するというのは$\mu_{2}$や$\sigma_{12}$,$\sigma_{1}^{2}$を「みなかった」ことにするのと同じであるということです.**


ガウス過程の場合では$p(x_1,x_2,...,x_N)$が多変量ガウス分布であるとき$p(x_1,x_2,...,x_N)$はガウス過程に従うと言います.
ガウス過程が無限次元のガウス分布であるのであれば以下の式のように観測されていない次元は周辺化されたものだとして「みなかった」ことにしてしまえば周辺化した後の分布もガウス過程に従うということだと思います.

```math
\begin{aligned} p(x_1,x_2,...,x_N)&=\iint ・・・\int p(x_{1},x_{2},...,x_{\infty}) dx_{N+1}dx_{N+2}...dx_{\infty}\\
&=N(x_1,...,x_N|\mathbf{\mu},\Sigma)
\end{aligned}

```

## 3. 条件付き分布はガウス分布
$N$個の確率変数$x_1,x_2,...,x_N$があり、確率分布$p(x_1,x_2,...,x_N)$がガウス分布である時,一部の確率変数が直接観測された時の条件付き分布もガウス分布になります.
例として、2次元ガウス分布を考えます.

$x_1=c$と$x_1$が直接観測されたときに$p(x_2|x_1=c)$の分布は以下のようなガウス分布になります.

```math
p\left(\boldsymbol{x}_{2} | \boldsymbol{x}_{1}\right)=\mathcal{N}\left(\boldsymbol{\mu}_{2}+\mathbf{\Sigma}_{21} \mathbf{\Sigma}_{11}^{-1}\left(\boldsymbol{x}_{1}-\boldsymbol{\mu}_{1}\right), \mathbf{\Sigma}_{22}-\mathbf{\Sigma}_{21} \mathbf{\Sigma}_{11}^{-1} \mathbf{\Sigma}_{12}\right)

```

ガウス過程も$N$個の確率変数$x_1,x_2,...,x_N$が観測された時の条件付き分布はガウス過程になります.



## おわりに
メモ程度なので、すごい雑でしたがガウス過程の性質をみていくことでガウス過程は無限次元のガウス分布であることがわかりました。
他にもありそうなので、適宜修正して行きたいなと思います.


## 参考資料
* [ガウス過程と機械学習][link-1]
[link-1]: https://www.amazon.co.jp/%E3%82%AC%E3%82%A6%E3%82%B9%E9%81%8E%E7%A8%8B%E3%81%A8%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E6%8C%81%E6%A9%8B-%E5%A4%A7%E5%9C%B0/dp/4061529269
* [ガウス過程と機械学習サポートページ][link-2]
[link-2]: http://chasen.org/~daiti-m/gpbook/