{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 多項式曲線フィッティング (2) 過学習を防ぐ「正則化」項\n", "\n", "
\n", " このページのオリジナルのipynbファイル\n", "
\n", "\n", "\"IPython Interactive Computing and Visualization Cookbook\" (O'Reilly, 2018)のサンプルプログラム8.1を例に\n", "(現在、原文はhttps://ipython-books.github.io/ にて閲覧できる。)\n", "\n", "模式図はPRMLより。\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2乗誤差最小化 (復習)\n", "\n", "説明変数$x$に対する目的変数$y$について、$M$次関数でのフィッティングを考える:\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", "データ$\\{(x_n, t_n)\\}$ ($n=1,\\cdots N$)があったときに、\n", "2乗誤差\n", "$$\n", "E({\\bf w}) = \\frac{1}{2} \\sum_{n=1}^N \\{y(x_n,{\\bf w}) - t_n\\}^2\n", "$$\n", "を最小にするよう${\\bf w}$を決める。\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "説明用に、PRMLに載っている図を載せておく。\n", "\n", "最小2乗法の模式図:\n", "\n", "\n", "\n", "\n", "$\\sin$カーブにノイズを載せたテストデータをべき関数フィッティングしてみた例:次数$M$をが大きいほうが全データにあうフィッティングができるが、不自然であることがわかるだろう。($M$が次数)\n", "\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## リッジ回帰\n", "\n", "過学習を防ぐために、次のような係数に対する2次関数を付加し、その最小化を図る。この項は大きな係数の方が不利になるので、高次の項の「暴発」が抑えられる。\n", "\n", "$$\n", "\\tilde{E}({\\bf w}) = \\frac{1}{2} \\sum_{n=1}^N \\{y(x_n,{\\bf w}) - t_n\\}^2 + \\frac{\\lambda}{2}||{\\bf w}||^2\n", "$$\n", "\n", "これはリッジ回帰(ridge regression)を呼ばれる。ニューラルネットでは、過重減衰(weight decay)として知られている。\n", "\n", "また、このことを正則化(regularization)と呼ぶ。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### リッジ回帰における重み係数\n", "\n", "上記のPRMLの事例にある式で係数$\\lambda$を固定して最小化を行った例($M=9$):$\\lambda$が大きいと加重がきつくフィッティングされにくくなる。リッジ回帰では$\\lambda$を手入力で与える必要がある。(下で試すscikit-learnでは**alpha**という引数で指定)\n", "\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### pythonスクリプトでの実例\n", "\n", "#### サンプルデータの作成\n", "\n", "まずは前回同様、サンプルデータを作っておく。 (sinカーブでなくてもよい)\n", "\n", "ここでは、無名関数fを定義し、それにランダムデータを加える形でデータを作成してみる。\n", "\n", "(注)\n", "\n", "numpyのrandom.randn(n)はn個の正規分布乱数をリストとして出力してくれる。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "フィッティング関数の次数=2\n", "切片= 0.48313196254155294\n", "係数= 0.002 -0.205 0.000\n", "フィッティング関数の次数=5\n", "切片= 1.525493575707999\n", "係数= 0.057 -0.692 2.671 -3.138 -0.846 0.000\n", "フィッティング関数の次数=10\n", "切片= 1.328534433159252\n", "係数= -0.003 0.060 -0.554 2.722 -7.483 11.051 -7.720 3.465 -4.209 0.821 0.000\n" ] }, { "data": { "text/plain": [ "(-2.0, 2.0)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD7CAYAAABkO19ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOydd3SU1daHnzOpkEkhhQQSQg011NAEFEQFREARRZArCiII9gIXsXCxC7aPLiIoRRFBiojSmzQJLfQSShohjfSeOd8fbyqkFyYzOc9aWWPO23Zi+M2efXYRUkoUCoVCYb7ojG2AQqFQKKoWJfQKhUJh5iihVygUCjNHCb1CoVCYOUroFQqFwsxRQq9QKBRmToWFXggxXAhxUAixTwixWghR+7bjrwohjgghTggh3q7o8xQKhUJRNiok9EIIZ2AK0FdKeS9wHRiX73hPYCTQE+gKPCaE6FyRZyoUCoWibFRI6KWUMUAvKWVK9pIlkJLvlEHAUillupQyHVgCPFqRZyoUCoWibFhW9AZSylQhhC3wBWCDJuY5uAAH831/A+h2+z2EEOOB8QB2dnZ+LVu2rKhZCoVCUfUkRUFcMHj4gs7KqKYcPXo0SkrpVtixCgu9EMIL+B6YLaX867bDN4G6+b73yF4rgJRyEbAIoHPnztLf37+iZikUCkXVs/sL2P0pvO8PFsYVeiHE9aKOVTRGbwv8CIwvROQBNgCjhRBWQggL4FlgY0WeqVAoFNWGpEiwdTK6yJdERT36B4FWwHIhRM7aTqAvMEJK6S+E2AgcBrKAVVJK5a4rFArzICkC9HVLPs/IVEjopZSbAM9CDn2Y75wvgS8r8hyFQqGoliRGgl31F3pVMKVQKBTlJSkC9IXuf1YrlNArFApFeVEevUKhUJgxGamQFqc8eoVCoTBbkiK1V+XRKxQKhZmSFKG9mkDWjRJ6hUKhKA+JyqNXKBQK8ybXo1cxeoVCoTBPErOFXnn0CoVCYaYkRYKNA1jZGtuSElFCr1AoFOUhMQLsqn/YBpTQKxQKRflIijSJjBtQQq9QKBTlQ3n0CoVCYeaYSOdKUEKvUCgUZScrA1JumUTGDSihVygUirKT0/7ABHLoQQm9QqFQlB0TyqEHJfQKhUJRdnI9eiX0CoVCYZ7kevQqdKNQKBTmiQl1roQKzowVQjwBDAe6Sym9Czm++7alKVLKfyvyTIVCoTA6iZFgZQfWdsa2pFRUSOiBSGAScLqI4zZSynsq+IzSEXYC/v0eBv8fWFT0x1IoFIpiMJFZsTlUKHQjpdwjpYwq7JgQwhJwFEKsFkLsFUJ8JISwqMjziiXsOJxYAX+8BlJW2WMUCoVCq4o1jbANVG2MXg/sAcYDfYB6wLgqe1rnMdB7qib22/9XZY9RKBQKU+pzA1Uo9FLKWCnlxOxXA/A70LWwc4UQ44UQ/kII/8jIyPI/tM9U8BsD+7+Fg/PKfx+FQqEoDhPqcwNVKPRCCA8hxDQhhMheGgAcK+xcKeUiKWVnKWVnN7cK/PKEgEe+glZDYMs0uLK7/PdSKBSKwsjKhOTomu3RCyF2CyE8gJto4ZtjQoh9gAAWVfbz7kBnAUO/AxcfWD8JUmKr/JEKhaIGkRwNyJrn0UspPfL9dx8pZbjUmCal7CilvFdK+YqUMqMynlci1rXh8e8gIRz+mnJXHqlQKGoIJpZDD+ZcMOXpB/dNhoBf4cx6Y1ujUCjMBRPrcwNmIPSJiTB9Ori5gU6nvU6frq3Le98ipn57rvz1JoaE8FJfp1AoFEViYn1uAISsZjnnnTt3lv7+/qU6NzERuneHwEBITc1bt7LJpJZ7GD4fjCbNMhoAN2FN3+ZDebDhg7TRd+Oee8Qd19naQtOmcOgQ6PWV+VMpFAqzYf9s2PY+TA0GWwdjW5OLEOKolLJzYcdM2qOfNetOkQfISLMkMdwDp4MfM7XrVGY4tKdDYiwbL63nha0v8NBLWwgMlHdcl5qq3W/WrLv3MygUChMjKQIsbcHG3tiWlBqT9ujd3CCq0LrcvOMREWiZN3M6kerWnF86D+eFHkPJSqxT8nUKhUJxO7+Ph+sH4Y1TxrakAGbr0UdHl/J4LSfo+x621w8yRueMIcmpQvdVKBQ1mPgwcKhnbCvKhEkLvYtLGY53ehbcfWHr+2W7TqFQKPKTEA72SujvGpMmaRuohWFrCxMn5lvQWcCAzyAuiEmD/y39dQqFQpGfhBvgUN/YVpQJkxb6yZO1LJnbRTsne2by5NsuaHwfNOnD5CYv0LSJoZDrZOHXKRQKBUBqPKQngr1HyedWI0xa6PV6LRVyypSC+fBTphSTItlnGvrM6xz6dmHudUJILOxj6Dxip0qtVCgURZNTj2OvPPq7il4PM2ZoWTJZWdrrjBnFiLV3N2j6APpjs5gxLYGICDAYBN/sWUlsn9c5Gbf/rtqvUChMiIQw7VV59CbA/dMgJQb+zeuxNr7deBo5NOLDgx+SnJFsROMUCkW1Jf6G9qpi9CaAV2fw6a9VuKXGA2BjYcOMHjMISwpjzvE5RjZQoVBUSxKyhV559CZCn6mQGgtHFucudXLvxFMtnmLluZUERAYY0TiFQlEtSbgBNo4mMxQ8h5or9J6doMn9cHghZOT1Qni90+u41nLlK/+vqG5VwwqFwsgk3DC5YimoyUIP0Ot1SLwJAatyl/TWesa3G8+xiGMcCDtgROMUCkW1I/6GyYVtoKYLfePeUK8DHJgDhqzc5WE+w6hvV585x+cor16hUOSRcMPkUiuhpgu9ENDzNYi+DOf/zF22srDixfYvcib6DDuDdhrRQIVCUW0wGLQ8ehW6MUFaPwp1GsH+byGf9z646WAaOTRi7om5ZOXz9hUKRQ0lKRJklsn1uQEl9FoPnB6vQOhRuJ5XLGWps+SlDi9xOfYyf1/724gGKhSKakFusVQNE3ohxBNCiNVCiKAijr8qhDgihDghhHi7Is+qUjqMgtoucHB+geV+jfrRzKkZS04vUbF6haKmk9v+oIYJPRAJTAKsbz8ghOgJjAR6Al2Bx4QQhTbFNzpWtcBvDFzYDDFXc5d1QsczrZ/h4q2L/Bv+rxENVCgURic+26OvaTF6KeUeKWVRM54GAUullOlSynRgCfBoRZ5XpXQZp4Vx8rVFAHikySM42zqz/OxyIxmmUCiqBQnhIHRgZzpDwXOoyhi9CxCe7/sbQKG/ISHEeCGEvxDCPzIysgpNKgaHetBmKBxbntsWAbTWCMNbDGdPyB6ux183jm0KhcL4JIRpIm9haWxLykxVCv1NCgq7R/baHUgpF0kpO0spO7u5uVWhSSXQbSKkJ8CJnwssP9XiKax0Vqw4u8JIhikUCqMTb5pVsVC1Qr8BGC2EsBJCWADPAhur8HkVx8sPvLpqbREMhtxl11quPNz4YTYEbiAuLc6IBioUCqNhgiMEc6h0oRdC7BZCeEgp/dGE/TBwCPgje6160/1FuHUVLm0psDy69WhSMlNYe2mtkQxTKBRGJSGsZgu9lNIj33/3kVKGZ//3l1LKTlLKLlLKryrjWVVOqyFaifNtm7ItnFvg5+7HmotrMEhDERcrFAqzJCMFUm6p0I3ZYGEFncdA4E6Iulzg0DCfYQQnBOMfXv0/mCgUikrEhHPoQQl94XR6FnRW4P9DgeWHGj6EvZU9v1/+3UiGKRQKo5A7cEQJvflg7w6th8DxlZCelLtsa2nLwCYD2XZtm9qUVVSIxESYPr3gUPvp07V1RTUk3nTbH4AS+qLp8gKkxcGpNQWWh/kMI92Qzuarm41kmMKkSI2Ha/vh9O9waCHsmUni7qV07xjPzC+yiIrSeulFRcHMmdC9uxL7aklO6MZEY/Sml/l/t/DuDnXbwJHvodNoraUx0MqlFa2cW/H7pd8Z2XKkkY1UVEuiLsPpNRC4C0L9wZBZ4PCsXVMJvGZFaqZFgfXUVAgMhFmzYMaMu2mwokQSboBlLbB1MrYl5UJ59EUhBHQdB+GnILhgn5vHfR7nfMx5zkafNZJximqHlJqwrxwOc/1g9+eQlQY9XoVRa2HSIZh8Bd6LZP6Z/5KaWavQ26SmwoL5qi12tSMhe7JUtsNnaiiPvjjaDodt07UB4t7dSEzUvK1584cTHTWcLk4pvP0qTJ4Mer2xjVUYjRsnYfNkCD4Mdm7Q5x2tSZ69e6GnR8cUf7voaAHbPtDuY1X4G4LiLhMXAo5exrai3CiPvjhs9NB+BJxdT+LNaLp31+Ko0VE6QEdyrB0zZ0oVV62ppNyCP9+CRX0gOhAG/x+8cQb6TC1S5AFcXIq/rYt9Euz/P1jYC66rucXVgthgcGxgbCvKjRL6kug8FrLSmfXOZQIDtY/W+UlNFblxVUUNIvhfWNAL/JdoG/evHAW/58DSpsRLJ00CW9vCj9nawsTX7WH0BsjKgKUPw85PCrTkUNxlMtO10I2TEnrzpW4r8O7B/NXN7xD5HFJTYcGCu2uWwkgYDLB/tibAFpYwbgcMnAm1Sr9JN3kyNG16p9jb2mrrkycDTfrApIPQ4T+wdyasGQPpyZX5kyhKS3wIIE3ao1cx+tLQeSzRSY7FnhIdfZdsUdx1EtITOB9znouRp7l4YimhSTeIadSEGJvapOyeCIAQAmudNc62zrjUcqFu7bo0dWpKM6dmtKjTgnr6vLQ8vR4OHdI+BS5YoP3tuLjAxIm37fdY28Gjc6FuS9j6Pty6Bk//qm0KKu4escHaq5O3ce2oAKK6jcjr3Lmz9PevZi0GMtNwc0okKqno4KqbG0RE3EWbFFVKYGwgu4J3sS9kHycjT5IltUyYOllZeNvVx9mtNc62ztS2qp17TWpmKrdSbxGTGkNYUhjhSXnjGDz1nnT16Eq3et3o7dUbvXUZd+8v/EXiyleYdWQK84+MIzpGh4uLFgZSyQBVzPEVsOElePU4ODcxtjVFIoQ4KqUsdIqf8uhLg6UNkx7bz8xf7yk0Lc7COp2JE++YpqgwMVIzU9lybQtrLq7hROQJAFo5t2Jss2H4nVhHi1thuDy2ENHmsVLdLyE9gcDYQM5En+FI+BF2BO1g3eV12FjYcJ/XfQxsPJDeDXpjpbMq8V6Jng/T/dcAAq8IUjO1iGtOkdXatdonBCX2VURsMCDAwXSzbpRHX0oSg67SvXMKgXE+pKbn/cO0tM7Awu0654870cjN1YgWKspLWlYaq86vYtGRn7m0/lHido0iPcEBZ2fJy2Njmez0EHpdJIxcBQ17FLg2J+V2/vy8EExRXnaWIYtTUafYfHUzW65tISY1hnp29RjVahTDfIYV6+VPn66JemH7RLa2MGWKKrKqMtZP0pocvnXe2JYUS3EevRL6MpC4aASz1tzLghOTiI4WuLjAU2Ni2NFkAO/e9xqjWo0ytomKMmCQBjZc3sC8E/MIi4kn/LN1JIV7kJ6WV7Fqa5lKU5frHNqfhb5p6wLXJyZqLQtuz8bK2VQtzsvONGSyL2Qfy84uw/+mP3orPWN9x/JM62ewtbwzJcfNTfPgi0KFDquQHwdBZhqM22ZsS4qlOKFXWTdlQN/raWb0mEbEvr/JytL+Yc35wpk29Ruy+YrqfWNKhCaG8sLWF/jgwAe413anx4XfSbnpWUDkAVIzbQmM9WHWstZ33GPWrDtFHgq2MigKS50l93vfz9IBS1n1yCq6eHRh9vHZDF4/mE1XNnG7A1bSZr9KBqhC4oJNOrUSlNCXjRYPg94d/JcWWO7fqD8BUQGEJYYZyTBFaZFSsvrCaoZuGMqZ6DNMv2c6KwauYMNyr6LTZ9N0habPzp9feCgFypZy28a1DbP7zmZJ/yXUsanDO/veYcK2CQU2c0sssirhuKKcGAwQF2rSqZWghL5sWFhpDc4ubYXYoNzl/g37A7DtevX+aFfTSctKY9o/0/jo0Ed0cOvAuiHreKL5EwghyuUxV7aX3cWjC6sGreL97u9zIvIEj294nD8C/0BKWXyRlWUKE4dfLvygomIkhoMhQ3n0NY5Oo7XXY8tylxo4NKCVcyu2Xt9qJKMUJRGRHMGYv8ew6comXu7wMt899F2B3PbyeMxV4WXrhI7hLYazdvBamtVpxrR/pvHe/vd49c20IoqsJE3dbjDZbbDWj0VRueQ4dE4NjWtHBamQ0Ashhgsh/hVCHBVC3DETNntQeP6vrhV5XrXAyRt8+mlCn5WRu9yvUT8CIgMKfNxWVA8u3brEyE0juRx7mW/v/5YJ7ScgbutCOGkS2FpnFHq9ra1WzHQ7JbYyKOSa0tLAoQFL+y9lYvuJbAzcyKv7x7JpVxRTphQcVjJliuDQQdBbxsHv48GgOl9WKjnFUiYeukFKWa4voCFwAXAEBPArMOy2cw6W9b5+fn6y2nN+s5TTHaQ8syF36Xrcden7o6/86fRPRjRMcTvno8/Le3+5V/b9ta+8EHOhyPMS9i6XbdzOSFvrdKn1HNa+bG2lbNNGyoSEQq5J0I7Z2spSX1Metl7bKrus6CIfWP2APBd9rvCTjv+s/U3u/qJyHqrQ2Pul9ntNSzS2JSUC+MsidLUiHv0AYK2UMi77Id8BuZUkQghLwFEIsVoIsVcI8ZEQwqKom1WUzCzDHZkKVYZPP614wn9J7pK3gzctnVuq8E0lU5GRe2eizzB2y1hsLG1YOmApzes0L/zEoMPod73OoU8+Ysp/LW7zmItOk8xpZXCnl125BUwPNXyIZQ8vQwjB2C1jORV56s6T2o/Q2mrv/gyCDlXOgxWaR1/LWWtHYcoU9Q5Q0hcwDXg13/etgC35vncCFmS/6oDFwIQi7jUe8Af8vb29y/VutuzgNen30TY57qcjct6uS/JgYJRMSsso171Kxe4vtHf66MDcpUUnF0nfH33ljcQbVffcGkRFPOZz0efkPSvvkf1+6yeD44OLPjEuVMpZPlJ+217KpOjK/yEqkdCEUDlgzQDZbWU3eezmsTtPSImT8tt2Un7T1iQ8UJNg+eNSLrzX2FaUCqrIo78J1M33vUf2Ws4bSKyUcmL2qwH4HSg0Ri+lXCSl7Cyl7Ozm5lYuY5q62nFfc1cuRyQy8+8LjFh0iLb/28rA/9vHe+tPsfZoCFciEyvP6+/4DAgLOPpj7lK/Rv0AlX1TWZQ3T/1G4g0mbZ9EbavaLB2wFC/7IkrXM9Ph12cgLRFG/Ay1nSv3B6hk6uvr8+OAH3Gr5caEbRM4En6k4Am2DvDoPIi9Drs+NY6R5oaJ96HPodyVsUKIesB2oLuUMkEIsRxYL6Vcm33cAxgLfCallEKI2cAFKeW84u5bGZWxt5LSOR58ixNBsRwLiuVEcCyJadrcTqfaVnRo4ETHBnXo6O1EB28nHGxL7jVSKL/+RxsM8ea53D7kT2x8glqWtVg+cHmFfgZF+apB49PjefavZwmNjqPb+d9YtdSl6NYEf02FwwvgyZ+glP1rqgNRKVE8v+V5IpIj+HHAj7RwblHwhE1vaA7I89vAq9BCSUVpkBI+ra/NGRjwmbGtKZEqa4EghBgFvA2kA/uklG8LIXYDI9C8+0+Ah4FE4ATwppSy8NSGbKqiBUKWQRIYmcjxoFscu64J/8WIBKTURkA2ddPTsYETHb3r0KmhEz517bHQlWI2ZOBOWD4Uhv0AbZ8AYOHJhcw7MY+dT+7ErXb5Pp0oNHQ67d9accez8iWZZGRlMHH7RP4NOkvSV9sJu1676NYEwX9ob9TdXoSHv6i6H6KKCE8KZ9TmUSBhxcAVBVJFSY2H+d3Bxh4m7C3VMBRFISRFw6wm0P8zuGeSsa0pEdXrphASUjM4GRzHieBbHA+K5VjQLW4la+9BehtL2nk50tFb8/w7eDvhqi/kH4vBAHM6gUN9GKO1QLh86zJDNw7l/e7vM7zF8Cr/OcyZsnr0nx7+lF/O/0Ib/zVsWNyi6AZgr9xiRp324NIUxm4BS9PsPHrx1kWe++s53Gq7sezhZTja5JuZcHEL/Dwcek+F+98xnpGmTOgx+P5+eGoFtBpsbGtKRLUpLgR7Wyt6+bjSy0frOCml5Hp0MseD87z+7/ZcIdOgvRE2cK6VG+7p6F2H1vUcsLbUQecx2iDniPNQtyVNnZrS0KEh269vV0JfQSZNKr5jY/489b+v/s0v539hdOvRzHy7cJGHvNYEM94FnlxqsiIP0LxOc/6v7/8xYdsE3tz9Jt899B2Wuux/0s37g+8T8M/X0G649qamKBtxpj9wJIca69GXhpT0LE6FFvT6b8anAWBtqcO3vgM968Hrpx4lue1o9I99hRCCr49+zfIzy9n91O6CXpaiTJS2O+TVuKuM2DSC5nWas2TAEmwsrYoP+QgDWWf+NAkvrTRsuLyB9/a/xxjfMbzp92begYRwmOMHjXppk6kUZePAXNj6Lky5Wu036kF59OWmlrUFXRs707Vx3v/kG3EpnAiK5XhwLCeCYvn+WCxN6ULfE79w35m+tPL2oJ57SzJlJtuu7uKJlqazyVfdKM3IvZTMFN7c/SY2FjbM6j0LK50VLi7Fh3xc7JPMRuQBHm32KAGRASw9vZR2ru14sOGD2gF7D+g9RfvEeXErNO9nXENNjbhgsNZDrTrGtqTCKI++gmRkGQg6voOmm57gV4/JLEzsxdWoBOyafY4htQENMyfR0btO9mavE03d9OhKs9GrKBUfH/qY1RdWs/DBhfTw1IaCFDukwzKVKf/VMeNj0w3ZFEZ6VjrP/f0cV+Ku8Msjv9DYsbF2IDMdFvQAmQWTDqmN2bLwy9MQcwVeMo0CNLUZW9VICQt6gs4CJuzlVnIG7+77kAMRf9Em4xtOBacQn6qld9rbWNI+W/Q7NNC+XArb6FWUyIHQA0zYPoFnWz/L213ezl0vMuRjmaKFfPxrmeXYvfCkcIb/MRzX2q788sgv2Fhk/11d3gErHocHPoB73zKukabEgp7g4AmjVhvbklKhBo9UNUJAl7EQHgChR6ljZ83o9oPIkumMvMfAY4Z+xH8/kKCZAwn89gEOr/Vg7tZrPP+TP34fb+e+mbt49ZfjLN1/leNBt0jLVI2pSiI+PZ4PDnxAY8fGvNzx5QLH7mhNICRutSOZ8p8TZivyAB52Hnzc62Mu3brEnGNz8g40ewBaDoK9X0HCzaJvoMhDSs2bN5NNbBWjryzaPQXbpsORxeDVGT93P+wM7owZ1JLEGyLXs0yJtyRkd0MaB3kz/9dbXIjWNnr/vRrDxpPa4BJrCx2t6ztohV3ZKZ4NnGvd0XGxJjPz35lEpUSxvM/yQkfv6fXaDNUZb4bA/B7g3gae22T2rs19XvcxvPlwlp1dxn1e99G1XnYx+oMz4OLfsOcLGPS1cY00BRJuQEYyODcxtiWVghL6ysLGXmssdWw59P8Uq9rOWO19h+gQJ24vEUtNhatXBLt+c2bGjDs3ek8Ea5u9vx4J5scD1wBwsbPWQj4NtGre9g0qUNFr4uwJ3sOGwA2Mbzeetm5tiz5RStjwMhgy4bF5WmitBvBW57c4HH6Yd/e/y9oha3GwdgDXZuA3RmvE130iuPoY28zqTXSg9momHr2K0VcmN8/CgnvgoY+g56s4uaQTF1P0pl9JA50zswxcuJmgCX/2G8DliLy2jc3q6nPj/B0aONHSwx5LC/N2WZMzknlsw2PYWdmxetBqrCyKebM7shj+fAse+Rq6PH/3jKwGnIo8xTN/PcPDjR/ms3uzy/cTI2F2B2jSB0asNKZ51Z+jP8Efr8JrJ6FOI2NbUypUeuXdwr01ePcA/x/gnpeIv1W8x13SqDlLCx1t6jvSpr4jo7ppE27iUzM4mZ3aeSI4ll3nI1hzVJssZGulo62nY3bIpw4dGjhRz9HWrEI+CwMWciPpBj8N+Kl4kY+5Alvfh6Z9ofPYu2dgNaGtW1vGtR3HdwHf8UiTR+jl2Qv0btDzNdj1CQQdBu9uxjaz+hITCBbWZtHQDJRHX/mcXgtrxsLIX3HrNaDMTbnKipSS4JgUrYlbsCb+Z8LiSc80AFDX3kbz+LOzfNp5OaG3Mc3390u3LjH8j+EMajqIj3p+VPSJBgP8NAjCT2kphY6ed8/IakR6VjpP/PEE6Vnp/D7kd2pb1Yb0JJjdUfNSx27REgkUd7JqFERdhJePlHxuNUF59HeTVkNA7wH/LmLSpAF89kUmGWl3/porOmouByEE3i618XapzaMdNEFLzzRw7kZ8rvCfCI5l69mb2edD87r2BcTfp66+2od8pJR8fOhj7KztClZ/Fob/D3B9PwyZW2NFHsDawpr/3fM/nv37WeadmMfkLpO1ARp9pmodLi9tU0VURRFzBZzNIz4PSugrHwsrLVSw+1Mmj7nM6jWNuXApFZmRlxmSU8I/eXLVmGBtqaN9A23D9tnstdjk9ALCv+VsOL/6a708altb4OvpSMfsazp6O1HPsVbVGFdONgZu5FjEMf53z/+oY1tMpeKta1r2U9MHoON/7pp91ZVO7p14svmTrDi3goFNBtLGpQ10+A/8840WwvF5SHn1t2MwQMxVLexnJqjQTVWQcBO+aQOdx5J430x6TljP+U33k5noeEcJv7HIaeKWI/zHg2M5FxZPepYW8nF3sKG9V7bX7+VEuwbGC/kkZyQzaN0g6tnVY/nA5ehEEZ8+pIRlj2pdBycdBCfziK9WlPj0eB5b/xiutbRCKgudBRxfARtegqdWQqtBxjaxehEXCt+0hke+gi7jjG1NqVGhm7uNvTu0GQonfkb/wPu8NS2eWf16sXnoZho4VA/xEULQyNWORq52PNZRC2+kZWZx7kYCJ4JuFRry8amrzxP/Bk60cL87WT5LzywlMiWSr/t8XbTIAxz7Ca7ugUHfKpHPh4O1A1O6TmHynsmsvbRW66rabgTs+1qbRNVioNbcX6ERk51aqUI3ihLpNgFOrYaTq7i/1QBm+c9iZ/BOnm3zbMnXGgkbS4vcVM0cbiWlcyIklpPB2tf2czf5rZAsn/bZ13k6VW5hV3hSOD+e/pEBjQbQoW6Hok+MD9OybBrdq00EUhSgf8P+/ObxG7OPz6Zfw3442TppsfrfX4Cz68H3cWObWH0wsxx6UEJfdXj6Qf2OcPg7GnR+nuZ1mrMzqHoLfWHUsbPm/hZ1ub+FNh5YSklQTHKBeP9PB6+Tvu8qAOqo3wIAACAASURBVK56Gzo0yBP/dl5OONYqf2HXnONzMEgDr/u9XvRJUsKmNyErA4bMVjHnQhBCMLXrVJ7840nmHJ/D+/e8D77DYN9XsPszaP1ojSkoK5GYQLCwAYciZg2bIEroqwohoNtEWDceAnfQ17sviwIWEZ0SjUstF2NbV26EEDR0saOhi12BLJ/z4fFafn/21K7t5/LyRpu42dHBK8/rb1nPHhvLkkXlTNQZNgZu5Hnf5/HUF5M9c3otXPwL+n1iNiXrVYFPHR9GthzJynMrGdZ8GK1dWkPv/8KaMXB2g/Lqc4i5Cs6NzSqcpTZjq5LMdPi2LdRtxblHPmP4puF82ONDhvoMNbZlVU5cSganQjTR18Q/lqjE7KEt+Xr5tG/gSHsvJxq72hUI+UgpGbd1HJdjL/Pn0D/RWxexc50UDfO6aHnhz29TXmkJxKfHM3jdYLztvVn28DKENGjzZXVW8OI/ZiVu5WZed81hGPmzsS0pE1W2GSuEGI42HNwC2C2lfOu2468CzwBWwAop5ZcVeZ7JYWkNXV+AnR/RMsNAPbt67AzaWSOE3rHWnaMaw+JSc2P9t/fycaxlRTsvx9w9ggzrC/wb/i9Tu04tWuQB/p6qDcMeMkeJfClwsHbgtU6vMf3AdLZc28KAxgO01sXrJmifilo+YmwTjYvBALeuah0/zYhyC70QoiHwEdAViAdWCSGGSSnXZh/vCYwEemZfslMIsVtKaSbueinpPBb2fok4vIC+3n357cJvJGcka1WKNQghBJ5OtfB0qsXAtvUArZfP5chETgTFcjJEC/vM3x1IlsFA7UbzsLRy5p+jzUiKDKS9lxNtvRypbZ3vT/bSNm3Du/d/te6UilLxaNNH+fncz3xz9Bvu974fG98ntDj93llaBk5N3uOID4XMVLPaiIWKefQDgLVSyjgAIcR3wBhgbfbxQcBSKWV69vElwKNAzRL62s7QYSQcX0nftitYeW4lB8IO5I17q8FYWuho6eFASw8HRnTVBjAnp2eyLGAT886E4GMxjlOhSfx1WusjoRPQ3F2r6vWrZ8WjB17DyrUFQg3TKBMWOgsmd5nMuK3jWH52OePajoNeb2pNvAJ3QLMa/LcZc0V7NaPUSqhYd24XIDzf9zeAumU4nosQYrwQwl8I4R8ZGVkBk6op3SdBVhqdrh/FwdqBnUE7jW1RtcXGUvB3yI80dmzMr0+/xD//7Yv/ew+y5LnOvNzXB3cHW/4+E07i5ulYJoTx9M2neXLxUT7edJY/ToYRHJNMddt3MjaJidp4RTc3LQTv5gabF3ajh2s/Fp9aTFRKFLQfqWWZ7JlFsZPVzZ0Y80uthIp59DeBxvm+98hey3+8bjHHc5FSLgIWgbYZWwGbqieuPuDTD0v/H+jT7Ql2h+whw5CBla5m9pMvjk1XNhEYF8jXfb7GUqf9ebrqbejb0p2+Ld0BkEGHYclWrjYeSSvnfpwIvsXyQ9dZ/I+W4lmntpXWAsIrp5GbY40d11jYWMWoKG2mboPGn2H7eh/mn5jPB/d8AL1eh81va32CGvUyruHGIjoQLG3Bvr6xLalUKiL0m4HtQogvpJQJwFhgfb7jG4CvhRA/AQbgWbSN25rJPS/DsiH0zdSxMT2eYzeP0a2eahObnwxDBgtPLqS1S2se9C4ifJCZhtj4Cjh40mTETD6wsdeuzTJwITyBkyGxBATHcTIklr0XL2HIdhsaONeinZdTbpqnr6dDwXi/mTJr1p2zc0H7PviqNT3+ncla25cY2XIkPh3/A7s/h3++rblCH3MF6phXaiVUQOillDeEEJ8Ce4UQ6cA+KeVaIcRuYISU0l8IsRE4DGQBq2rcRmx+Gt8H9Ttxz+nN2DjbsDNopxL629gUuImQxBDmdp1bdHXtvq8g6gKMWqNN9crGykKHr6cjvp6OjMr+tSalZXI6NC57o1fr4f9nwA0gL97f3suJdtkpni087LGq5l08y8r8+XeKfA6pqRCwoQc+fe345ug3zH9wvjZ9audHEH4aPHzvrrHVgehAs5y+pfLo7yZnN8Dq0bzSsR/nM2LZOmyrWQ0FqQgZhgyGrBuCg40Dqx5ZVfjv5eZZ+O4+rY/QsO/L9ZzIhDQCQmI5GRLHyeBYAkJiuZWszXq0sdTRpr5DbmFXOy8nGrnUNun/Rzpd8SF3nQ6+P7mEb45+w+J+i+nm1By+8YUWD8OwxXfP0OpAZhp8Ug96vQEPvG9sa8qMampWXWg5CJyb0jcymN1WSZyNPksbV5UWCKXw5g1ZsPEVsHWAAZ+X+zlu9jY80MqdB1plx/uzB7fk9PMJCInll3+DWLr/GgAOtpbZrRwcc2P+dR3uHEZeXXFxodjhNy4uMKrVKFadX8VX/l+xatAqdJ3HwMF50Pc9kxmjVylEXQKZBXVbGduSSkcJ/d1EZwE9X6XPn29g0dCbHUE7lNCjefOLAhbR2qU193ndV/hJ/y6CUH94fDHYVV4LifyDW4a01zbgMrMMXLyZWMDzX7jnClnZAX8PB1tN+LM3fNt6OVaon09VMmmStvFaWPgmZ/iNjYUNr3R8hWn/TGPz1c0M6v4SHP4ODsyFR2pQjWPEOe3VDGsyVOjmbpOZBt+2Y5ybA5GO9dnw2AZjW2R01l9ez/v732dO3zn0adDnzhNirsKCHtoG4dOrjVLQk5KexdkbcZwIjiMgJJaAkDiuRiXlHm/iapcr/u28nGhT3wFbK+NX6haWdQN5w28OHdLmIhikgRGbRhCbFssfQ//A5s+3IWA1vH5amzVbE9g+Aw7MgWlhWlW7iaFCN9UJSxvoPpEHDs/iU1K5EnuFJk41txFXpiGT7wO+p5VzK3p79b7zBCm1Qh5hAYO+MVrVZi1rC/waOuPX0Dl3LTY5nVOhcQSEaL18DgRGs/5EGACWOkELD3vaeTnR3suRdl5ONHe/+yMb9XpNzGfNggULtIH0hQ2/0Qkdb3d+m+e3Ps/KcysZ2+NVOLYcjnwP90+7qzYbjYiz2kasCYp8SSihNwZdnqfvwf/jU2BH0I4aLfRbrm0hKCGIb/t8W3hs/thPcHWvJvKO1attrFNta+71ceNenzyPNzwulZO58f44/gwI45d/gwCtf3+b+lqsv30Dx7u22avXw4wZ2ldxdK3Xld5evfk+4HuGNhtKnRYD4d/voefrYF0DWnZEnAWvLsa2okpQoRtjsfdLRp1bRKZbC359/A9jW2MUDNLAsI3DAFg7ZO2d06PiQrXOivXaw+iNJpnbbDBIrscka/H+7Pz+M2FxpGZoIxsdbC1p56Vt9rbL3uz1cDTeZu+V2Cs8vvFxnmrxFO949IGlA2Dgl1pzPnMmLQE+89I2oO+romHOVYwK3VRHuo7nwZPf8XXCNcISw6ivN69KvMJITNRCCPPnayEEhzqZWN/7EPM/anKnyEsJm97IGyZigiIPoNMJGrva0dg1r3//7Zu9ASGxLNp7hczszd669ja5wp/z6mx3d8IJTZyaMMxnGKsvrGZkyxE08uoCB+dqzfnMuTto5AXtta75bcSCEnrjYevAA62e4uvQDew4vZxnuv/X2BZVKYVtCsbFWKPb/DzTL1sz4NBtw9JP/gKXtkD/z8xumIhldj/+1vUdGNFVW0vNyOLsjXgCskM+J0NiCwxvyanszYn3+3o6Vtmw9okdJrLpyia+PfZ/fNvjFVg9Gs79AW0eq5LnVQtuntFezTC1EpTQGxXvXpNpvuJ3tl9cZ/ZCX1QpviHDhiuB2vHcGHJ8GPw1Fbx7QLcX77qtxsDWyoJO3nXo5F0ndy0hNSN3szcgpGBlrxDQzE1P2+z8/nZejrSqVzmZPq61XHm+7fPMOT6HIy1H0qVOYzgwWxs3aMLFY8UScQ6saoNTQ2NbUiWoGL2RWbD+aRbEBrCz9xxcG99vbHOqDDe34gt33NwgIgItZPPzcLi6DybuN7sughUlOjGNgNA4ArLTPE+GxOVO7sqf6aOFfBxp7l6+tg6RsSl0f2ENIVuHkJHggEutaCaNS2byJ94FP3mZCz8N0eL043cZ25JyU1yMXgm9kbkUfpzHt4zmPVx56lnT/SMridKU4mdlAcdXwoZJMOAL6F4zvPmKIKXkRlxqrtef8xqfmgnktXXIL/5NXPXodEV75jlhtkuXs0hPy/uEYGuVTtPm1rm592bFLB9o3g8enWdsS8qN2oytxjRz70ATaye2xIXw1JXd0KSPkS2qGkpTik9ssDYasGFP6Dr+rtlmygghqO9Ui/pOtRjg6wFo4n89OpmTIbGcCtFCP6v988Y26m0sc3v6tPXUQj8NnGvlpnnmhNnyizxAaoY1gZcNzJqlKzFV06RIioKkCKjb2tiWVBlK6I2MEIL+zZ9k4alFRG3/ANcX9phlHLTEUvwXDbB+IkgDPDbfZLNsqgNCCBq52tEoX6ZPlkESGJmY6/GfDInjx/3XSM/S0jydalvR1lPz+L+d05zU1MJ//6lpOhYsKDkn36SIOKu9mulGLCihrxb0azKQBae/Z1tCICPPrte6M5oZkyfD2rVw/lIGWel5fWFySvEn914M+/bBkLk1q5HWXcJCJ2jubk9zd3ue8NMKz9IzDVy8mVDA81+45wrxt1oUe6/oKAmYkTOS0+NGefSKqqRZnWY0c2zKliwdI3d8pHW5tKieTbLKi14Pv20Nps+kTSTtfZaUuNp5pfjPnUe/4j1tMHXH/xjb1BqDtWVeD3+ye/inZmRR7ztJbEzRQq63S2Terpu5nwCcapt4y4CIs1CrDujdjW1JlaGEvprQr3F/FsQtICLuGnWP/GCWG5Grry/Ba9hGtvzyJK61skvqM9Ng8ThtiMjg2WYZtjIlbK0sePXlosNslpZpTPD7gdlbGpKGJvDezrVp6+VIO09H2nppbxwOtibkqESc0wqlzPhvTwl9NaF/w/7MPzGfbd7tGbX7U2j7BNi5GtusSiMiOYINlzcwtNlQXGvl+7m2/w/CT8HIVTWnS2I1JyfMdnvdg4V1OlZuIUzs9SX/G/Qxx10HERASx6lQrbdPTo4/aN0823o5Znv9WjdPuyoq8KoQhixtoE37Eca2pEqphr/5mkkTpyY0c2rGVmHJqOsB2ji3wf9nbLMqjWVnlpEls3jO97m8xUvb4NB86DpBm2ikqBYU1fFy5Nhk9jR9lrk6N746upCek56lZ7O8N+2gm+m8/1EGa1fYcD3Ogn21M7DrcA2Hbv9iaZNFs7p62npqaZ5tvRxpXUkFXhUi6hKkJ4Cnn3HtqGKU0Fcj+jfqz7wT8wj3G43HkaXgNwbqdzC2WRUmLi2O1RdXM6DRABrYN9AWE27CuhfB3Rce+tC4BiruoPCOl04sChjNnONz2JZ0g4cu7wAfbYh7YiIMfMCawEDr3E8BmcnWpB7zwSmiMeO/usbFmFj2XIxk7bEQIG+DuK2nA229nGjn6UjLevbYWN5F8Q/NrtlRQl84Qku6/RToC9gAs6SUK287xxIIB07nW+4npUwv73PNmQGNBjDvxDy2eLbg2bOu8NcUGLvF5GOHP5//mZTMFJ5v+7y2YMiCdRMgPQmG/QBWpjOar6Yzps0Ydl7fwXTDGXwPfEO9bKEvqsVFWqrgZogVKUd9WDJDy/G/GZ+WW9x1KjSO7eciWO2vib+VhSb+7bwcaeup5fm38LDH2rKK0m1Dj4KNA7g0q5r7VxPKXRkrhBgFDAWeBOyBQ8ADUsob+c5pDHwipXy6tPetaZWxt/P0n0+TYcjgN88hsPFlrVLPhDNRkjOS6be2Hx3cOjD3gbna4q7PYM/n2uar37PGNVBRZoLig3hy/aO0TEnkh8G/YVm/Q+lbXBSClJLQ2BROZ/f1ORWqjW/Mqe61ttDRsp49vp55G77lbe1wB9/dB7ZO8OzGit/LyFRVZewgYJHU3inihRBrgIHAD/nOaQTUFUL8BeiBeVLKVRV4ptnzSJNH+Pzfz7nU42N8vHvAlmnQ7EGw9zC2aeVizcU1xKXFMa7tOG3h0nbY8wW0fxo6jTaucYpy4e3gzftdp/LO4Y/5bs80Xhq5mejo4q8p7rgQAq86tfGqU5sBvvWAvKHtAaFajv+p0Dj+OBnGz4e1IS7Wljpa1XPIFf62no741C3jBK+MFK1rZc/XSn+NiVKi0Ash+gIfFHIoHS0sk8MNoO5t5yQDu4HP0IR+pxAiQEp59rZnjAfGA3h7e5fWdrNkQKMBzDoyi03XNvPGkDmwsCf8+RY8tcLkQjjpWen8dPYnOrt3pkPdDlqLg9/HacOXH/nK5H4eRR6DWj7FwRNLWZQaRMfLm3BxGVRyi4sykH9o+6B22qyGnCEup0LjOJUd+ll3PJTlh64D2gSvHPH3zX4DaOZWjPiHnwJDptnH56EUQi+l3AnsvH1dCLGcgsLuAVy/7drDwOHsb+OEEDsAP+DsbectAhaBFropg/1mh0stF3p69uTPK3/yWqfX0PV5B7ZPhzPrwPdxY5tXJjYEbiAiOYIPe3wIGalaX3NDFgxfVjNG05k57/b9mnMbhvLGgfd58rmuLJ1bt+gWFxMr/rz8Q1yGtM8T/2vRSdniH0dAaBxrjobw08E88W9dzyG3h39bT0ea1dVjoRMQUjM2YqFioZsNwPPAdiFEbeBxoF/+E4QQPYEGUspVQggboA+wrALPrBEMajKIvSF7OXrzKF3ueVkT+c2ToXFvsCuja2QkMg2Z/HDqB3xdfOlR7x5YNx7CjsGIn1XrYTOhdt3WLHToxDOJAQS0+Q/ejTcRdNW6gNjntriooul8Op2giZueJm763L4+BoPkSlQSp0I1r/90aMGmbrWsLGhd34H/pe+kqa0HIcl2NLWTmvibKRUR+rXAPUIIf0ACn0spbwghOgBTpZQjgHPAa0KIt4BMtJj+6aJvqQDo06APdlZ2/BH4B108umhNvr7rrW3OjvjZJEIef139i9DEUP7b5b+If76GU7/BAx9Ay0eMbZqiEqnb820W/tSPZxvWpsG04Qw6u4Lli/W5ufcTJ2oifzfbGut0gmZ19TSrq2doR62vT5ZBciUyUfP8QzXxd4wJYLehIZO+2Zsr/m2zvf62Xo40ddObjfirfvTVlPf+eY8dQTvYNXwXtpa2cHA+bHnHJPq0ZxmyGLpxKFY6K35rNhrd6tHQdjg8vsgk3qQUZWTpQE7HX2esqx16Kz1f9/la25OpziTHwMzGRHWfxt66o3JDP2fC4knJyAIwOfFX/ehNkEFNB7EhcAO7gnfxcOOHoftEuLoXtr4H3t2gfkdjm1gk24O2czXuKrN8J6Jb9yJ4doYhc5TImys9XsX3l6dY3v1jXg/ZzJgtY5jaZSrDWwzP7XFf7Qg9BoBrix483tiLxzsV9Pxz0jxPh8bx65E7wz6+9R1Kt+FbTVAefTXFIA0M/H0gXnovFvdfrC0mx8DCXmBhDRP2gq2DcY0sBCklT/7xJGnpCawPvICFrRM8vxX0tydkKcwGgwHmdwdLa+Ke+5Op/0zln9B/6FG/By+0fQE/d7/qJ/i7P9fSfKcGg03xcaXCwj5nwuJJTtc8/9uzfXzLk+pZCSiP3gTRCR3DfIYx+/hsrsdfp6FDQ6jtrFWS/vgI/P6CFq/XGblXyG3sDN7JhVsX+CTBgIWFNTyzTom8uaPTQY9XYOPLOIYeY94D81h+djlLTi9hzJYxdHDrwOCmg/F19cXHyQer6tCCO/QouLUsUeRBa9Xg426Pj7t9Ac//alS2+IfEc/q2bB+b7Dz/nLCPr6cjPu76yinyKgfKo6/GRCZH8tCahxjdZjRv+r2Zd+DIYi23vusEGDjTeAbehkEaGL7hcVJjrrD+ZiyWYzaDh6+xzVLcDTLT4Nt24NYit8o0NTOVdZfX8ePpHwlLCgPASmeFe2137KzssLOyo45tHerZ1cNT70l7t/a0dWtb9bZKCbOaao30KnFGbE62z+lsz/9UaBxnw+JJTMuu8M0Wf9/suL+vp1bhW1ntHZRHb6K41Xajt1dvNlzewCsdXsnzhLqMg5ircHAuODepNpuzO879xoW4QD6NS8Dy6VVK5GsSljZwz0uw7X3NW/b0w9bSlpEtRzKixQhCEkM4E32Gs9FnuZl0k+SMZJIyk7gad5V9V44T/MdTxOzwJCtJ4uxs4OWXLKouWyfiHCRHQ4PulXrb/Nk+j3XMS/XMyfM/ExbPqZA4Np4MY2VOha+FjuYe+lzhv7eZG94ulV9jojz6as6+kH1M2jGJL3t/Sf9G/fMOGLK0AqTzf2oFSK2HGM9IwHDrGsPWDSbTkMX6hxZj0bCHUe1RGIG0BPimDTS+T6vkLgWJidC9u+RyoNYALQdL6wxa+Fhx6FAViP3BeVprkTfOgKNXJd+8ZAwGSVBMMqfD8mL+p0PjiUvJ4JOhvozq1rBc91UevQnTo34P6tnVY83FNQWFXmehpSsuewzWjIHHvzde5WzEObb+9iSX9YIv2r2kRL6mYmMPXcfD3i8h8iK4NS/xEq3rpSDttorazHQrLl3OYtYsi8ofRH5lN7j4GEXkQfP8c4a357R3kFIScisFe9uqkeTqnROkwEJnweM+j3PoxiGC4oMKHrS2g2d+B6+usPZ5OGmEfnEXt5C1+CEW2kqa2NWnf6fqEUZSGIluL4KlLez/tlSnz59f+MhCgPQ0C+bPN1SicUBmOlzbD036VO59K4gQggbOtats/q4SehNgaLOhWApLVl0oRMht7OE/a6BRLxJ/fYvpzx/BzU2i02mtYadP1z4eVzpSwoG58PNT/OnmSaCljomd38CimmUBKe4ydq5aV9KAX7UmdiVQUtfLqBKOl5lQf8hIqnZCX9UooTcB3O3c6d+4P2svriU+Pf7OE6ztSByymu7LDzFzmS9RUQIptf7gM2dC9+6VLPaJEfDLSNj6LmmtBjHXyYHWLq3p17BfydcqzJ8er2ivB+aUeGpJXS0t9LHsDdlbCUZlE7gLhA4a31t59zQBlNCbCM+1eY7kzGR+u/BbocdnfVuLwCgvUjNrFVhPTdUm/8yaVUmGnN2oFccE7oT+n7KqzQPcSA7nTb830Qn156QAnBpow7aP/gjxN4o9ddIkrfFZYdjaSpoN3MpHhz4i05BZObZd2a11q7R1rJz7mQjqX6aJ0NK5Jd3rdWfluZVkZGXccVyLdRZefZiaqg15rhBhx2H5UFj9DDg2gAl7iev0HxadWkxPz550q9etgg9QmBX3vq31et9f/ID7yZO17pa3i73W9VLw+fuuhCeFcyLiRMVtSo3TUj+b9Kn4vUwMJfQmxHNtniMyJZLNVzffcazECT9RUmuhUBYMBrh+UEvjXNQHwk5Av09g3Hao25IfTv9AQnoCb3R6o2z3VZg/zo2h/Ug4uhQSwos8Ta+HQ4dgyhRtTylnb2nKFG39oeb3YKWzYnfw7orbdO0fkFlK6BXVh8REbSM1/x//1kU9aGTjy49nfuT2+oeSYp0utaLgqxaaaJ/+HaIDNSG/neQYuLIHdn4Ms9vD0gFweQf0/i+8dhJ6vAwWVtxIvMHKsysZ3HQwLZxbVOJPrjAb7nsLsjJK9Or1epgxQ5spm5Wlvc6Yoa3bWdnRtV5XdgXvuuNvvsxc2Q1WtbUstRqGyqOvhmhFJFpsPSf1TNtYFbg1+A79Ww/yT+g/3OuVt6E0aZK28VrkhJ8XpVZRG/ArnN2gHbDWg1O+0Y0psZCglaojdJrnc/+70HLQHT1BZh6ZiU7oeLnDy5X3gyvMC+cmWqzefwn0fB3s3ct1m/u97ufjwx9zNf4qTRyblN+eK7uhYU+wrJoUxuqMEvpqiFZEcqdop6ZCZLA9VttfYa7nXHp69szdAJ08GdauvfO63Ak/M+qC/jN4cAZEnNXmZYafgvhQ7UQhwMpOm+fq4Qse7YucZvVP6D9sD9rOa51eo56+XlX8ChTmwr1vafUd+7+FAZ+V6xa9G/Tm48Mfszt4d/mFPuYKRF0Ev+fKd72Jo4S+GlJcEUlqqiBq53DODprJ1utbGdBoAJAX65w1S9t4LXLCj6U11O+gfZWDtKw0Pjv8GY0cGjG69ehy3UNRg3BpCh1Gao34uk8s+AmylHjYedDKuRW7gnYx1nds+ew4vVZ7bWXcViHGQsXoqyElbawmxlrjU8eH2cdmk2HIy8ApLtZZWSw9vZSghCBe832XTz60LrCHUGXFWQrTps87Wihw16flvsX9De7nZORJolPKUUElJZxaA973aKmfNRAl9NWQEjdWXQSvd3qd4IRg1l5ce3eMAoITgll8ajF96g7i9aHdmTlT2zuo0uIshenj6KX1wDm5CsLLNzK6T4M+SGT5iqdunoHI89D2iXI92xwot9ALIWyEEK8KIfYKIX4p4hxrIcQPQogDQohjQogHy29qzaH4IhItHHOv5710du/MgpMLSM5IrnKbsgxZvPvPu1jprLDeN63IPYRKLc5SmA+93tAmou34sFyXt3RuiYedR/nSLE+vAWEBrR8r17PNgYp49JnAeeAzoKg5YZOBWCllD2AwsEAIYVOBZ9YIii8i0Y4LIXjD7w1iUmP4/tT3VW7TktNLOB5xnGndprHse/ti9hAqoThLYX7UdoZeb8KlLVo+exkRQtDHqw8HbxwkPSu99BdKCafWQtP7tT48NZRyC72UMktKuRVIKea0QcB32eeHAgeBXuV9Zk2hpCKSnJh7O7d2PNr0UZaeXsrpqPJ9JC4NZ6LPMP/EfPo36s+gJoNKLs6q7EZUCvOg2wSwrw9b3tXmKZQRP3c/UjJTuBp3tfQXBf8LcUHgW3PDNlAKoRdC9BVC7C7ky6MU93cB8pfF3QDuGCAqhBgvhPAXQvhHRkaW3nozprQbq1O6TsG1livv/vMuqZlFuNkVIDUzlXf2vYNzLWfe7/4+QohS7CFUuhkKc8CqFvT7CG6c0PrglJEmTlpqZWBsYOkvOr1Ga5vc8pEyP8+cKFHopZQ7pZR9Cvkquq45WzmVrgAADFtJREFUj5sUFHaP7LXbn7FIStlZStnZzc2t9NYrcLB24MMeH3Il7gpzj8+t1HsbpIEP9n/A1birfNTzIxxttEZQpdlDUCgKxXcYNLpXi9UnRZXp0kYOjdAJHYFxpRT6rEw4sw6a99f2B2owVZ11swEYByCEcAe6A/ur+Jk1jh6ePRjefDjLzi7DP7zyxjDOOT6Hv679xRt+b9Cjft7UqNLsISgUhSIEDPwS0hNh+/QyXWptYY23vTdXYq+U7oKz6yEpEto9VQ5DzYtKF3ohRAchRM6EjNmApxDiMPAH8JKUMq2yn6mAtzq/hZe9F2/ufpMrcaX8h1AMay+uZfGpxTzR/AnGtBlT4Fhp9xAUikKp21IbJH58BQQdLtOlTRyblM6jNxhg31fg2gKaP1xOQ80HNRzcjLgef53Rf43G2sKaZQOWlbs9wY7rO3hrz1t0r9+duX3nYqlTBdSKSiYtEeZ1BRsHGL8brIqIBd7G7GOzWXJ6CUdGHcHKwqroE8//CauehqGLoH3N8OiLGw6uCqbMiIYODVn44EIS0xMZv208Malla0sspWTp6aW8sfsNWru05sv7vlQir6gabPQweDZEnoPt/yv1ZU2dmpIls7gef73ok6TUBpTXaaTtCSiU0JsbrVxaMfeBudxIusHTfz7NkfAjpbouIyuD6Qem8/XRr+nXqB9L+i9Bb61iMIoqxOdBbZj44QVweXupLmnq1BSg+PBN4E4IO6YVaVkoRwWU0Jslfu5+LO63GJ3QMXbLWL749wtSMgsvd8gwZLDu0joe3fAo6y6vY0K7Ccy8bya2lqX7KK1QVIgHZ0Dd1rB+UqmycBo5NEIgit+Q3feVlq/ffmQlGmraqLc7M6VD3Q6sGbyGb45+w4pzK1h3eR1d3LvQvX53PPWehCWGcSPpBn+f/4eTax4ibtcqMhLsmeEiiJx0W8dLhaKqsLKFYYth0f2w7kUYuapYL9zW0hYve6+iPfrzf8L1/TDgc7BURfg5qM3YGsDRm0fZdGUTB8MOEpoYmrtuke7ItY9/IeVmfdLTLHLXc9IkVQaN4q7hvwQ2vQGdRmuxe1FUVxV4ZccrhCSGsO7RdQUPxIXAwl5aK+Tnt9U4oS9uM1Z59DUAP3c//Nz9AAiOD+ZW2i3q6+sz+3NnZkXoSL8t4TV/c7IZM4xgsKLm0XksxIXCvi//v727j5GjruM4/v5cz7Z7UjnsLa3Sa4HzDzUEkRaCPEg5AR9oUBG1EQwR5cBCQgKUkEglEYkJjQjGQCgFBWPiAyhgEIKxlpYnBY4ECCAgpCClUCgFjmu53vXrH7MH2+te9zp77czsfV7J/rGzczPfyV0+O/ebmd8X9pgB3RePuur+7ftz79p7Gdw6+MHNAkODcMsZSevCk3894UK+Ho/RTzCdH+nkwPKBdJQ6uObqFk9OZvnRfXFyRr9qKTw4+h9fV3sXg1sHeemdlz5YuOpyePF+OOGKpNmJbcNBP4F5cjLLFQlO+EXSo/iui+C2c2Bg+ym4u/ZMgvz5jc8nt1I+tDz5cvjMdybMPfM7y0E/gXlyMsudSa3wzRvhqAuSJ2ev64ZXn9xmlf323A+A59Y/Dn84Fe44H7q64StuhDAaj9FPYIsWJV2hag3feHIyy8ykVvjCEtj3CPhzD1xzOMw6BD61AGYdStubL/DxlhL/7V0O616B438Kh52dzMVhNfmumwmsry9p/TeyW5TvurHc6HstmdL4qb/CusfeX/zDmTNYP/XD3Hzccthnbnb15YinQLCaPDmZ5d4ee8PRF8JZq+Hcx5L77M95hK65Z/DCpBaGPnZQ1hUWgoduJrjhBie+jdJyb685yQvoevMTDGwdYO27a+mc1plxYfnnM3ozK5wZbTMAWN/vjnRj4aA3s8LpaEsafa/f5KAfCwe9mRVORykJ+tc37Vw7wonKQW9mhdM+pZ1WtXroZowc9GZWOC1qYXppuoduxshBb2aFVC6VPXQzRqlvr5Q0BTgTOBl4OSK2m+VfUiuwDniiavHxETGQdr9mZpBckF3btzbrMgqhkTP6QeBp4GfAaJNHdwJ3R8T8qpdD3swa5jP6sUsd9BExFBF3A7V71CX2BfaWdKek1ZIWpt2fmVm1jlIHGzZvYMvWLVmXknt1g15St6SVNV4zx7D9fmAlsKDyWizp042VbGYTXV8frFh+NE+dcw9TWlspl+GSS5Lltr2GJzWTNB84KyLqnq1Luhx4PCJ+O2J5D9ADMHv27Llr1qxpqCYza17Dk/E9+9yQW2BWyWxSM0lHDA/XVC7ezgceHbleRCyLiHkRMa9cLu/Kksys4JYuTWZcrQ552LYFpm1r3INe0kGSfl95+xRwkqSHSIZwlkXEE6P+sJlZHVdfXbuHArgF5mg8H72ZFUpLS9JBcEefDw3tvnrywvPRm1nTcAvMneegN7NCWbQoufBai1tg1uagN7NCWbw4ubtmZNgP33WzeHE2deWZg97MCqW6BWZbex9oq1tg1uFWgmZWOMMtMNtPvI6bnryJ3lN7kUabicV8Rm9mhVUulRncOsjG9zZmXUquOejNrLDcUnBsHPRmVljlUvIk/ev9nsVyRxz0ZlZY7wf9Zgf9jjjozaywhpuEu3fsjjnozayw2j7URltrmxuQ1OGgN7NCK7eVfTG2Dge9mRVaR6nDQzd1OOjNrNDKpTJvbH4j6zJyzUFvZoXmM/r6HPRmVmgdpQ76B/vp39KfdSm55aA3s0IrtyX30vuC7Ogc9GZWaNOnJp1GNmzekHEl+eWgN7NCmzZ5GgDvDLyTcSX55aA3s0Jz0NfXUNBLukzS/ZIekrSkxueTJV1fWadX0rGN7M/MbCQHfX2pG49IOgGYGRGHS5oE3Cfptoh4rGq1xcDGyjr7ACslHRAR7zVYt5kZ8EHQ923py7iS/Ep9Rh8RdwCLRmxr84jVFgDXVtZ/GXgAODLtPs3MRpoyaQqTWybz9sDbWZeSW3XP6CV1Az+u8dHCiFhXOVNfBiyLiGdGrDMdWFf1/hVg7xr76AF6Km/7JP1nLMXX0AE0y+xGPpb8aZbjgCY8ll56OZ/zs66lUY38XuaM9kHdoI+IFcCKWp9Jmg9cAJwXEbXC+VWSYB/+qp1ZWTZyH8tIviwaIunhiJjX6HbywMeSP81yHOBjyatddSyph24kfRI4DzhplJAHuA34QWX9GcBhwH1p92lmZjsv9cVYkgDvAu6u6r5+BfAicFFELAR+CVwv6V+AgLN9IdbMbPdKHfQRcQHJsE0tCyvrDADfTbuPFBoe/skRH0v+NMtxgI8lr3bJsSgidsV2zcwsJ/xkrJlZk2uaoJf0LUn/lvSIpJ9nXU9akk6W9EdJL2ZdS6Mqv5MHJK2uHFNb1jWlJenCqie8b5A0OeuaGiFpiaSVWdfRKEk3SnpQ0srK68Ssa0pDUqek2yX9U9LfJR08nttviqCXNAe4FDgOmAfMkvSNbKtKbT3Jg2hFD5KPAhcC3RFxFLCGyh1YRSOpA9gTOCIiDgbagK9mW1V6kuYB+2VdxzjpBI6JiPmV1+1ZF5TSMuDiiDgG+Dbw0nhuvCmCHvgScEtEvBXJRYdrga9lXFMqEXFPRBT+QZaI2AAcGRGbKotagU07+JHciojXI+JHERGS9iAJ/SeyrisNSSXgSuCirGsZJ+3ANZJWSfpVEf9rlDQTmAqcLmkVcBnw7njuo1mCfkxP4NruFRGbJU2VdBVQAm7IuqZGSPod8ALwD+DpjMtJaylwZUS8lnUh4+RhYElEfJ7kv+HtJlcsgNnAZ4EbK8exltqzEaTWLEE//ATusJpP4NruJWkW8Bfgrog4KyKGsq6pERFxCslj5p8DTsu4nJ0m6YvAXhFxc9a1jJeI6ImI4WGOPwGHZllPShuBJyPi0cr7m4FDxnMHzRL0fwO+Lmla5f3pJE/lWkYkTQV+A/RExJ0Zl9MQSQdJOg0gIvqBZ0iGDIpmAVCWdKukW4EDJN2UdVFpSSpJurTqwviXgd4sa0rpOWBqZbYBgGOBR3ew/k5rmvvoJZ1C8gDXALC68kBXYUlaFxEzs64jLUnDM5c+W7V4RUT8JKOSUqsa155Lcp3hf8D3K6FfWJJWRsT8rOtohKRzge8BbwEvA2dGROEmppd0IHAVybWs14DTI+Ktcdt+swS9mZnV1ixDN2ZmNgoHvZlZk3PQm5k1OQe9mVmTc9CbmTU5B72ZWZNz0JuZNTkHvZlZk/s/pCDsn92LaJ0AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import random\n", "import sklearn.linear_model as lm\n", "import matplotlib.pyplot as plt\n", "\n", "f_cos = lambda x: np.cos(2.0*x) # サンプルデータを作るためのベース関数\n", "\n", "# データ数\n", "n_tr = 20\n", "x_max = 5.0 # xの範囲 [0, x_max]\n", "x = np.linspace(0., x_max, n_tr)\n", "y = f_cos(x) + np.random.randn(len(x))*0.3\n", "\n", "\n", "# 単純な多項式近似\n", "lrp = lm.LinearRegression()\n", "\n", "for deg in [2,5,10]: # 最大べき\n", " power_matrix_x = np.vander(x, deg+1) # 計画行列の作成\n", " lrp.fit(power_matrix_x, y)\n", " # モデルの係数表示\n", " print('フィッティング関数の次数=' + str(deg))\n", " print('切片= ' + str(lrp.intercept_))\n", " print('係数= ' + ' '. join(['%.3f' % c for c in lrp.coef_]))\n", " # 予測\n", " x_lrp = np.linspace(0., x_max*1.2, 100)\n", " y_lrp = lrp.predict(np.vander(x_lrp, deg+1))\n", " # 近似曲線の描画\n", " plt.plot(x_lrp, y_lrp)\n", "\n", "# データの描画\n", "plt.plot(x, y, \"ob\", ms=8)\n", "plt.ylim(-2.0,2.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### scikit-learnのリッジ回帰\n", "\n", "マニュアルページ:\n", "https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "フィッティング関数の次数=2\n", "切片= 0.4384266447149643\n", "-0.00744 -0.15606 0.00000\n", "フィッティング関数の次数=5\n", "切片= 0.9101288226801906\n", "0.00980 -0.14679 0.60775 -0.49492 -1.01123 0.00000\n", "フィッティング関数の次数=10\n", "切片= 1.1100008906771928\n", "0.00050 -0.00942 0.06648 -0.19974 0.16152 0.24039 -0.03334 -0.37098 -0.57807 -0.57282 0.00000\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "# リッジ回帰 alpha(正則化係数)の既定値は1.0 \n", "ridge = lm.Ridge(alpha=1.0)\n", "\n", "for deg in [2,5,10]: # 最大べき\n", " ridge.fit(np.vander(x, deg +1), y) # リッジ回帰\n", " # 予測\n", " x_lrp = np.linspace(0., x_max*1.2, 100)\n", " y_lrp = ridge.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", " # モデルの係数表示\n", " print('フィッティング関数の次数=' + str(deg))\n", " print('切片= ' + str(ridge.intercept_))\n", " print(' '. join(['%.5f' % c for c in ridge.coef_]))\n", " plt.plot(x, y , 'ok', ms=10)\n", " plt.title('Ridge Regression')\n", "\n", "# サンプルデータのプロット\n", "plt.ylim(-2.0,2.0)\n", "plt.plot(x, y, \"ob\", ms=8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Lasso回帰\n", "\n", "ウェイトの項を単に絶対値$\\frac{\\lambda}{2}||{\\bf w}||$にしたものをlasso回帰と呼ぶ。\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "フィッティング関数の次数=2\n", "切片= 1.328534433159252\n", "係数-0.00781 -0.15329 0.00000\n", "フィッティング関数の次数=5\n", "切片= 1.328534433159252\n", "係数-0.00302 -0.00681 0.07253 0.43024 -1.86808 0.00000\n", "フィッティング関数の次数=10\n", "切片= 1.328534433159252\n", "係数0.00000 -0.00001 -0.00003 -0.00014 -0.00058 -0.00136 0.00547 0.09690 0.36810 -2.04308 0.00000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/anaconda3/lib/python3.6/site-packages/sklearn/linear_model/_coordinate_descent.py:476: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Duality gap: 2.5831544566500413, tolerance: 0.0013460881585131905\n", " positive)\n", "/opt/anaconda3/lib/python3.6/site-packages/sklearn/linear_model/_coordinate_descent.py:476: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Duality gap: 2.024045194988752, tolerance: 0.0013460881585131905\n", " positive)\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model = lm.Lasso(alpha=0.01)\n", "for deg in [2,5,10]: # 最大べき\n", " model.fit(np.vander(x, deg +1), y) # リッジ回帰\n", " # 予測\n", " x_lrp = np.linspace(0., x_max*1.2, 100)\n", " y_lrp = model.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", " # モデルの係数表示\n", " # モデルの係数表示\n", " print('フィッティング関数の次数=' + str(deg))\n", " print('切片= ' + str(lrp.intercept_))\n", " print('係数' + ' '. join(['%.5f' % c for c in model.coef_]))\n", " plt.plot(x, y , 'ok', ms=10)\n", " plt.title('Lasso Regression')\n", "\n", "# サンプルデータのプロット\n", "plt.ylim(-2.0,2.0)\n", "plt.plot(x, y, \"ob\", ms=8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lassoの場合、この程度のばらつきの場合だと、既定の加重係数(alpha=1.0)は大きすぎるようだ。また、データ数を多くしないと収束がわるという警告がでる。\n", "\n", "\n", "全体として、次数を上げた場合、加重を含む最適化を行っているため、過学習が抑えられている。\n", "\n", "係数alpha (上の式では$\\lambda$)は外からあたえるパラメータであり、**ハイパーパラメータ**と呼ばれる。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 演習\n", "\n", "データ作成のベース関数やデータ数、ハイパーパラメータ(正則化係数alphaやフィッティング関数の次数)を変えて振る舞いを確かめてみよう。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 補足 : 外れ値について\n", "\n", "極端な外れ値を含む場合は、別の対応が必要である。\n", "\n", "参考:scikit-learnの事例より\n", "\n", "https://scikit-learn.org/stable/auto_examples/linear_model/plot_huber_vs_ridge.html#sphx-glr-auto-examples-linear-model-plot-huber-vs-ridge-py\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "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.6.10" }, "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": 2 }