{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\tHiroshi TAKEMOTO\n", "\t(take.pwave@gmail.com)\n", "\t\n", "\t

データフィッティング

\n", "\t

\n", "\t\t与えられたデータに最もよくフィットする関数を求めるのが、「データフィッティング」です。\n", "\t\t今回は、$ sin(2 \\pi x) $曲線に正規分布のノイズを加えたテストデータを3次多項式で\n", "\t\t近似しながら、Sageでのデータフィッティングの方法と手法のもつ問題点について説明します。\n", "\t

\n", "\t\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

テストデータの生成

\n", "\t

\n", "\t\tテストデータは、区間[0, 1]でランダムに抽出したxに対して、以下の式で与えられるyを計算して生成します。\n", "$$ \n", "\t\ty = sin(2 \\pi x) + \\mathcal{N}(0,0.3) \n", "$$\n", "\t

\n", "\t

\n", "\t\t変数X, Yにそれぞれ10個のx座標、y座標のリストをセットします。\n", "\t\tこのままで計算するたびにX, Yの値が異なってしまうので、一度作成した値をsave関数でワークシートに保存し、\n", "\t\tload関数で読み込んでいます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# テストデータ生成\n", "#X = [random() for i in range (10)]\n", "#Y = [sin(2*pi*x) + gauss(0, 0.3) for x in X]\n", "# データの保存\n", "#save(X, 'data/X')\n", "#save(Y, data/Y')\n", "# データのリストア\n", "X = load('data/X')\n", "Y = load('data/Y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

\n", "\t\t生成されたデータをもとの$ sin(2 \\pi x) $曲線と一緒にプロットしてみます。\n", "\t\t後で、少ないデータでのフィッティングに使うため、最初の3点の座標は赤で、\n", "\t\t残りを青でプロットしています。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nIoH+H0hm4XaJsPs7AAAAAElFTkSuQmCC\n", "text/plain": [ "Graphics object consisting of 3 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# データのプロット\n", "x = var('x')\n", "sin_plt = plot(sin(2*pi*x),[x, 0, 1], rgbcolor='green')\n", "blue_plt = list_plot(zip(X[3:], Y[3:]))\n", "red_plt = list_plot(zip(X[:3], Y[:3]), rgbcolor='red')\n", "data_plt = list_plot(zip(X, Y));\n", "(blue_plt + red_plt + sin_plt).show(xmin=0, xmax= 1, ymin=-1.5, ymax=1.5, figsize=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

フィッティング関数

\n", "\t

\n", "\t\tSageが提供している曲線のフィッティング関数がfind_fit関数です。find_fit関数の使い方を以下に示します。\n", "\t\t

\n",
    "find_fit(データ, モデル, オプション)\t\t\t\n",
    "\t\t
\t\t\n", "\t\tデータには、モデルで使用する変数の値(ここではx)リストと観測地(ここではy)の組(タプルまたはリスト)の\n", "\t\tリストを渡し、モデルには変数を与えると予測値を計算するモデルの関数を渡します。\n", "\t

\n", "\t

\n", "\t\t今回の例では、modelとして、以下の3次多項式を使用します。\n", "$$\n", "\t\tmodel(x) = w_0 + w_1 x + w_2 x^2 + w_3 x^3\n", "$$\t\t\n", "\t

\n", "\t

\n", "\t\tfind_fitで求められた$w_0, w_1, w_2, w_3$を使って関数f_fitを定義するには、\n", "\t\t辞書型で結果をもらうと便利です。solution_dict=Trueオプションを指定すると計算結果が\n", "\t\t辞書型で返されます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "{w0: -0.08791180900984033,\n", " w1: 14.092259606071723,\n", " w2: -40.87357306897882,\n", " w3: 27.67067970115225}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(w0, w1, w2, w3) = var('w0 w1 w2 w3')\n", "model(x) = w0 + w1*x + w2*x^2 + w3*x^3\n", "data = zip(X, Y)\n", "fit = find_fit(data, model, solution_dict=True)\n", "show(fit)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

フィッティング曲線のプロット

\n", "\t

\n", "\t\tモデルmodelにfind_fitの結果fitを代入して、フィッティング曲線の関数f_fitを定義します。\n", "\t

\n", "\t

\n", "\t\t赤で表された曲線がデータとうまく合っていることが見て取れます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nKt4AAAAASUVORK5CYII=\n", "text/plain": [ "Graphics object consisting of 4 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f_fit(x) = model.subs(fit)\n", "fit_plt = plot(f_fit, [x, 0, 1], rgbcolor='red')\n", "(blue_plt + red_plt + sin_plt + fit_plt).show(xmin=0, xmax= 1, ymin=-1.5, ymax=1.5, figsize=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

データ数が足りない場合

\n", "\t

\n", "\t\tモデルmodelでは、4個の未知数$w_0, w_1, w_2, w_3$を求めていますが、\n", "\t\tデータの個数が4個よりも少ない場合には、どのようになるのか試してみましょう。\n", "\t

\n", "\t

\n", "\t\t10個のデータのうち最初の3個(赤でプロットされた点)を使ってfind_fitを実行すると、\n", "\t\t以下のようにエラーとなってしまいます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 2)", "output_type": "error", "traceback": [ "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m2\u001b[0m\n\u001b[1;33m data = zip(X[:Integer(3)], Y[:Integer(3)]; print len(data)\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "# データ数が足りない場合には、エラーとなる\n", "data = zip(X[:3], Y[:3]; print len(data)\n", "fit = find_fit(data, model, solution_dict=True); print fit\n", "f_fit(x) = model.subs(fit)\n", "fit_plt = plot(f_fit, [x, 0, 1])\n", "(blue_plt + red_plt + sin_plt + fit_plt).show(figsize=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

最小二乗法

\n", "\t

\n", "\t\t多項式によるフィッティング関数yを以下のように定義し、\n", "$$\n", "\t\ty(x, w) = \\sum^{M}_{j=0} w_j x^j\n", "$$\t\t\n", "\t\t各項の$x^n$を以下のように表すと、\n", "$$\n", "\t\t\\phi_j(x) = x^j\n", "$$\n", "\t\t観測値YとXの関係を行列で表すと以下の式でもっと誤差の少ない重みwを求めることが最小二乗法の目的です。\n", "$$\n", "\t\tY \\approx \\Phi w\n", "$$\t\t\n", "\t\tここで、$\\Phi$の各要素は、以下の式で表されます。\n", "$$\n", "\t\t\\Phi_{nj} = \\phi_j(x_n)\n", "$$\t\t\n", "\t

\n", "\t

\n", "\t\tこれなら分かる最適化数学によると、\n", "\t\tムーア・ベンローズの一般逆行列$\\Phi^{\\dagger}$を使うと、重みwは次のように表すことができます。\n", "$$\n", "\t\tw = \\Phi^{\\dagger} Y\n", "$$\t\t\n", "\t\t$\\Phi^{\\dagger}$は、データの個数n、未知数wの個数mとすると以下のようになります。\n", "$$\n", "\t\t\\Phi^{\\dagger} = \\left\\{\\begin{eqnarray}\n", "\t\t\t( \\Phi^T \\Phi )^{-1} \\Phi^T & m > n \\\\\n", "\t\t\t\\Phi^T (\\Phi \\Phi^T)^{-1} & m < n\n", "\t\t\\end{eqnarray}\\right.\n", "$$\t\t\n", "\t

\n", "\t

\n", "\t\tムーア・ベンローズの一般逆行列$\\Phi^{\\dagger}$を求めることで、データ数が足りない場合でも\n", "\t\tフィッティング関数を求めることができます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 次数のセット\n", "M = 3\n", "# Φ関数定義\n", "def _phi(x, j):\n", " return x^j" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

ムーア・ベンローズの一般逆行列

\n", "\t

\n", "\t\t最初にデータ数が10個の場合(n > m)の場合の、ムーア・ベンローズの一般逆行列$\\Phi^{\\dagger}$をSageを使って求めてみましょう。\n", "\t

\t\n", "\t

\n", "\t\t$\\Phi^{\\dagger}$をほとんど定義と同じような形でSageで書き表すことができることに注目してください。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 計画行列Φ\n", "Phi = matrix([[ _phi(x,j) for j in range(0, (M+1))] for x in X]);\n", "Phi_t = Phi.transpose()\n", "# ムーア・ベンローズの一般逆行列\n", "Phi_dag = (Phi_t * Phi).inverse() * Phi_t;\n", "# 平均の重み\n", "Wml = Phi_dag * vector(Y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

多項式yの定義

\n", "\t

\n", "\t\t次に、求まった重みWmlを使って多項式y(x)を以下のように定義します。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# 出力関数yの定義\n", "y = lambda x : sum(Wml[i]*x^i for i in (0..M));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

多項式線形回帰の結果

\n", "\t

\n", "\t\tデータ数N=10, 未知数M=4の時の、多項式回帰の結果(赤)をサンプリング(青)とオリジナルの$sin(2 \\pi x)$を合わせて\n", "\t\tプロットします。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nNu3x88emNZ43T9NA04KCTGpm6v0MDg7W0qVLpz169Mi0+JIRU+/pTz/9pOXPn/+1z02ePFnLkSOH\nRePU3Zo16nvw9GmLdH889LjmMMJB++nAT//5msFg0CUR28fU9IMHUK2ataOwGy9fvuTEiRPUrFnz\n1ecMBgO1atXi0KFDRvWh/VVkJX369JYK026Yez/nzZvH9evXGTbMhLOArcBgMDC53mSeRD/hm13f\nmNa4bVtVQKFLFzByStOc+7lhwwbKlCnDmDFjyJ49Ox9++CEBAQFER0ebFm8SZc49rVChArdv3yb4\nr61od+/eZdWqVTRo0CBRYtbNtGlQoQIUL65713HxcXTd2JWPMn1EHy/LnUJmH4k4d251rBXg5+eH\nr69v8jlX0wz3798nLi6OzJkzv/b5zJkzExYWZlQfY8eOJTIykubNm1siRLtizv28fPkygwYNYvHi\nxTg42P6PWU6PnIyqMYrAY4EcDT1qfEODQdX2jY5WtaiNYM79vHbtGvv27ePcuXOsW7eOiRMnsmrV\nKnr27Gl8rEmYOffU29ubRYsW0aJFC1xcXMiaNStp06ZlypQpiRGyPi5fVuuHunWzSPeBxwI5+edJ\nZjScYfwWPzPY/m+If1m2bBlBQUH428k5k/ZoyZIljBw5kpUrV5IhQwZrh2N34uPj+fzzzxkxYgT5\n8uUDMG0hlJX0KteLUllL0WVDF17GvTS+YbZs6uzixYth3TqLxBYfH4+DgwNLliyhTJky1K1bl59/\n/pn58+fz4sULi1wzqTt//jx9+vRh+PDhnDx5kq1bt3L9+nW6dn1/yUabMXMmpE8PFhgwhEaE8s2u\nb+hWphvls5fXvf9/srtELN4vQ4YMODo6cvfu3dc+f/fuXbJkyfLOtsuWLaNLly6sXLmS6tWrWzJM\nu2Hq/Xz69CnHjx+nV69eODs74+zszMiRIwkJCcHFxYU9e/YkUuSmcXJwYmbDmZwJP8PEIxNNa9yq\nlVqx2q2bepT0DuZ8f2bNmhVPT09Sp0796nOFCxdG0zT++OMP02JNgsy5pz/88AOVKlWif//+FCtW\njNq1azN16lTmzp37n35sUnS0Wi3dvr06bUlnfbb0wc3Fje9qfqd73/8miTgJcnZ2pnTp0uzcufPV\n5zRNY+fOnXh7e7+13dKlS+nYsSPLli2jbt26iRGqXTD1frq7u3P27FlCQkI4ffo0p0+fplu3bhQq\nVIjTp09Tvrxl310nROlspeldrjfD9gzjxuMbxjc0GGDGDIiJgfdMF5vz/VmxYkXu3LlDVFTUq8/9\n/vvvODg4kN1CBRzsiTn3NCoq6j+PTRwcHDAYDHYxg8PKlepNnwVG8JsubWL1hdWMrzOetCkToXpc\ngpd7JZInT57IqmkTLF++XEuVKtVrWxnSp0+vhYeHa5qmaV9//bXW5h/bThYvXqw5Oztr06ZN08LC\nwl59yP1WTL2f/2bLq6b/LSI6Qsv+c3at/uL6Wnx8vGmNly5VK1iXLHnny0y9n8+ePdNy5sypNW/e\nXDt//ry2d+9erWDBglrXrl1N/vslVabe019++UVzcXHRpk2bpl27dk3bv3+/VrZsWa1ChQrW+iuY\nxttb02rV0r3bZy+eabnG59J8Fvq88fv/2bNnWkhIiHbq1CnNYDBo48eP10JCQrRbt26ZfU1JxElY\nYGCglitXLi1lypSal5eXduzYsVdfa9eunVa9evVXf65WrZrm4ODwn4/27dtbI3SbZMr9/Dd7SsSa\npmnrL67XGI62/Oxy0xv7+2ta2rSa9p5fTKbez99//13z8fHR3NzctJw5c2oBAQFadHS06fElYabe\n0ylTpmjFihXT3NzcNE9PT61NmzbanTt3Ejts050+rd7wrTZx77sRArYFaClHpdSuPLjyxq/v2bNH\nMxgMuv6utL9DH95zwLIQQh+fLv+UQ38c4kLPC6ZNzz16pI5LLFQItm0DO1g1LuxM9+4QFAQ3boCz\ns27dnvrzFGVnlWVUjVF8Xelr3fp9H/kJEUK80eR6k4mMiWTgjoGmNUyXTtWh3rkTJptwoIQQxnj8\nGBYuVOVVdUzCsfGxdN7QmSIZizCgwgDd+jWGJGIhxBt5unsyusZopp+YzqHbxhWCeaVWLejTB776\nShXkF0Ivc+bAy5e67x2efGQyJ/88yaxGs3B21C/BG0OmpoUQbxUXH0eFORV4Hvuck11OmvYL6vlz\nKF1abS05fBhcXCwXqEgeYmMhf35VaVHHAz9uPL5B0alF6VSqExPrmbh1TwcyIhZCvJWjgyMzG83k\nwr0LjDs0zrTGqVLBokVw5gyMGGGZAEXysn493LypZlt0omka3Td1J32q9IyqMUq3fk1hd4lYSlwK\nkbhKZilJP69+jNg7gmuPrpnW+OOPVRL+4Qc4cMAyAYrkY8IEqFIFSpXSrcvl55az5coWptafqvs5\n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\n+rs/MwAAAABJRU5ErkJggg==\n", "text/plain": [ "Graphics object consisting of 3 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y_plt = plot(y, [x, 0, 1], rgbcolor='red'); \n", "(y_plt + data_plt + sin_plt).show(xmin=0, xmax= 1, ymin=-1.5, ymax=1.5, figsize=5);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

データが少ない場合のムーア・ベンローズの一般逆行列

\n", "\t

\n", "\t\tそれでは、データ数N=3, 未知数M=4の時のムーア・ベンローズの一般逆行列$\\Phi^{\\dagger}$を計算し、\n", "\t\tその結果をプロットしてみましょう。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-0.06857088961206159 0.006065469790858202 1.0625015100048785]\n", "[ 5.046343862995325 -0.4593509019515363 -4.586688424516294]\n", "[ -3.04991054592013 1.20292351698009 1.8455653392778717]\n", "[ -4.3825896262470625 1.3805704197907072 3.0033593023655545]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 計画行列Φ\n", "Phi = matrix([[ _phi(x,j) for j in range(0, (M+1))] for x in X[:3]])\n", "Phi_t = Phi.transpose()\n", "# ムーア・ベンローズの一般逆行列\n", "PhiPhit = Phi*Phi_t\n", "Phi_dag = Phi_t*PhiPhit.inverse()\n", "show(Phi_dag)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(0.100463412348611, 7.01017348792055, -5.25466361108249, -7.16736911572035)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 平均の重み\n", "Wml = Phi_dag * vector(Y[:3]); Wml.apply_map(lambda x : n(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

\n", "\t\t与えられた3点を通る3次曲線が求まっていることがわかりますが、3点の範囲以外では元のsin曲線からはかけ離れた形になっています。\n", "\t

\n", "

\n", " このように近似関数を使用する場合には、その適用範囲にも注意が必要です。\n", "

\n", "" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\ndS+zcempqam4XC6qVSv5Pq/e4MyZMzRo0ID69eszaNAgtmzZctH7+vnBxIm2y3D0aLt1oq7gO2vv\n3r0kJyfTq1evwq+Fh4fTqVMnli9ffsnHFue1d4c9e+D++23L98EHoVMnWLECvv/eLplYqfw3OaqQ\ncnNzWbt27Xmvucvlonfv3pd8zY0xtGnThtq1a9OnTx++//778ii3UPPmsGoV9Ohh5xu/9Va5nt5n\nueN1L5Mgzs7O5uGHH2bEiBGEhhZtWL43atasGe+88w6zZ8/mo48+oqCggK5du3L48OGLPsbPD158\n0a43+9hjdr/SgoJyLFrOk5ycbC8RRJ9/eSA6Oprk5OSLPq4kr31JGGO30hs0COLi4IMP4L77YN8+\nuxVhp05uPZ1POH78OPn5+cV6zWvVqsV///tfpk2bxvTp06lXrx7XXnstGzZsKI+SC4WFwaxZdszJ\nb38Lf/2r3j/Kktte95I0oz/66CMTGhpqQkNDTVhYmPnuu+8Kv5ebm2sGDBhg2rdvb06fPl2q5rpT\nLvX8StMFm5uba+Li4szjjz9epPtPmGC7qUeONCb71zsvlruy+rl4kl8+x8WLFxs/Pz+TnJx83v2G\nDx9uEhISinzc4r72l5OVZcw77xhz1VW2+7lVK2PefNOYzEy3HL5IvLVr+vDhw8blcpkVK1ac9/U/\n//nPpnPnzkU+Ts+ePc3IkSPdXV6RFBQY88IL9v0jIcH97x/qmr64krzuJRqsNXDgQDp37lz47zp1\n6gB29PSwYcNISkpi4cKFFbY1fLHnV1oBAQG0bduWXbt2Fen+o0dDRISdq5+UBJ995uwgm7L6uXiS\nXz7Hs2fPYowhJSXlvBZSSkoKbdu2LfJxi/vaX0xysl3i8PXX4dgxuPFG+Ne/7M5eWnfFPaKiovD3\n9yclJeW8r6ekpBATE1Pk43Ts2JFly5a5u7wicblsb1qDBjBiBKSmwrRpULmyI+X4lJK87iXqmq5S\npQqNGjUqvAUFBRWG8J49e1iwYAERERElObRHuNDz+7mSrn5UUFDAjz/+WKwpXYmJMH8+bNwIXbrA\nzp2Xf0xZKaufiyf55XNs2bIlMTExLFiwoPA+6enprFy5kq5duxb5uCV57X9u3Tr7gax+fXjhBXvN\nd/t2+OIL6N3b2RBOSEggPj6eKVOmOFeEG1WqVIl27dqd95obY1iwYEGxXvMNGzY4Pn3z5pvtyPml\n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\noxaxiIhUOE2awKBB8MILUFDgdDWloyAWEZEK6cEHYds2+PJLpyspHXVNi0iJqGtaPEHXrhAYCN9+\n63QlJacWsYiIVFh/+hMsXmy3SayoFMQiIlJhDRwI9evbEdQVlYJYREQqrIAAuPdemDwZjh51upqS\nURCLiEiFdvfddh3qN990upKSURCLiEiFFhkJt94Kr70GublOV1N8CmIREanw7rsPDh+GGTOcrqT4\nNH1JREpE05fE01x3nW0Rf/ed05UUj1rEIiLiFcaMgWXLYO1apyspHgWxiJSKNn0QTzFgAMTGVryp\nTOqaFpESUde0eKLnn4dHH4WkJKhZ0+lqikYtYhER8Rp33VXxpjIpiEVExGtERsKIEXZ7xPx8p6sp\nGgWxiIh4lXvugQMHYO5cpyspGgWxiIh4lfbtoV07eOMNpyspGgWxiIh4nXvugTlzYP9+pyu5PAWx\niIh4nYQECAuDt95yupLLUxCLiIjXCQ2F226zQezp608riEVExCv97neQnAyzZztdyaUpiEVExCtd\neSV06+b5g7YUxCIi4rXuuQfmz4edO52u5OIUxCIi4rWGDrWLfEyc6HQlF6cgFhERrxUcDKNGwbvv\nwtmzTldzYQpiESkV7b4knu7//g9OnIBZs5yu5MK0+5KIlIh2X5KKpEcPCAmBr792upJfU4tYRES8\n3l132UFbnrjSloJYRES83tChUKUKvPee05X8moJYRES8XmioXfby3XehoMDpas6nIBYREZ9w5522\na3rBAqcrOZ+CWEREfELnztCiBbz9ttOVnE9BLCIiPsHlsoO2ZsyAkyedruYnCmIRL5aXl8df/vIX\nWrduTWhoKHXq1OH222/nyJEj590vOzube++9l6ioKMLCwhg6dChHjx51qGqRsnPbbfYa8UcfOV3J\nTxTEIl4sMzOTDRs28MQTT7B+/XpmzJjB9u3bGThw4Hn3Gzt2LHPmzGHatGksWbKEw4cPM2TIEIeq\nFik7NWvCgAG2e9pTVtHQgh4iPmbNmjV06tSJ/fv3U7duXdLT06lRowZTp05l8ODBAGzfvp0WLVqw\nYsUKOnbseMHjaEEPqajmzIGbboI1a6BdO6erUYtYxOekpqbicrmoVq0aAGvXriUvL49evXoV3qdZ\ns2bUr1+f5cuXO1WmSJnp2xdq14Z33nG6EktBLOJDsrOzefjhhxkxYgShoaEAJCcnExgY+KtWbXR0\nNMnJyU6UKVKmAgLg1lth6lTIyXG6GgWxiFeZPHkyYWFhhIWFER4ezrJlywq/l5eXx7Bhw3C5XLz2\n2msOVinivNtusyOnv/zS6UogwOkCRMR9Bg4cSOfOnQv/XadOHeCnEE5KSmLhwoWFrWGAmJgYcnJy\nSE9PP69VnJKSQkxMzGXPmZCQQEDA+W8liYmJJCYmlvbpiJSZK66Atm3h/fdh0CBna9FgLREvdy6E\n9+zZw6JFi4iMjDzv+xqsJb7qpZfgz3+GI0egenXn6lAQi3ixvLw8hgwZwoYNG/jiiy+oWbNm4fci\nIyOpVKkSAKNHj+arr77i3XffJSwsjDFjxuDn58fSpUsvemwFsVR0KSlQpw688gr8/vfO1aEgFvFi\n+/fvp1GjRud9zRiDy+Vi0aJFXHPNNYAdxPXggw8yZcoUsrOz6devHxMmTDgvuH9JQSze4Kab4MQJ\ncHKCgIJYREpEQSze4JNP4JZbYPt2aNrUmRo0alpERHzWgAEQHg4ffOBcDQpiERHxWSEhMHw4fPih\nc/sUK4hFRMSnjRwJ+/bBd985c34FsYiI+LRu3aBhQzun2AkKYhER8Wl+fnalrU8+gawsB85f/qcU\nERHxLLfeCqdP252ZypuCWEREfF6TJnZLxMmTy//cCmIREREgMdFuApGWVr7nVRCLSKkkJCQQHx/P\nlClTnC5FpFRuucVuizhjRvmeVytriUiJaGUt8UY9e0JwMMybV37nVItYRETkf0aMgAUL7IYQ5UVB\nLCIi8j9Dh4LLBZ9+Wn7nVBCLiIj8T/Xq0KcPlOeQBwWxiIjIzyQmwvffw/795XM+BbGIiMjPDBxo\nB2xNnVo+51MQi4iI/ExYmN0esby6pxXEIiIivzBiBGzcCFu2lP25FMQiIiK/0L8/VK1aPq1iBbGI\niMgvBAXB4MF2R6ayXvZKQSwiInIBw4bBjh3w449lex4FsYiIyAX07g3VqpX94h4KYhERkQsIDLRT\nmT79tGy7pxXEIlIq2n1JvNmwYbB9O2zaVHbn0O5LIlIi2n1JfEFODtSsCWPGwN//XjbnUItYRETk\nIsqje1pBLCIicgnDhsG2bbB5c9kcX0EsIiJyCTfcYBf3KKvR0wpiERGRSwgK+ql7uiwoiEVERC5j\n2DDYurVsuqcVxCIiIpdxww0QHl42rWIFsYiIyGWUZfe0glhERKQIhg2z2yJu2+be4yqIRUREiqBP\nH1i/Hpo1c+9xA9x7OBEREe8UFARt2rj/uGoRi4iIOEhBLCIi4iAFsYiUinZfEikd7b4kIiWi3ZdE\n3JeO35EAAABWSURBVEMtYhEREQepRSwiJWKM4fTp04SFheFyuZwuR6TCUhCLiIg4SF3TIiIiDlIQ\ni4iIOEhBLCIi4iAFsYiIiIMUxCIiIg5SEIuIiDhIQSwiIuKg/w/rv3xR95qOWQAAAABJRU5ErkJg\ngg==\n", "text/plain": [ "Graphics object consisting of 3 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = var('x')\n", "y_plt = plot(y, [x, -2, 1.5], rgbcolor='blue')\n", "sin_plt = plot(sin(2*pi*x),[x, -2, 1.5], rgbcolor='green')\n", "(y_plt + red_plt + sin_plt).show(figsize=5)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 非線形回帰の例(ロジスティック関数)\n", "X = range(1,20)\n", "Y = [0.003,0.016,0.054,0.139,0.263, 0.423,0.611,0.758,0.859,\n", " 0.903,0.937,0.954, 0.978,0.978,0.982,0.985,0.989,0.988,0.992]\n", "data = zip(X, Y)\n", "data_plt = list_plot(data)\n", "data_plt.show(figsize=5);" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "(x, a, b, c) = var('x a b c')\n", "model(x) = a/(1 + b*e^(c*x))\n", "fit = find_fit(data, model, solution_dict=True); view(fit)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 2 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f_fit(x) = model.subs(fit)\n", "fit_plt = plot(f_fit, [x, 0, 20], rgbcolor='red')\n", "(data_plt + fit_plt).show(figsize=5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 7.2", "language": "", "name": "sagemath" }, "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 }