{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "view-in-github"
},
"source": [
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Qlp8TMCwqzju"
},
"source": [
"# ベイズ線形回帰"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qDs_Ob0fwnVN"
},
"source": [
"## 線形回帰 (多項式回帰の例)\n",
"\n",
"\n",
"線形回帰モデル: \n",
"$y({\\bf x},{\\bf w})= \\sum^{M-1}_{j=0} w_j \\phi_j({\\bf x}) = {\\bf w}^T\\boldsymbol{\\phi}({\\bf x})$を考える。 \n",
"\n",
"ここで$\\boldsymbol{\\phi}$は基底関数のベクトルで、\n",
"$p$次の多項式回帰の場合は$\\boldsymbol{\\phi}=(1, x, x^2, \\ldots, x^p)$といった感じ。\n",
"\n",
"実際この場合にベクトルの内積を書き下すと\n",
"${\\bf w}^T\\boldsymbol{\\phi}=w_0 + w_1x+ w_2x^2+ \\cdots + w_{p}x^p$となり、\n",
"$p$次多項式になっている。\n",
"\n",
"\n",
"さて目標変数$t$が、決定論的な関数$y({\\bf x},{\\bf w})$と平均0,精度$\\beta\\equiv 1/\\sigma^2$の誤差$\\epsilon$の和: $t=y({\\bf x},{\\bf w})+\\epsilon$で与えられていると仮定する。 \n",
"\n",
"つまり、$t$の確率分布が\n",
"$p(t|{\\bf x},{\\bf w},\\beta) = \\mathcal{N}(t|y({\\bf x},{\\bf w}),\\beta^{-1})$で与えられるとする。\n",
"\n",
"\n",
"入力$\\boldsymbol{\\mathrm{X}}=\\{{\\bf x_1},{\\bf x_2},\\ldots, {\\bf x_N}\\}$と、\n",
"対応する目標値を$\\boldsymbol{\\mathrm{t}}=\\{t_1,t_2,\\ldots, t_N\\}$と表すことにしておこう。\n",
"\n",
"これらのデータ点が上の分布$p(t|{\\bf x},{\\bf w},\\beta)$から独立に生成されたと仮定すると、 \n",
"データの目標変数についての確率分布は$p(\\boldsymbol{\\mathrm{t}}|\\boldsymbol{\\mathrm{X}},{\\bf w},\\beta) = \\prod^N_{n=1} \\mathcal{N}(t_n|{\\bf w}^T \\boldsymbol{\\phi}({\\bf x_n}) ,\\beta^{-1})$で与えられる。 \n",
"(以下では、確率分布の条件部分にある${\\bf x}$などを適宜省略する)\n",
"\n",
"このとき、対数尤度は\n",
"$\\ln p(\\boldsymbol{\\mathrm{t}}|{\\bf w},\\beta) = \\sum^N_{n=1} \\ln \\mathcal{N}(t_n|{\\bf w}^T\\boldsymbol{\\phi}({\\bf x_n}) ,\\beta^{-1}) = \\frac{N}{2}\\ln\\beta - \\frac{N}{2}\\ln(2\\pi) -\\beta E_D({\\bf w})$となる。\n",
"\n",
"なお$E_D$は二乗和誤差関数:\n",
"$E_D({\\bf w}) \\equiv \\frac{1}{2}\\sum^N_{n=1} \\{ t_n- {\\bf w}^T \\boldsymbol{\\phi}({\\bf x_n}) \\}$\n",
"である。"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FjSnT2V6wk08"
},
"source": [
"対数尤度の勾配を書き下して、最尤推定を考えるとすると$\\nabla \\ln p(\\boldsymbol{\\mathrm{t}}|{\\bf w},\\beta) = \\beta \\sum^N_{n=1} \\{ t_n -{\\bf w}^T \\boldsymbol{\\phi}({\\bf x_n}) \\} \\boldsymbol{\\phi}({\\bf x_n})^T $の根が必要。\n",
"\n",
"つまり$0= \\sum^N_{n=1} t_n \\boldsymbol{\\phi}({\\bf x_n})^T - {\\bf w}^T(\\sum^N_{n=1}\\boldsymbol{\\phi}({\\bf x_n})\\boldsymbol{\\phi}({\\bf x_n})^T)$をときたい。\n",
"\n",
"上の式を変形すると${\\bf w} = ( \\boldsymbol{\\Phi}^T\\boldsymbol{\\Phi} )^{-1} \\boldsymbol{\\Phi}^T \\boldsymbol{\\mathrm{t}}$が根であることがわかる。 \n",
"つまり、最尤推定を与えるパラメータ${\\bf w}_{ML}$は、計画行列$\\boldsymbol{\\Phi}$を用いて閉じた形で与えられる。\n",
"\n",
"なお、計画行列の要素は\n",
"$\\boldsymbol{\\Phi}_{nj} = \\phi_j({\\bf x_n})$で与えられる。\n",
"\n",
"\n",
"\n",
"---\n",
"\n",
"次の1次元擬似データの回帰を考えてみる。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 320
},
"id": "Had64uyx6ieC",
"outputId": "1dcbff3d-7d29-4bb7-84a5-4c65b3715e49",
"vscode": {
"languageId": "python"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA3kAAAEvCAYAAAD4uAgWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3df7TkdX3f8ed7fyCehGQQFtywrLvWbZuYyEruIUk9tqkBJdYDtJq45sRAjzl7jNk6HZpUrDnJSPQUkpOO0+pJs0UiWKNYUuMmgdIVTGOPYrhLVhAsullJuBsMG2AIOfxm3v3jfu8yd5j7Y3dm7sx85/k4556d7/f7mXvffJidndf9fn5EZiJJkiRJKod1oy5AkiRJkjQ4hjxJkiRJKhFDniRJkiSViCFPkiRJkkrEkCdJkiRJJWLIkyRJkqQS2TDqAk7E6aefntu2bRt1GZIkSZI0EgcOHPjbzNzU69pEhrxt27YxOzs76jIkSZIkaSQi4i+XuuZwTUmSJEkqEUOeJEmSJJWIIU+SJEmSSmQi5+RJkiRJml7PPvssc3NzPPXUU6MuZehOPvlktmzZwsaNG1f9HEOeJEmSpIkyNzfHKaecwrZt24iIUZczNJnJww8/zNzcHNu3b1/18xyuKUmSJGmiPPXUU5x22mmlDngAEcFpp5123HcsDXmSplpmLnssSZLGU9kD3oIT+e805EmaWvV6nVqtdizYZSa1Wo16vT7awiRJ0thbv349O3fu5NWvfjXnnHMOv/Vbv0W73V72Offffz+/93u/N/TaDHmSplJm0mq1aDabx4JerVaj2WzSarW8oydJUokMY+TOS1/6Ug4ePMg999zD/v37ufnmm/ngBz+47HMMeZI0RBFBo9GgWq3SbDZZt24dzWaTarVKo9GYmiEgkiSV3VqM3DnjjDPYu3cvH/3oR8lM7r//fl7/+tdz7rnncu655/LlL38ZgCuuuIIvfelL7Ny5k0ajsWS7fhnyJE2thaDXyYAnSVJ5rOXInVe+8pU8//zzPPTQQ5xxxhns37+fO++8kxtuuIH3vve9AFx11VW8/vWv5+DBg9RqtSXb9WsgWyhExLXAW4CHMvMHe1wPoAm8GXgCuCwz7yyuXQr8StH0Q5l53SBqkqSVLLzRd6rVagY9SZJKovMXus1mk2azCTD0kTvPPvsse/bs4eDBg6xfv55vfvObfbU7XoO6k/cJ4MJlrv8ksKP42g38NkBEvAz4NeBHgPOAX4uIUwdUkyQtqfM3edVqlXa7fWzoZueQDi3P1UklSeNurUbuHD58mPXr13PGGWfQaDQ488wz+drXvsbs7CzPPPNMz+estt3xGkjIy8w/BR5ZpsnFwPU573agEhGbgTcB+zPzkcx8FNjP8mFRkgYiIqhUKot+k7cwR69SqXgnbxVcnVSSNAmWGrkzyF9MHj16lHe/+93s2bOHiOCxxx5j8+bNrFu3jk9+8pM8//zzAJxyyik8/vjjx563VLt+DWS45iqcBTzQcTxXnFvqvCQNXb1eJzOPBbqFoGfAW1nnHAeY/01k553Rzn7V0rr7yX6TpMHqHrnT+e8V9HdH78knn2Tnzp08++yzbNiwgXe+851cfvnlALznPe/hrW99K9dffz0XXngh3/Vd3wXAa17zGtavX88555zDZZddtmS7fq1VyOtbROxmfqgnW7duHXE1ksqi+43dD9irM6o5DmVSr9dptVrH+mvhg0ilUvFuqCQNyFIjd4C+R+4sd9dtx44d3HXXXceOr776agA2btzIbbfdtqhtr3b9WqvVNY8AZ3ccbynOLXX+RTJzb2bOZObMpk2bhlaoJGl1XJ30xLlPoyStnXq9vujfp4V/v8r8C7W1Cnn7gJ+LeT8KPJaZDwK3AG+MiFOLBVfeWJyTVBIuzFFeazHHoazcp1GS1ta0jdwZSMiLiE8DXwH+UUTMRcS7IuLdEfHuoslNwGHgEPDfgPcAZOYjwK8DdxRfVxbnJJWAC3OUl6uT9s87oZKkYRnInLzMfMcK1xP4xSWuXQtcO4g6JI0PF+Yot2HOcZgW7tMoSf2Zls8SJ/KL05jE37bOzMzk7OzsqMuQtILOuz0LHI52fMZ99cVxr29cLbfam39HJGll3/72tznllFM47bTTSv1+mZk8/PDDPP7442zfvn3RtYg4kJkzvZ5nyJM0VJnJunUvjAxvt9ulfjMeJFdfLDf//0rSiXv22WeZm5vjqaeeGnUpQ3fyySezZcsWNm7cuOj8ciFvYrZQkDR5HI524hzuWn7u0yhJJ27jxo0vurOlF6zV6pqSpowLc/TH1Renw7St9iZJWhsO15Q0NA5H65/DXSVJUi8O15Q0Eg5H64/DXSVJ0olwuKakoXI42olxuKskSTpR3smTpDHkPnSSJOlEOSdPksaY+9BJkqRelpuT53BNSRpjDneVJEnHy5AnSZIkSSViyJMkSZKkEjHkSZKknrrn7U/iPH5JmkaGPEmS9CL1en3Rdh0L23rU6/XRFiZJWpEhT5IkLZKZtFqtRfsyLuzb2Gq1vKMnSWPOffIkSdIinfsyNptNms0mwKJ9GyVJ48t98iRJUk+Zybp1Lwz6abfbBjxJGhPukydJko7LwhDNTp1z9CRJ48uQJ0mSFumcg1etVmm321Sr1UVz9CRJ48s5eZIkaZGIoFKpLJqDtzBHr1KpOGRTksacc/IkSVJPmbko0HUfS5JGxzl5kiTpuHUHOgOeJE0GQ54kSZIklchAQl5EXBgR90XEoYi4osf1RkQcLL6+GRGtjmvPd1zbN4h6JEmSJGla9b3wSkSsBz4GXADMAXdExL7MvHehTWbWOtr/G+C1Hd/iyczc2W8dkiRJkqTB3Mk7DziUmYcz8xngM8DFy7R/B/DpAfxcSZIkSVKXQYS8s4AHOo7ninMvEhGvALYDt3WcPjkiZiPi9oi4ZAD1SJIE8KL93CZxRWlJko7XWi+8sgu4MTOf7zj3imLpz58BPhIR/6DXEyNidxEGZ48ePboWtUqSJli9Xl+0cffCBt/1en20hUmSNGSDCHlHgLM7jrcU53rZRddQzcw8Uvx5GPgTFs/X62y3NzNnMnNm06ZN/dYsSSqxzKTVatFsNo8FvVqtRrPZpNVqeUdPklRqfS+8AtwB7IiI7cyHu13M35VbJCL+MXAq8JWOc6cCT2Tm0xFxOvA64DcGUJMkaYpFBI1GA4Bms0mz2QSgWq3SaDTc702SVGoxiN9mRsSbgY8A64FrM/PDEXElMJuZ+4o2deDkzLyi43n/BPgdoM38XcWPZObHV/p5MzMzOTs723fdkqRyy0zWrXth0Eq73TbgSZJKISIOFNPeXmQQd/LIzJuAm7rO/WrXcb3H874M/NAgapAkqdPCEM1OtVrNO3mSpNJb64VXJEkaus45eNVqlXa7TbVaXTRHT5KkshrInTxJo5OZi+5KdB9L0ygiqFQqi+bgLczRq1Qq/h0pCd//JKm3gczJW2vOyZPm1et1Wq3WsQ+xC3cvKpWKy8RLGALKzPc/SdNuuTl5DteUJpRLxEsr6w50Brxy8P1PkpbnnTxpgnV+sFngEvGSpoHvf5Km3XJ38gx50oRziXhJ08r3P0nTzOGaUkkttUT8JP7yRpKOh+9/krQ0Q540oVwiXtK08v1PkpbnFgrShHKJeEnTyvc/SVqec/KkCecS8ZKmle9/kqaZc/KkEnOJeEnTyvc/SerNkCdJkiRJJWLIkyRJkqQSMeRJkiRJUokY8iRJkiSpRAx50gq6V6CdxBVpJUmSND0MeRq5cQ5R9Xp90ca6Cxvw1uv10RYmSZIkLcGQp5Ea5xCVmbRaLZrN5rEaa7UazWaTVqs1VmFUkiRJWrBh1AVoenWGKIBGo3EsRFWr1ZFvahsRNBoNAJrN5rE6q9UqjUbD/ZgkSZI0lmIS70bMzMzk7OzsqMvQAHTeHVswbiEqM1m37oWb3u12e2xqkyRJ0nSKiAOZOdPrmsM1NVKdd8sWjFvAq9Vqi851Di+VJEmSxo0hTyM1ziGq8y5jtVql3W5TrVYXzdGTJEmSxo0hTyMz7iEqIqhUKouGjzYaDarVKpVKZWzuNkqSJEmdBrLwSkRcCDSB9cA1mXlV1/XLgN8EjhSnPpqZ1xTXLgV+pTj/ocy8bhA1afwtFaKAsQlR9Xp90QIwCzWOQ22SJElSL30vvBIR64FvAhcAc8AdwDsy896ONpcBM5m5p+u5LwNmgRkggQPAD2fmo8v9TBdeKZfuVTRHvaqmJEmSNO6GvfDKecChzDycmc8AnwEuXuVz3wTsz8xHimC3H7hwADVpgnQHOgOeJEmSdOIGEfLOAh7oOJ4rznV7a0TcFRE3RsTZx/lcSZIkSdIqrNXCK38IbMvM1zB/t+64591FxO6ImI2I2aNHjw68QEmSJEkqg0GEvCPA2R3HW3hhgRUAMvPhzHy6OLwG+OHVPrfje+zNzJnMnNm0adMAypYkSZKk8hlEyLsD2BER2yPiJGAXsK+zQURs7ji8CPhG8fgW4I0RcWpEnAq8sTgnSZIkSToBfW+hkJnPRcQe5sPZeuDazLwnIq4EZjNzH/DeiLgIeA54BLiseO4jEfHrzAdFgCsz85F+a5IkSZKkadX3Fgqj4BYKkiRJkqbZsLdQkCRJkiSNCUOeJEmSJJWIIU+SJEmSSsSQJ0mSJEklYsiTJEmSpBIx5EmSJElSiRjyJEmSJKlEDHmSJEmSVCKGPEmSJEkqEUOeJEmSJJWIIU+SJEmSSsSQJ0mSJEklYsiTJEmSpBIx5EmSJElSiRjyJEmSJKlEDHmSJEmSVCKGPEmSJEkqEUOeJEmSJJWIIU+SJEmSSsSQJ0mSJEklYsiTJEmSpBIx5EmSJElSiRjyJEmSJKlEBhLyIuLCiLgvIg5FxBU9rl8eEfdGxF0RcWtEvKLj2vMRcbD42jeIeiRJkiRpWm3o9xtExHrgY8AFwBxwR0Tsy8x7O5r9OTCTmU9ExC8AvwG8vbj2ZGbu7LcOSZIkSdJg7uSdBxzKzMOZ+QzwGeDizgaZ+cXMfKI4vB3YMoCfK0mSJEnqMoiQdxbwQMfxXHFuKe8Cbu44PjkiZiPi9oi4ZKknRcTuot3s0aNH+6tYkiRJkkqq7+GaxyMifhaYAf5Zx+lXZOaRiHglcFtE3J2Zf9H93MzcC+wFmJmZyTUpWJIkSZImzCDu5B0Bzu443lKcWyQizgc+AFyUmU8vnM/MI8Wfh4E/AV47gJokSZIkaSoNIuTdAeyIiO0RcRKwC1i0SmZEvBb4HeYD3kMd50+NiJcUj08HXgd0LtgiSZIkSToOfQ/XzMznImIPcAuwHrg2M++JiCuB2czcB/wm8N3A/4gIgL/KzIuA7wd+JyLazAfOq7pW5ZQkSZpImUnxuafnsSQNS2RO3vS2mZmZnJ2dHXUZkiRJPdXrdVqtFo1Gg4ggM6nValQqFer1+qjLk1QCEXEgM2d6XRvIZuiSJEmal5m0Wi2azSa1Wu1YwGs2m7RaLSbxF+ySJsuarq4pSZJUdhFBo9EAoNls0mw2AahWq8fu7EnSMDlcU5IkaQgyk3XrXhg01W63xy7gOW9QmlwO15QkSVpDC0M0Oy0M3RwX9Xp9UU0LNTtnUJp8hjxJkqQB6pyDV61WabfbVKvVRXP0Rs15g1K5OSdPkiRpgCKCSqWyaA7ewhy9SqUyFsMhnTcolZtz8iRJkoZgEua7TcK8QUm9OSdPkiRpjXWHpXELT5Mwb1DSiTHkSZIkTZlJmDco6cQ5J0+SJGnKTMK8QUknzjl5kiRJU2oS5g1K6s05eVOuO8hPYrCXJEmDN+7zBiWdGENeybnRqSRJkjRdDHkl5kankiRJ0vRx4ZUSc6NTSZIkafq48MoUcKNTSZIkqVxceGXIxnlhEzc6lSRJkqaLIa9P47ywiRudSpIkSdPHOXl96FzYBKDRaCwKVaPea8aNTiVJkqTp45y8PnXeLVswbgubuNGpJEmSVC7Lzckz5A2AC5tIkiRJWksuvDJELmwiSZIkaZwMJORFxIURcV9EHIqIK3pcf0lE3FBc/2pEbOu49v7i/H0R8aZB1LNWXNhEkiRJ0rjpe+GViFgPfAy4AJgD7oiIfZl5b0ezdwGPZuarImIXcDXw9oj4AWAX8Grg+4AvRMQ/zMzn+61rLbiwiSRJkqRx0/ecvIj4MaCemW8qjt8PkJn/saPNLUWbr0TEBuA7wCbgis62ne2W+5njOCfPhU0kSZIGy89Y0tKGPSfvLOCBjuO54lzPNpn5HPAYcNoqnzv2ut9sfPORJEnqzzjvRSyNu4lZeCUidkfEbETMHj16dNTlSJIkaUg69yJeCHoL6yC0Wi3XPZBWMIjN0I8AZ3ccbynO9WozVwzX/F7g4VU+F4DM3AvshfnhmgOoW5IkSWOoc52DZrN5bD/icduLWBpXg7iTdwewIyK2R8RJzC+ksq+rzT7g0uLx24Dbcv5XMPuAXcXqm9uBHcCfDaAmSZIkTbDOoLfAgCetTt8hr5hjtwe4BfgG8NnMvCciroyIi4pmHwdOi4hDwOW8sODKPcBngXuB/wX84qSsrClJkqThcS9i6cQNYrgmmXkTcFPXuV/tePwU8FNLPPfDwIcHUYckSZImX/dexI1G49gxeEdPWslAQp4kSZI0KO5FLPWn733yRmHc9smTJEnS4LlPnrS0Ye+TJ0mSJA2cexFLJ8aQJ0mSJEklYsiTJEmSpBIx5EmSJElSiRjyJEmSJKlEDHmSJEmSVCKGPEmSJEkqEUOeJEmSJJWIIU+SJEmSSsSQJ0mSJEklYsiTJEmSpBIx5EmSJElSiRjyJEmSpBOQmcseS6NiyJMkSZKOU71ep1arHQt2mUmtVqNer4+2MAlDniRJknRcMpNWq0Wz2TwW9Gq1Gs1mk1ar5R09jdyGURcgSZIkTZKIoNFoANBsNmk2mwBUq1UajQYRMcryJGISf9MwMzOTs7Ozoy5DkiRJUywzWbfuhYFx7XbbgKc1ExEHMnOm1zWHa0qSJEnHaWGIZqfOOXrSKBnyJEmSpOPQOQevWq3SbrepVquL5uhJo+ScPEmSJOk4RASVSmXRHLyFOXqVSsUhmxo55+RJkiRJJyAzFwW67mNpmIY2Jy8iXhYR+yPiW8Wfp/ZoszMivhIR90TEXRHx9o5rn4iIb0fEweJrZz/1SJIkSWulO9AZ8DQu+p2TdwVwa2buAG4tjrs9AfxcZr4auBD4SERUOq7/cmbuLL4O9lmPJEmSJE21fkPexcB1xePrgEu6G2TmNzPzW8XjvwYeAjb1+XMlSZIkST30G/LOzMwHi8ffAc5crnFEnAecBPxFx+kPF8M4GxHxkj7rkSRJkqSptuLqmhHxBeDlPS59oPMgMzMillzFJSI2A58ELs3MdnH6/cyHw5OAvcD7gCuXeP5uYDfA1q1bVypbkiRJkqbSiiEvM89f6lpE/E1EbM7MB4sQ99AS7b4H+GPgA5l5e8f3XrgL+HRE/C7wS8vUsZf5IMjMzMzkLQkqSZIkSWug3+Ga+4BLi8eXAp/vbhARJwGfA67PzBu7rm0u/gzm5/N9vc96JEmSJGmq9RvyrgIuiIhvAecXx0TETERcU7T5aeCfApf12CrhUxFxN3A3cDrwoT7rkSRJkqSp5mbokiRJkjRhhrYZuiRJkiRpvBjyJEmSJKlEDHmSJEmSVCKGPEmSJEkqEUOeJEmSJJWIIU+SJEmSSsSQJ0mSJEklYsiTJEmSpBIx5EmSJElSiRjyJEmSpBLKzGWPVV6GPEmSJKlk6vU6tVrtWLDLTGq1GvV6fbSFaU0Y8iRJkqQSyUxarRbNZvNY0KvVajSbTVqtlnf0psCGURcgSZIkaXAigkajAUCz2aTZbAJQrVZpNBpExCjL0xqISUzyMzMzOTs7O+oyJEmSpLGVmaxb98LAvXa7bcArkYg4kJkzva45XFOSJEkqmYUhmp065+ip3Ax5kiRJUol0zsGrVqu0222q1eqiOXoqN+fkSZIkSSUSEVQqlUVz8Bbm6FUqFYdsTgHn5EmSJEkllJmLAl33sSabc/IkSZKkKdMd6Ax408OQJ0mSJGnNdY8onMQRhuPKkCdJkiRpTdXr9UWLwCwsFlOv10dbWEkY8iRJkiStmcyk1WotWu1zYTXQVqvlHb0BcHVNSZIkSWumc7XPZrNJs9kEWLQaqPrT1+qaEfEy4AZgG3A/8NOZ+WiPds8DdxeHf5WZFxXntwOfAU4DDgDvzMxnVvq5rq4pSZIkTbbMZN26FwYWttttA95xGObqmlcAt2bmDuDW4riXJzNzZ/F1Ucf5q4FGZr4KeBR4V5/1SJIkSRpzC0M0O7lR++D0G/IuBq4rHl8HXLLaJ8Z8TH8DcOOJPF+SJEnS5Omcg1etVmm321Sr1UVz9NSffufknZmZDxaPvwOcuUS7kyNiFngOuCoz/4D5IZqtzHyuaDMHnLXUD4qI3cBugK1bt/ZZtiRJkqRRiAgqlcqiOXgLc/QqlYpDNgdgxTl5EfEF4OU9Ln0AuC4zKx1tH83MU3t8j7My80hEvBK4DfgJ4DHg9mKoJhFxNnBzZv7gSkU7J0+SJEmabJm5KNB1H2t5y83JW/FOXmaev8w3/puI2JyZD0bEZuChJb7HkeLPwxHxJ8Brgd8HKhGxobibtwU4suJ/jSRJkqSJ1x3oDHiD0++cvH3ApcXjS4HPdzeIiFMj4iXF49OB1wH35vwtxC8Cb1vu+ZIkSZKk1es35F0FXBAR3wLOL46JiJmIuKZo8/3AbER8jflQd1Vm3ltcex9weUQcYn6O3sf7rEeSJEmSplpf++SNinPyJEmSJE2zYe6TJ0mSJEkaI4Y8SZIkSSoRQ54kSZIklYghT5IkSZJKxJAnSZIkSSViyJMkSZKkEjHkSZIkSVKJGPIkSZIkqUQMeZIkSZJUIoY8SZIkSSoRQ54kSZIklYghT5IkSZJKxJAnSZIkSSViyJMkSZKkEjHkSZIkSVKJGPIkSZIkqUQMeZIkSZJUIoY8SZIkSSoRQ54kSZIklYghT5IkSZJKxJAnSZIkSSViyJMkSZKkEukr5EXEyyJif0R8q/jz1B5t/nlEHOz4eioiLimufSIivt1xbWc/9UiSJEnStOv3Tt4VwK2ZuQO4tTheJDO/mJk7M3Mn8AbgCeB/dzT55YXrmXmwz3okSZIkaar1G/IuBq4rHl8HXLJC+7cBN2fmE33+XEmSJElSD/2GvDMz88Hi8XeAM1dovwv4dNe5D0fEXRHRiIiX9FmPJEmSJE21DSs1iIgvAC/vcekDnQeZmRGRy3yfzcAPAbd0nH4/8+HwJGAv8D7gyiWevxvYDbB169aVypYkSZKkqbRiyMvM85e6FhF/ExGbM/PBIsQ9tMy3+mngc5n5bMf3XrgL+HRE/C7wS8vUsZf5IMjMzMySYVKSJEmSplm/wzX3AZcWjy8FPr9M23fQNVSzCIZERDA/n+/rfdYjSZIkSVOt35B3FXBBRHwLOL84JiJmIuKahUYRsQ04G/g/Xc//VETcDdwNnA58qM96JEmSJGmqrThcczmZ+TDwEz3OzwI/33F8P3BWj3Zv6OfnS5IkSZIW6/dOniRJkiRpjBjyJEmSJKlEDHmSJEmSVCKGPEmSJEkqEUOeJEmSJJWIIU+SJEmSSsSQJ0mSJEklYsiTJEmSpBIx5EmSJElSiRjyJEmSJKlEDHmSJEmSVCKGPEmSJEnqkpnLHo8zQ54kSZIkdajX69RqtWPBLjOp1WrU6/XRFrZKhjxJkiRJKmQmrVaLZrN5LOjVajWazSatVmsi7uhtGHUBkiRJkjQuIoJGowFAs9mk2WwCUK1WaTQaRMQoy1uVmIQk2m1mZiZnZ2dHXYYkSZKkkspM1q17YeBju90eq4AXEQcyc6bXNYdrSpIkSVKHhSGanTrn6I07Q54kSZIkFTrn4FWrVdrtNtVqddEcvXHnnDxJkiRJKkQElUpl0Ry8hTl6lUplrIZsLsU5eZIkSZLUJTMXBbru41FzTp4kSZIkHYfuQDdOAW8lhjxJkiRJKhFDniRJkiSVSF8hLyJ+KiLuiYh2RPQcD1q0uzAi7ouIQxFxRcf57RHx1eL8DRFxUj/1SJIkSdK06/dO3teBfwX86VINImI98DHgJ4EfAN4RET9QXL4aaGTmq4BHgXf1WY8kSZIkTbW+Ql5mfiMz71uh2XnAocw8nJnPAJ8BLo75mYtvAG4s2l0HXNJPPZIkSZI07dZiTt5ZwAMdx3PFudOAVmY+13VekiRJknSCVtwMPSK+ALy8x6UPZObnB1/SknXsBnYDbN26da1+rCRJkiRNlBVDXmae3+fPOAKc3XG8pTj3MFCJiA3F3byF80vVsRfYCxARRyPiL/usaxhOB/521EVMKft+dOz70bHvR8e+Hx37frTs/9Gx70dnXPv+FUtdWDHkDcAdwI6I2M58iNsF/ExmZkR8EXgb8/P0LgVWdWcwMzcNq9h+RMTsUrvOa7js+9Gx70fHvh8d+3507PvRsv9Hx74fnUns+363UPiXETEH/BjwxxFxS3H++yLiJoDiLt0e4BbgG8BnM/Oe4lu8D7g8Ig4xP0fv4/3UI0mSJEnTrq87eZn5OeBzPc7/NfDmjuObgJt6tDvM/OqbkiRJkqQBWIvVNafJ3lEXMMXs+9Gx70fHvh8d+3507PvRsv9Hx74fnYnr+8jMUdcgSZIkSRoQ7+RJkiRJUokY8k5ARFwYEfdFxKGIuKLH9ZdExA3F9a9GxLa1r7KcVtH3lxVbbBwsvn5+FHWWTURcGxEPRcTXl7geEfGfi/8vd0XEuWtdY1mtou9/PCIe63jN/+pa11hWEXF2RHwxIu6NiHsiotqjja/9IVhl3/vaH4KIODki/iwivlb0/Qd7tPFzzhCssu/9nDNEEbE+Iv48Iv6ox7WJet2vxRYKpRIR64GPARcAc8AdEbEvM+/taPYu4NHMfFVE7AKuBt6+9tWWyyr7HuCGzNyz5gWW2yeAjwLXL3H9J4EdxdePAL9d/Kn+fYLl+x7gS5n5lrUpZ6o8B/y7zLwzIk4BDkTE/q73HF/7w7Gavgdf+8PwNPCGzPz7iNgI/N+IuDkzb+9o4+ec4VhN39FGndUAAANWSURBVIOfc4apyvxuAN/T49pEve69k3f8zgMOZebhzHyG+T3+Lu5qczFwXfH4RuAnIiLWsMayWk3fawgy80+BR5ZpcjFwfc67HahExOa1qa7cVtH3GpLMfDAz7yweP878P/xndTXztT8Eq+x7DUHxWv774nBj8dW9gIOfc4ZglX2vIYmILcC/AK5ZoslEve4NecfvLOCBjuM5XvwPz7E2xT6BjzG/D6D6s5q+B3hrMWzqxog4e21Km3qr/X+j4fixYnjPzRHx6lEXU0bFsJzXAl/tuuRrf8iW6XvwtT8UxZC1g8BDwP7MXPJ17+ecwVpF34Ofc4blI8C/B9pLXJ+o170hT2Xzh8C2zHwNsJ8XfuMildWdwCsy8xzgvwB/MOJ6Sicivhv4feDfZubfjbqeabJC3/vaH5LMfD4zdwJbgPMi4gdHXdO0WEXf+zlnCCLiLcBDmXlg1LUMiiHv+B0BOn9rsqU417NNRGwAvhd4eE2qK7cV+z4zH87Mp4vDa4AfXqPapt1q/l5oCDLz7xaG92TmTcDGiDh9xGWVRjEv5veBT2Xm/+zRxNf+kKzU9772hy8zW8AXgQu7Lvk5Z8iW6ns/5wzN64CLIuJ+5qcDvSEi/ntXm4l63Rvyjt8dwI6I2B4RJwG7gH1dbfYBlxaP3wbclm5IOAgr9n3XXJiLmJ/HoeHbB/xcsdLgjwKPZeaDoy5qGkTEyxfmBETEecy/r4/tPzqTpOjXjwPfyMz/tEQzX/tDsJq+97U/HBGxKSIqxeOXMr/Y2f/raubnnCFYTd/7OWc4MvP9mbklM7cx//nytsz82a5mE/W6d3XN45SZz0XEHuAWYD1wbWbeExFXArOZuY/5f5g+GRGHmF8wYdfoKi6PVfb9eyPiIuZXZnsEuGxkBZdIRHwa+HHg9IiYA36N+QnhZOZ/BW4C3gwcAp4A/vVoKi2fVfT924BfiIjngCeBXeP8j86EeR3wTuDuYo4MwH8AtoKv/SFbTd/72h+OzcB1xYrW64DPZuYf+TlnTaym7/2cs4Ym+XUfvh9KkiRJUnk4XFOSJEmSSsSQJ0mSJEklYsiTJEmSpBIx5EmSJElSiRjyJEmSJKlEDHmSJEmSVCKGPEmSJEkqEUOeJEmSJJXI/wfBIG7+Qu67GwAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light",
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"\n",
"## データ点の生成\n",
"np.random.seed(1234)\n",
"x = np.linspace(-2.0,6.0,1000)\n",
"beta = 1.e+2\n",
"xt = np.linspace(0.0,4.0,20)\n",
"yt = np.sin(xt) + np.array([ np.random.normal(0.0,1.0/np.sqrt(beta)) for i in range(len(xt))])\n",
"\n",
"fig = plt.figure(figsize = (15,5))\n",
"axs = [fig.add_subplot(111)]\n",
"axs[0].scatter(xt,yt,label=\"Data\",color=\"k\",marker=\"x\")\n",
"axs[0].legend()\n",
"plt.show()\n",
"plt.close() "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pX2ZEq1TAY_8"
},
"source": [
"これを,numpyモジュールの多項式fit関数と、上の計画行列によって3次式で回帰してみると..."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "JuQGBg5qq8x0",
"outputId": "0584baea-431a-4f0e-d787-59ec0d13ac82",
"vscode": {
"languageId": "python"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:30: RuntimeWarning: divide by zero encountered in log10\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light",
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"N = len(xt)\n",
"\n",
"## 多項式の次元を固定しておく\n",
"p=3\n",
"\n",
"##numpyのfit\n",
"yp = np.poly1d(np.polyfit(xt, yt, p))(x) \n",
"\n",
"## 計画行列を用いる方法\n",
"def phi(x,p):\n",
" return np.array([ x**i for i in range(p+1)])\n",
"Phi = np.zeros((N,p+1))\n",
"for i in range(N):\n",
" xn = xt[i]\n",
" tmp = phi(xn,p) \n",
" for j in range(p+1):\n",
" Phi[i][j] = tmp[j]\n",
"S = np.linalg.inv(np.dot(Phi.T,Phi))\n",
"wML = np.dot(S,np.dot(Phi.T,yt))\n",
"yD = [ np.dot(wML,phi(xn,p)) for xn in x ]\n",
"\n",
"#図のplot\n",
"fig = plt.figure(figsize = (20,4))\n",
"axs = [fig.add_subplot(121),fig.add_subplot(122)]\n",
"axs[0].scatter(xt,yt,label=\"Data\",color=\"k\",marker=\"x\")\n",
"axs[0].plot(x,yp,label=\"np.polyfit\",color=\"r\",alpha=0.5)\n",
"axs[0].plot(x,yD,label=\"DMat\",linestyle=\"dotted\", color=\"g\")\n",
"axs[0].legend()\n",
"\n",
"axs[1].plot(x,np.log10(abs(yp-yD)))\n",
"plt.show()\n",
"plt.close() "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jO4b2_In7Cd8"
},
"source": [
"となり、ライブラリの出力と計画行列を用いた最尤推定の結果とが \n",
"ピッタリ(ざっくり14桁程度)一致していることがわかる。\n",
"\n",
"マニアックな注: np.polyfitもおそらく計画行列を用いて定義されているはず。 \n",
"numpyの中身を見てないので不正確かもしれませんが、 \n",
"僅かな答えの差は、逆行列計算に由来するものではないかと想像します。"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ppJnjTsXB0X9"
},
"source": [
"### L2正則化項がある場合への拡張\n",
"\n",
"二乗和誤差関数に、L2正則化項を入れた場合:\n",
"$\\frac{1}{2}\\sum^N_{n=1} \\{ t_n- {\\bf w}^T \\boldsymbol{\\phi}({\\bf x_n}) \\} + \\frac{\\lambda}{2} {\\bf w}^T{\\bf w}$\n",
"に拡張してみよう。\n",
"\n",
"上と同様に勾配を計算すると、最尤推定を与えるパラメータ${\\bf w}$は\n",
"${\\bf w}_{ML,L2} = (\\lambda I + \\boldsymbol{\\Phi}^T\\boldsymbol{\\Phi} )^{-1} \\boldsymbol{\\Phi}^T \\boldsymbol{\\mathrm{t}}$ \n",
"(つまり計画行列に単位行列を足すだけ)となる。 \n",
"\n",
"(対数尤度が$|w|^2$に比例することからほとんど自明だが) \n",
"あとで示すように「L2正則化を課すこと」は、パラメータのベイズ的取り扱いにおいて \n",
"「事前分布にガウス分布を仮定すること」と等価である。\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XqR_eYP3K68v"
},
"source": [
"## ベイズ線形回帰"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "P2WYkL5sOxhy"
},
"source": [
"次に、パラメータ${\\bf w}$をベイズ的に取り扱う事を考える。\n",
"\n",
"このノートでいう[ベイズ的]とはせいぜい「パラメータを点推定する立場より有限の幅をもつ確率分布としてパラメータを考える」という程度の意味である。 \n",
"\n",
"パラメータ${\\bf w}$が、平均$\\boldsymbol{\\mu}$,共分散$\\boldsymbol{\\Sigma}$で指定される多次元の正規分布に従うと仮定する: ${\\bf w} \\sim \\mathcal{N}(\\boldsymbol{\\mu},\\boldsymbol{\\Sigma})$ \n",
"\n",
"このとき、パラメータの事後分布は$p({\\bf w}|\\boldsymbol{\\mathcal{t}}) = \\mathcal{N}(\\tilde{\\boldsymbol{\\mu}},\\tilde{\\boldsymbol{\\Sigma}})$で与えられる。\n",
"\n",
"ここで事後分布の平均および共分散は以下のとおりである: \n",
"$\\tilde{\\boldsymbol{\\Sigma}}^{-1} =\\boldsymbol{\\Sigma}^{-1}+\\beta\\boldsymbol{\\Phi}^T \\boldsymbol{\\Phi},\n",
"\\tilde{\\boldsymbol{\\mu}}= \\tilde{\\boldsymbol{\\Sigma}} (\\boldsymbol{\\Sigma} \\boldsymbol{\\mu} + \\beta \\boldsymbol{\\Phi}^T \\boldsymbol{\\mathcal{t}})$ \n",
"\n",
"...\n",
"\n",
"ここで簡単のため事前分布をさらに簡略化しよう。 \n",
"事前分布の平均$\\boldsymbol{\\mu}$が$0$(ベクトル)かつ、 \n",
"パラメータの事前分布の共分散が対角的(独立な分散をもつ)でなおかつ値が同じ, \n",
"つまり、上の$\\boldsymbol{\\Sigma}=\\alpha^{-1}I$とかける場合を考える。\n",
"\n",
"このとき、事後分布の平均および共分散は以下のように簡略化される: \n",
"$\\tilde{\\boldsymbol{\\Sigma}}^{-1} =\\alpha I +\\beta\\boldsymbol{\\Phi}^T \\boldsymbol{\\Phi}$ \n",
"$\\tilde{\\boldsymbol{\\mu}}= \\beta \\tilde{\\boldsymbol{\\Sigma}} \\boldsymbol{\\Phi}^T \\boldsymbol{\\mathcal{t}}$\n",
"\n",
"この条件のもとで対数事後確率(log posterior)は \n",
"$\\ln p({\\bf w}|\\boldsymbol{\\mathrm{t}}) = -\\frac{\\beta}{2}\\sum^N_{n=1} \\{t_n - {\\bf w}^T \\phi(x_n) \\}^2 -\\frac{\\alpha}{2} {\\bf w}^T{\\bf w} + $ (正規分布の係数からくるオマケの定数)となる。\n",
"\n",
"したがって正規分布で与えられる事前分布のもとでパラメータ${\\bf w}$の事後分布を最大化することは、 \n",
"L2正則化項がある場合の誤差関数の最小化と($\\lambda=\\beta/\\alpha$とすれば)等価であることがわかる。\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "PvjZoBE7U9HF"
},
"source": [
"実用上は${\\bf w}$の分布を考えたあと、それを予測値の分布として伝播させる必要がある。\n",
"\n",
"一般に予測分布を評価する際は、サンプリング法などが必要になるが、\"性質の良い\"確率分布を用いる場合は、予測分布も閉じた形で書き下すことができる。 \n",
"実際、今の場合は予測分布も正規分布になる.\n",
"\n",
"\n",
"未知の点$x^*$での値を$t^*$と書くことにすると、\n",
"\n",
"$p(t^*|\\boldsymbol{\\mathrm{t}},\\alpha,\\beta) =\n",
"\\int p(t|{\\bf w},\\beta) p({\\bf w}|\\boldsymbol{\\mathrm{t}},\\alpha,\\beta) d{\\bf w} $\n",
"\n",
"今の場合、ガウス分布の性質から、\n",
"予測分布は以下で与えられる: \n",
"$p(t^*|{\\bf x},\\boldsymbol{\\mathrm{t}},\\alpha,\\beta) = \\mathcal{N}(t^*|\\tilde{\\boldsymbol{\\mu}}^T\\boldsymbol{\\phi}({\\bf x}),\\sigma^2_N({\\bf x}))$\n",
"\n",
"ここで、予測分布の分散は$\\sigma^2_N({\\bf x})= \\frac{1}{\\beta}+\\boldsymbol{\\phi}({\\bf x})^T \\tilde{\\boldsymbol{\\Sigma}}\\boldsymbol{\\phi}({\\bf x}) $\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 265
},
"id": "kmOBxfJPSJkQ",
"outputId": "b074a333-f044-4144-b9d5-11a7178f0a8e",
"vscode": {
"languageId": "python"
}
},
"outputs": [
{
"data": {
"image/png": "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QgjRpQKi4lpGo4QQQlxu79692Gy2LrteZGQk2dnZrR7jcDi4/vrrqa2txeVycccdd/DUU081e+zzzz9PREQE9913X5fFKLpHQCRSdrudpKQkQkJCzA5FCCFED2Cz2YiJiemy6126dKnNY0JDQ/nggw+IiorC6XQyceJEbrrpJsaNG3fVsY888kiXxSa6l9/vtae1RmtNcnKy2aEIIYQIYEopoqKiAHA6nTidTpRSLF68mOzsbHJzc3n88ccBoyP5smXLAPj888/Jzc0lLy+PH/7wh4wcORKAVatWcfvttzN9+nQGDhzIc889x9NPP83o0aMZN24cFy5cAOB3v/sdY8aMYdSoUXzzm9/Ebreb8PT+y+8TKZvNRkJCQpPNHYUQQggzuN1u8vLySEpKYvr06QwZMoQNGzawZ88edu7cyU9/+tOrznnggQd44YUXKC0txWq1Nvls9+7drF+/ns8//5yf/OQnREREsH37dsaPH88rr7wCwDe+8Q0+//xzduzYQVZWFi+++KJPnjVQ+H0i5fF4ZDRKCCFEj2C1WiktLeXEiRNs3bqV06dPExYWxoMPPsj69euJiIhocnxFRQVVVVWMHz8egG99q+kubFOmTCE6OprExERiY2O59dZbAcjJyaGsfjPB3bt3M2nSJHJyclizZg179uzp/gcNIH6dSNXU1BAfH9/sfntCCCGEWeLi4pgyZQrvvvsuW7du5Y477uCdd95h1qxZXl3n8tkWi8XS+NpiseByuQCYN28ezz33HLt27eLJJ5/E4XB03YMI/02kGmqjZGNiIYQQPcG5c+eoqKgAjH/ob968meHDh1NZWcns2bNZvnz5VdvBxMXFER0dzWeffQbAunXrvL5vVVUVqampOJ1O1qxZ0/kHEU347ao9m81GVFQUkZGRZocihBCih4mMjGzXSjtvrteW06dPc//99+N2u/F4PNx5551ce+213HLLLTgcDrTWPP3001ed9+KLL/Lwww9jsVi44YYbiI2N9Sq2f/u3f2Ps2LEkJiYyduxYqqqqvDpftE5p7fv9gwsKCnRJSUm33uP48eNER0cTFxfXrfcRQgjR8+3bt4+srCyzw+iQ6urqxtV+S5cu5fTp06xYscLkqPxXcz8rSqltWuuC5o732xGpfv36mR2CEEII0WmbNm3iF7/4BS6XiwEDBrBq1SqzQxKX8dtESgghhPAHd911F3fddZfZYYgW+G2xuRBCCHE5M0pZRO/SkZ8RSaSEEEL4vbCwMMrLyyWZEi3SWlNeXk5YWJhX58nUnhBCCL+XkZHBiRMnOHfunNmhiB4sLCyMjIwMr86RREoIIYTfCw4OZtCgQWaHIfyQTO0JIYQQQnSQJFJCCCGEEB0kiZQQQgghRAeZ0tlcKXUOONrNt0kAznfzPXqyQH7+QH52COznl2cPXIH8/IH87OCb5x+gtU5s7gNTEilfUEqVtNTOPRAE8vMH8rNDYD+/PHtgPjsE9vMH8rOD+c8vU3tCCCGEEB0kiZQQQgghRAf5cyK10uwATBbIzx/Izw6B/fzy7IErkJ8/kJ8dTH5+v62REkIIIYTobv48IiWEEEII0a0kkRJCCCGE6CC/TqSUUr9SSn2plNqplNqglIozOyZfUUrNUUrtUUp5lFIBsyxWKTVLKfV3pdRBpdRis+PxFaXUS0qps0qp3WbHYgalVD+l1Bal1N76n/uFZsfkK0qpMKXUVqXUjvpnf8rsmHxNKWVVSm1XSr1jdiy+ppQqU0rtUkqVKqVKzI7Hl5RScUqp1+t/z+9TSo03Iw6/TqSAzcBIrXUusB/4scnx+NJu4BvA38wOxFeUUlbgN8BNQDZwt1Iq29yofGYVMMvsIEzkAv5Za50NjAMeDaDvfS0wVWs9CsgDZimlxpkck68tBPaZHYSJpmit8wKwl9QK4F2t9XBgFCb9DPh1IqW1fk9r7ap/+SmQYWY8vqS13qe1/rvZcfhYIXBQa31Ya10HrANuMzkmn9Ba/w24YHYcZtFan9Zaf1H/5yqM/0NNNzcq39CG6vqXwfVfAbOKSCmVAdwM/N7sWITvKKVigeuBFwG01nVa6wozYvHrROoK84E/mx2E6FbpwPHLXp8gQH6Ziq8ppQYCo4HPzI3Ed+qntkqBs8BmrXXAPDvwDPAjwGN2ICbRwHtKqW1Kqe+YHYwPDQLOAX+on9b9vVIq0oxAen0ipZT6q1JqdzNft112zE8whv7XmBdp12vPswsRSJRSUcAbwD9qrS+ZHY+vaK3dWus8jFH3QqXUSLNj8gWl1C3AWa31NrNjMdFErXU+RknDo0qp680OyEeCgHzgt1rr0YANMKUuNsiMm3YlrfWNrX2ulJoH3AJM037WNKutZw9AJ4F+l73OqH9PBAClVDBGErVGa73e7HjMoLWuUEptwaiXC4SFB9cBRUqp2UAYEKOUelVrfa/JcfmM1vpk/f+eVUptwChxCITa2BPAictGX1/HpESq149ItUYpNQtjyLdIa203Ox7R7T4HrlFKDVJKhQBzgY0mxyR8QCmlMGol9mmtnzY7Hl9SSiU2rEhWSoUD04EvzY3KN7TWP9ZaZ2itB2L8ff8gkJIopVSkUiq64c/ADAIjgUZr/RVwXCk1rP6tacBeM2Lx60QKeA6IBjbXLw193uyAfEUp9Q9KqRPAeGCTUuovZsfU3eoXFiwA/oJRbPzfWus95kblG0qptcAnwDCl1Aml1INmx+Rj1wHfBqbW/10vrR+lCASpwBal1E6Mf0xs1loHXBuAAJUM/J9SagewFdiktX7X5Jh86QfAmvqf/Tzg/5kRhGwRI4QQQgjRQf4+IiWEEEII0W0kkRJCCCGE6CBJpIQQQgghOkgSKSGEEEKIDpJESgghhBCigySREkIIIYToIEmkhBBCCCE66P8DlQxlNpu7POIAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light",
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"## alpha(事前分布の精度=分散の逆数)は決め打ちとする\n",
"alpha = 1.e-5 #精度が小さい=分散が大きい=パラメータの事前知識が\"弱い\"\n",
"\n",
"## wの事後分布の計算\n",
"I = np.diag([1.0 for i in range(p+1)])\n",
"Sigma = np.linalg.inv( alpha * I + beta * np.dot(Phi.T, Phi) )\n",
"mu = beta * np.dot(Sigma, np.dot(Phi.T,yt))\n",
"\n",
"## 予測値(その分散)のリストを作成\n",
"y_BLR = []\n",
"for tx in x :\n",
" tmp = phi(tx,p)\n",
" mu_p = np.dot(mu,tmp) \n",
" term1 = 1.0/beta\n",
" term2 = np.dot(tmp,np.dot(Sigma,tmp))\n",
" sigma_p = term1 + term2 \n",
" #print(\"term1\", term1, \"term2\", term2)\n",
" y_BLR += [ [mu_p, sigma_p] ]\n",
"y_BLR = np.array(y_BLR).T\n",
"\n",
"## plot\n",
"fig = plt.figure(figsize = (10,4))\n",
"axs = [fig.add_subplot(111)]\n",
"axs[0].scatter(xt,yt,label=\"Data\",color=\"k\",marker=\"x\")\n",
"axs[0].plot(x,yD,label=\"Maximum Likelihood\",linestyle=\"dotted\", color=\"red\")\n",
"axs[0].plot(x,y_BLR[0],label=\"Mean\",linestyle=\"dashed\", color=\"blue\")\n",
"axs[0].fill_between(x,y_BLR[0]+np.sqrt(y_BLR[1]),y_BLR[0]-np.sqrt(y_BLR[1]),label=\"1sigma\", color=\"blue\",alpha=0.5)\n",
"axs[0].fill_between(x,y_BLR[0]+3*np.sqrt(y_BLR[1]),y_BLR[0]-3*np.sqrt(y_BLR[1]),label=\"3sigma\", color=\"gray\",alpha=0.3)\n",
"axs[0].legend()\n",
"plt.show()\n",
"plt.close() "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lrsQqCTcik91"
},
"source": [
"パラメータの広がりが予測に伝搬され、 \n",
"データが無いところで予測が不確かになっていることが見て取れる。\n",
"\n",
"\n",
"注) 上では、データの精度$\\beta$(分散の逆数)や、パラメータ${\\bf w}$の精度$\\alpha$を既知とした。 \n",
"実際には、$\\beta$そのものがわからなかったりする。"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bH9TtwVJm2Hi"
},
"source": [
"\n",
"\n",
"(編集予定)\n",
"\n",
"## ブートストラップ法"
]
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"include_colab_link": true,
"name": "Python_chapter_Bayesian_linear_regression.ipynb",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}