{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 関数近似\n", "\n", "pythonのライブラリ利用演習を兼ねて、初歩的な関数近似と、利用上の注意について述べる。\n", "\n", "特に、自然科学における利用とデータサイエンス的な観点との差異にも述べる。\n", "\n", "
\n", " このページのオリジナルのipynbファイル
\n", " ホームへ戻る To homepage\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## データの準備\n", "\n", "2つの値の組の$n$個のデータがあるとする。$(x_1,y_1),\\ (x_2, y_2),\\ \\cdots,\\ (x_n,y_n)$\n", "\n", "ここでは、$x$と$y$の関係が何かある関数$y=f(x)$で表されるとしてそれを探る問題を考えてみる。\n", "\n", "準備として仮想的なデータを用意する。\n", "\n", "$\\sin x$の値に、ガウシアンノイズを載せたデータを返す関数make_data_by_sin_gaussian()を以下のように作成する。\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import random\n", "\n", "def make_data_by_sin_gaussian(x):\n", " # y=sin (x)を計算し、ガウス分布に従うノイズを加える\n", " y = np.sin(x) # argument is a 1-d array -> returned variable is a 1-d array \n", " e = [random.gauss(0, 0.5) for i in range(len(y))] # 内包表記 (generate random numbers using list comprehension)\n", " # e = np.random.randn(len(x))*0.2\n", " y += e\n", " return y" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# データ数\n", "n_tr = 10\n", "x = np.linspace(0., np.pi*2., n_tr) # リスト 0から2πまでをn_tr等分した値を一次元配列" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 ,\n", " 3.4906585 , 4.1887902 , 4.88692191, 5.58505361, 6.28318531])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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+9M33p++mfD+nG7GpRsP7AIAAKMQXgAAgFEILwPg8Xj0m9/8Rh6Px+5WHIn3p2+8P6fGe9M33p++8f70bSi+P0PugV0AADC0MfMCAACMQngBAABGIbwAAACjEF4AAIBRCC/9tHbtWhUWFmr06NEqKipSU1OT3S05xo4dOzR//nwVFBTI5XJp06ZNdrfkGDU1Nfra176mrKws5ebmauHChTp48KDdbTnGunXrdOmll/ZsnlVSUqKXXnrJ7rYcqaamRi6XS1VVVXa34girV6+Wy+VKOvLz8+1uy1Ha2tr0gx/8QGPHjtXZZ5+tyy67THv27LG7rbQgvPTD888/r6qqKq1atUp79+5VaWmpysvL1draandrjnDy5ElNmzZNDz74oN2tOE5jY6Nuu+027d69Ww0NDfr4449VVlamkydP2t2aI/j9fv3ud79Tc3OzmpubddVVV2nBggXav3+/3a05yuuvv666ujpdeumldrfiKJMnT1YkEuk59u3bZ3dLjvHBBx/o8ssv18iRI/XSSy/pX//6l+677z6de+65dreWFiyV7oeZM2dqxowZWrduXc/YpEmTtHDhQtXU1NjYmfO4XC5t3LhRCxcutLsVR3r//feVm5urxsZGXXHFFXa340jnnXee/vjHP+qWW26xuxVHOHHihGbMmKG1a9fq7rvv1mWXXaba2lq727Ld6tWrtWnTJrW0tNjdiiP96le/0l//+tche5eAmZfT6Orq0p49e1RWVpY0XlZWpp07d9rUFUwVjUYlJT6gkSwej+u5557TyZMnVVJSYnc7jnHbbbfp2muv1be+9S27W3GcQ4cOqaCgQIWFhbrhhhv0zjvv2N2SY2zevFnFxcW6/vrrlZubq+nTp+uRRx6xu620IbycxtGjRxWPx5WXl5c0npeXp/b2dpu6goksy1J1dbW+8Y1vaMqUKXa34xj79u3Tl770JXk8HlVUVGjjxo366le/andbjvDcc8/p73//OzO8vZg5c6bWr1+vV155RY888oja29s1e/ZsHTt2zO7WHOGdd97RunXrdNFFF+mVV15RRUWFbr/9dq1fv97u1tJiyH2rdKa4XK6k15ZlpYwBfVm2bJneeOMN/eUvf7G7FUeZOHGiWlpa9OGHH6q+vl5Lly5VY2PjsA8w4XBYlZWV2rp1q0aPHm13O45TXl7e85+nTp2qkpISffnLX9aTTz6p6upqGztzhk8++UTFxcW65557JEnTp0/X/v37tW7dOt100002d/fFMfNyGjk5OXK73SmzLB0dHSmzMcCp/PznP9fmzZu1bds2+f1+u9txlFGjRukrX/mKiouLVVNTo2nTpmnNmjV2t2W7PXv2qKOjQ0VFRRoxYoRGjBihxsZGPfDAAxoxYoTi8bjdLTrKOeeco6lTp+rQoUN2t+IIPp8v5f8ATJo0acgsNCG8nMaoUaNUVFSkhoaGpPGGhgbNnj3bpq5gCsuytGzZMoVCIb366qsqLCy0uyXHsyxLnZ2ddrdhu7lz52rfvn1qaWnpOYqLi/X9739fLS0tcrvddrfoKJ2dnTpw4IB8Pp/drTjC5ZdfnrItw1tvvaXx48fb1FF6cduoH6qrq7VkyRIVFxerpKREdXV1am1tVUVFhd2tOcKJEyf09ttv97w+fPiwWlpadN555+mCCy6wsTP73XbbbXr22Wf15z//WVlZWT0zeF6vV2PGjLG5O/vdcccdKi8vVyAQ0PHjx/Xcc89p+/btevnll+1uzXZZWVkpz0adc845Gjt2LM9MSVqxYoXmz5+vCy64QB0dHbr77rsVi8W0dOlSu1tzhOXLl2v27Nm655579L3vfU+vvfaa6urqVFdXZ3dr6WGhXx566CFr/Pjx1qhRo6wZM2ZYjY2NdrfkGNu2bbMkpRxLly61uzXb9fa+SLIef/xxu1tzhB/96Ec9/7s6//zzrblz51pbt261uy3H+uY3v2lVVlba3YYjLF682PL5fNbIkSOtgoICKxgMWvv377e7LUd54YUXrClTplgej8e65JJLrLq6OrtbShv2eQEAAEbhmRcAAGAUwgsAADAK4QUAABiF8AIAAIxCeAEAAEYhvAAAAKMQXgAAgFEILwAAwCiEFwAAYBTCCwAAMArhBQAAGIXwAgAAjPL/AEa5PsP+tfYAAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y = make_data_by_sin_gaussian(x)\n", "\n", "# データの描画\n", "import matplotlib.pyplot as plt\n", "plt.plot(x,y, \"ob\")\n", "\n", "# sinの描画\n", "#n_tr = 100\n", "#x = np.linspace(0., np.pi*2., n_tr)\n", "#plt.plot(x, np.sin(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(注)\n", "\n", "\n", "ノイズの部分\n", "```python\n", "e = [random.gauss(0, 0.2) for i in range(len(y))]\n", "```\n", "は、numpyの乱数発生関数\n", "```python\n", "e = np.random.randn(len(x))*0.2\n", "```\n", "でもよい。こちらの方が繰り返し記述がない分、シンプルで高速である。(演習として使ってみてほしい。)\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.48221898, 1.10002047, 0.99607228, 1.8557235 , 0.12117253,\n", " -0.85154843, -0.14321635, -0.68997788, -1.05405243, -0.1684426 ])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## べき多項式関数近似\n", "\n", "データに潜む原理から、べき的な振る舞いを示しているものだと想定し、べき関数での近似を行ってみる。つまり、\n", "\n", "$$\n", " y(x, {\\bf w}) = w_0 + w_1 x + w_2 x^2 + \\cdots + w_M x^M = \\sum_{j=0}^{M} w_j x^j\n", "$$\n", "\n", "置き、トレーニングデータ$\\{(t_n, x_n)\\}$, $n=1,\\cdots, N$を使って、係数${\\bf w} = (w_0,\\ w_2,\\ \\cdots,\\ w_M)$を\n", "2乗誤差\n", "\n", "$$\n", "E({\\bf w}) = \\frac{1}{2} \\sum_{n=1}^N \\{y(x_n,{\\bf w}) - t_n\\}^2\n", "$$\n", "\n", "を最小にするよう${\\bf w}$を決める。\n", "\n", "このことを最小2乗法と呼ぶ。 (参考図 https://imagingsolution.net/math/least-square-method/ )\n", "\n", "**pythonのライブラリscikit-learn** にあるlinear_modelを用いてみる\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 線形近似" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### サンプルデータの作成" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# トレーニングデータの数 (上で行っていれば必要ない)\n", "n_tr = 20\n", "x = np.linspace(0., np.pi*2., n_tr)\n", "\n", "# データの作成\n", "y = make_data_by_sin_gaussian(x) # データ\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### scikit-learnのlinear_modelを利用\n", "\n", "【準備】\n", "\n", "- x軸のデータからy軸のデータを「推定」(予測)するという意味で、それぞれ「説明変数」(特徴量とも呼ぶ)、「目的変数」という言葉を使う。\n", "- linear_modelに適用するには、データの1レコードは1行にする必要がある\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0. 0.33069396 0.66138793 0.99208189 1.32277585 1.65346982\n", " 1.98416378 2.31485774 2.64555171 2.97624567 3.30693964 3.6376336\n", " 3.96832756 4.29902153 4.62971549 4.96040945 5.29110342 5.62179738\n", " 5.95249134 6.28318531]\n", "[[0. ]\n", " [0.33069396]\n", " [0.66138793]\n", " [0.99208189]\n", " [1.32277585]\n", " [1.65346982]\n", " [1.98416378]\n", " [2.31485774]\n", " [2.64555171]\n", " [2.97624567]\n", " [3.30693964]\n", " [3.6376336 ]\n", " [3.96832756]\n", " [4.29902153]\n", " [4.62971549]\n", " [4.96040945]\n", " [5.29110342]\n", " [5.62179738]\n", " [5.95249134]\n", " [6.28318531]]\n" ] } ], "source": [ "# linear_modelへ適用するために\n", "# numpyの配列形状を変更\n", "\n", "print(x)\n", "print(x.reshape(-1,1)) # それぞれのデータを各行に(つまり「転置」)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-0.22370028]]\n", "[0.58182455]\n" ] } ], "source": [ "from sklearn import linear_model as lm\n", "# モデル(オブジェクト)を作成\n", "rlf = lm.LinearRegression()\n", "\n", "x_tr = x.reshape(-1,1)\n", "y_tr = y.reshape(-1,1)\n", "\n", "#フィッティング (データは縦ベクトルとして与える必要がある)\n", "rlf.fit(x_tr, y_tr)\n", "\n", "# 一次の係数の表示\n", "print(rlf.coef_)\n", "# 切片の表示\n", "print(rlf.intercept_)\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 直線をデータと合わせて表示\n", "\n", "# 直線なので(x0,y0) - (x1, y1) を引くために、[x0,x1]を用意し、[y0,y1]を作成\n", "x_fit = np.array([0, np.pi*2])\n", "y_fit = rlf.predict(x_fit.reshape(-1,1))\n", "\n", "plt.plot(x_tr,y, 'ob')\n", "plt.plot(x_fit, y_fit)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### べき多項式近似\n", "\n", "scikit-learnにはべき多項式近似(非線形関数近似)のモジュール(モデル)はない(たぶん)!\n", "\n", "そこでlinear_modelを応用してべき多項式近似を行ってみる。\n", "\n", "まずは、べき関数へのフィッティングをlinear_modelで行うために、$x$の値に対する各べきの値$x^1,\\ x^2,\\ x^3,\\ \\cdots,\\ x^n$を行として並べた行列(Vandermonde行列)を作成しておく。\n", "(sklearnにあるPolynomialFeaturesを用いることもできる。[参考ページ](https://qiita.com/orangeBeens/items/0f8e3b326ddf6f786754))\n", "\n", "(注)データ分析に慣れている人向け説明:\n", "\n", "$n$個の説明変数に対する係数$\\{w_i\\}$を線形重回帰(multiple linear regression)によって決めるということに相当する。\n", "\n", "このことの必要性を理解するために、最初に[社会的データの重回帰分析](multiple_regression.html)について説明する。\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "\n", "# 説明変数の作成 (x, x^2, ...x^m) 行列\n", "m=5 # フィッティング関数の次数\n", "power_matrix_x = np.vander(x, m+1)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 0.00000000e+00, 1.00000000e+00],\n", " [3.95486203e-03, 1.19592810e-02, 3.61641950e-02, 1.09358498e-01,\n", " 3.30693964e-01, 1.00000000e+00],\n", " [1.26555585e-01, 1.91348496e-01, 2.89313560e-01, 4.37433990e-01,\n", " 6.61387927e-01, 1.00000000e+00],\n", " [9.61031473e-01, 9.68701759e-01, 9.76433265e-01, 9.84226478e-01,\n", " 9.92081891e-01, 1.00000000e+00],\n", " [4.04977872e+00, 3.06157593e+00, 2.31450848e+00, 1.74973596e+00,\n", " 1.32277585e+00, 1.00000000e+00],\n", " [1.23589438e+01, 7.47455061e+00, 4.52052437e+00, 2.73396244e+00,\n", " 1.65346982e+00, 1.00000000e+00],\n", " [3.07530071e+01, 1.54992281e+01, 7.81146612e+00, 3.93690591e+00,\n", " 1.98416378e+00, 1.00000000e+00],\n", " [6.64693661e+01, 2.87142336e+01, 1.24043189e+01, 5.35856638e+00,\n", " 2.31485774e+00, 1.00000000e+00],\n", " [1.29592919e+02, 4.89852149e+01, 1.85160678e+01, 6.99894384e+00,\n", " 2.64555171e+00, 1.00000000e+00],\n", " [2.33530648e+02, 7.84648425e+01, 2.63636981e+01, 8.85803830e+00,\n", " 2.97624567e+00, 1.00000000e+00],\n", " [3.95486203e+02, 1.19592810e+02, 3.61641950e+01, 1.09358498e+01,\n", " 3.30693964e+00, 1.00000000e+00],\n", " [6.36934485e+02, 1.75095833e+02, 4.81345435e+01, 1.32323782e+01,\n", " 3.63763360e+00, 1.00000000e+00],\n", " [9.84096228e+02, 2.47987650e+02, 6.24917289e+01, 1.57476236e+01,\n", " 3.96832756e+00, 1.00000000e+00],\n", " [1.46841259e+03, 3.41569024e+02, 7.94527364e+01, 1.84815861e+01,\n", " 4.29902153e+00, 1.00000000e+00],\n", " [2.12701972e+03, 4.59427738e+02, 9.92345511e+01, 2.14342655e+01,\n", " 4.62971549e+00, 1.00000000e+00],\n", " [3.00322335e+03, 6.05438600e+02, 1.22054158e+02, 2.46056619e+01,\n", " 4.96040945e+00, 1.00000000e+00],\n", " [4.14697341e+03, 7.83763438e+02, 1.48128543e+02, 2.79957754e+01,\n", " 5.29110342e+00, 1.00000000e+00],\n", " [5.61533853e+03, 9.98851107e+02, 1.77674690e+02, 3.16046058e+01,\n", " 5.62179738e+00, 1.00000000e+00],\n", " [7.47298073e+03, 1.25543748e+03, 2.10909585e+02, 3.54321532e+01,\n", " 5.95249134e+00, 1.00000000e+00],\n", " [9.79262991e+03, 1.55854546e+03, 2.48050213e+02, 3.94784176e+01,\n", " 6.28318531e+00, 1.00000000e+00]])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# show the vander matrix\n", "power_matrix_x" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGdCAYAAADaPpOnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABslUlEQVR4nO3dd3hUZdrH8e9MKiGNJCQkEHrvCAJBURBFQYHQURGxoCjYWMui+65lVXRXXXSVJiBFVKSFIIigUlQ6giDSW0IJgYQkhJA68/5xSDCSCpnMTPL7XNdcc+bkmTl3hjL3POV+TFar1YqIiIiIkzDbOwARERGR0lDyIiIiIk5FyYuIiIg4FSUvIiIi4lSUvIiIiIhTUfIiIiIiTkXJi4iIiDgVJS8iIiLiVFztHUBZs1gsnDp1Ch8fH0wmk73DERERkRKwWq1cuHCBsLAwzOai+1YqXPJy6tQpwsPD7R2GiIiIXIPY2Fhq1apVZJsKl7z4+PgAxi/v6+tr52hERESkJFJSUggPD8/7HC9KhUtecoeKfH19lbyIiIg4mZJM+dCEXREREXEqSl5ERETEqSh5EREREaei5EVEREScipIXERERcSo2TV4mTJjAjTfeiI+PD8HBwURGRrJ///5in7du3Trat2+Pp6cn9evXZ8qUKbYMU0RERJyITZOXdevWMWbMGDZt2sTq1avJzs6mZ8+eXLx4sdDnHD16lN69e9O1a1d27NjByy+/zNNPP82iRYtsGaqIiIg4CZPVarWW18XOnj1LcHAw69at45ZbbimwzUsvvUR0dDR79+7NOzd69Gh+++03Nm7cWOw1UlJS8PPzIzk5WXVeKoD0dFiwAKKiICEBAgMhMhIGDwZPT3tHJyIiZaU0n9/lWqQuOTkZgICAgELbbNy4kZ49e+Y7d+eddzJjxgyysrJwc3PL97OMjAwyMjLyHqekpJRhxGJP0dEwciScPw9mM1gsxv3ixfDMMzB7NvTpY+8oRUSkvJXbhF2r1cq4ceO4+eabadmyZaHt4uLiCAkJyXcuJCSE7Oxszp07d1X7CRMm4Ofnl3fTvkYVQ3S00cOSlGQ8tljy3yclQb9+RjsREalcyi15GTt2LLt27eLLL78stu1fSwPnjmwVVDJ4/PjxJCcn591iY2PLJmCxm/R0o8cFoLBBzdzzI0ca7UVEpPIol+TlqaeeIjo6mjVr1hS7U2SNGjWIi4vLdy4+Ph5XV1cCAwOvau/h4ZG3j5H2M6oYFiwwhoqKm41ltRrtFi4sn7hERMQx2DR5sVqtjB07lsWLF/Pjjz9Sr169Yp8TERHB6tWr851btWoVHTp0uGq+i1RMUVHG3JaSMJthyRKbhiMiIg7GpsnLmDFj+Pzzz/niiy/w8fEhLi6OuLg4Ll26lNdm/PjxjBgxIu/x6NGjOX78OOPGjWPv3r3MnDmTGTNm8Pzzz9syVHEgCQlX5rYUx2KBxETbxiMiIo7FpsnL5MmTSU5Oplu3boSGhubd5s+fn9fm9OnTxMTE5D2uV68eK1asYO3atbRt25Z//etffPTRRwwcONCWoYoDCQwsXc9LEYvXRESkAirXOi/lQXVenN/cufCnzrgStR8+3HbxiIiI7ZXm81t7G4nDGTwYqlWDAhaX5WMyGe0GDSqfuERExDEoeRGH4+lpFKCDwhOY3POzZ6vSrohIZaPkRRxSnz7GqiN/f+Nx7hyY3Ht/f1i6VBV2RUQqo3LdHkCkNPr2hVOnjDouS5YYq4oCAqB/f2OoSD0uIiKVkybsioiIiN1pwq6IiIhUWEpeRERExKkoeRERERGnouRFREREnIqSFxEREXEqSl5ERETEqSh5EREREaei5EVEREScipIXERERcSpKXkRERMSpKHkRERERp6LkRURERJyKkhcRERFxKkpeRERExKkoeRERERGnouRFREREnIqSFxEREXEqSl5ERETEqSh5EREREaei5EVEREScipIXERERcSpKXkRERMSpKHkRERERp6LkRURERJyKkhcRERFxKkpeRERExKkoeRERERGnouRFREREnIqSFxEREXEqSl5ERETEqSh5EREREaei5EVEREScipIXERERcSpKXkRERMSp2DR5Wb9+PX369CEsLAyTyURUVFSR7deuXYvJZLrqtm/fPluGKSIiIk7E1ZYvfvHiRdq0acNDDz3EwIEDS/y8/fv34+vrm/e4evXqtghPREREnJBNk5devXrRq1evUj8vODgYf3//sg9IREREnJ5Dznlp164doaGh9OjRgzVr1hTZNiMjg5SUlHw3ERERqbgcKnkJDQ1l2rRpLFq0iMWLF9OkSRN69OjB+vXrC33OhAkT8PPzy7uFh4eXY8QiIiJS3kxWq9VaLhcymViyZAmRkZGlel6fPn0wmUxER0cX+POMjAwyMjLyHqekpBAeHk5ycnK+eTMiIiLiuFJSUvDz8yvR57dD9bwUpHPnzhw8eLDQn3t4eODr65vvJiIiIhWXwycvO3bsIDQ01N5hiIiIiIOw6Wqj1NRUDh06lPf46NGj7Ny5k4CAAGrXrs348eM5efIkc+bMAWDixInUrVuXFi1akJmZyeeff86iRYtYtGiRLcMUERERJ2LT5GXbtm1079497/G4ceMAePDBB5k1axanT58mJiYm7+eZmZk8//zznDx5kipVqtCiRQuWL19O7969bRmmiIiIOJFym7BbXkoz4UdEREQcQ4WasCsiIiLyZ0peRERExKkoeRERERGnouRFREREnIqSFxEREXEqSl5ERETEqSh5EREREaei5EVEREScipIXERERcSpKXkRERMSpKHkRERERp6LkRURERJyKkhcRERFxKkpeRERExKkoeRERERGnouRFREREnIqSFxEREXEqSl5ERETEqSh5EREREaei5EVEREScipIXERERcSpKXkRERMSpKHkRERERp6LkRURERJyKkhcRERFxKkpeRERExKkoeRERERGnouRFREREnIqSFxEREXEqSl5ERETEqSh5EREREaei5EVEREScipIXERERcSpKXkRERMSpKHkRERERp6LkRURERJyKkhcRERFxKkpeRERExKkoeRERERGnouRFREREnIpNk5f169fTp08fwsLCMJlMREVFFfucdevW0b59ezw9Palfvz5TpkyxZYgiIiLiZGyavFy8eJE2bdrw8ccfl6j90aNH6d27N127dmXHjh28/PLLPP300yxatMiWYYqIiIgTcbXli/fq1YtevXqVuP2UKVOoXbs2EydOBKBZs2Zs27aN9957j4EDB9ooSqnQMi5AajzkZEFO5pV7Vw+oUg2q+IOHH5g1gioi4ixsmryU1saNG+nZs2e+c3feeSczZswgKysLNze3q56TkZFBRkZG3uOUlBSbxykOJjsT4vfAqZ0QtwvOH4eUU5ByEjJK8vfBZCQyAfUhqDEENTLua7QE/zpgMtn6NxARkVJwqOQlLi6OkJCQfOdCQkLIzs7m3LlzhIaGXvWcCRMm8Prrr5dXiOIIsjPg+AY4uBqO/wLxfxi9KYVx9wYX9z/dXCErHdKTICsNsMKlRDiZCCe35X+ub02o0wXq3GTcghopmRER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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import sklearn.linear_model as lm\n", "import matplotlib.pyplot as plt\n", "\n", "# 関数フィッティング\n", "lrp = lm.LinearRegression()\n", "lrp.fit(power_matrix_x, y) # 以上が学習(フィッティングにより係数を決定)\n", "# 予測 (下の実線)\n", "x_lrp = np.linspace(0., np.pi*2.0, 100) # 検証用のxのデータ\n", "y_lrp = lrp.predict(np.vander(x_lrp, m+1)) # using learned machine, predict y for x\n", "\n", "# データの描画\n", "plt.plot(x_tr, y, \"ob\", ms=8)\n", "# 近似曲線の描画\n", "plt.plot(x_lrp, y_lrp)\n", "# 基にしたsin(x)をプロット\n", "plt.plot(x_lrp, np.sin(x_lrp))" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 高次のべき多項式による近似\n", "plt.plot(x, y , 'ok', ms=7) # データの描画\n", "for deg in [3,4, 15]: # 複数の次数で近似\n", " lrp.fit(np.vander(x, deg +1), y)\n", " y_lrp = lrp.predict(np.vander(x_lrp, deg+1))\n", " plt.plot(x_lrp, y_lrp,\n", " label='degree ' + str(deg))\n", " plt.legend(loc=2)\n", " plt.ylim(-1.2, 3.0)\n", " # モデルの係数表示\n", " #print(' '. join(['%.2f' % c for c in lrp.coef_]))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "自然科学では、対象となる系のふるまいの裏にはあるシンプルな原理が存在していると考える。今の場合、その原理に基づけば系は$\\sin x$のようにふるまうと想定されるとする。\n", "\n", "自然科学の場合は、その原理に基づいて$\\sin x$に振幅、位相を未定係数としておいて、その係数をデータから推定することを行う。\n", "\n", "一方、原理がまったくわからない、あるいは、背後にある要素・要因が複雑で本質的に単純な原理で説明できないような対象の場合はどうであろうか。**適用範囲を適切に設定すれば**、べき関数であっても十分近似でき「予測」には有用であるといえる。\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 補足 (過学習について)" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# もっと高次に\n", "plt.plot(x, y , 'ok', ms=7) # データの描画\n", "for deg in [8,n_tr-1]: # 複数の次数で近似\n", " lrp.fit(np.vander(x, deg +1), y)\n", " y_lrp = lrp.predict(np.vander(x_lrp, deg+1))\n", " plt.plot(x_lrp, y_lrp,\n", " label='degree ' + str(deg))\n", " plt.legend()\n", " plt.ylim(-1.2, 1.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "べき関数の次数をデータの数と同じにすれば、原理的には全部のデータ点を通るようにフィッティングできる。が、それでよいか?\n", "\n", "このようなフィッティングを「過学習」と呼ぶ。\n", "\n", "過学習を防ぐために、高次の項を不必要に重視しないよう重みをつけたり次数を削減したりする方法が考えられている。Ridge回帰、Lasso回帰について次回学習する。\n", "\n", "[関数フィッティングその2](function_fitting2.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "最後のフィッティングの係数は、学習器のプロパティ(lrp.coef_)に入っている。\n", "下のように、高次(4~5次以上)の係数の絶対値が大きな値を取っていることに注意しよう。\n", "\n", "次の節での、Ridge回帰等では、大きな係数を抑制するメカニズムを導入することになる。" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 5.48260586e-03, -1.51855220e-01, 1.76568595e+00, -1.12026688e+01,\n", " 4.21742812e+01, -9.57789028e+01, 1.27057293e+02, -8.95749940e+01,\n", " 2.63061958e+01, 0.00000000e+00])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lrp.coef_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 演習課題2 (Exercise 2)\n", "\n", "- データを$\\sin x$にノイズを加えたものから、別のもの($\\sin$以外の関数など)に変えて、フィッティングを試してみなさい。\n", "- データの個数やフィッティング関数のべきを変えて試し、考察しなさい。\n", "\n", "\n", "初めての人は、先週に引き続き、次のようなことをレポートしてもよい。\n", "\n", "- markdown書式の練習\n", " - 数式の書法(LaTeXの数式文法)など\n", "- 上記のプログラム例に即したpythonの基本文法学習(プログラムソースの読み解き)\n", " - pythonの変数、配列(リスト)、numpyの変数(データ構造)、関数定義\n", " - scikit-learnのlinear_modelについて など\n", "- 関数フィッティングについての学習\n", "\n", "など\n", "\n", "あるいは、序論(第1週)で例示した甲府市の平均気温データの関数フィッティングを行ってみる。\n", "(データ: https://toyoki-lab.ee.yamanashi.ac.jp/~toyoki/lectures/PracDataSci/data/temperature_data_kofu.csv )\n", "\n", "**(レポートは最終回にまとめて提出してもらいます。)**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 補足: Mathematical Description to calculate the coefficients of the fitting function\n", "\n", "For a given data set $\\{(x_n, t_n)\\}$, ($n=1,\\cdots , N$), assuming a fitting function\n", "$$\n", "f(x) = \\sum_{n=1}^M w_m \\phi_m (x) = \\boldsymbol{w}^T \\boldsymbol{\\phi}(x),\\ \\ {\\rm where }\\ \\phi_m (x) = x^{m-1},\n", "$$\n", "we calculate the parameter set $(\\{w_n\\})$ that minimizes the evaluation function\n", "$$\n", "E_D = \\frac{1}{2} \\sum_{n=1}^M (w_m \\phi_m(x_n) - t_n)^2.\n", "$$\n", "The condition that $E_D$ takes an extreme value is\n", "$$\n", "\\frac{\\partial E_D}{\\partial w_m} = 0,\\quad (m=1,\\cdots, M),\n", "$$\n", "which can be written as\n", "$$\n", "\\sum_{n=1}^N \\left( \\sum_{m'=1}^M w_{m'}\\phi_{m'}(x_n) - t_n \\right)\\phi_m(x_n) = 0.\n", "$$\n", "By interchanging the summations, we get\n", "$$\n", "\\sum_{m'=1}^M w_{m'}\\left(\\sum_{n=1}^N \\phi_{m'}(x_n)\\phi_m (x_n) \\right) - \\sum_{n=1}^N t_n\\phi_m (x_n) =0\n", "$$\n", "\n", "Introducing an $N\\times M$ matrix, called the design matrix (計画行列)\n", "$$\n", "\\Phi = \\left(\n", "\\begin{array}{cccc}\n", " \\phi_1(x_1) & \\phi_2(x_1) & \\cdots & \\phi_M (x_1) \\\\\n", " \\phi_1(x_2) & \\phi_2(x_2) & \\cdots & \\phi_M (x_2) \\\\\n", " \\vdots & \\vdots & & \\vdots \\\\\n", " \\phi_1(x_N) & \\phi_2(x_N) & \\cdots & \\phi_M (x_N) \n", "\\end{array}\n", "\\right),\n", "$$\n", "we have the vector representation of the above equation\n", "$$\n", "\\sum_{m'=1}^M w_{m'}\\boldsymbol{w}^T (\\boldsymbol{\\Phi}^T\\boldsymbol{\\Phi})_{m' m} - \\sum_{n=1}^N t_n\\phi_m (x_n) =0,\n", "$$\n", "which is simply written as\n", "$$\n", "\\boldsymbol{w}^T (\\boldsymbol{\\Phi}^T\\boldsymbol{\\Phi}) - \\boldsymbol{t}^T\\boldsymbol{\\Phi} =0\n", "$$\n", "Assuming the $M\\times M$ matrix $\\boldsymbol{\\Phi}^T\\boldsymbol{\\Phi}$ has its inverse matrix, we finally get\n", "$$\n", "\\boldsymbol{w} = (\\boldsymbol{\\Phi}^T\\boldsymbol{\\Phi})^{-1}\\boldsymbol{\\Phi}^T \\boldsymbol{t}\n", "$$\n", "\n", "Note that the design matrix is a function of the explanation variable $x$. So we can calculate the least-square solution\n", "$\\boldsymbol{w}$ from a data set $\\{(x_n, t_n)\\}$.\n", "\n", "\n", "We put both the design matrix (2-d numpy array) and the target values (1-d array) as the arguments of the fitting function. \n", "For the polynomial fitting, we can use the **vander** function included in numpy to create the design matrix.\n", "\n", "中身を見ればわかるが、あるデータ値$x$に対して、べき関数フィッティングの場合、$x^M$, $x^{M-1}$, $\\cdots$, $x^1$, $x^0$の値を横に並べ、各データを1行として、$N$個のデータを行として並べたものを与える。(べきの高い方から並ぶ。)\n", "\n", "numpy.vander()はデータリストを与えると、これを一気に作ってくれる。\n", "\n", "numpy.vander(x, m-1) creates the following array from a explanation variable $x$:\n", "$$\n", "\\left(\n", "\\begin{array}{ccccc}\n", " x[0]^{m-1} & x[0]^{m-2} & \\cdots & x[0]^{1} & x[0]^0 \\\\\n", " x[1]^{m-1} & x[1]^{m-2} & \\cdots & x[1]^{1} & x[1]^0 \\\\\n", " \\vdots & \\vdots & \\vdots & \\vdots &\\\\\n", " x[N-1]^{m-1} & x[N-1]^{m-2} & \\cdots & x[N-1]^{1} & x[N-1]^0) \n", "\\end{array}\n", "\\right).\n", "$$\n", "\n", "Ref.: PRML $\\S 3.1.1$. See also 「ITエンジニアのための機械学習理論入門」$\\S 2.1$ (中井悦司、技術評論社)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0. , 0. , 1. ],\n", " [ 0.34026092, 0.48738787, 0.6981317 , 1. ],\n", " [ 2.72208739, 1.94955149, 1.3962634 , 1. ],\n", " [ 9.18704494, 4.38649084, 2.0943951 , 1. ],\n", " [ 21.77669912, 7.79820595, 2.7925268 , 1. ],\n", " [ 42.53261547, 12.18469679, 3.4906585 , 1. ],\n", " [ 73.49635954, 17.54596338, 4.1887902 , 1. ],\n", " [116.70949686, 23.88200571, 4.88692191, 1. ],\n", " [174.21359298, 31.19282379, 5.58505361, 1. ],\n", " [248.05021344, 39.4784176 , 6.28318531, 1. ]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# show again the vander matrix created above\n", "power_matrix_x" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "interpreter": { "hash": "dca0ade3e726a953b501b15e8e990130d2b7799f14cfd9f4271676035ebe5511" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.7" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }