- 講師:本多 淳也
- 参考書:エージェントアプローチ人工知能 第2版
- 参考書:イラストで学ぶ 人工知能概論
In [1]:
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
In [2]:
seed = 0
N = 10000
離散型の確率変数と確率関数
- 離散型(discrete type)確率変数:可算集合の中の値をとる確率変数
- 離散型の確率変数の確率分布=「確率変数がそれぞれの値をとる確率」 $$P(X=x) = f(x)$$
- ここで、$f(x)$ は確率質量関数(probability mass function)と呼ばれるもので、以下の性質を満たす。 $$f(x)\geq0,\quad\sum_xf(x) = 1$$
- 積率母(モーメント)関数は、以下で表される。 $$M_X(t) = \mathbb{E}\left[e^{tX}\right]$$
一様分布
名前 | 値 |
---|---|
確率質量関数 | $$f(x) = \frac{1}{N}\text{ for $x=1,2,\ldots,N$}$$ |
平均 | $$\mathbb{E}(X) = \frac{N+1}{2}$$ |
分散 | $$\mathbb{V}(X) = \frac{N^2-1}{12}$$ |
In [3]:
DiceEyes = np.arange(1,7)
In [4]:
plt.hist(DiceEyes, bins=6, density=True, color="blue")
plt.ylim(0,1), plt.title("Discrete Uniform Distribution")
plt.show()
二項分布
- ベルヌーイ施行に対して、実験が成功する回数 $X$ の確率分布
- $x$ 回成功して $n-x$ 回失敗:$p^x\left(1-p\right)^{n-x}$
- 順番を入れ替えた時の組み合わせの数:$_nC_x$
名前 | 値 |
---|---|
積率母(モーメント)関数 | $$M_X(t) = \left(pe^t + (1-p)\right)^n$$ |
確率質量関数 | $$f(x) = _nC_xp^x\left(1-p\right)^{n-x}$$ |
期待値 | $$\mathbb{E}(X) = np$$ |
分散 | $$\mathbb{V}(X) = np(1-p)$$ |
In [5]:
n = 10
In [6]:
def plotBinomial(p,n,N,ax=None,seed=None):
if ax==None: fig,ax = plt.subplots()
counts = np.sum(np.random.RandomState(seed).uniform(low=0,high=1,size=(n,N))<p, axis=0)
ax.hist(counts, density=True, color="blue")
ax.set_xlim(0,n), ax.set_ylim(0,1)
ax.set_xlabel("$x$", fontsize=14), ax.set_ylabel("Probability", fontsize=14), ax.set_title(f"Binomial Distribution $p={p}$", fontsize=14), ax.grid()
return ax
In [7]:
fig = plt.figure(figsize=(14,4))
for i,p in enumerate([0.1, 0.5, 0.9]):
ax = fig.add_subplot(1,3,i+1)
plotBinomial(p,n,N,ax=ax,seed=seed)
plt.tight_layout()
plt.show()
超幾何分布
- $\mathrm{A}$ が $M$ 個、$\mathrm{B}$ が $N-M$ 個の合計 $N$ 個の玉が入っている袋から無作為に玉を $n$ 個取り出す。
- 非復元抽出(sampling without emplacement)したときに、$\mathrm{A}$ が出てくる個数 $X$ の分布
- 確率の和や積率母関数などの統計量が超幾何級数によって表現されることが名前の由来。
名前 | 値 |
---|---|
$X$ の最大値 | $$\min\left\{n,M\right\}$$ |
$X$ の最小値 | $$\max\left\{0,n-\left(N-M\right)\right\}$$ |
確率質量関数 | $$f(x) = \frac{_MC_x\times _{N-M}C_{n-x}}{_NC_n}$$ |
期待値 | $$\mathbb{E}(X) = n\frac{M}{N}$$ |
分散 | $$\mathbb{V}(X) = n\frac{M(N-M)}{N^2}\frac{N-n}{N-1}$$ |
In [8]:
def plotHypergeometric(n_tot,n_a,n,N,ax=None,seed=None):
if ax==None: fig,ax = plt.subplots()
counts = np.asarray([np.count_nonzero(np.random.choice(n_tot, size=(n), replace=False)<n_a) for _ in range(N)])
ax.hist(counts, density=True, color="blue")
ax.set_xlim(0,n), ax.set_ylim(0,1)
ax.set_xlabel("$x$", fontsize=14), ax.set_ylabel("Probability", fontsize=14), ax.set_title("Hypergenometric Distribution\n"+f"$N_A={n_a},N_B={n_tot-n_a}$", fontsize=14), ax.grid()
return ax
In [9]:
fig = plt.figure(figsize=(14,4))
for i,M in enumerate([10, 50, 90]):
ax = fig.add_subplot(1,3,i+1)
ax = plotHypergeometric(n_tot=100,n_a=M,n=10,N=N,ax=ax,seed=seed)
plt.tight_layout()
plt.show()
※ $N$ が十分に大きいとき、玉を袋に戻しても戻さなくても大して変わらない。
ポアソン分布
- 成功確率が低い事象を表現するのに長けている。
- 二項分布で、成功確率 $p$ が非常に小さい場合めったに成功しないが、いくら $p$ が小さくても、試行回数 $n$ が非常に大きい場合、ある程度の回数は成功する。
- この時、例えば $p=0.00003,n=100000$ だった場合、期待値 $\mathbb{E}(X) = np = 3$ となり、$x=3$ の生起確率はそれほど小さくはなさそう。
- しかし、その確率の計算は非常に大変。 $$f(3) = _{100000}C_3\left(0.00003\right)^3\left(0.99997\right)^{99997}$$
- そこで、ポアソンの少数の法則(Poisson's law of small numbers)を用いる。$p=\lambda/n$ に対して、 $$_nC_xp^x\left(1-p\right)^{n-x}\longrightarrow\frac{e^{-\lambda}\lambda^x}{x!}\quad\left(n\rightarrow\infty\right)$$
In [10]:
fig = plt.figure(figsize=(14,4))
for i,lam in enumerate([1,10,25]):
ax = fig.add_subplot(1,3,i+1)
ax.hist(np.random.RandomState(seed).poisson(lam=lam, size=N*100), density=True, color="blue")
ax.set_xlim(0,50), ax.set_ylim(0,1), ax.set_title(f"Poisson Distribution $\lambda={lam}$"), ax.grid()
plt.tight_layout()
plt.show()
【証明】¶
$$ \begin{aligned} \lim_{n\rightarrow\infty}&\ _nC_x\left(\frac{\lambda}{n}\right)^x\left(1-\frac{\lambda}{n}\right)^{n-x}\\ &=\lim_{n\rightarrow\infty}\frac{n!}{x!\left(n-x\right)!}\left(\frac{\lambda}{n}\right)^x\left(1-\frac{\lambda}{n}\right)^{n-x}\\ &= \frac{\lambda^x}{x!}\lim_{n\rightarrow\infty}\frac{n!}{\left(n-x\right)!n^x}\left(1-\frac{\lambda}{n}\right)^{n-x}\\ &=\frac{\lambda^x}{x!}\lim_{n\rightarrow\infty}\left(\frac{n}{n}\times\frac{n-1}{n}\times\cdots\times\frac{n-x+1}{n}\right)\left(1-\frac{\lambda}{n}\right)^{n}\left(1-\frac{\lambda}{n}\right)^{-x}\\ &= \frac{\lambda^x}{x!}\cdot1\cdot e^{-\lambda}\cdot 1 \quad\left(\because e=\lim_{t\rightarrow0}\left(1+t\right)^{\frac{1}{t}}\right)\\ &= \frac{e^{-\lambda}\lambda^x}{x!} \end{aligned} $$名前 | 値 |
---|---|
積率母関数 | $$M_X(t) = \mathbb{E}\left[e^{tX}\right]=\exp\left\{\lambda\left(e^t-1\right)\right\}$$ |
確率質量関数 | $$f(x) = \frac{e^{-\lambda}\lambda^x}{x!}$$ |
期待値 | $$\mathbb{E}(X) =\lambda$$ |
分散 | $$\mathbb{V}(X) = \lambda$$ |
連続型の確率変数と確率密度関数
- 連続型(continuous type)確率変数:連続値をとる確率変数
- 連続型の確率変数の確率分布=「確率変数が $a$ 以上 $b$ 以下の値をとる確率」 $$P(a\leq X\leq b) = \int_a^b f(x)dx$$
- ここで、$f(x)$ は確率密度関数(probability mass function)と呼ばれるもので、以下の性質を満たす。 $$f(x)\geq0,\quad\int f(x)dx = 1$$
- ※ 連続型の確率変数がある値 $a$ をとる確率は、$0$ $$P(X=a) = \int_a^a f(x)dx = 0$$
正規分布
名前 | 値 |
---|---|
積率母関数 | $$M_X(t) = \mathbb{E}\left[e^{tX}\right]=\exp\left(\mu t + \frac{\sigma^2t^2}{2}\right)$$ |
確率密度関数 | $$f(x) = \frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)\text{ for $x\in(-\infty,\infty)$}$$ |
期待値 | $$\mathbb{E}(X) =\mu$$ |
分散 | $$\mathbb{V}(X) = \sigma^2$$ |
In [11]:
def NormalProb(ax, mu, sigma):
""" Only [µ-3σ, µ+3σ] """
X = np.arange(mu - 3.5*sigma, mu + 3.5*sigma, sigma/50)
Y = stats.norm.pdf(X, mu, sigma)
ax.plot(X,Y, color="red")
return ax
In [12]:
fig = plt.figure(figsize=(14,4))
for i,sigma in enumerate([1,2,3]):
ax = fig.add_subplot(1,3,i+1)
ax = NormalProb(ax, 0, sigma)
ax.set_xlim(-8,8), ax.set_ylim(0,0.5), ax.set_title(f"Normal Distribution $\sigma={sigma}$"), ax.grid()
plt.tight_layout()
plt.show()
2次元正規分布¶
- 各要素が独立に標準正規分布に従う $\mathbf{Z}$ を以下用いて $\mathbf{W} = \mathbf{TZ} + \boldsymbol{\mu}$ と変換する。
- $2\times2$ 正則行列 $T$
- 2次元ベクトル $\boldsymbol{\mu}$
$$
\begin{aligned}
l(\mathbf{w}) \propto f(\mathbf{z})
&= f\left(\mathbf{T}^{-1}\left(\mathbf{w}-\boldsymbol{\mu}\right)\right)\\
&= \frac{1}{2\pi}\exp\left(-\frac{1}{2}\left(\mathbf{w}-\boldsymbol{\mu}\right)^T\boldsymbol{\Sigma}^{-1}\left(\mathbf{w}-\boldsymbol{\mu}\right)\right)\\
\therefore l(\mathbf{w}) &= \frac{1}{2\pi|\boldsymbol{\Sigma}|^{1/2}}\exp\left(-\frac{1}{2}\left(\mathbf{w}-\boldsymbol{\mu}\right)^T\boldsymbol{\Sigma}^{-1}\left(\mathbf{w}-\boldsymbol{\mu}\right)\right)
\end{aligned}
$$
ガンマ分布
名前 | 値 |
---|---|
積率母関数 | $$M_X(t) = \mathbb{E}\left[e^{tX}\right]=\left(\frac{\lambda}{\lambda-t}\right)^{\alpha}$$ |
確率密度関数 | $$f(x) = \begin{cases}\begin{aligned}&\frac{\lambda^{\alpha}}{\Gamma(\alpha)}x^{\alpha-1}e^{-\lambda x} & (0\leq x)\\&0 & (0>x)\end{aligned}\end{cases}$$ |
期待値 | $$\mathbb{E}(X) =\alpha/\lambda$$ |
分散 | $$\mathbb{V}(X) = \alpha/\lambda^2$$ |
なお、ガンマ関数は以下の性質を持つ。
$$ \begin{aligned} \Gamma(\alpha) &= \int_{0}^{\infty}x^{\alpha-1}e^{-x}dx > 0\\ \Gamma(\alpha) &= (\alpha-1)! \end{aligned} $$In [13]:
fig = plt.figure(figsize=(14,4))
x = np.linspace(0,8,N)
for i,alpha in enumerate([1,2,3]):
ax = fig.add_subplot(1,3,i+1)
ax.plot(x, stats.gamma.pdf(x, a=alpha), color="red")
ax.set_xlim(0,8), ax.set_ylim(0,0.5), ax.set_title("Gamma Distribution\n" + f"$\lambda=1, alpha={alpha}$", fontsize=14), ax.grid()
plt.tight_layout()
plt.show()
指数分布¶
- $\alpha=1$ のガンマ分布に対応 $$f(x) = \begin{cases}\begin{aligned} &\frac{\lambda^{\alpha}}{\Gamma(\alpha)}x^{\alpha-1}e^{-\lambda x} & (0\leq x)\\ &0 & (0>x) \end{aligned}\end{cases}$$
- 単位時間に平均 $\lambda$ 回起こる事象が初めて起こるまでの時間 $X$ の分布
- (ポアソン分布:単位時間に平均 $\lambda$ 回起こる事象が単位時間中に起こる回数 $Y$ の分布)
カイ二乗分布¶
- 確率変数 $X_i$ が独立に標準正規分布 $\mathcal{N}(0,1)$ に従うとき、 $$\chi^2 = \sum_{i=1}^nX_i^2$$ はガンマ分布 $\mathrm{Ga}(n/2,1/2)$ に従う。
- このガンマ分布 $\mathrm{Ga}(n/2,1/2)$ を特に、自由度 $n$ の $\chi^2$ 分布(chi-squared distribution)と呼ぶ。 $$f(x) = \begin{cases}\begin{aligned} &\frac{\left(\frac{1}{2}\right)^{\frac{n}{2}}}{\Gamma\left(\frac{n}{2}\right)}x^{\frac{n}{2}-1}e^{-\frac{1}{2}x} & (0\leq x)\\ &0 & (0>x) \end{aligned}\end{cases}$$
ベータ分布
名前 | 値 |
---|---|
確率密度関数 | $$f(x) = \begin{cases}\begin{aligned}&\frac{x^{\alpha-1}\left(1-x\right)^{\beta-1}}{B(\alpha,\beta)} & (1>x>0)\\&0 & (\text{otherwise.})\end{aligned}\end{cases}$$ |
期待値 | $$\mathbb{E}(X) =\frac{\alpha}{\alpha+\beta}$$ |
分散 | $$\mathbb{V}(X) = \frac{\alpha\beta}{\left(\alpha+\beta\right)^2\left(\alpha+\beta+1\right)}$$ |
なお、ベータ関数 $B(\alpha,\beta)$ は以下で表される。
$$B(\alpha,\beta) = \int_0^1x^{\alpha-1}(1-x)^{\beta-1}dx = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)}$$In [14]:
fig = plt.figure(figsize=(14,12))
x = np.linspace(0,1,N)
for i,alpha in enumerate([0.5,1,3,5]):
for j,beta in enumerate([0.5,1,3,5]):
ax = fig.add_subplot(4,4,i*4+j+1)
ax.plot(x, stats.beta.pdf(x, alpha, beta), color="red")
ax.set_xlim(0,1), ax.set_ylim(0,3), ax.set_title("Beta Distribution\n" + f"$alpha={alpha}, beta={beta}$", fontsize=14), ax.grid()
plt.tight_layout()
plt.show()
- $\alpha=\beta=1$ のとき、特に連続一様分布(uniform distribution of continuous type)と呼び、$U(0,1)$ で表す。
- $n$ 個の標本 $X_1,X_2,\ldots,X_n$ があるとき、それらのうち $k$ 番目に小さい標本を「第 $k$ 順序統計量」と呼ぶ。
- 最小値:第 $1$ 順序統計量
- 最大値:第 $n$ 順序統計量
- 中央値:第 $(n+1)/2$ 順序統計量
- $X_i$ がそれぞれ独立に $[0,1]$ 上の一様分布に従うとき、その第 $k$ 順序統計量は「ベータ分布 $Be\left(k,n-k+1\right)$」に従う。
In [ ]: