Skip to content

Instantly share code, notes, and snippets.

@shotahorii
Last active March 31, 2019 21:29
Show Gist options
  • Save shotahorii/63bf6f73a511626e882791f342abdc23 to your computer and use it in GitHub Desktop.
Save shotahorii/63bf6f73a511626e882791f342abdc23 to your computer and use it in GitHub Desktop.
Solving OLS with Gradient Descent
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Solving OLS with Gradient Descent \n",
"- [Gradient Descent Intuition (Coursera)](https://www.coursera.org/learn/machine-learning/lecture/GFFPB/gradient-descent-intuition)\n",
"- [Gradient Descent For Linear Regression (Coursera)](https://www.coursera.org/learn/machine-learning/lecture/kCvQc/gradient-descent-for-linear-regression)\n",
"- [Gradient Descent for Multiple Variables (Coursera)](https://www.coursera.org/learn/machine-learning/lecture/Z9DKX/gradient-descent-for-multiple-variables)\n",
"\n",
"[ここ](https://gist.github.com/shotahorii/037dc487ab3c70cc45af27fc9d03c9fb)でOLSについて書き、正規方程式を解くことで解析的に解が求まることを示した。 \n",
"このような、正規分布誤差を仮定した線形回帰問題では解析的に解を求めることができた。が、他の問題ではどうだろうか。基本的に最小化したい誤差関数あるいは最大化したい尤度関数を全ての推定パラメータで偏微分して連立方程式を解けばよいが、この連立方程式が常に解析的に解けるわけではない。 \n",
"\n",
"偏微分方程式の解が解析的に求められないときに、数値的に最適化問題の解を求めるアルゴリズムの一つが勾配降下法である。ここでは最もシンプルな勾配降下法である最急降下法を使って線形単回帰問題を解いてみる。(本来、線形単回帰であれば解析的に解けるので勾配降下法を用いて数値的に解く必要もないが、わかりやすい例として。)\n",
"\n",
"**勾配降下法**"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"Andrew Ngの記法に従うと、Gradient Descentは以下のように書き表される。\n",
"<br><br>\n",
"repeat until convergence {<br>\n",
"$$\\theta_j := \\theta_j - \\alpha \\frac{\\partial }{\\partial \\theta_j} J(\\theta_0,\\theta_1,...,\\theta_N)$$ <br>\n",
"}<br>\n",
"(simultaneously update j=0,j=1,...,j=N)\n",
"<br><br>\n",
"ここで、$$\\theta_0,\\theta_1,...,\\theta_N$$は推定するパラメータを表し、$$J(\\theta_0,\\theta_1,...,\\theta_N)$$\n",
"は最小化する目的関数を表す。また、記号$$:=$$は代入を意味する。"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"Andrew Ngの記法に従うと、Gradient Descentは以下のように書き表される。\n",
"<br><br>\n",
"repeat until convergence {<br>\n",
"$$\\theta_j := \\theta_j - \\alpha \\frac{\\partial }{\\partial \\theta_j} J(\\theta_0,\\theta_1,...,\\theta_N)$$ <br>\n",
"}<br>\n",
"(simultaneously update j=0,j=1,...,j=N)\n",
"<br><br>\n",
"ここで、$$\\theta_0,\\theta_1,...,\\theta_N$$は推定するパラメータを表し、$$J(\\theta_0,\\theta_1,...,\\theta_N)$$\n",
"は最小化する目的関数を表す。また、記号$$:=$$は代入を意味する。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gradient Descentの図解的な説明はAndrew Ng先生の[Gradient Descent Intuition (Coursera)](https://www.coursera.org/learn/machine-learning/lecture/GFFPB/gradient-descent-intuition)が非常にわかりやすいのでここには書かないが、重要な点だけ以下に記す。\n",
"- 各パラメータについて、そのパラメータの現在の値における目的変数についての勾配(微分値)を下る方向にパラメータの値を動かす。この勾配を表すのが式の偏微分項である。下る方向に動きたいので、マイナスになっている。\n",
"- 偏微分項の係数となっているαについては、「学習率」と呼ばれる値で常に正の値である。これによって一回の更新で動くステップの大きさを制御する。\n",
"- ちなみに、更新を進めていって最小値に近づくほど勾配は緩くなっていくので、αの値は常に一定であっても更新幅は小さくなっていき収束する。これは、例えば関数y=x<sup>2</sup>の谷を降っていくと勾配(接線の傾き)がどんどん緩くなって最後に底で0(横一直線)になるのをイメージするとわかりやすいと思う。\n",
"- αの値は小さすぎると更新のステップ幅が小さいため収束までに時間がかかり、逆に大きすぎると収束しないか、さらに発散してしまう場合もあり得る。\n",
"- 各パラメータの初期値はどのように決めてもよいが、0とおくのが一般的である。\n",
"- 局所解に捕まる可能性を考え、複数の初期値で試してその中で最小となった値をとるのも良いだろう。\n",
"\n",
"**勾配降下法で単回帰** \n",
"では、実際に一変数の回帰分析を勾配降下法で解いてみる。"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"仮説関数を以下とする。\n",
"<br><br>\n",
"$$h_\\theta(x) = \\theta_0 + \\theta_1x$$\n",
"<br><br>\n",
"二乗誤差を最小化したいので、コスト関数は以下となる。(データ数mとする)\n",
"<br><br>\n",
"$$J(\\theta_0,\\theta_1) = \\frac{1}{2m} \\sum_{i=1}^m (h_\\theta(x_i)-y_i)^2$$<br>\n",
"$$Min_{\\theta_0,\\theta_1} J(\\theta_0,\\theta_1)$$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"仮説関数を以下とする。\n",
"<br><br>\n",
"$$h_\\theta(x) = \\theta_0 + \\theta_1x$$\n",
"<br><br>\n",
"二乗誤差を最小化したいので、コスト関数は以下となる。(データ数mとする)\n",
"<br><br>\n",
"$$J(\\theta_0,\\theta_1) = \\frac{1}{2m} \\sum_{i=1}^m (h_\\theta(x_i)-y_i)^2$$<br>\n",
"$$Min_{\\theta_0,\\theta_1} J(\\theta_0,\\theta_1)$$"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"ここで、コスト関数を偏微分して勾配を求めよう。各パラメータについて偏微分する前に、まずは以下のように式変形する。\n",
"<br><br>\n",
"$$J(\\theta_0,\\theta_1) = \\frac{1}{2m} \\sum_{i=1}^m (h_\\theta(x_i)-y_i)^2$$<br>\n",
"$$=\\frac{1}{2m} \\sum_{i=1}^m (\\theta_0 + \\theta_1x -y_i)^2$$<br>\n",
"$$=\\frac{1}{2m} \\sum_{i=1}^m (\\theta_0^2 + 2\\theta_0\\theta_1x_i+\\theta_1^2x_i^2\n",
" -2\\theta_0y_i-2\\theta_1y_ix_i+y_i^2)$$<br>\n",
"$$=\\frac{1}{2m} (m\\theta_0^2 + 2\\theta_0\\theta_1\\sum x_i+\\theta_1^2\\sum x_i^2\n",
" -2\\theta_0\\sum y_i-2\\theta_1\\sum y_ix_i+\\sum y_i^2)$$\n",
"<br><br>\n",
"これを偏微分していく。\n",
"<br><br>\n",
"$$\\frac{\\partial}{\\partial \\theta_0}J(\\theta_0,\\theta_1) = \\frac{1}{2m}\n",
"(2m\\theta_0 + 2\\theta_1\\sum x_i - 2\\sum y_i)$$<br>\n",
"$$= \\frac{1}{m}(m\\theta_0 + \\sum \\theta_1x_i - \\sum y_i)\n",
"= \\frac{1}{m}\\sum(\\theta_0 + \\theta_1x_i - y_i)$$<br>\n",
"$$=\\frac{1}{m}\\sum(h_\\theta(x_i)-y_i)$$\n",
"<br><br>\n",
"$$\\frac{\\partial}{\\partial \\theta_1}J(\\theta_0,\\theta_1) = \\frac{1}{2m}\n",
"(2\\theta_0\\sum x_i - 2\\theta_1\\sum x_i^2 - 2\\sum y_i x_i)$$<br>\n",
"$$= \\frac{1}{m}\\sum(\\theta_0 x_i - \\theta_1 x_i^2 - y_i x_i)\n",
"= \\frac{1}{m}\\sum(\\theta_0 - \\theta_1 x_i - y_i)x_i$$<br>\n",
"$$=\\frac{1}{m}\\sum(h_\\theta(x_i)-y_i)x_i$$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"ここで、コスト関数を偏微分して勾配を求めよう。各パラメータについて偏微分する前に、まずは以下のように式変形する。\n",
"<br><br>\n",
"$$J(\\theta_0,\\theta_1) = \\frac{1}{2m} \\sum_{i=1}^m (h_\\theta(x_i)-y_i)^2$$<br>\n",
"$$=\\frac{1}{2m} \\sum_{i=1}^m (\\theta_0 + \\theta_1x -y_i)^2$$<br>\n",
"$$=\\frac{1}{2m} \\sum_{i=1}^m (\\theta_0^2 + 2\\theta_0\\theta_1x_i+\\theta_1^2x_i^2\n",
" -2\\theta_0y_i-2\\theta_1y_ix_i+y_i^2)$$<br>\n",
"$$=\\frac{1}{2m} (m\\theta_0^2 + 2\\theta_0\\theta_1\\sum x_i+\\theta_1^2\\sum x_i^2\n",
" -2\\theta_0\\sum y_i-2\\theta_1\\sum y_ix_i+\\sum y_i^2)$$\n",
"<br><br>\n",
"これを偏微分していく。\n",
"<br><br>\n",
"$$\\frac{\\partial}{\\partial \\theta_0}J(\\theta_0,\\theta_1) = \\frac{1}{2m}\n",
"(2m\\theta_0 + 2\\theta_1\\sum x_i - 2\\sum y_i)$$<br>\n",
"$$= \\frac{1}{m}(m\\theta_0 + \\sum \\theta_1x_i - \\sum y_i)\n",
"= \\frac{1}{m}\\sum(\\theta_0 + \\theta_1x_i - y_i)$$<br>\n",
"$$=\\frac{1}{m}\\sum(h_\\theta(x_i)-y_i)$$\n",
"<br><br>\n",
"$$\\frac{\\partial}{\\partial \\theta_1}J(\\theta_0,\\theta_1) = \\frac{1}{2m}\n",
"(2\\theta_0\\sum x_i - 2\\theta_1\\sum x_i^2 - 2\\sum y_i x_i)$$<br>\n",
"$$= \\frac{1}{m}\\sum(\\theta_0 x_i - \\theta_1 x_i^2 - y_i x_i)\n",
"= \\frac{1}{m}\\sum(\\theta_0 - \\theta_1 x_i - y_i)x_i$$<br>\n",
"$$=\\frac{1}{m}\\sum(h_\\theta(x_i)-y_i)x_i$$"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"これを勾配降下法の式にあてはめると以下となる。\n",
"<br><br>\n",
"repeat until convergence {<br>\n",
"$$\\theta_0 := \\theta_0 - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)$$ <br>\n",
"$$\\theta_1 := \\theta_1 - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)x_i$$ <br>\n",
"}<br>\n",
"(simultaneously update j=0 and j=1)"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"これを勾配降下法の式にあてはめると以下となる。\n",
"<br><br>\n",
"repeat until convergence {<br>\n",
"$$\\theta_0 := \\theta_0 - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)$$ <br>\n",
"$$\\theta_1 := \\theta_1 - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)x_i$$ <br>\n",
"}<br>\n",
"(simultaneously update j=0 and j=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ちなみに、勾配降下法(だけではなく一般的に様々な最適化手法)の一つの問題点として、局所解に捕まる可能性があげられる。つまり、例えば複数の谷がある関数で、本当は大局解が他にあるのに、初期値から最も近い谷に落ち着いてしまう。 \n",
"が、線形回帰においては、コスト関数は常に凸型関数(Convex)であり、大局解以外の局所解を持たない。\n",
"\n",
"**実装**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from functools import reduce\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# ボストンデータを使う\n",
"from sklearn.datasets import load_boston\n",
"d = load_boston()\n",
"y = d.target\n",
"x = d.data[:,5]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nHCiQtRoLHEumsO8DMlNoFt5XrYVgCh2rk1ZnlZuZyv0f8W//9nv8rM+l/uPvsUTiauvq6sk5Vq8t\nrtabNmnUVqy4bKHoe3x83J82dM1rh5Aw6aKMwG7a/92qnOMu9qHypuG+bLFYb9aUXdBKQumqhTHF\nYn1FX9uw74NKenl1wnsNjcP7qnUQTKGjddJKmNz/8QY138w0PLzHn55b62eMHjavT1NvTjdy8wOk\ndCZppS22JXAtEknYypXr/c7nl5u016TDlr267wnz2hvkZs+utnQfKm8Mq026IitACg4UV5v0tbzA\nq5BSvbhqsVKvk95raBzeV62BYApoonr+j7BYQXfmar6g8w8P7wmYOlthsVjvQi1Tfpbr/QHPSbct\nmLbFqcD01ODv+d9fY14rg3QheO5xB/wsU/aqu8xMWjpQdF1vO5h4fKCmGxCzWgpAMdUEU473vPpx\nHMfqfQ6g2fbtO6ChobsUjQ5ofn5SIyOPasuWzU0/diqV0sUXr9Xc3KWSvpPxm7Vavvwn+tKXHlEq\nldKOHTvV1dWv2dkX5DjnFItdqNdeOyfp+xnPWS/pNUn/UdIWSWOSrpX0vKQbJa2Q9P9KGpD0jKQP\nSFou6QJJP5e0U7HYgzp79qc6c+ZiSd9bOHJv73odPLhbGzZsWBj35OSkEomEZmZmNDAwoGQyWeGd\ny74P/f3rNDu7OGbX3aSpqROhjgtg6XEcR2bmVPKcrnoNBugUqVRKQ0N3aXZ2TLOz3gf10NAm3Xzz\nO0J/UIc99uTkpKLRfs3NvSgv6LlA0rck/Vxnzzq6884/0ooVl8rsnG6/faN+67c+r4svvlgvvvii\n3vOef6tTp57XYsD0I0mnJf1C0sX+z1OS5iRdJmlKUkxSUtJVisddnTkzrzNnflfSv5Y0Jcf5Zx06\n9C1t2vRunT69eOxTp17QwMDAwriTyWRNgxzvPgz491CSrlUk0q/JyUmCKQChLWv2AIB2l/6g9gID\nKfODutnHHhgY0Jkz/yjp9yS9WV7W6LPygiKTtFa//OWU5uZWadeuPfrX//oPdMMNb9c//dMrevzx\nLysa/XVJayW9VdIv5QVjvy/puKTPS1on6Q5JL8jLVr1V3d3XyXU36Q/+4ANatiwi6SlJt0j6qM6d\nM/2v/zUh6ZykjfKyXRtldjbEXSrvPszPT8oLCiXpeZ0+PZUVwAFAtQimgJDK/aBOpVI6cuSIUqlU\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10cb57908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1,1,figsize=(10,7))\n",
"chart = ax.scatter(x,y)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def h(t0,t1,x):\n",
" return t1*x+t0\n",
"\n",
"def gradientdescent(x,y,a,t0=0,t1=0,max_itr=20000):\n",
" itr = 0\n",
" conversion = 0.01 # conversion criteria\n",
" grad_0, grad_1 = conversion+1, conversion+1\n",
" while (abs(grad_0) > conversion or abs(grad_1) > conversion) and itr<max_itr:\n",
" itr += 1\n",
" grad_0 = reduce(lambda v,w: v+w, [h(t0,t1,x[i])-y[i] for i in range(len(x))])/len(x)\n",
" grad_1 = reduce(lambda v,w: v+w, [(h(t0,t1,x[i])-y[i])*x[i] for i in range(len(x))])/len(x)\n",
" t0 = t0 - a*grad_0\n",
" t1 = t1 - a*grad_1\n",
" if itr%1000==0:\n",
" print(grad_0)\n",
" print(grad_1)\n",
" print(itr)\n",
" return t0,t1"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.295415168657\n",
"-0.0464407621753\n",
"1000\n",
"0.205944816548\n",
"-0.0323755692371\n",
"2000\n",
"0.143571732134\n",
"-0.0225702041553\n",
"3000\n",
"0.100089153073\n",
"-0.0157345222838\n",
"4000\n",
"0.0697758424586\n",
"-0.0109691161762\n",
"5000\n",
"0.0486433148979\n",
"-0.00764697570832\n",
"6000\n",
"0.0339110500266\n",
"-0.00533098898257\n",
"7000\n",
"0.0236406444815\n",
"-0.00371642916317\n",
"8000\n",
"0.0164807657405\n",
"-0.00259085992673\n",
"9000\n",
"0.0114893500304\n",
"-0.00180618407219\n",
"10000\n"
]
}
],
"source": [
"t0,t1 = gradientdescent(x,y,a=0.03)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-33.8392758673 8.9714173468\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlsAAAGnCAYAAACAfZKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8lPW5///XnWS2bBAk4gYEBAQVJHCw9FQrVOlpPefb\n+tUeOdRal9SKHpUu7l1cEI9L1eNSG1AUtbJ4qq1++/M0lkr0YGuDGrWnAfdEcctglYJmg1y/P+57\nkpnJTNZJZiZ5Px+PPJLMct+feyYhF9fn+lwfx8wQERERkcGRk+4BiIiIiAxnCrZEREREBpGCLRER\nEZFBpGBLREREZBAp2BIREREZRAq2RERERAZRSoItx3FGOY7zX47jbHUc56+O43zOcZwSx3GecBzn\nFcdxqhzHGZWKc4mIiIhkk1Rltm4FHjezGcARwDbgUmCjmR0CPAlclqJziYiIiGQNZ6BNTR3HKQZq\nzezguNu3AceY2YeO4+wHVJvZ9AGdTERERCTLpCKzNQnY4TjOvY7jvOA4zirHcfKBcWb2IYCZfQDs\nm4JziYiIiGSVvBQdYw7w72b2nOM4t+BOIcanzBKm0BzH0X5BIiIikjXMzOnL41OR2doOvGNmz3nf\nP4wbfH3oOM44AG8asTHZAcxsxH1cccUVaR+DrlvXrevWdeu6dd267r599MeAgy1zpwrfcRxnmnfT\nscBfgceA073bTgMeHei5RERERLJNKqYRAS4AHnQcxwe8CZwB5AIPOY5zJtAAnJyic4mIiIhkjZQE\nW2b2EjAvwV3HpeL4w9GCBQvSPYS00HWPLLrukUXXPbKM1OvujwG3fhjwABzH0j0GERERkd5wHAdL\nQ4G8iIiIiCShYEtERERkECnYEhERERlECrZEREREBpGCLREREZFBpGBLREREZBAp2BIREREZRAq2\nRERERAaRgi0RERGRQaRgS0RERGQQKdgSERERGUQKtkREREQGkYItERERkUGkYEtERET6xAzeeCPd\no8geeekegIiIiGSPcBi+8x3YtQv+8AdwnHSPKPMpsyUiIiK98t//DUccAdOnw+9+p0Crt5TZEhER\nkW41NcHFF8Ojj8LatbBgQbpHlF2U2RIREZGkXnwR/uEfYMcOeOklBVr9oWBLREREumhvh5/9DBYt\ngssuczNaJSXpHlV20jSiiIiIxNi+HU47DVpbYcsWKCtL94iymzJbIiIi0uG//gvmzoVjj4XqagVa\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1106627f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print(t0,t1)\n",
"xrange = np.linspace(3,10,50)\n",
"fig, ax = plt.subplots(1,1,figsize=(10,7))\n",
"chart = ax.scatter(x,y)\n",
"line= ax.plot(xrange,[t0+t1*xi for xi in xrange])"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 正規方程式を解いて解析的に求めた解\n",
"X = np.ones((len(x), 2), float)\n",
"X[:,1] = x\n",
"t0,t1 = np.dot(np.dot(np.linalg.inv(np.dot(X.T,X)),X.T),y)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-34.6706207764 9.10210898118\n"
]
},
{
"data": {
"image/png": "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\n/x/ixKY1M2d4sQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1109b1b00>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print(t0,t1)\n",
"xrange = np.linspace(3,10,50)\n",
"fig, ax = plt.subplots(1,1,figsize=(10,7))\n",
"chart = ax.scatter(x,y)\n",
"line= ax.plot(xrange,[t0+t1*xi for xi in xrange])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**二変数以上での勾配降下法**"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"上では、一変数の時の勾配降下法のアルゴリズムを以下のように示した。\n",
"<br><br>\n",
"repeat until convergence {<br>\n",
"$$\\theta_0 := \\theta_0 - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)$$ <br>\n",
"$$\\theta_1 := \\theta_1 - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)x_i$$ <br>\n",
"}<br>\n",
"(simultaneously update j=0 and j=1)\n",
"<br><br>\n",
"これをn変数の線形回帰の場合に拡張すると、アルゴリズムは以下となる。\n",
"<br><br>\n",
"repeat until convergence {<br>\n",
"$$\\theta_j := \\theta_j - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)x_{ji}$$ <br>\n",
"}<br>\n",
"(simultaneously update j=0,1,...,n)\n",
"<br><br>\n",
"ちなみに、ちょっと記号がこんがらがりやすいので補足しておくと、$$x_i$$はi番目のデータにおける変数<b>群</b>であり\n",
"$$x_{ji}$$はi番目のデータにおける<b>j番目の</b>変数である。"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"上では、一変数の時の勾配降下法のアルゴリズムを以下のように示した。\n",
"<br><br>\n",
"repeat until convergence {<br>\n",
"$$\\theta_0 := \\theta_0 - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)$$ <br>\n",
"$$\\theta_1 := \\theta_1 - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)x_i$$ <br>\n",
"}<br>\n",
"(simultaneously update j=0 and j=1)\n",
"<br><br>\n",
"これをn変数の線形回帰の場合に拡張すると、アルゴリズムは以下となる。\n",
"<br><br>\n",
"repeat until convergence {<br>\n",
"$$\\theta_j := \\theta_j - \\alpha \\frac{1}{m}\\sum_{i=1}^m(h_\\theta(x_i)-y_i)x_{ji}$$ <br>\n",
"}<br>\n",
"(simultaneously update j=0,1,...,n)\n",
"<br><br>\n",
"ちなみに、ちょっと記号がこんがらがりやすいので補足しておくと、$$x_i$$はi番目のデータにおける変数<b>群</b>であり\n",
"$$x_{ji}$$はi番目のデータにおける<b>j番目の</b>変数である。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment