Skip to content

Instantly share code, notes, and snippets.

@relax-more
Created May 31, 2018 10:49
Show Gist options
  • Save relax-more/315e1bdc9135e8a7243e33d0a3dbc97a to your computer and use it in GitHub Desktop.
Save relax-more/315e1bdc9135e8a7243e33d0a3dbc97a to your computer and use it in GitHub Desktop.
prml 1.2.6
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1.2.6 ガウス曲線フィッティング"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ベイズ確率からおさらい\n",
"\n",
"加法定理・乗法定理をすっ飛ばして、ベイズの定理はこんな感じ\n",
"\n",
"$$ p(w | D) = \\frac{p(D|w)p(w)}{p(D)} \\tag{1.43}$$\n",
"\n",
"このとき右辺の \n",
"$$ p(D|w) $$ \n",
"は これを尤度関数と呼ぶ\n",
"\n",
"...結局尤度ってなんやねん良うわからんわ。\n",
"\n",
"ってなるけど一旦保留。\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"----\n",
"## ガウス分布 (正規分布) のおさらい。\n",
"\n",
"ガウス分布 式\n",
"$$ N(x | μ, σ^2) = \\frac{1}{(2πσ^2)^{1/2}} \\exp\\{ -\\frac{1}{2σ^2}(x - μ)^2 \\}\\\\ \\tag{1.46}$$\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe5a99f5828>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"plt.figure(figsize=(10,5))\n",
"\n",
"pow_sigmas = [0.5,1.0,2.0]\n",
"mus = [0,4,0]\n",
"\n",
"x = np.arange(-8., 8., 0.01)\n",
"\n",
"for powsigma, mu in zip(pow_sigmas,mus):\n",
" N = (1 / np.sqrt(2 * np.pi * powsigma ) ) * np.exp(-pow((x-mu), 2) / (2 * powsigma) )\n",
"\n",
" plt.plot(x, N)\n",
" plt.grid()\n",
" plt.xlabel('x')\n",
" plt.ylabel('N')\n",
" plt.legend([\"σ=0.2 μ=0\", \"σ=1.0 μ=4\",\"σ=5.0 μ=0\"],loc=\"upper left\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"D次元ベクトルの連続変数に対するガウス分布\n",
"$$ N(x | \\mathbf{μ}, \\sum_{}) = \\frac{1}{(2π)^{\\mathbf{D}/2}} \\frac{1}{|\\sum_{}|^{(1/2)}} \\exp\\{ -\\frac{1}{2}(x - \\mathbf{μ})^\\mathbf{T}\\sum_{}^{-1}(x-\\mathbf{μ}) \\}\\\\ \\tag{1.52}$$\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"未知の μ と σ をもつガウス分布から 同じ正規分布から独立で生成された観測値 x が与えられる時、データ集合 **x** の 確率はこんな感じでかける。\n",
"\n",
"(独立の同時確率は周辺確率の積で表せる @p17)\n",
"\n",
"\n",
"$$ p(\\mathbf{x}| μ, σ^2) = \\prod_{n=1}^N N(x_n | μ, σ^2 ) \\tag{1.53}$$\n",
"\n",
"おやこの右辺は 1.43 と見比べると尤度関数ではないか。\n",
"\n",
"総乗は計算し辛いのでこれの対数を取る。\n",
"\n",
"$$ \\ln p(\\mathbf{x}| μ, σ^2) = -\\frac{1}{2σ^2} \\sum_{n=1}^N(x_n - μ)^2 - \\frac{N}{2} \\ln σ^2 - \\frac{N}{2} \\ln (2\\pi) \\tag{1.54}$$\n",
"\n",
"\n",
"\n",
"ここで再度尤度関数ってなんやねんの話に戻ると、参照した qiita の記事では下記のように話ししている。\n",
"\n",
"「尤度関数の基本概念は、「サンプリングしてデータが観測された後、そのデータは元々どういうパラメーターを持つ確率分布から生まれたものだったか?」と言う問いに答えるためのもの」\n",
"\n",
"全く同じ条件 (正規分布から i.i.d. に観測値 x を集めた時に 尤度関数ってなんやねんの話をしている) で説明してるので、以下を参照。\n",
"\n",
"https://qiita.com/kenmatsu4/items/b28d1b3b3d291d0cc698\n",
"\n",
"観測値のセット **x** に対して μ と σ を置き換えてグラフ書いてるのが直感的にわかりやすいので添付。\n",
"\n",
"これは μ を変えた時\n",
"<img src=\"https://camo.qiitausercontent.com/a892e2db0cccb942643a62c90863b47809b24238/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35303637302f34376463626437332d663534302d656362382d646537322d3037326666383564633365622e676966\" width=\"500\">\n",
"\n",
"\n",
"これは μ がわかった上で σ を変えた時。\n",
"\n",
"<img src=\"https://camo.qiitausercontent.com/5f76903b2c8f9a795fc2218b4301b62d5e16494a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35303637302f36666331616431332d346433342d386364632d333365302d3134383131663636313762632e676966\" width=\"500\">\n",
"\n",
"結局この p が最大になるように μ と σ を選べば一番それっぽい μ と σ が選べるよね。ってのが最尤推定 (たぶん)。\n",
"μ と σ の値を縦軸横軸にとって 濃い部分が値が大きい、みたいなグラフが下。\n",
"\n",
"<img src=\"https://camo.qiitausercontent.com/458ca8757af2e7fa10c8fa68f0e21d0c6107f920/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35303637302f38616130303437302d653332372d333135312d303364342d6630666433396663306636382e706e67\" width=\"500\">\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---------\n",
"\n",
"## 曲線フィッティングからおさらい。\n",
"\n",
"ガウス分布の 平均・分散はまあいいとして。\n",
"\n",
"曲線フィッティングは N 個の入力訓練データ **x** と N個の目的値 **t** を利用して学習し、新しい値 x に対して t を予測することである。\n",
"$$ \\mathbf{x} = (x_1, x_2,,,,x_n) $$\n",
"$$ \\mathbf{t} = (t_1, t_2,,,,t_n) $$\n",
"\n",
"曲線は最初に出てきた 式 1.1 \n",
"$$ y(x, w) = w_0 + w_1 x + W_2 x^2 + ... + w_M x^M = \\sum^M_{j=0} w_j x^j \\tag{1.1}$$ \n",
"から x を固定したときのサンプルの分布がガウス分布に従うとするとこんな式がかける。\n",
"\n",
"$$ p(t| x, \\mathbf{w}, β) = N(t| y(x, \\mathbf{w}), β^{-1}) \\tag{1.60} $$\n",
"\n",
"<img src=\"https://wiki.linecorp.com/download/attachments/1126471385/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202018-05-18%208.46.05.png?version=1&modificationDate=1526600827000&api=v2\" width=\"500\">\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 最尤推定 (この辺りから理解が怪しい)\n",
"\n",
"観測値 x_n と その時の目標値 t_n を訓練データとして利用できる時に、 式 1.60 に対して値を当てはめる。(これは)\n",
"\n",
"$$ p(\\mathbf{t}| \\mathbf{x}, \\mathbf{w}, β) = \\prod_{n=1}^N N(t_n| y(x_n, \\mathbf{w}), β^{-1}) \\tag{1.61} $$\n",
"\n",
"おやこの右辺は 1.43、 式 1.53 と見比べると尤度関数ではないか。\n",
"\n",
"$$ p(\\mathbf{x}| μ, σ^2) = \\prod_{n=1}^N N(x_n | μ, σ^2 ) \\tag{1.53}$$\n",
"\n",
"μ --> y\n",
"\n",
"σ^2 --> β^{-1}\n",
"\n",
"に変わってるだけね。\n",
"\n",
"というわけで対数尤度取ると。\n",
"\n",
"$$ \\ln p(\\mathbf{t}| \\mathbf{x}, \\mathbf{w}, β) = -\\frac{β}{2} \\sum_{n=1}^N(y(x_n, \\mathbf{w}) - t_n)^2 + \\frac{N}{2} \\ln β - \\frac{N}{2} \\ln (2\\pi) \\tag{1.62} $$\n",
"\n",
"\n",
"$$ \\ln p(\\mathbf{x}| μ, σ^2) = -\\frac{1}{2σ^2} \\sum_{n=1}^N(x_n - μ)^2 - \\frac{N}{2} \\ln σ^2 - \\frac{N}{2} \\ln (2\\pi) \\tag{1.54}$$\n",
"\n",
"ガウス分布の μと同じノリで y(x_n, **w**) つまり **w** を求めたい。 **w** 関係ないところは邪魔なので削除。\n",
"\n",
"$$ \\ln p(\\mathbf{t}| \\mathbf{x}, \\mathbf{w}, β) = -\\frac{β}{2} \\sum_{n=1}^N(y(x_n, \\mathbf{w}) - t_n)^2 \\tag{1.62_1} $$\n",
"\n",
"懐かしい 式 1.2 とほぼ一緒ね。\n",
"\n",
"$$ E(w) = \\frac{1}{2} \\sum^N_{n=1} \\{y(x_n, w) - t_n\\}^2 \\tag{1.2}$$ \n",
"\n",
"\n",
"式 1.62 を βに関して偏微分する\n",
"\n",
"$$ \\frac{1}{β_{ML}} = \\frac{1}{N} \\sum_{n=1}^{N} \\{y(x_n, w_{ML}) - t_n\\}^2 \\tag{1.63}$$\n",
"\n",
"\n",
"まず **w**, 次に βMLを決めると回帰できたことになる。\n",
"\n",
"これが俗にいう 最尤推定法 (多分)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### map 推定\n",
"\n",
"上の話は尤度関数を最大にする **w** を探す方法だったが、それと別の方法として\n",
"\n",
"**w** の事前確率を考えて、尤度関数と事前確率の積からベイズの定理を使って事後確率を計算し、それを最大化することで w を推定しよう、という方法らしい。\n",
"\n",
"$$ p(\\mathbf{w} | \\mathbf{x}, \\mathbf{t}, α, β) \\propto p(\\mathbf{t} | \\mathbf{x}, \\mathbf{w}, β ) p(\\mathbf{w} | α \\tag{1.66}) $$\n",
"\n",
"$$ \\frac{β}{2} \\sum_{n=1}^{N} \\{y(x_n, \\mathbf{w}) - t_n\\}^2 + \\frac{α}{2} \\mathbf{w}^{\\mathrm{T}} \\mathbf{w} \\tag{1.67}$$ \n",
"\n",
"へー。\n",
"\n",
"http://aidiary.hatenablog.com/entry/20100404/1270359720\n",
"\n",
"別サイトいわく、 map推定はテキスト分類でよく出るナイーブベイズ とよく似ているらしい。\n",
"\n",
"\n",
"いくつか関連記事をメモ。うんわからん。\n",
"\n",
"ナイーブベイズで「羽生さん」と「羽生くん」を分類する\n",
"\n",
"https://qiita.com/tmnck/items/175787ed94ae3eb62616\n",
"\n",
"最大事後確率推定(MAP推定)の基本\n",
"\n",
"http://s0sem0y.hatenablog.com/entry/2017/01/18/004836"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"----\n",
"## ここからここから本題 1.2.6\n",
"\n",
"ここまでで観測値 x が来た時に t を予測できるよ、という状況にはなったけどそれでは点推定だしベイズ的でないよね? (しらん) w に関して周辺火して予測分布を求めるのがベイズっぽいらしい。\n",
"\n",
"$$ p(t | x, \\mathbf{x}, \\mathbf{t}) = \\int_{} p(t|x, \\mathbf{w})p(\\mathbf{w}| \\mathbf{x}, \\mathbf{t})dw \\tag{1.68} $$\n",
"\n",
"\n",
"上の式がベイズ推定の予測分布ですが、最尤推定やMAP推定ではパラメータwを(1)式に代入してそのまま予測分布としていたのに、ベイズ推定ではさらにwについて周辺化して予測分布としています。訓練データ (x,t) からパラメータwが得られる確率 (2) を計算し、そのパラメータwのときにtが得られる確率 (1) を計算し、それをすべてのwについて積分してます(そこまでするか・・・)。この積分はどうやって求めるんだと思ったのですが、解析的に解けて(1.69)のやたら複雑な正規分布になるそうです。(完全パクリ)\n",
"\n",
"$$ p(t|x,\\mathbf{x},\\mathbf{t})= N(t|m(x), s^2(x)) \\tag{1.69}$$\n",
"\n",
"$$ m(x) = β \\phi (x)^{\\mathrm{T}} \\mathbf{x} \\sum_{n=1}^N \\phi (x_n) t_n \\tag{1.70}$$\n",
"\n",
"$$ s^2(x) = β^{-1} + \\phi (x)^{\\mathrm{T}} \\mathbf{S} \\phi (x) \\tag{1.71}$$\n",
"\n",
"$$ \\mathbf{S}^{-1} = α\\mathbf{I} + β \\sum_{n=1}^N \\phi (x_n) \\phi (x_n)^{\\mathrm{T}} \\tag{1.72}$$\n",
"\n",
"計算するとこうなるらしい。全然ピンとこない。。。\n",
"\n",
"http://aidiary.hatenablog.com/entry/20100404/1270359720\n",
"このサイトから 式 1.69 を実装したらしいのを 丸コピペして添付。"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe5b0086f60>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"from pylab import *\n",
"import sys\n",
"\n",
"M = 9\n",
"ALPHA = 0.005\n",
"BETA = 11.1\n",
"\n",
"# M次多項式近似\n",
"def y(x, wlist):\n",
" ret = wlist[0]\n",
" for i in range(1, M+1):\n",
" ret += wlist[i] * (x ** i)\n",
" return ret\n",
"\n",
"def phi(x):\n",
" data = []\n",
" for i in range(0, M+1):\n",
" data.append(x**i)\n",
" ret = np.matrix(data).reshape((M+1, 1)) # 縦ベクトルで返す\n",
" return ret\n",
"\n",
"# 式1.70\n",
"def mean(x, xlist, tlist, S):\n",
" sums = matrix(zeros((M+1, 1)))\n",
" for n in range(len(xlist)):\n",
" sums += phi(xlist[n]) * tlist[n]\n",
" ret = BETA * phi(x).transpose() * S * sums\n",
" return ret\n",
"\n",
"# 式1.71\n",
"def variance(x, xlist, S):\n",
" ret = 1.0 / BETA + phi(x).transpose() * S * phi(x)\n",
" return ret\n",
"\n",
"def main():\n",
" # 訓練データ\n",
" # sin(2*pi*x)の関数値にガウス分布に従う小さなランダムノイズを加える\n",
" xlist = np.linspace(0, 1, 10)\n",
" tlist = np.sin(2*np.pi*xlist) + np.random.normal(0, 0.2, xlist.size)\n",
" \n",
" # ベイズ曲線フィッティングを用いて予測分布を求める\n",
" # 行列Sを計算\n",
" sums = matrix(zeros((M+1, M+1)))\n",
" for n in range(len(xlist)):\n",
" sums += phi(xlist[n]) * phi(xlist[n]).transpose()\n",
" I = matrix(np.identity(M+1))\n",
" S_inv = ALPHA * I + BETA * sums\n",
" S = S_inv.getI()\n",
"\n",
" # 連続関数のプロット用X値\n",
" xs = np.linspace(0, 1, 500)\n",
" ideal = np.sin(2*np.pi*xs) # 理想曲線\n",
" means = []\n",
" uppers = []\n",
" lowers = []\n",
" for x in xs:\n",
" m = mean(x, xlist, tlist, S)[0,0] # 予測分布の平均\n",
" s = np.sqrt(variance(x, xlist, S)[0,0]) # 予測分布の標準偏差\n",
" u = m + s # 平均 + 標準偏差\n",
" l = m - s # 平均 - 標準偏差\n",
" means.append(m)\n",
" uppers.append(u)\n",
" lowers.append(l)\n",
" \n",
" plot(xlist, tlist, 'bo') # 訓練データ\n",
" plot(xs, ideal, 'g-') # 理想曲線\n",
" plot(xs, means, 'r-') # 予測モデルの平均\n",
" plot(xs, uppers, 'r--') # +sigma\n",
" plot(xs, lowers, 'r--') # -sigma\n",
" xlim(0.0, 1.0)\n",
" ylim(-1.5, 1.5)\n",
" show()\n",
"\n",
"if __name__ == \"__main__\":\n",
" main()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Py3 DL2 (ML)",
"language": "python",
"name": "python3-dl2-ml"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment