Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save yusuke0519/2467f202090a2c67852b to your computer and use it in GitHub Desktop.
Save yusuke0519/2467f202090a2c67852b to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. 混合ガウス分布\n",
"* 離散的な潜在変数を用いた混合ガウス分布は、ここで、zがカテゴリカル分布、x|zがガウス分布で与えられるとすると次の式で定式化できる。\n",
"\n",
"$$\n",
"p(x) = \\sum_{k=1}^{K} \\pi_k \\it N(x|\\mu_k, \\Sigma_k) = \\sum_{z} p(x, z) = \\sum p(x|z) p(z)\n",
"$$\n",
"\n",
"* $\\pi_k$を混合係数と呼ぶ。これはk番目のガウス分布を選択する確率を表す。\n",
"* 潜在変数zの事後確率を負担率と呼び、次の式で表される。\n",
"\n",
"$$\n",
"\\gamma (z_k) = p(z_k=1) = \\frac {p(z_k=1)p(x|z_k=1)}{\\sum_{j=1}^{K} p(z_j=1) p(x|z_j=1)} = \\frac{\\pi_k \\it N (x|\\mu_k, \\Sigma_k)}{\\sum_{j=1}^{K} \\pi_j \\it N (x|\\mu_j, \\Sigma_j)} (1)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: pylab import has clobbered these variables: ['plt', 'cov', 'random', 'pi', 'mean']\n",
"`%matplotlib` prevents importing * from pylab and numpy\n"
]
}
],
"source": [
"%pylab inline"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nCEJT8H8AjzD5QKBK7WMAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe331dd2210>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pylab as plt\n",
"import numpy as np\n",
"import random\n",
"\n",
"\n",
"D = 2 # nb_feature\n",
"N = 2000 # nb_sample\n",
"K = 3 # nb_mixing\n",
"\n",
"color = ['r', 'g', 'b']\n",
"pi = [0.2, 0.3, 0.5]\n",
"mean = [[-2.0, -2.0], [3.0, 3.0], [5.0, 5.0]]\n",
"cov = [[[1,0.2],[0.8, 2]], [[1,-0.1],[-2.0,1]], [[1,-0.8],[0,1]]]\n",
"z = np.random.multinomial(N,pi, size=1)[0]\n",
"\n",
"def sampling_cond_xz(k, n):\n",
" return np.random.multivariate_normal(mean[k], cov[k], n)\n",
"\n",
"figure = plt.figure(figsize=(5, 5))\n",
"x = []\n",
"for k, (n, c) in enumerate(zip(z, color)):\n",
" temp_x = sampling_cond_xz(k, n)\n",
" plt.scatter(temp_x[:, 0], temp_x[:, 1], color=c)\n",
" x.append(temp_x)\n",
"X = np.vstack(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 混合ガウス分布からサンプルを生成して描画"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"### 2. 混合ガウス分布のパラメタ推定\n",
"* 観測したデータ集合$[x_1, \\cdots, x_N]$から混合ガウス分布のパラメタを求める問題を考える\n",
"* この時、対数尤度は次の式で表される\n",
"$$\n",
"\\ln_p(X|\\pi, \\mu, \\Sigma) = \\sum_{n=1}^{N} \\ln \\left\\{\\sum_{k=1}^{K}\\pi_k N(x_n|\\mu_k, \\Sigma_k)\\right\\}\n",
"$$\n",
"* 対数尤度を$\\mu_k$について微分して0とおくと\n",
"\n",
"$$\n",
"0 = \\sum_{n=1}^{N} \\frac{\\pi_k \\it N (x|\\mu_k, \\Sigma_k)}{\\sum_{j=1}^{K} \\pi_j \\it N (x|\\mu_j, \\Sigma_j)} \\Sigma_k^{-1}(x_n - \\mu_k)\n",
"$$\n",
"* $N_k= \\sum_{n=1}^{N}\\gamma(z_{nk})$とおくと、$\\mu_k = \\frac{1}{N}\\sum^{N}_{n=1}\\gamma(z_{nk})x_n$となる\n",
" * $N_k$はクラスタkに割り当てられる実効的な数と解釈することができる\n",
"* 同様に、対数尤度を$\\Sigma_k$について微分すると、$\\Sigma_k = \\frac{1}{N}\\sum_{n=1}^{N}\\gamma(z_{nk}(x_n - \\mu_k)(x_n - \\mu_k)^T $となる\n",
"* $\\pi_k$については、ラグランジュの未定乗数法を利用することで$\\pi_k = \\frac{N_k}{N}$となる\n",
"* ただし、これらの3つのパラメタはいずれも$\\gamma_k$というパラメタに依存しており、逆に$\\gamma_k$も3つのパラメタに依存している(上の方の式参照)\n",
"* そのため、最尤推定を行うには繰り返しアルゴリズム(EMアルゴリズム)が必要"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### 3. 混合ガウス分布のEMアルゴリズム\n",
"1. 混合ガウス分布に関するパラメタ$\\mu_k, \\Sigma_k, \\pi_k$を初期化する\n",
"2. (Eステップ)現在のパラメタ$\\mu_k, \\Sigma_k, \\pi_k$を利用して事後確率、すなわち負担率を計算する\n",
"3. (Mステップ)現在の事後確率に基づいて平均、分散、混合パラメタを再計算する\n",
"4. 収束条件を満たしているかどうかを確認し、収束していなければパラメタを更新し2に戻る"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"## Initialization\n",
"mean: [array([[ 6.0093213 , 2.38865002]]), array([[ 9.65038673, 3.25431686]]), array([[ 2.57280822, 6.95553668]])]\n",
"covariance: [[[1, 0], [0, 1]], [[1, 0], [0, 1]], [[1, 0], [0, 1]]]\n",
"pi: [ 0.79829817 0.10242207 0.09927976]\n",
"\n",
"\n",
"likehood: -27338.084740\n",
"likehood: -8755.178128\n",
"likehood: -8678.718380\n",
"likehood: -8628.165668\n",
"likehood: -8577.490940\n",
"likehood: -8524.102529\n",
"likehood: -8468.468175\n",
"likehood: -8413.179005\n",
"likehood: -8359.301866\n",
"likehood: -8308.443132\n",
"likehood: -8261.046756\n",
"likehood: -8218.138816\n",
"likehood: -8180.232752\n",
"likehood: -8145.951341\n",
"likehood: -8110.967642\n",
"likehood: -8071.526271\n",
"likehood: -8029.225404\n",
"likehood: -7988.954138\n",
"likehood: -7962.913868\n",
"likehood: -7958.368709\n"
]
}
],
"source": [
"def init_gaussian_param():\n",
" \"\"\" ガウス分布のパラメタu, sigmaを初期化する\n",
" Input:\n",
" Output:\n",
" u: 平均値\n",
" sigma: 共分散行列\n",
" \"\"\"\n",
" mean = np.random.rand(1, 2) * 10\n",
" sigma = [[1, 0], [0, 1]]\n",
" return mean, sigma\n",
"\n",
"\n",
"def init_mixing_param(K):\n",
" \"\"\" 混合率の初期化\n",
" Input:\n",
" K: the number of mixing\n",
" Output:\n",
" pi: the ratio of each mixing\n",
" \"\"\"\n",
" pi = numpy.random.dirichlet([1] * K)\n",
" return pi\n",
"\n",
"\n",
"def calc_gaussian_prob(x, mean, sigma):\n",
" \"\"\" サンプルxが多次元ガウス分布から生成される確率を計算\n",
" \"\"\"\n",
" # numpy化\n",
" x = np.matrix(x)\n",
" mean = np.matrix(mean)\n",
" sigma = np.matrix(sigma)\n",
" a = np.sqrt(np.linalg.det(sigma) * (2*np.pi)**sigma.ndim)\n",
" b = np.linalg.det(-0.5*(x-mean)*sigma.I*(x-mean).T)\n",
" return np.exp(b)/a\n",
"\n",
"def calc_likelihood(X, means, sigmas, pi):\n",
" \"\"\" データXの現在のパラメタにおける対数尤度を求める\n",
" \"\"\"\n",
" likehood = 0.0\n",
" N = len(X)\n",
" for n in range(N):\n",
" temp = 0.0\n",
" for k in range(K):\n",
" temp += pi[k] * calc_gaussian_prob(X[n], means[k], sigmas[k])\n",
" likehood += np.log(temp)\n",
" return likehood \n",
"\n",
"\n",
"# 1. パラメタ初期化\n",
"means = [None] * K\n",
"sigmas = [None] * K\n",
"for i in range(K):\n",
" means[i], sigmas[i] = init_gaussian_param()\n",
"pi = init_mixing_param(K)\n",
"print(\"## Initialization\")\n",
"print(\"mean: %s\" % str(means))\n",
"print(\"covariance: %s\" % str(sigmas))\n",
"print(\"pi: %s\" % str(pi))\n",
"print(\"\\n\")\n",
"\n",
"\n",
"likehood = calc_likelihood(X, means, sigmas, pi)\n",
"gamma = np.zeros((N, K))\n",
"\n",
"is_converged = False\n",
"iteration = 0\n",
"while not is_converged:\n",
" print(\"likehood: %f\" % (likehood))\n",
" # 2. E-Step: 現在のパラメタを使ってgammaを計算\n",
" for n in range(N):\n",
" denominator = 0.0\n",
" # 分母を計算\n",
" for j in range(K):\n",
" denominator += pi[j] * calc_gaussian_prob(X[n], means[j], sigmas[j])\n",
" # 各kについての負担率を計算\n",
" for k in range(K):\n",
" gamma[n, k] = pi[k] * calc_gaussian_prob(X[n], means[k], sigmas[k]) / denominator\n",
" \n",
" # 3. M-Step: 現在の負担率を使ってパラメタを計算\n",
" Nks = gamma.sum(axis=0)\n",
" for k in range(K):\n",
" # meansを再計算\n",
" means[k] = np.array([0.0, 0.0])\n",
" for n in range(N):\n",
" means[k] += gamma[n][k] * X[n]\n",
" means[k] /= Nks[k]\n",
" \n",
" # sigmasを再計算\n",
" sigmas[k] = np.array([[0.0, 0.0], [0.0, 0.0]])\n",
" for n in range(N):\n",
" _diff_vector = X[n] - means[k]\n",
" sigmas[k] += gamma[n][k] * _diff_vector.reshape(2, 1) * _diff_vector.reshape(1, 2)\n",
" sigmas[k] /= Nks[k]\n",
" \n",
" # piを再計算\n",
" pi[k] = Nks[k] / N\n",
" \n",
" # 4. 収束判定\n",
" iteration +=1\n",
" new_likehood = calc_likelihood(X, means, sigmas, pi)\n",
" diff = new_likehood - likehood\n",
" if diff < 0.01:\n",
" is_converged = True\n",
" print(\"%f vs %f\" % (new_likehood, likehood))\n",
"\n",
" if iteration >= 20:\n",
" is_converged = True\n",
" likehood = new_likehood"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 結果の可視化"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<a list of 1 text.Text objects>"
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n52FCbp6eQqkAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe3319b6850>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe331843210>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xlist = np.linspace(-5.0, 10.0, 500)\n",
"ylist = np.linspace(-5.0, 10.0, 500)\n",
"x, y = np.meshgrid(xlist, ylist)\n",
"\n",
"\n",
"def pdf_2dgauss(X, Y, mu, sigma):\n",
" return pylab.bivariate_normal(X, Y,\n",
" numpy.sqrt(sigma[ 0 ][ 0 ]),\n",
" numpy.sqrt(sigma[ 1 ][ 1 ]),\n",
" mu[0], mu[1],\n",
" sigma[ 0 ][ 1 ])\n",
"\n",
"fig = plt.figure(figsize=(5,5))\n",
"z_mixing = np.zeros((500, 500))\n",
"for k in range(K):\n",
" z = pdf_2dgauss(x, y, means[k], sigmas[k])\n",
" CS = pylab.contour(x, y, z)\n",
" plt.clabel(CS, inline=1, fontsize=8)\n",
" z_mixing += z * pi[k]\n",
"plt.scatter(X[:, 0], X[:, 1])\n",
"\n",
"fig = plt.figure(figsize=(5, 5))\n",
"CS = pylab.contour(x, y, z_mixing)\n",
"plt.clabel(CS, inline=1, fontsize=8)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"* とりあえずうまく実装できたように見える\n",
"* 分散を過小評価する傾向がありそう\n",
"* 収束判定をどうするのかがよくわかってない\n",
"* 対数尤度がどのくらい下がればいいのかもよく分からない\n",
"* forがたくさんあってイケてないので直したい\n",
" * http://cs231n.github.io/python-numpy-tutorial/#numpy とかでお勉強\n",
"* サンプルが多くなるほど間違える傾向にある気がするけどよくわかってない(重なる領域が大きくなるから?)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment