Last active
March 2, 2019 13:01
-
-
Save shotahorii/c6033a4cc8de5b799b23d0bd386b1370 to your computer and use it in GitHub Desktop.
Bias Variance
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Overfitting and Bias-Variance Tradeoff\n", | |
| "- https://mathtrain.jp/exvarcov\n", | |
| "- http://blog.neko-ni-naritai.com/entry/2017/12/03/003002\n", | |
| "- https://www.hellocybernetics.tech/entry/2017/01/24/100415\n", | |
| "- https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff\n", | |
| "- はじめてのパターン認識(平井有三) p16-p18\n", | |
| "\n", | |
| "\n", | |
| "この記事では、**バイアス-分散 トレードオフ**とは何か、について見ていく。が、その前に、[ここ](https://gist.github.com/shotahorii/037dc487ab3c70cc45af27fc9d03c9fb#file-leastsquares-ipynb)で実装した最小二乗法を使って、モデルを単純なものから複雑なものに変えていった時にどのような現象が起こるかをみてみる。 \n", | |
| "3つの異なるガウスノイズ成分が乗った三角関数(sin関数)を1~10次多項式で近似した際の結果を以下に比較する。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import math\n", | |
| "import numpy as np\n", | |
| "from functools import reduce\n", | |
| "\n", | |
| "from matplotlib import pyplot as plt\n", | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 62, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# generate random dataset\n", | |
| "x = np.linspace(0, 1, 11)\n", | |
| "y1 = 0.5 + 0.4*np.sin(2*np.pi*x) + np.random.normal(0.0, 0.1, len(x))\n", | |
| "y2 = 0.5 + 0.4*np.sin(2*np.pi*x) + np.random.normal(0.0, 0.1, len(x))\n", | |
| "y3 = 0.5 + 0.4*np.sin(2*np.pi*x) + np.random.normal(0.0, 0.1, len(x))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# create matrix of X \n", | |
| "# for example, if fitting with 3 degrees, return [[1, x, x**2, x**3],[1, x, x**2, x**3],...]\n", | |
| "def create_matrix(x,d):\n", | |
| " \"\"\"\n", | |
| " x: predictor variable data(array)\n", | |
| " d: dimension (int>0) including intercept\n", | |
| " \"\"\"\n", | |
| " X = np.zeros((len(x), d), float) # make a matrix size of (data size - dimension)\n", | |
| " for i in range(d):\n", | |
| " X[:,i] = x**i\n", | |
| " return X\n", | |
| "\n", | |
| "def fitting(x,y,d):\n", | |
| " d = d+1 # +1 means adding intercept\n", | |
| " X = create_matrix(x,d) \n", | |
| " \n", | |
| " #beta = np.dot(np.dot(np.linalg.inv(np.dot(X.T,X)),X.T),y) # raw implementation\n", | |
| " (beta, residuals, rank, s) = np.linalg.lstsq(X, y) # numpy function for least square \n", | |
| " #return reduce(lambda a,b:a+b, [beta[i]*X[:,i] for i in range(d)])\n", | |
| " \n", | |
| " return lambda x: reduce(lambda a,b:a+b, [beta[i]*(x**i) for i in range(d)])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 69, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\nAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x10b01a780>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# visualise\n", | |
| "fig, ax = plt.subplots(2,2,figsize=(10,7))\n", | |
| "\n", | |
| "axes = [ax[0,0],ax[0,1],ax[1,0],ax[1,1]]\n", | |
| "dim = [1,3,6,10]\n", | |
| "\n", | |
| "model_x = np.linspace(0,1,100)\n", | |
| "\n", | |
| "for i in range(4):\n", | |
| " model1 = fitting(x,y1,dim[i])\n", | |
| " model2 = fitting(x,y2,dim[i])\n", | |
| " model3 = fitting(x,y3,dim[i])\n", | |
| " \n", | |
| " model1_y = list(map(model1,model_x))\n", | |
| " model2_y = list(map(model2,model_x))\n", | |
| " model3_y = list(map(model3,model_x))\n", | |
| " \n", | |
| " axes[i].scatter(x, y1 ,color='b', marker='.')\n", | |
| " axes[i].scatter(x, y2 ,color='g', marker='+')\n", | |
| " axes[i].scatter(x, y3 ,color='r', marker='s')\n", | |
| " \n", | |
| " axes[i].plot(model_x, model1_y, 'b-')\n", | |
| " axes[i].plot(model_x, model2_y, 'g--')\n", | |
| " axes[i].plot(model_x, model3_y, 'r:')\n", | |
| " \n", | |
| " \n", | |
| " axes[i].set_title('polynomial of '+str(dim[i])+' degree')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "上の4つの図は、異なるノイズ成分が乗った三つの学習データセットに対する三つの多項式近似曲線である。 \n", | |
| "- 一次関数で近似した場合は、近似式がデータから大きく外れている(=**バイアスが大きい**)一方で、近似した三本の直線はほぼ同じで、ノイズの違いによるモデル間のばらつきは小さい(=**分散が小さい**)。 \n", | |
| "- 3次の多項式の場合はノイズに惑わされずに信号成分をよく近似していて、バイアスが小さく、分散も小さい。\n", | |
| "- 10次の多項式では、近似式がデータと近い(=**バイアスが小さい**)一方で、近似した三本の曲線はノイズを追従しているため大きく異なっており、モデル間のばらつきが大きい(=**分散が大きい**)。\n", | |
| "\n", | |
| "関数が複雑になるほど学習データに対する近似能力は上がるが、重要な信号成分よりもノイズ成分を近似してしまう。そのため、学習データに対するバイアスは小さくなるが、分散は大きくなる。このように、バイアスを小さくすれば分散が大きくなり、逆に分散を小さくすればバイアスが大きくなる現象をバイアス・分散トレードオフといい、汎化能力を決める大きな要因となる。(はじパタp17)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/latex": [ | |
| "ここで、このバイアス分散トレードオフの意味を式から考えてみる。<br>\n", | |
| "いま、手元に観測された応答変数yと説明変数Xがあるとする。真のモデルは以下であるとする。(εは平均0、分散$$\\sigma^2$$の確率変数)\n", | |
| "<br><br>\n", | |
| "$$y=f_{true}(x)+\\epsilon$$<br><br>\n", | |
| "ここで、この観測データから、近似モデルf(x)を構築したとする。そこで、そのモデルの良さをMSE(平均二乗誤差)を使って見てみる。<br><br>\n", | |
| "\n", | |
| "$$MSE = E[(y-f(x))^2]$$<br>\n", | |
| "$$=E[(f_{true}(x)+\\epsilon-f(x))^2]$$<br>\n", | |
| "$$=E[(f_{true}(x)+\\epsilon-f(x)+E[f(x)]-E[f(x)])^2]$$<br>\n", | |
| "ここで、$$(f_{true}(x)-E[f(x)])$$と、$$(E[f(x)]-f(x))$$をそれぞれ一括りにして考えると<br>\n", | |
| "$$(X+Y+Z)^2 = X^2+Y^2+Z^2+2XY+2XZ+2YZ$$より\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2+(E[f(x)]-f(x))^2+\\epsilon^2\n", | |
| "+2(f_{true}(x)-E[f(x)])(E[f(x)]-f(x))+2(f_{true}(x)-E[f(x)])\\epsilon+2(E[f(x)]-f(x))\\epsilon]$$<br>\n", | |
| "ここで、$$E[X+Y]=E[X]+E[Y]$$と$$E[aX]=aE[X]$$より\n", | |
| "<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + E[(E[f(x)]-f(x))^2] + E[\\epsilon^2] + 2E[(f_{true}(x)-E[f(x)])(E[f(x)]-f(x))] \n", | |
| "+2E[(f_{true}(x)-E[f(x)])\\epsilon] + 2E[(E[f(x)]-f(x))\\epsilon]$$<br>\n", | |
| "また、$$E[XY]=E[X]E[Y]$$(XとYが独立であることが前提)より<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + E[(E[f(x)]-f(x))^2] + E[\\epsilon^2] + 2E[E[f(x)]-f(x)]E[f_{true}(x)-E[f(x)]]\n", | |
| "+2E[\\epsilon]E[f_{true}(x)-E[f(x)]]+2E[\\epsilon]E[E[f(x)]-f(x)]$$<br>\n", | |
| "ここで、$$E[E[f(x)]-f(x)]=0$$, $$E[\\epsilon]=0$$より<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + E[(E[f(x)]-f(x))^2] + E[\\epsilon^2]$$" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.Latex object>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "%%latex\n", | |
| "ここで、このバイアス分散トレードオフの意味を式から考えてみる。<br>\n", | |
| "いま、手元に観測された応答変数yと説明変数Xがあるとする。真のモデルは以下であるとする。(εは平均0、分散$$\\sigma^2$$の確率変数)\n", | |
| "<br><br>\n", | |
| "$$y=f_{true}(x)+\\epsilon$$<br><br>\n", | |
| "ここで、この観測データから、近似モデルf(x)を構築したとする。そこで、そのモデルの良さをMSE(平均二乗誤差)を使って見てみる。<br><br>\n", | |
| "\n", | |
| "$$MSE = E[(y-f(x))^2]$$<br>\n", | |
| "$$=E[(f_{true}(x)+\\epsilon-f(x))^2]$$<br>\n", | |
| "$$=E[(f_{true}(x)+\\epsilon-f(x)+E[f(x)]-E[f(x)])^2]$$<br>\n", | |
| "ここで、$$(f_{true}(x)-E[f(x)])$$と、$$(E[f(x)]-f(x))$$をそれぞれ一括りにして考えると<br>\n", | |
| "$$(X+Y+Z)^2 = X^2+Y^2+Z^2+2XY+2XZ+2YZ$$より\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2+(E[f(x)]-f(x))^2+\\epsilon^2\n", | |
| "+2(f_{true}(x)-E[f(x)])(E[f(x)]-f(x))+2(f_{true}(x)-E[f(x)])\\epsilon+2(E[f(x)]-f(x))\\epsilon]$$<br>\n", | |
| "ここで、$$E[X+Y]=E[X]+E[Y]$$と$$E[aX]=aE[X]$$より\n", | |
| "<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + E[(E[f(x)]-f(x))^2] + E[\\epsilon^2] + 2E[(f_{true}(x)-E[f(x)])(E[f(x)]-f(x))] \n", | |
| "+2E[(f_{true}(x)-E[f(x)])\\epsilon] + 2E[(E[f(x)]-f(x))\\epsilon]$$<br>\n", | |
| "また、$$E[XY]=E[X]E[Y]$$(XとYが独立であることが前提)より<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + E[(E[f(x)]-f(x))^2] + E[\\epsilon^2] + 2E[E[f(x)]-f(x)]E[f_{true}(x)-E[f(x)]]\n", | |
| "+2E[\\epsilon]E[f_{true}(x)-E[f(x)]]+2E[\\epsilon]E[E[f(x)]-f(x)]$$<br>\n", | |
| "ここで、$$E[E[f(x)]-f(x)]=0$$, $$E[\\epsilon]=0$$より<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + E[(E[f(x)]-f(x))^2] + E[\\epsilon^2]$$" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 25, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/latex": [ | |
| "ここで、前提条件より$$V[\\epsilon]=\\sigma^2$$である。\n", | |
| "$$V[X]=E[X^2]-E[X]^2$$より、$$E[X^2]=V[X]+E[X]^2$$であるので上記式の第三項\n", | |
| "$$E[\\epsilon^2]$$は以下のように変換できる。<br>\n", | |
| "$$E[\\epsilon^2] = V[\\epsilon]+E[\\epsilon]^2$$<br>\n", | |
| "前提条件より$$E[\\epsilon]=0$$であるので<br>\n", | |
| "$$E[\\epsilon^2] = V[\\epsilon]+E[\\epsilon]^2 = \\sigma^2$$\n", | |
| "<br><br>\n", | |
| "ここで前の式に戻り、第三項を$$\\sigma^2$$と置き換えると<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + E[(E[f(x)]-f(x))^2] + \\sigma^2$$\n", | |
| "<br><br>\n", | |
| "ここで$$V[X]=E[(X-\\mu_X)^2]$$より、上式第二項は以下のように書き換えられる。<br>\n", | |
| "$$E[(E[f(x)]-f(x))^2] = V[f(x)]$$\n", | |
| "<br><br>\n", | |
| "つまり以下となる。<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + V[f(x)] + \\sigma^2$$\n", | |
| "<br><br>\n", | |
| "最後に、上式の第一項について。<br>\n", | |
| "まず、$$f_{true}$$はdeterministicな関数なので、$$E[f_{true}]=f_{true}$$である。<br>\n", | |
| "よって、第一項を以下のように変換する。<br>\n", | |
| "$$E[(f_{true}(x)-E[f(x)])^2] = E[f_{true}(x)^2 + E[f(x)]^2 - 2f_{true}(x)E[f(x)]]$$<br>\n", | |
| "$$=E[f_{true}(x)^2] + E[E[f(x)]^2] - 2E[f_{true}(x)E[f(x)]]$$<br>\n", | |
| "$$=f_{true}(x)^2 + E[f(x)]^2 - 2f_{true}(x)E[f(x)]$$\n", | |
| "$$=(f_{true}(x) - E[f(x)])^2$$\n", | |
| "<br><br>\n", | |
| "つまり、式は以下のようになる。<br>\n", | |
| "$$=(f_{true}(x)-E[f(x)])^2 + V[f(x)] + \\sigma^2$$\n", | |
| "<br><br>\n", | |
| "ここで、バイアスは近似式と真のモデルとのずれであるので、以下のように表される。<br>\n", | |
| "$$Bias[f(x)]=E[f(x)]-f_{true}(x)$$<br>\n", | |
| "これを上式に当てはめることで、式は最終的に以下となる。<br><br>\n", | |
| "$$MSE = Bias[f(x)]^2 + V[f(x)] + \\sigma^2$$" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.Latex object>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "%%latex\n", | |
| "ここで、前提条件より$$V[\\epsilon]=\\sigma^2$$である。\n", | |
| "$$V[X]=E[X^2]-E[X]^2$$より、$$E[X^2]=V[X]+E[X]^2$$であるので上記式の第三項\n", | |
| "$$E[\\epsilon^2]$$は以下のように変換できる。<br>\n", | |
| "$$E[\\epsilon^2] = V[\\epsilon]+E[\\epsilon]^2$$<br>\n", | |
| "前提条件より$$E[\\epsilon]=0$$であるので<br>\n", | |
| "$$E[\\epsilon^2] = V[\\epsilon]+E[\\epsilon]^2 = \\sigma^2$$\n", | |
| "<br><br>\n", | |
| "ここで前の式に戻り、第三項を$$\\sigma^2$$と置き換えると<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + E[(E[f(x)]-f(x))^2] + \\sigma^2$$\n", | |
| "<br><br>\n", | |
| "ここで$$V[X]=E[(X-\\mu_X)^2]$$より、上式第二項は以下のように書き換えられる。<br>\n", | |
| "$$E[(E[f(x)]-f(x))^2] = V[f(x)]$$\n", | |
| "<br><br>\n", | |
| "つまり以下となる。<br>\n", | |
| "$$=E[(f_{true}(x)-E[f(x)])^2] + V[f(x)] + \\sigma^2$$\n", | |
| "<br><br>\n", | |
| "最後に、上式の第一項について。<br>\n", | |
| "まず、$$f_{true}$$はdeterministicな関数なので、$$E[f_{true}]=f_{true}$$である。<br>\n", | |
| "よって、第一項を以下のように変換する。<br>\n", | |
| "$$E[(f_{true}(x)-E[f(x)])^2] = E[f_{true}(x)^2 + E[f(x)]^2 - 2f_{true}(x)E[f(x)]]$$<br>\n", | |
| "$$=E[f_{true}(x)^2] + E[E[f(x)]^2] - 2E[f_{true}(x)E[f(x)]]$$<br>\n", | |
| "$$=f_{true}(x)^2 + E[f(x)]^2 - 2f_{true}(x)E[f(x)]$$\n", | |
| "$$=(f_{true}(x) - E[f(x)])^2$$\n", | |
| "<br><br>\n", | |
| "つまり、式は以下のようになる。<br>\n", | |
| "$$=(f_{true}(x)-E[f(x)])^2 + V[f(x)] + \\sigma^2$$\n", | |
| "<br><br>\n", | |
| "ここで、バイアスは近似式と真のモデルとのずれであるので、以下のように表される。<br>\n", | |
| "$$Bias[f(x)]=E[f(x)]-f_{true}(x)$$<br>\n", | |
| "これを上式に当てはめることで、式は最終的に以下となる。<br><br>\n", | |
| "$$MSE = Bias[f(x)]^2 + V[f(x)] + \\sigma^2$$" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 98, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/latex": [ | |
| "ここで、この式の意味を考えてみる。<br>\n", | |
| "この式はMSE(平均二乗誤差)を表しているので、0に近いほど良いモデルであるということになる。<br>\n", | |
| "第三項の$$\\sigma^2$$は、真のモデルに内在するノイズの分散であるので、コントロールできない値である。<br>\n", | |
| "次に、第二項の$$V[f(x)]$$は、モデルの分散である。\n", | |
| "つまり学習データセットにおけるモデルの予測値のばらつきの大きさを示す。これが大きい場合、学習データセットを変えた\n", | |
| "時モデルの予測値も大きく変わることを意味する。すなわち過学習による予測精度の悪化である。<br>\n", | |
| "最後に第一項$$Bias[f(x)]^2$$は、真の値と予測値(の期待値)の差の二乗である。これが大きい場合は、真の値と予測値\n", | |
| "とが大きくずれている、つまり十分に学習できていない未学習の状態である。" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.Latex object>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "%%latex\n", | |
| "ここで、この式の意味を考えてみる。<br>\n", | |
| "この式はMSE(平均二乗誤差)を表しているので、0に近いほど良いモデルであるということになる。<br>\n", | |
| "第三項の$$\\sigma^2$$は、真のモデルに内在するノイズの分散であるので、コントロールできない値である。<br>\n", | |
| "次に、第二項の$$V[f(x)]$$は、モデルの分散である。\n", | |
| "つまり学習データセットにおけるモデルの予測値のばらつきの大きさを示す。これが大きい場合、学習データセットを変えた\n", | |
| "時モデルの予測値も大きく変わることを意味する。すなわち過学習による予測精度の悪化である。<br>\n", | |
| "最後に第一項$$Bias[f(x)]^2$$は、真の値と予測値(の期待値)の差の二乗である。これが大きい場合は、真の値と予測値\n", | |
| "とが大きくずれている、つまり十分に学習できていない未学習の状態である。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "多項式近似において次数を変化させていった場合の般化誤差を以下に見ていく。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 94, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# generate data set\n", | |
| "x_train = np.linspace(0,1,11)\n", | |
| "x_test = np.linspace(0.05,0.95,50)\n", | |
| "\n", | |
| "x = np.concatenate((x_train, x_test), axis=None)\n", | |
| "y = 0.5 + 0.4*np.sin(2*np.pi*x) + np.random.normal(0.0, 0.1, len(x))\n", | |
| "\n", | |
| "y_train = y[:11]\n", | |
| "y_test = y[11:]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 95, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# error function (RMSE)\n", | |
| "def rmse(y_true,y_pred):\n", | |
| " return math.sqrt(\n", | |
| " reduce(lambda a,b:a+b, \n", | |
| " map(lambda x: (x[0]-x[1])**2, \n", | |
| " zip(y_true,y_pred)\n", | |
| " )\n", | |
| " )\n", | |
| " /len(y_true))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 96, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# create models\n", | |
| "models = []\n", | |
| "for i in range(1,11): # from degree 1 to degree 10\n", | |
| " models.append(fitting(x_train,y_train,i))\n", | |
| "\n", | |
| "# predict y for train data with the models\n", | |
| "preds_train = []\n", | |
| "for m in models:\n", | |
| " preds_train.append(list(map(m,x_train))) \n", | |
| "# predict y with the models\n", | |
| "preds_test = []\n", | |
| "for m in models:\n", | |
| " preds_test.append(list(map(m,x_test)))\n", | |
| " \n", | |
| "# calculate errors for train data\n", | |
| "errs_train = []\n", | |
| "for y_pred in preds_train:\n", | |
| " errs_train.append(rmse(y_train,y_pred))\n", | |
| "# calculate errors for test data\n", | |
| "errs_test = []\n", | |
| "for y_pred in preds_test:\n", | |
| " errs_test.append(rmse(y_test,y_pred))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 97, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\nQmCC\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x10910beb8>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "x = list(range(1,11)) # degree of the models\n", | |
| "\n", | |
| "fig, ax = plt.subplots(1,1)\n", | |
| "train_plt = ax.plot(x, errs_train, 'b.-')\n", | |
| "test_plt = ax.plot(x, errs_test, 'r.--')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "横軸がモデルの次数、縦軸がRMSEである。 \n", | |
| "次数1,2のモデルでは学習データに対してもテストデータに対してもエラーが大きい。これは未学習の状態である。 \n", | |
| "一方で、次数が上がるにつれて学習データに対するエラーは下がり続けているのに対して、3次以降の次数ではテストデータの\n", | |
| "エラーは大きくなっていく。これが過学習である。" | |
| ] | |
| } | |
| ], | |
| "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