Skip to content

Instantly share code, notes, and snippets.

@tok41
Created October 13, 2021 15:11
Show Gist options
  • Save tok41/e85bfa347898ce0ecb22b4f76b76840a to your computer and use it in GitHub Desktop.
Save tok41/e85bfa347898ce0ecb22b4f76b76840a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "2eb6c0b6-e90c-4b5e-b2bd-eab89b048c15",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy import stats\n",
"\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"sns.set()\n",
"c_list = sns.color_palette().as_hex()\n",
"color_num = len(c_list)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "79671237-798f-46ce-9ada-90b6ae9afefd",
"metadata": {},
"outputs": [],
"source": [
"np.random.seed(1)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b25ae414-4428-4d0a-9d77-6772774f98b6",
"metadata": {},
"outputs": [],
"source": [
"def plot_estimated_function(x_sample, y_sample, w_est, d, \n",
" ylim=(-80, 50), \n",
" xmin=-2, xmax=6, w_set=None, d_set=3, ax=None):\n",
" if ax is None:\n",
" fig = plt.figure(figsize=(7, 4))\n",
" ax = fig.subplots(1, 1)\n",
" \n",
" x_plt = np.linspace(xmin, xmax, 1000)\n",
" if w_set is not None:\n",
" y_plt = func(x_plt, w_set, degree=d_set)\n",
" ax.plot(x_plt, y_plt, label=\"setting\", color=c_list[0])\n",
" y_est = func(x_plt, w_est, degree=d)\n",
" ax.scatter(x_sample, y_sample, color=c_list[1]);\n",
" ax.plot(x_plt, y_est, label=\"MLE\", color=c_list[2])\n",
" ax.set_ylim(ylim)\n",
" ax.legend();\n",
" return (x_plt, y_est)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8486a578-862d-4337-98cd-7b670c987bc1",
"metadata": {},
"outputs": [],
"source": [
"def design_matrix(x, degree):\n",
" \"\"\"多項式\n",
" \"\"\"\n",
" return np.array([np.power(x, d) for d in np.arange(0, degree+1)]).T\n",
"\n",
"def func(x, w, degree=3):\n",
" \"\"\"データ生成元の真の関数\n",
" \"\"\"\n",
" phi = design_matrix(x, degree)\n",
" y = np.dot(phi, w)\n",
" return y\n",
"\n",
"def observation_model(x, w, degree=3, var=0.5):\n",
" \"\"\"実際のyの生成モデル\n",
" y ~ N(y | mu=f(x, w), var=v)\n",
" 分散は既知と仮定する\n",
" \"\"\"\n",
" ty = func(x, w, degree)\n",
" y = stats.norm.rvs(loc=ty, scale=np.sqrt(var))\n",
" return y"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "46b80040-e7d0-41d4-a901-74c9d79ff20b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbUAAAD7CAYAAADtjwp1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAA0xUlEQVR4nO3deWBU5b3/8ffMZN8XkpAFCJCFhCBLAkEQZDESLYvUBQS0tlit1lar9ie21AX0Km29XqkLvRZFC7VUERQQJArKErYAQsISAiRk3xOSyZ6Z8/sDzRUlkJCZnDkz39df5EwyzydjzCfnzHOeR6coioIQQghhB/RqBxBCCCEsRUpNCCGE3ZBSE0IIYTek1IQQQtgNKTUhhBB2Q0pNCCGE3ZBSE0IIYTec1A7QFTU1DZjNPbudLjDQi6oqo4USWZ/ktT6tZdZaXtBeZslrfZbIrNfr8Pf3vOxjmig1s1npcal99zxaInmtT2uZtZYXtJdZ8lqfNTPL5UchhBB2Q0pNCCGE3dDE5cfLaWpqwGisxWRq79Lnl5frMZvNVk5lOZbOazA44eXlh7v75a9DCyGEPdBkqTU1NVBfX4OfXxDOzi7odLqrfo2Tk572du2UmiXzKopCW1srtbUVAFJsQgi7pcnLj0ZjLX5+Qbi4uHap0BydTqfDxcUVP78gjMZateMIIYTVaLLUTKZ2nJ1d1I6hOc7OLl2+XCuEEFqkyVID5AztGshrJoRQi9ms8ML7GXx1uNCq42i21LQsJyebL79Mu+TYypV/p62trePj//3ft/jyy229HU0IIazibPEFzhXXobfy39ZSairIyTnNjh2Xltq77759Sak98MBDTJ16c29HE0IIqziSU4lBryNxSIhVx9Hk7Edb09zczAsvPEte3jkMBif69x/A0qUvs2XLJj7++ENMJhNeXl48+eQifH39+Mc/VtDY2MB9981jxIiRmEwXZzk+9NAv0On0/O1vf+dvf/tvYmOHcPvtc1i58u/k55+nocFIcXER4eERLF26DDc3N4xGIy+99Dy5uecICgqmT58g/P0DeOSRx9R9UYQQ4luKonDkdAVDBvjj6e5Mo7HZamPZRantySxh97GSK36OTgfKNazMcsN1oYwfFnrFz9m/fy/19fWsXv0hAHV1dRw9eoTt29N44423cXFxYe/ePbz00hLeeusd7r//V6Sn7+KFF/7c8Rzr13/IW2+9g4eHx2XHyM4+ydtvv4+XlxePP/4I27ZtYebM2bz77tt4e/vwr3+to67uAgsX3sONN07p/jcqhBBWUlLVSFlNEymj+1l9LIuV2rJly/j8888pKipi48aNxMTEAJCbm8uiRYuora3Fz8+PZcuWERkZaalhbUJUVDT5+Xm88soyRo5MZNy4G9izZydnzuTwwAP3ARf/Uqmvr7vmMcaMGYu3tzcA8fEJFBVdfLP1yJEMHnvs9wD4+PgyYcKNPftmhBDCwo7kXLxHdkRUH6uPZbFSmzp1Kvfeey/z58+/5Pizzz7LvHnzmDVrFp988gnPPPMM77//vqWGBWD8sKufTVnz5uvw8AjWrPmQjIyD7Nu3h//93zeYMGESP/nJTO6//1cWGcPFxbXj33q9HpPJBFwsS5nVKISwZd/kVBLZ15sAHzerj2WxiSJJSUmEhl5aLFVVVZw4cYLp06cDMH36dE6cOEF1dbWlhrUJ5eVl6PUGJk6cxG9/+wS1tTWMHz+BrVs3U15eBoDJZOLUqZMAeHp6YjReuvWCh4cnDQ3d345h1KgktmzZBFy87Llr184efjdCCGE5tcYWzhbXMTLa+mdpYOX31EpKSggJCcFgMABgMBgIDg6mpKSEgICALj9PYKDXJR+Xl+txcup+H1/L13RFXt453nxzOQBms5l77/0FSUlJ/OpXv2bRoicwm020tbUxdWoKCQlDSU5O5t//Xs19993NyJGJPPHE/2PevAU8+uhDuLq68uabbwMX9wxyctKj1+s6/v3d8e8+vv/+B3nhhee45567CA0NY/jw4fj4eHf6ver1eoKCvK3yOljrea1Ja5m1lhe0l1nyWtahM1UATE2O7Mhqzcw6RbmW6ROdmzJlCitWrCAmJoasrCyeeuopNm/e3PH4rbfeyl/+8heGDh3a5eesqjJesv9Oael5+vYd0K1c9rr2Y3t7OyaTCVdXVxoajDz88P088sjvGD06+bKffy2vXVcEBXlTUVFv8ee1Jq1l1lpe0F5myWt5r/7nKKXVDbz84PXodDqLZNbrdT862fmOVc/UQkNDKSsrw2QyYTAYMJlMlJeX/+gypbh29fV1PPHEbzGbzbS2tpCSktppoQkhRG9qbG7nRF41UxMjeu29f6uWWmBgIHFxcWzatIlZs2axadMm4uLiunXpUVyZv38A77yzWu0YQgjxI0fPVGIyKyQNCe61MS1Wai+88ALbtm2jsrKSn//85/j5+bF582aee+45Fi1axJtvvomPjw/Lli2z1JBCCCFsWEZ2Of7ergwK8+m1MS1WaosXL2bx4sU/Oj548GA+/PBDSw3zLR2KYkank1W+ukNRzIBM/xdCWF9zaztZudVMHB6GvhdvO9JkK7i4uFFbW0l7exsWnudilxRFob29jdraSlxcrH+fiBBCHDtbRVu7maTYoF4dV5PLZPn7B2E0XqC6ugyz2dSlr9Hr9ZjN2pn9aOm8er0Bd3cvvLx8LfacQgjRmYzsCnw8nImO8OvVcTVZajqdDm9vP7y9/br8NVqY+vp9WssrhBDfaWkzkXm2iusT+qK39l4zP6DJy49CCCFsV9a5alraTCT28qVHkFITQghhYYdOl+Pl7kxsP79eH1tKTQghhMW0tZs5eqaSEdF9cDL0fsVIqQkhhLCYE3nVNLWYSIrtvRuuv09KTQghhMVkZJfj7upEfKS/KuNLqQkhhLCItnYzh09XMlKlS48gpSaEEMJCss5V0dTSTnJ8iGoZpNSEEEJYxP6TZXi5OxM3QJ1LjyClJoQQwgJaWk18c6aSpCHBql16BCk1IYQQFnDkTAWtbWaS49SZ9fgdKTUhhBA9duDExW1molW44fr7pNSEEEL0SENzG5nnqhg9JLhXt5m5HCk1IYQQPXI4uwKTWVF11uN3pNSEEEL0yP6TZQT7uRPZ11vtKFJqQgghrt2FhlZOnq9hTHwwOpUvPYKUmhBCiB7IOFWOokBynPqXHkFKTQghRA/sO15KRJAn4UFeakcBpNSEEEJco5KqBs4W1zEuIVTtKB2k1IQQQlyTvcdL0emwiVmP35FSE0II0W1mRWFvVilDIwPw93ZVO04HKTUhhBDddjq/lqq6FsYN66t2lEtIqQkhhOi29KxS3FwMjIwOUjvKJaTUhBBCdEtLq4mD2eUkDQnG1dmgdpxLSKkJIYTolsM5FbS0mhifYFuXHkFKTQghRDelZ5US6OOm+or8lyOlJoQQostq6ls4kVfNuIS+qq/Ifzm9Umq5ubnMmTOHadOmMWfOHPLy8npjWCGEEBa273gpigLjbPDSI/RSqT377LPMmzePzz//nHnz5vHMM8/0xrBCCCEsSFEUdh4rISrCl5AAD7XjXJaTtQeoqqrixIkTvPvuuwBMnz6dpUuXUl1dTUBAgLWHF71EURTqG1uprmuhqq6ZmvoWmlvbaW410dJmQq/TYTDocNLrcXd1wtfTBW9PZwK83Qj2d8fJIFfChbB1pwtqKatuZPr1cWpH6ZTVS62kpISQkBAMhovTPg0GA8HBwZSUlEipaVhTSzun8ms4W1RHflk9hRUN1BpbfvR5ep0OVxc9igLtJgWTyYxymc8J8ncnNMCDyFBvBof7MijUB3dXq/94CiG6YefREtxdDSTFBqsdpVOa+K0RGGiZ1Z+DgtTfwK47bC1vcaWRXd8UcehkOdn5NZjNCk4GHf1DfEiMCyYy1JeQAHeC/DwI9HPD080ZZyf9JXssKYpCY3M7tcYWautbKK9ppLDcSGF5PQVl9Rw9W4migE4HA0N9GTUkmMQhwQyJDLDK2ZytvcZXo7W8oL3MkvfyjE1tHMouZ+ro/kSE+/XouayZ2eqlFhoaSllZGSaTCYPBgMlkory8nNDQrq/qXFVlxGz+4d/33RMU5E1FRX2PnqM32UrehuY20jNL2XeilNySi3ki+3pzS3J/hkYGMDjcF2cn/Y/ytje3caG5rdPndQGCvV0I9nYhob9fx/HG5nbOlVzgbFEdp87XsP6rM3y0PQd3VydGRAWSHN+X+Eh/ixScrbzGXaW1vKC9zJK3c9sPF9LabmZMbFCPxrREZr1e1+nJjtVLLTAwkLi4ODZt2sSsWbPYtGkTcXFxcunRxhVXNvDFoULSs0pobTMzIMSbuyZHMSYumAAfN6uN6+HmRMLAQBIGBjLrhoE0Nrdz8nw1R89Ucfh0BXuPl+Hl7szoIcFMGB5KZF8fq2URQlykKAo7vymmf4gXA/ra9plsr1x+fO6551i0aBFvvvkmPj4+LFu2rDeGFdegqLKBT3adIyO7AieDnrHxIUxNjFDtB9nDzYnE2GASY4O5Z1osWblV7D9Rxp7MEnYcKWJgqA+TR4YzJi4YFxtbrkcIe3G+rJ78ciMLbo5RO8pV9UqpDR48mA8//LA3hhLXqLK2ifW7zrHveBmuLgZmjItkalIEPh4uakfr4OykZ2R0ECOjg2hsbiM9q5QdR4p457OTrN2ew+RREdxkY5mFsAc7j5bg4nTxj1xbp4mJIsJ62trNbD2Qz+b0PABSk/uTmtwfbxsvBg83Z25K6sfUxAiy82v54lAhm9Pz2HYgn4nDw5g2pj+Bvta7TCqEo2hpNbHveClJQ4LxcHNWO85VSak5sBN51bz/eTblNU0kxQYxd2q0Vd8vswadTseQAf4MGeBPSVUDn+07z44jRew4UsT4YaHMumGgTW1gKITWHDhVRnOriYnDw9SO0iVSag6otc3ER1+d5YtDhQT7u/P4XcNJGBSodqweCw30ZOFP4rnthkFs3Z/PV98Usfd4KTclRnDL2AF4udv+X5lC2Jodh4sIDfQgOsJX7ShdIqXmYPJK63h74wlKqhq5KTGCOyYNtrsJFoG+bsy/OYZpY/qxYXfutwVXzE+uH0BKUj+cnWT1EiG64lxxHXml9cxPibnkflNbJqXmIBRF4eujxfwr7TTeHi48MWcEQwfa920VffzcuX96PKlj+rPu67N89NVZdh4t5u6p0QyP6qN2PCFs3vbDhbi6GGx28eLLkVJzAG3tJv657TS7j5WQMCiAB2YMdahLcRHBXjx653Cycqv4V1oOr310jOsGB/LrO0fgOK+CEN1T39jKgZPlTBgeqqkl67STVFyTWmMLyz86Rl5pPTPGRTLrhoHo9dq4jGBpCQMDWbLQny8yCvl0Ty6//st2bkkewPRxkXJJUogf2H2shHaTmSkjw9WO0i1SanasuLKBV/9zFGNTG7/56TBGxgSpHUl1TgY9qcn9uX5oCJ+kn2djeh4Z2eXcd8sQoiP81I4nhE0wmxV2HCliSH8/woMss/Zub5E/T+3U6YJaXlp9iDaTmafmj5RC+wFfL1eemJ/I7+4aTmubiZdXH2b1tmyaWtrVjiaE6o6dq6LyQjNTRkWoHaXbpNTs0DdnKvnrv7/B28OFP96TKOsjXsGwQYEsvT+ZqYkR7DhcxOJ/7CfrXJXasYRQ1fbDhfh5uTAiWnsTqqTU7Myh7Are+DiTfsGe/OGeRIL83NWOZPPcXJyYlxLDH+5JxM3FwH//5yhrtp2mpc2kdjQhel1JVQNZ56qZNCJck5v3ai+x6FTGqXJWfJJFZF9vnpgz0qFmOFrC4HBfnr1vNClJ/fjycCHPv3uQ3JI6tWMJ0avSMgpxMuiZpLEJIt+RUrMTFwvtOAPDfHh8zgg83GQO0LVwcTZw903RPDl3BC1tJl58/xCf7s7FZDarHU0IqzM2tZGeWcL1Q0Pw8bTt9V87I6VmB7Jyq/j7p8cZFO7D43cN19Q9JbYqPjKApQvHMCY+mA27c3l5zWEqLzSpHUsIq/rqSBGt7WZuHt1P7SjXTEpN484WXeD1jzMJ6+PJY3dch5uLFJqleLg588CMoTw4cyhFFQ08985BDp+uUDuWEFbR1m7my0OFJAwM0Nw0/u+TUtOwogoj//PhUfw8XXn8ruGa2BZCi5LjQ3ju56MJ8nfn9Y8z+dcXp2lrl8uRwr4cOFnGhYZWbh6j3bM0kFLTrAvGFv7nw6M4Oel5Yu4IfL1kexVrCvb34A8LErkpKYIvMgr5r9WHKK9pVDuWEBahKArbDhYQ3seToZHaXhNWSk2DWttM/O3jTOqb2njsjuEybb+XODvpmXdTDI/8dBgVNU089+5BMk6Vqx1LiB47db6GgnIjKaP7aWY1/s5IqWmMWVF457OT5BbX8cCMoQzo6612JIczKiaI534xmtBAT97ckMWHX52R2ZFC07YcyMfHw5nrh4aoHaXHpNQ05tPduRw4Wc4dkwYzSpa+Uk0fX3cWzR/FpBFhbNmXz3+vPUp9Y6vasYTotvOl9WSdqyZldD+cnbS/t6KUmoZ8k1PJp3vyGD+sL6nJ/dWO4/CcnfTcmzqEn98yhJzCCyxZJTdrC+3ZvDcPd1cDk0dqb53Hy5FS04jy2ibe3nSCASHe3DstVvPXve3JhOFhPL1gFAAvrT7MrqPFKicSomtKqho4lF3BlFERdrNgg5SaBrS2mXjz40x0wMOzE+ziEoG9GRjqwzP3jSamny/vbjnF+1tP0W6S99mEbduyLx8nJz0pSdqexv999lHNdm512mnyy408esd1MtNRZa056bQeXIdirELnFYjL6NtxiR4HgLeHC4/fNYJ1O8+yZV8+xVWN/Hp2At4e2lxuSNi3qgvN7D1eyqSR4ZpdEuty5EzNxu07XsruYyVMHzeA4VHa2wbCnrTmpNOyaxWK8eLWNIqxipZdq2jNSe/4HL1ex52TonhgRjzniutY+l4GheVGtSIL0anPD+QDkDrGvt6fl1KzYRW1TfxzWzZR4b7MumGg2nEcXuvBddD+gxmO7a0Xj//A2KF9WTR/FG0mMy+uPsSRHFleS9iOuoZWdh4tZuzQEAJ93dSOY1FSajbKZDLz9qYTAPxyRjwGvfynUtt3Z2hdPT4ozIdnfjaa0AAPXl+Xyea9eSiKYs2IQnTJlv3naTOZ+cn1kWpHsTj5TWmj/vNlDmcKL7Dg5lh5H81G6LwCu3UcwN/blUXzRzE6Lph1X5/j7Y0naJXNR4WKao0tbD9cxLihfekb4KF2HIuTUrNB54rr+HdaNmOHhnD90L5qxxHfchl9Ozj94A11J5eLx6/0dc4GHpw5lJ9OHMS+E2Us+9dhaupbrJhUiM59tvc8JpPCjPGRakexCik1G9PWbuadz04S4O3KgpRYteOI73GJHofrhPs6zsx0XoG4TrivY/bjleh0OqaPi+SRnw6juLKRF97PIL+s3tqRhbhEdV0zX31TzPhhfQn2t7+zNLBAqX3yySfMmDGD+Ph4Vq9efcljTU1NPPbYY6SkpJCamsqOHTt6Opzd25ieS3FlA7++U3avtkUu0ePwmvcK3g+swmveK10qtO8bFRN0yY3aR89UWiOmEJe1ed95FEVhxrhItaNYTY9LLS4ujldffZXp06f/6LGVK1fi6elJWloaK1asYPHixTQ0NPR0SLt1vrSez/bmMz6hL0lx2l9YVFxe/xBvFt+bRN8AD5avO8YXGQVqRxIOoPJCEzu/KWbC8DD62PH79D0utZiYGKKiotBfZnbeli1bmDt3LgCRkZEkJCSwc+fOng5pl9pNFy87ens4M2dqtNpxhJV9N4FkRFQf/vVFDmvSTmM2y8xIYT2b0vPQ6WD69QPUjmJVVr2+VVxcTHh4eMfHoaGhlJaWdvt5AgMts7V4UJDtbtPy77RsCsqN/PHnYxjY/+Imfbac93K0lhfUz/zsA+NYtek4G74+y4XGNn6/IPGKO5irnfdaaC2zPebNL627uIjDDYOIHaz+7h7WfI2vWmqzZ8+muPjyC7Smp6djMFh/HcKqKmOP/4oNCvKmosI235gvq25kbVo2Y+KCGRziRUVFvU3nvRyt5QXbyTzz+gF4uxpYk5bDk6/t5NE7riPA58c3xNpK3u7QWmZ7zfv2+kxcXQxMHRmm+vdniddYr9d1erJz1VJbv379NQ8cFhZGUVERAQEXzzxKSkpITk6+5uezR4qisCbtNM5OeubKZUeHNXlUBH383HlrQxYvvJ/Bo3cMlw1ghUVk59fwzZlKbr9xkEOsQ2rVKf2pqamsXbsWgLy8PDIzM5kwYYI1h9ScQ9kVZOVWc9sNg/DzclU7jlDRsEGB/GFBIga9jpfWHOKbHJkZKXpGURT+s+Ms/t6u3GRHK/FfSY9LbdOmTUycOJGtW7fy2muvMXHiRM6cOQPAwoULqaurIyUlhQcffJAlS5bg5WWZ98fsQXNrOx98mUO/YC+mJIZf/QuE3YsI9mLxvUmEBXryt3XHSDtYIEtriWuWkV1Bbkkdt00YiKuzY2xZ1eOJItOnT7/sdH4ADw8Pli9f3tMh7Nane/KoqW/hodsSZG1H0cHXy5Wn5o/i7Y0n+ODLHMpqGrn7Jrk0Lbqn3WRm3VdnCQ/yZHxCqNpxeo38JlVJUWUDaQcLmHBdKFHhvmrHETbG1dnAw7MTSB3Tn+2Hi1j+USaNzW1qxxIa8kVGIeW1Tdw5aTB6vU7tOL1GSk0la7fn4Ops4I5Jg9WOImyUXqfjrilR3Jsay/Hcap56fTfVdc1qxxIacMHYwqd7crlucCDXDXasfRil1FSQea6KrHPVzBwf6RCzkUTPTBoRzmN3XUd5TSNL38/gfKl2ppwLdXz01Vna2s0OOaNaSq2Xmcxm/rP9DMH+7kxJjFA7jtCIhIGB/PmRCTh9OzNSNh0VnTlTdIE9WaXcPKafXW4tczVSar1s19ESiiobuHNSFE4GeflF1w0I9WHxvUmE9/Hk9XWZbJOZkeIHzN/e9+rn5WLXixZfifxW7UVNLe2s33WOmAhfRsU41nVuYRm+Xq78v3mjGBUTxL+/zGF12mlMZrPasYSN2H2shPOl9dw5OQo3F8fc5UNKrRdt3nue+sY25kyNRqdznNlIwrJcnQ08NDuB1OT+7Ph2ZmRTS7vasYTK6hpb+eirs0RH+DI23nF3+ZBS6yXVdc1sO1jA9UNDGBjqo3YcoXF6nY67Jkfxs29nRr60+rDMjHRwa7/MoamlnXunxTr0H81Sar1kY3oeiqIwe8IgtaMIO3LjiHB+d9dwquqaWPp+BnmldWpHEirIyq1i7/Eybh07gPAgx161SUqtF5TVNLL7WAmTRoTb9eZ8Qh1DBwbw9IJEnPR6Xl5zmCOnZWakI2lpM/H+1mxCAjyYPs6+90rrCim1XvDJ7lwMep38wAmriQjyYvG9iRdnRn4sMyMdySe7c6m80Mx9qbE4OznG+o5XIqVmZYXlRvYfL+OmpH74yir8woo6ZkbGysxIR5F9vprPD+QzcXgosf391Y5jE6TUrGz9rnO4uRpITe6vdhThAFydDTx0WwK3yMxIu9fSZuLVDw7j7+3KXZMdb+WQzkipWdHZ4gscyakkdUx/vNyd1Y4jHIRep+POS2ZGHpKZkXZo3VdnKapo4Be3xuHh5pj3pF2OlJoVfbo7Dy93Z4fZnE/Ylv+bGdnM0vcyOFt8Qe1IwkJOnq/hi0OFTB8/kPjIALXj2BQpNSvJLakj81wV08b0w91V/ooS6hg6MIA/LEjE2UnPsjVH2JNZonYk0UONze28s/kkIf7u/Gx6vNpxbI6UmpVsSs/D082JKaNk0WKhrvAgL565bzTREb6s3HySf3+ZIxNINEpRFFZtPUVNfQv3T4932KWwrkRKzQoKyo0cyankpiQ5SxO2wcvdmd/dNZypiRFsO1jA/3x4jAbZdFRzvv6mmIxT5cyeOJDBsrnwZUmpWcGm9DzcXAzclCRnacJ2OBn0zE+J4b5bhnDqfA0vvJdBcWWD2rFEFxWUG/ngyxyGDgzglrFyz2tnpNQsrLiygYxT5UxNjMDTTWY8CtszcXgYv797JE0t7bz4zwyOnqlUO5K4ipZWEys+ycLD1YlfTo9H78BrO16NlJqFbd6bh7OznpTRMuNR2K6Yfn786WejCfJzZ/lHx9i8N09WILFRiqLw7paTlFY18ssZ8fh4uqgdyaZJqVlQRW0T+06UMWlEOD4e8oMnbFugrxtPL0hkdFww674+x+sfZ9LYLDdq25qtB/I5cLKcn944SKbvd4GUmgVtO1iAXqdj2hhZPURog6uzgQdnDmXu1GiOna1iyXsHKSg3qh1LfCvrXBUffXWWpCHB3Crvo3WJlJqFGJva2HWsmLHxIfh7yxqPQjt0Oh03j+7H7+8eSUubiRffz2BvVqnasRxeeU0jKz45TngfTxbeGufQe6R1h5Sahew4XEhrm1nO0oRmxfTz47n7RjMw1Ie3N53gn59n09Yu97OpwdjUxv98eAydDh65/TpcXWT1/a6SUrOAtnYTXx4qJGFQABHBjr1Bn9A2Xy9Xnrx7BKnJ/dlxpIiX1xym8kKT2rEcSlu7ieXrjlF5oYnf3H4dwbIHY7dIqVnAnqxS6hrbuEXO0oQdMOj13DU5il/PTqC0uoFn3zlIxqlytWM5BLOi8Pamk5wpvMD90+OJ6eendiTNkVLrIbOi8PmBAgaEeDNkgOxnJOxHYmwwz/58DKGBHry5IYv3tp6ipc2kdiy7pSgKa788Q8apcu6aHMWYuBC1I2mSlFoPHc2ppKy6kdTk/vJGrrA7wX7uLJo/ilvG9ufrb4pZ+l4GhTI70irW78olLaOAqYkRTBsj97leqx6X2vPPP09qaiozZ85k7ty5ZGZmdjzW1NTEY489RkpKCqmpqezYsaOnw9mcbQcLCPRxJWlIkNpRhLAKJ4OeOydF8cScETQ0tbH0/Qy2Hy6Um7UtaFN6HpvS85hwXSh33xQtfyD3QI9LbeLEiWzcuJFPP/2UBx98kN/97ncdj61cuRJPT0/S0tJYsWIFixcvpqHBftaaKyg3kl1Qy5RRERj0ctIr7NvQgQE8/4sxxPb3Y/W207z6n6Oy+agFbDuQz8c7zzF2aAg/Sx0iS2D1UI9/E0+ePBln54trHI4YMYLS0lLM325rsWXLFubOnQtAZGQkCQkJ7Ny5s6dD2owvDxXi4qRnwvAwtaMI0St8PF343Z3DuefmGE4X1vKnlQfYk1kiZ23XQFEUNu/N49/bz5AUG8TCn8Sh10uh9ZRFTy/WrFnDpEmT0H971lJcXEx4eHjH46GhoZSW2sdNncamNvYdL2Xs0BC83GXhYuE4dDodk0dFsOQXY4gI8mTl5pP8bV0mF4wtakfTDEVR+PCrs6z7+hzXDw3hgZlD5WqPhVx1s6/Zs2dTXFx82cfS09MxGC7eFLh582Y2btzImjVrLJsQCAy0zL1fQUHeFnkegF07cmhtN3PHTbEWfd7vs9bzWovW8oL2MttS3qAgb/4SFczGXWd5/7OTPPPOQe6flcDkxIhL3hOypcxdYe28JpOZtz4+xuf78/nJ+IE8cNuwHp2hae31BetmvmqprV+//qpPkpaWxquvvsqqVavo06dPx/GwsDCKiooICLi4CGdJSQnJycndDllVZcRs7tnljaAgbyoq6nv0HN8xmxU27jpHTD8/vJz1Fnve77Nk3t6gtbygvcy2mnd8fAgDg71497OTvPrBYbam53LPtFj6BnjYbObOWDtvY3M7f//0OJnnqvjJ9QP46Q2RVFVd+2xSrb2+YJnMer2u05OdHp/v7tixg5deeomVK1cSEXHpppipqamsXbsWgLy8PDIzM5kwYUJPh1Td0TOVVF5o5qZE2QRUCICwPp48fU8i90yLJa+0nmdW7ufT3bm0tct9bd+pqG3ipdWHOJFXzb2psdx+42CZ5WgFVz1Tu5qnn34aZ2dnfvvb33YcW7VqFf7+/ixcuJBFixaRkpKCXq9nyZIleHlpfxmpLw4V4u/tysiYPlf/ZCEchF6nY/LIcEZF9+GDL3PYsDuXg9kVzJk8mIRBgWrHU9XJ8zW8tSELs1nh8buGEydbyFhNj0tt3759nT7m4eHB8uXLezqETSmqbODk+Rpuv3GQvLErxGX4ernyq1kJ3DCsig++PMN//+cowwYFMmdKFGF9PNWO16vMZoVP9+SycU8efQM9+M3t19E3wEPtWHatx6XmaHYcLsTJINP4hbiahEGBvJHYn7Wfn+TTPXk8s/IAk0aGMeuGgXg7wCa6NfUtvL3xOKfyaxmX0JcFN8fg5iK/cq1NXuFuaGkzsfd4KUlDgmRnayG6wNlJz7Qx/RmX0JdPdufy1ZFi9h4vJSWpHzeP7oeHm/3dDqMoCruPlfDv7Wcwmc384tY4brguVO1YDkNKrRsOniynqcXEjXKWJkS3eHu4sODmWCaPimDDrnN8uiePLzIKmTamHzcl9cPd1T5+FVXWNvHe1lMcz6shJsKXn98aR4hcbuxV9vGT1Eu+PlpEaKCHbAchxDUK7+PJr2cPI7+snk9257J+Vy7bDhYweVQ4U0dF4OulzV3jm1ra+WzfebYdLECv17Hg5hgmjQyXJa9UIKXWRYXlRs4W1TF3SpRMwxWih/qHePOb268jt6SOTel5bE4/z9b9+STHhzBtdH/NbLbbbjKzO7OEDbtyqWtoZezQEO64cTABPm5qR3NYUmpd9PU3xTgZdIwbJtfGhbCUgaE+/Ob26yiraSTtYAG7M0vYk1lKTIQvN1wXxughwbi6GNSO+SMtrSZ2Hi1m64F8aupbiAr35be3X8egMB+1ozk8KbUuaGkzkX68lKTYYFnnUQgrCPH3YMHNsdw2YRC7jhaz81gJ73x2kjVfnCY5LpgxcSHE9vdT/TaakqoGdh4tZk9mKcamNmL6+fHzW4YwdGCAXMGxEVJqXZBxqpymlnZuHCETRISwJi93Z24ZO4DU5P7kFF5g97ES9p8oZ+fREjzdnBgR3YdRMUEM6e/fa5NLaupbOJJTwYETZZwuvIBBr2NEVB9SRveT99dtkJRaF3z9TTF9A2SCiBC9RafTEdPPj5h+fsy/OYbjudUcyq7g8OlK9mSWotfpGBjqzZAB/kRH+DEgxMtik0wam9s5W3yBnMJajudWk1tycZ3CvgEe3DFpMOMT+mp2QosjkFK7isIKI2eKLjBHJogIoQpXZwOjYoIYFRNEu8nM6YJaTp6v4VR+DVv25bNZOQ9c3Outf7AXwf7uBPq6Eejjhp+XK+6uTri7GHBxNqAoCiazQrtZoaGpjbqGVuoaWimvbaK4soHy2maKK4wo0FGct984iFExQYQGOtZqKFolpXYVu4+VYNDrGJfQV+0oQjg8J4Oe+MgA4r9dO7GppZ38snryy4zkl9VTUG7kbHEdTS3t3Xpeg15HsL87kWG+JMUGERPhy8AwH1kBRIPkv9gVtJvM7D1eyojoPg6xrI8QWuPu6kRsf39i+/tfcryxuZ3qumZqG1pobjHR1NpOa5sZvV6HQa9Dr9Ph5e6Mj6cL3h7O+Hu74mTQa3IrF3EpKbUryDxXRX1jG+NlGr8QmuLh5oSHmxcRaON+N2E5UmpXsCezFB8PZxIGyjYRQmhNa046rQfXoRir0HkF4jL6dlyix6kdS1iZ7J3SifrGVo6eqWTs0L44GeRlEkJLWnPSadm1CsVYBYBirKJl1ypac9JVTiasTX5bd2L/iTJMZkUuPQqhQa0H10F766UH21svHhd2TUqtE3sySxkQ4k0/jaxBJ4T4P9+doXX1uLAfUmqXUVhu5HxZPeOGyTR+IbRI5xXYrePCfkipXcaerIv3po2ND1E7ihDiGriMvh2cfnAbjpPLxePCrsnsxx+4eG9aGcOj5N40IbTqu1mOMvvR8Uip/cDx3GrqGloZLyuICKFpLtHjpMQckFx+/IH9J8rwdHNi2GC59i6EEFojpfY9La0mDudUMHpIsNybJoQQGiS/ub/nyJkKWtvMJMsEESGE0CQpte/Zf7wMf29XomXfNCGE0CQptW8Zm9rIyq0mOT4EveybJoQQmiSl9q2MU+WYzIrcmyaEEBompfatfSfKCA30kGWxhBBCw6TUgOq6Zk4X1DI2PgSdXHoUQgjN6vHN12+99RafffYZBoMBRVF48MEHufXWWwFoamri6aef5vjx4xgMBp566ikmT57c49CWtv9kGYDMehRCCI3rcaktWLCAhx56CICysjJuueUWxo8fj6+vLytXrsTT05O0tDTy8vKYP38+27Ztw9PTs8fBLWn/8TIGhfkQ7O+hdhQhhBA90OPLj97e3h3/bmxsRKfTYTabAdiyZQtz584FIDIykoSEBHbu3NnTIS2quLKB/HKjTBARQgg7YJG1Hz/44APee+89SktL+a//+i/8/f0BKC4uJjw8vOPzQkNDKS0ttcSQFnPwVDk6IGlIsNpRhBBC9NBVS2327NkUFxdf9rH09HQMBgN33303d999N9nZ2Tz55JNcf/31HcVmCYGBlpmRGBTk/aNjR85UEj8okOiBfSwyhiVdLq8t01pe0F5mreUF7WWWvNZnzcxXLbX169d3+cliY2MJDg7mwIEDTJs2jbCwMIqKiggICACgpKSE5OTkboesqjJiNivd/rrvCwrypqKi/pJjxZUN5JfWMz8l5kePqe1yeW2Z1vKC9jJrLS9oL7PktT5LZNbrdZ2e7PT4PbWzZ892/LugoICTJ08SFRUFQGpqKmvXrgUgLy+PzMxMJkyY0NMhLSYj++Klx1ExQWpHEUIIYQE9fk9t+fLlnDlzBicnJwwGA4sXL2bw4MEALFy4kEWLFpGSkoJer2fJkiV4ednOzc0Zp8qJivDF39tV7ShCCCEsoMel9tprr3X6mIeHB8uXL+/pEFZRUtVAYUUDd98UrXYUIYQQFuKwK4pknCoHIClWZj0KIYS9cNhSO3iqQi49CiGEnXHIUiutbqSwwihnaUIIYWccstT+79KjzHoUQgh74rClNjjchwAfN7WjCCGEsCCHK7Xymkbyy42MlkuPQghhdxyu1A6frgTkhmshhLBHDldqR3Iq6B/sRR8/d7WjCCGEsDCHKrW6hlbOFF5gpJylCSGEXXKoUvvmTCUKMDLa9lbkF0II0XMOVWpHTlfQx9eNfsG2s/6kEEIIy3GYUmtqaed4Xg0jo4PQ6XRqxxFCCGEFDlNqh0+V024yMypGLj0KIYS9cphS25dVgpe7M1ERvmpHEUIIYSUOUWrtJjMHT5QyPCoQg94hvmUhhHBIDvEbPruglobmdkZFy1R+IYSwZw5RakdOV+DibCB+YIDaUYQQQliR3ZeaoigcyalkVGwQrs4GteMIIYSwIrsvNZ1Ox6BQH2ZNHKx2FCGEEFZm96UG8OufDiNhsEzlF0IIe+cQpSaEEMIxSKkJIYSwG1JqQggh7IaUmhBCCLshpSaEEMJuSKkJIYSwG1JqQggh7IaUmhBCCLvhpHYAa2vNSaf14DrqjdXovAJwGX07LtHj1I4lhBDCCuy61Fpz0mnZtQraWwFQjFUXPwYpNiGEsEMWu/y4f/9+4uLiWL16dcexpqYmHnvsMVJSUkhNTWXHjh2WGq5LWg+u6yi0Du2tF48LIYSwOxY5UzMajfz1r39l4sSJlxxfuXIlnp6epKWlkZeXx/z589m2bRuenp6WGPaqFGNVt44LIYTQNoucqb388sssXLgQf3//S45v2bKFuXPnAhAZGUlCQgI7d+60xJBdovMK7NZxIYQQ2tbjM7Wvv/6auro6UlNT+eqrry55rLi4mPDw8I6PQ0NDKS0t7fYYgYFe15TNbeoCKjevQGlv6Timc3Klz9QFeAd5X9Nz9qYgDWT8Pq3lBe1l1lpe0F5myWt91sx81VKbPXs2xcXFl31s69atvPLKK7z77rsWD/Z9VVVGzGal+18YMhKXCT+j9eA6lO/NfmwOGUlzRb3lg1pQUJA3FTae8fu0lhe0l1lreUF7mSWv9Vkis16v6/Rk56qltn79+k4fy8jIoKKigjvvvBOAmpoaduzYQW1tLY888ghhYWEUFRUREBAAQElJCcnJydfyPVwzl+hxuESP0+R/fCGEEN3To8uPSUlJ7N27t+PjRYsWkZCQwIIFCwBITU1l7dq1DBs2jLy8PDIzM3nllVd6llgIIYTohFVXFFm4cCF1dXWkpKTw4IMPsmTJEry8ru39MSGEEOJqLHrz9csvv3zJxx4eHixfvtySQwghhBCdkrUfhRBC2A1NLJOl1+ts6nl6i+S1Pq1l1lpe0F5myWt9Pc18pa/XKYpyDXPlhRBCCNsjlx+FEELYDSk1IYQQdkNKTQghhN2QUhNCCGE3pNSEEELYDSk1IYQQdkNKTQghhN2QUhNCCGE3pNSEEELYDYcqteeff57U1FRmzpzJ3LlzyczMVDvSFX3yySfMmDGD+Ph4Vq9erXacTuXm5jJnzhymTZvGnDlzyMvLUzvSFS1btowpU6YQGxvL6dOn1Y5zVTU1Nfzyl79k2rRpzJgxg0ceeYTq6mq1Y13Rww8/zMyZM7ntttuYN28eJ0+eVDtSl7z++uua+bmYMmUKqampzJo1i1mzZrFr1y61I11RS0sLzz77LDfffDMzZszgT3/6k3UGUhzI9u3bldbW1o5/T506VeVEV5adna3k5OQov//975V//vOfasfp1D333KNs2LBBURRF2bBhg3LPPfeonOjKDh48qBQXFyuTJ09WsrOz1Y5zVTU1Ncq+ffs6Pn755ZeVp59+WsVEV1dXV9fx77S0NOW2225TMU3XZGVlKQsXLlQmTZqkiZ8Lrfz8fmfp0qXKiy++qJjNZkVRFKWiosIq4zjUmdrkyZNxdnYGYMSIEZSWlmI2m1VO1bmYmBiioqLQ6233P1NVVRUnTpxg+vTpAEyfPp0TJ07Y9JlEUlISoaGhasfoMj8/v0t2jB8xYgTFxcUqJro6b2/vjn8bjUZ0OttedLe1tZUlS5bw7LPP2nxWLWpoaGDDhg08+uijHa9vnz59rDKWJlbpt4Y1a9YwadIkmy4MLSgpKSEkJASDwQCAwWAgODiYkpISAgICVE5nf8xmMx988AFTpkxRO8pV/fGPf2TPnj0oisI//vEPteNc0WuvvcbMmTPp16+f2lG65cknn0RRFBITE3n88cfx8fFRO9JlFRQU4Ofnx+uvv87+/fvx9PTk0UcfJSkpyeJj2VWpzZ49u9O/YNPT0zt+8W7evJmNGzeyZs2a3oz3I13NK8R3li5dioeHBwsWLFA7ylW9+OKLAGzYsIE///nPvP322yonurwjR46QmZnJk08+qXaUblmzZg2hoaG0trby4osvsmTJEv7617+qHeuy2tvbKSgoID4+nqeeeoqjR4/yq1/9irS0NLy8vCw6ll2V2vr166/6OWlpabz66qusWrXKaqe/XdWVvLYuNDSUsrIyTCYTBoMBk8lEeXm5pi7vacWyZcs4f/48K1as0NQVhttuu41nnnmGmpoa/P391Y7zIwcPHuTcuXNMnToVgNLSUhYuXMhLL73EDTfcoHK6zn33/5iLiwvz5s3joYceUjlR58LCwnBycup4m2L48OH4+/uTm5vLsGHDLDqWdv7PsIAdO3bw0ksvsXLlSiIiItSOYxcCAwOJi4tj06ZNAGzatIm4uDi59Ghhr776KllZWbzxxhu4uLioHeeKGhoaKCkp6fh4+/bt+Pr64ufnp16oK3jggQfYvXs327dvZ/v27fTt25eVK1fadKE1NjZSX18PgKIofPbZZ8TFxamcqnMBAQEkJyezZ88e4OKM6aqqKgYMGGDxsRxqk9CxY8fi7Ox8yS/cVatW2eRfj3CxIP785z9TV1eHs7Mz7u7uvPPOO0RFRakd7RJnz55l0aJF1NXV4ePjw7Jlyxg0aJDasTr1wgsvsG3bNiorK/H398fPz4/NmzerHatTOTk5TJ8+ncjISNzc3ACIiIjgjTfeUDnZ5VVWVvLwww/T1NSEXq/H19eXp556iqFDh6odrUumTJnCihUriImJUTtKpwoKCvjNb36DyWTCbDYzePBgFi9eTHBwsNrROlVQUMAf/vAHamtrcXJy4rHHHuPGG2+0+DgOVWpCCCHsm0NdfhRCCGHfpNSEEELYDSk1IYQQdkNKTQghhN2QUhNCCGE3pNSEEELYDSk1IYQQdkNKTQghhN34/8LoHYxaBO22AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 504x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"degree = 3\n",
"w_set = [0, 2, -6, 1]\n",
"var_y = 10.0\n",
"\n",
"N = 3\n",
"x_min, x_max = -2, 6\n",
"x_sample = stats.uniform(loc=x_min, scale=(x_max-x_min)).rvs(N)\n",
"y_sample = observation_model(x_sample, w_set, degree=degree, var=var_y)\n",
"\n",
"x_plt = np.linspace(x_min, x_max, 1000)\n",
"y_plt = func(x_plt, w_set, degree=degree)\n",
"\n",
"fig = plt.figure(figsize=(7, 4))\n",
"ax = fig.subplots(1, 1)\n",
"\n",
"ax.plot(x_plt, y_plt, label=\"setting\", color=c_list[0])\n",
"ax.scatter(x_sample, y_sample, color=c_list[1]);\n",
"ax.legend();"
]
},
{
"cell_type": "markdown",
"id": "002d13e3-3340-4829-841f-2bb64fa1b568",
"metadata": {},
"source": [
"## 最尤推定(numpy.array)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "8d5413f8-86cf-4e75-98c0-c27ce4c4bc17",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[26.74957281 3.67629247 -5.20741295 0.08003123]\n"
]
}
],
"source": [
"d = 3\n",
"Phi = design_matrix(x_sample, d)\n",
"\n",
"pp = np.dot(Phi.T, Phi)\n",
"ppi = np.linalg.inv(pp)\n",
"ppp = np.dot(ppi, Phi.T)\n",
"w_ml1 = np.dot(ppp, y_sample)\n",
"\n",
"print(w_ml1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "65175957-c1a0-4e02-b0ad-30712b5237d1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[26.74957281 3.67629247 -5.20741295 0.08003123]\n"
]
}
],
"source": [
"d = 3\n",
"Phi = design_matrix(x_sample, d)\n",
"\n",
"pp = np.matmul(Phi.T, Phi)\n",
"ppi = np.linalg.inv(pp)\n",
"ppp = np.matmul(ppi, Phi.T)\n",
"w_ml1 = np.matmul(ppp, y_sample)\n",
"\n",
"print(w_ml1)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "73a4111e-8957-458a-92e6-a7386b919668",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbUAAAD7CAYAAADtjwp1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABEAklEQVR4nO3dd3hUZfr/8ffMJJM26b33QCChhBIEKYJIkA4qiuDqgopt1V3dZctXd9X9Kbu6riiKKGVVRBQFBERBQUGalAAJCRBCAiG99zpzfn+g2CgJmeTMJPfrurhIZsg5nxwmued5zlM0iqIoCCGEEF2AVu0AQgghhLlIURNCCNFlSFETQgjRZUhRE0II0WVIURNCCNFlSFETQgjRZUhRE0II0WXYqB2gNcrLazGZ2jedztPTQGlpjZkSdTzJ2/GsLbO15QXryyx5O545Mmu1GtzdnS75nFUUNZNJaXdR++E41kTydjxry2xtecH6MkvejteRmaX7UQghRJchRU0IIUSXYRXdj0IIYe0URaG8vJimpgbAPN1vRUVaTCaTWY7VWVqfWYNeb4+7uzcajabVx5eiJoQQnaCmphKNRoOvbxAajXk6yWxstLS0WFdRa21mRTFRUVFCTU0lzs5urT6+dD8KIUQnqK+vwdnZzWwFravTaLQ4O7tTX9+2kZJydYUQohOYTEZ0OukcawudzgaTydimr5GiJoQQnaQt94bEtV0vKWpCCCGuKiPjJF99te1njy1b9ibNzc0XP3/77SV89dXWzo72M1LUhBBCXFVGxil27Ph5UVux4q2fFbV58+YzZsxNnR3tZ6SDVwghuqGGhgaee+5psrPPoNPZEBISyrPPvsCWLZv45JOPMBqNGAwGnnhiAa6ubrz99hLq6mq5++5Z9OvXH6PxwgjGBx74LRqNlldffZNFi16iZ89YZsyYybJlb3Lu3Flqa2vIy8slMDCIZ59diMHgSE1NDc8//w+yss7g7e2Dl5c37u4ePPzwY+3+vsxe1F577TVeffVVNm7cSExMDFlZWSxYsICKigrc3NxYuHAhYWFh5j6tEEJYjd0p+Xx7LL/dx9FoQPnFlLfr+/gzLN7/ql+7f/9eqquree+9jwCoqqri6NFktm/fxuLFb6HX69m7dzfPP/8Mb7yxnHnz5rNnzy6ee+5fF4+xbt1HvPHGchwdHS95jpMn03nrrXcwGAz8/vcPs3XrFqZPn8GKFW/h7OzC++9/TFVVJXPnzmHkyNHXfiF+wqxF7fjx4xw5coSAgICLjz399NPMmjWLKVOmsGHDBp566ineeecdc55WCCFEG0VFRXPuXDYvvbSQ/v0HMHTo9ezevZPTpzO47767gQsTxqurq675HIMHD8HZ2RmAXr3iyM09D0By8kEee+xJAFxcXBk+fGT7vpmfMFtRa2pq4plnnuHFF1/kN7/5DQClpaWkpaWxYsUKACZOnMizzz5LWVkZHh4e5jq1EEJYlWHxrWtNXU17Jl8HBgaxatVHHDx4gH37drN06WKGDx/FhAmTmTdvfruzAej1dhc/1mq1GI0XhucritJhI0HNNlDklVdeYfLkyQQHB198LD8/H19fX3Q6HQA6nQ4fHx/y89vf7BZCCHHtiooK0Wp1jBgxit/97g9UVJQzbNhwPv98M0VFhQAYjUZOnEgHwMnJiZqan0+EdnR0ora27dvIJCQMZMuWTcCFbs9du3a287v5kVlaasnJyaSkpPDEE0+Y43C/4ulpMMtxvL2dzXKcziJ5O561Zba2vGB9mTsqb1GRFhsb8w84v9ZjZmef4fXXFwFgMpm4667fMnDgQObPf4gFC/6AyWSkubmZMWPGEhfXm8TERD744D3uvvsO+vcfwB/+8EdmzZrNo48+gJ2dHa+//hYajQatVoONjRat9sePgYufA8ybdz/PPfd35sy5DX//APr27YuLi/MlvxetVtum/xONovzyNmPbLV26lHfeeQe9Xg9AQUEBnp6e/PnPf+app55i//796HQ6jEYjiYmJbN26tU3dj6WlNe3ef8fb25ni4up2HaMzSd6OZ22ZrS0vWF/mjsxbUHAWP79Qsx7TWtd+bGhowmg0YmdnR21tDQ8+OI+HH36cQYMSf/XvL3XdtFrNZRs7Zmmp3Xfffdx3330XPx89ejRLliwhJiaG1atXs2nTJqZMmcKmTZuIjY2V+2lCCNGNVVdX8Yc//A6TyURTUyNjxyZdsqBdiw6fp/b3v/+dBQsW8Prrr+Pi4sLChQs7+pRCCCEsmLu7B8uXv9chx+6QorZ9+/aLH0dGRvLRRx91xGmEEEKIn5FlsoQQQnQZUtSEEEJ0GVLUhBBCdBlS1IQQQnQZskq/EEJ0Q7fcMonm5iY++eSzi6s+bd78Kc8//wyPP/4kDg6Ov1rAGODw4YM8+eSjBAf/OHcsMjKK//u/Zzo1/+VIURNCiG7K09OL777by3XXXQ/Ali2b6NEj9qpfFxYWwbJl73Z0vGsiRU0IITrZ/vxD7M0/0O7jXGrrmev8B5HoP6BVXz9+/CQ++2wT1113PXl5uTQ2NhAREdnuXGqSoiaEEN1UQsJA1q37iKqqKrZs2URS0oSLCxhfSXb2Ge6+e9bFz0eOvIF77rm3I6O2mhQ1IYToZIn+A1rdmrqS9q79qNHA6NFj+eqrrXz11VbeeGNZq4qaJXc/yuhHIYToxsaPn8iyZUuIiIjE1dVN7TjtJi01IYToxgIDg7j33gfp1StO7ShmIUVNCCG6uSlTpl/y8b17dzNt2s0XP7/55kkMGDDoV/fUvLy8ePHFRR2eszWkqAkhRDe0du3GSz7+17/+/eLHN9886ZL/5quvdndEJLOQe2pCCCG6DGmpCVWYFBMtJiNGpYUWkxEFBZ1Gd+GPVodOo0WrkfdcQoi2kaImzKLFZKSoroSKxsoLfxoqKW+spKqpirrmeupa6qlvufB3Q0sjCspVj2mj0eFg44CjrQMONg442NhjsHXCzc4VVzsX3O1ccbVzxcPeHRe9AY1G0wnfqRDXTlEUeZ22gfLLmeWtIEVNtEmzsZm82gJya/IpqCuiqK6YwrpiSuvLMCo/ny/jYOOAq94ZR1tH3OxcCTD4XShOOjtstDbft8gutMy0aDAqJoyK8fsWnJFmY/OPxbD5wp+iumIqG6toUYw/O5e9zg4fRy98HL3xcfTGz9GHYOdAvBw8pMUnLIJWq8NobMHGxlbtKFbDaGxBq9W16WukqInLMikm8moKOFOZzbnqXHKqc8mrLcD0ffGy0ejwdvQiwMmfYaEDceJC6+mHFpS9jV2H5aptrrvYKiytL6eovpiiuhLOVJ7lUOHRiy1Be509Qc7+BDsHEmwIJNItDE97D3m3LDqdg4OB6uoK3Nw80cgbratSFBPV1eU4OBja9HVS1MRFRpORc9XnOV2RxemKM2RWZlPf0gCAk60jIc5B3Og58mKB8HRwv9gK8vZ2pri4ulNyajVanPUGnPUGgp0Df/V8k7GZgrpCcqpzOV+dR051Lt/m7qfZ1AyAq96FKLdw+gb1xM8mAH8nX2nNiQ5nMLhSXl5MYeF5aEX3e2totVpMpmtfUUQNrc+sQa+3x2BwbdPxpah1c5WN1aSVnSSt9ATpZRnUt9QD4OvoTYJPH6LcIoh0DcPD3t1qWjd6nS0hzkGEOAddfMykmMivLSSzIpvMyixOV2RxqOgoAM62BmI9Y+jl0YNYjxgMeie1oosuTKPR4OHhY9ZjduabSXPp6MxS1LqhwtoiDhelcKwklXPVuQC46J3p692bXh49iHaPwEXvrHJK89JqtAQa/Ak0+DMi6LoLN6Adm9h/JoX0slMcLz3BdwWH0aAh1CWYOM+e9POJx9/JV+3oQog2kKLWTRTUFpFcdIzDRcfIqy0AINwllEkRSfT27EGgwb9bdcFpNBq8DV4M8R/IEP+BmBQT56rPk1Z6krTSk2zO2samrK34OfrQ3yee/j59CHDys5rWqhDdlRS1Lqy2uY6DhUfYl3+Ac9W5aNAQ4RrKLdGT6e8Tj5td2/qquzKtRkuYSwhhLiHcHD6WysYqjhanklyUwufZ29mS/RU+jl4M9k1gsN8APB3c1Y4shLgEKWpdjEkxkVZ6kn35B0kpSaNFMRJkCGBG9CQSfPpIIWslVzsXRgQNZUTQUKqbajhanMrBwiNsytrKpqytxLhFkug/gH7e8R02ylMI0XZmKWrl5eX88Y9/5Ny5c+j1ekJDQ3nmmWfw8PAgKyuLBQsWUFFRgZubGwsXLiQsLMwcpxU/UdNcy968A+zM3UtZQzkGWyeGB15Hov9Agp0D1I5n1Zz1Bq4PHML1gUMorS/ju4LD7Cs4xLvpH7Lm1HoG+vRjRNBQuc5CWACNci1Ttn+hoqKCkydPkpiYCMDChQuprKzk//2//8ddd93FjBkzmDJlChs2bODjjz/mnXfeadPxS0trMJnaF9PaRgm1Nm9OdR7fnN/NwcJkmk0tRLtFMCJoKH28emGj7byGuLVdX2hfZkVROFN5lr35BzhYeIRmUzPhLqGMCLqO/j59sO2Aa9/drrEaJG/HM0dmrVaDp+el56+Z5SfPzc3tYkED6NevH6tXr6a0tJS0tDRWrFgBwMSJE3n22WcpKyvDw8PDHKfulhRFIb3sFFvP7iCj4gx6rS2JfgMYETSUQIO/2vG6BY1GQ6RbGJFuYUyPmsC+gkPsOr+X/6V9wMcZG7k+IJGRwcO63ChSISyd2d9OmkwmVq9ezejRo8nPz8fX1xed7sIyJzqdDh8fH/Lz86WoXQOTYiK5KIVtZ3eQU5OHm50r06ImMNR/EI62jmrH67YcbR0ZHTycUUHDOFl+mp3n9/LF2R18mbOTRL8BjAkZga+jt9oxhegWzF7Unn32WRwdHZk9ezZpaWlmOeblmplt5e1tXe+af8jbYjKyM3s/G9K/IL+mCH9nH+YPmsOI0MHY6CxnrI+1XV8wf2ZfnwGM6DGA/OoiNp78km+y9rIn7zsGBfZlcs+xxHhFtOv4co07nuTteB2Z2ay/ERcuXMjZs2dZsmQJWq0Wf39/CgsLMRqN6HQ6jEYjRUVF+Pu3rYusu95TKyyq5HDhUTZlbaW4vpRg50Dmxs2mn3ccWo2W8rJ6tWNeZG3XFzo2sw0OTAudxBj/UXyTs5tvcvfyXe4RerpHMyHiJiJcQ9t8TLnGHU/ydjyruKcG8PLLL5OamsrSpUvR6/UAeHp6Ehsby6ZNm5gyZQqbNm0iNjZWuh6vQlEUDuYe5b3k9eTVFhDg5Mf8PncT5xkrk3+tjIvemUmRSYwNvYFv8/ax7ezXvHRoMbEeMUwIv4lw1xC1IwrRpZhl9GNGRgYTJ04kLCwMe3t7AIKCgli8eDGZmZksWLCAqqoqXFxcWLhwIRERbeuC6U4ttdMVWaw7vZnsqnP4OHgxIeImEnz6WPxqH9ZyfX9KjcwNLY3syt3LtnNfU9tcRy/PHkyKGPezdSovR65xx5O8Ha+jW2pmKWodrTsUtZL6MtZnfkZy0THc7Fy5vc8kejn1RtfGvYTUYunX91LUzNzQ0sjO83v48tw31LbUMcg3gUkR4664Uolc444neTue1XQ/imvT0NLAF2d3sD1nF1o0TAgfy40hIwn087S6F6toPXsbO24Ku4HhQUPYevZrduTsIrnoKCODh5EUOlpGswpxjaSoqURRFL4rOMz6zM+oaqpmkG8CUyKTcLd3Uzua6EQONg5MiRzPiMDr2HRmK9vP7WJv3gGSwsYwMmhop06gF6IrkJ8YFRTUFvHByU/IqDhDmEsI98X/RgYMdHPu9m7M6XUbNwRfz/rMz/jk9CZ25+3n1pgpxHrEqB1PCKshRa0TNRmb+eLsdrad/Rq9Ts+sHjO4LmCQxQ8CEZ0nyDmAh/vNI7UknbUZn/Lakbfp5x3H9KhJeGN985GE6GxS1DpJetkpPji5jpL6Ugb5JjAjeiLOevNMKhddT5xXLD08otl+biefZ3/F8dKTTKtOYqjnEGx1tmrHE8JiSVHrYPUt9XySsYk9+QfwcfDikX730tMjWu1YwgrYam0YFzaawX4JfHJ6Ex+mbmS7wx5m9ZhBD48oteMJYZGkqHWg9LJTrEpfS0VjJWNDRjEhfKy8yxZt5m7vxty42Uww5bJk/3ssOrKU6/wHMT1qgoySFOIXpKh1gIaWBtad3sy3efvxdfTmDwMeJPwalkUS4qfifXvyl8G/Z0v2l3x57htSS9O5LWYq/b3jZaUZYRXyS2txdnXo0HNIUTOzjPIzvJO+hvKGCsaEjGBi+Dj00joTZqLX2TIlcjwJPn15/8RHLEt9j3ivXtzeY5rsai4sWlZ+Ff/v3UPMnRzHkJ4dt2uFDLszE6PJyMYzX/BK8ptoNVoeT3iA6VETpaCJDhHsHMATAx5mWtQETpRl8Nz+//BdwWGsYIEg0Q01NhlZujENV4OeGwZcfUm49pCWmhmU1Jex8vhqsqrOkug3gNtipmBvY692LNHF6bQ6bgwZSR+v3rybvob/pX3A0eLj3N5jmoysFRZl9VcZFJXV8eQd/TE46qmvbeywc0lRa6eDBcmsPrkOgHt63cFAv/4qJxLdjY+jF48nPMBX53ay6cwX/LMii1k9Z9DHu7fa0YTgu/RCdh7NY/yQEHqGXn5tU3ORonaNmoxNrDm1nn35Bwl3CeWe3nfg6SBb6gh1aDVaxoaOopdnD/6X9gFvpvyPIf4DuTV6svQaCNUUldexcssJIgNdmDa8fRvktpYUtWtQVFfC26nvkluTT1LoaG4OH2s1q+mLri3Q4M8fBz7CZ1lfsvXsDjIrsvht7zsJcenY+xhC/FKL0cSSDcfRajTcP7k3NrrOGcIhA0Xa6GhxKgsPLKK8oYIH+tzDpMgkKWjCothobZgcmcRjCfNpNrXw4qHFbD+3UwaRiE619utMsguq+e2EWLw6eBj/T0lRayWjycj605+xNOUdfBw9WTDoUeK8YtWOJcRlRbmF8+fBj9Hbsycfn97EG8dWUN1Uo3Ys0Q0cOV3C1gM5jEkIIiGm44bvX4oUtVaobqrh1SNvse3c11wfkMjvEx6U+2fCKhhsnbgv/i5ui5nKybIMnv/uZU6Vn1Y7lujCSirqWbYpjRAfA7eNjuz080tRu4rcmnz+dfBVsqrOcVfsTO7oOUOWuhJWRaPRMDJoKE8MfAR7G3sWJb/FlqwvMSkmtaOJLqap2cjidamYFHhgahy2Np1/a0aK2hUcLU7lxUOLMZpa+H3CAyT6D1A7khDXLNg5gD8NepSBvv3ZlLWVN4+tpK65Tu1YootQFIV3t57kbGE1907qha+HOuuSSlG7BEVR2JL1FUtT3sHf0Zc/DvodoS7BascSot3sdHp+02smM2Omkl6WwQsHFpFTnat2LNEFfH0kj90pBUweFka/KC/VckhR+4UmYxMrjr/PpqwvGOjbj8cS5suaeqJL0Wg0jAgayuMJ8zEqRl46tJi9+QfVjiWs2OncSt7fdor4CE8mXx+uahYpaj9R3VTDf5Pf5HDRMaZEjOfuXnfI2o2iywp3DWXBoEcJdwnlvfQPef/ExzSbWtSOJaxMZU0jr69LwcPFjnsn9UKr8o4RMvn6e4W1RSw+upyqpmrujZ9DX+84tSMJ0eGc9QYe7jePjWe+YNu5r8mvLeDe+Ltw0TurHU1YgaZmI4s+TqGusYW/3DoAg4P6jQBpqQGZFdm8dOh1Go2NPNr/filoolvRaXVMjbqZuXGzyanO418HXiWnOk/tWMLCKYrC8s/Syc6v4r5JvQnxtYw3Qt2+qCUXpbDoyFKcbB15YsDDhLuGqB1JCFUk+PTh9wMeQEHhP4cWc6QoRe1IwoJt+DaL79KLmDEqstMnWF9JpxS1rKwsZs6cybhx45g5cybZ2dmdcdqr2n5uJ8tS3yPEOZA/DHgIb0dPtSMJoaoQ5yD+OPB3BBr8eSv1XbZkfSnLa4lf2ZdWwKe7sxkW78f4RMtqCHRKUXv66aeZNWsWX3zxBbNmzeKpp57qjNNelqIorDu9mY9Pb6KvdxyP9LsPg95J1UxCWApXO2ce7X8/g/0S2JS1leXHV9FkbFI7lrAQp3MrWb75BDHBbvwmqScalQeG/FKHDxQpLS0lLS2NFStWADBx4kSeffZZysrK8PDo/KWmTIqJ1Sc+Zk/+AUYEDuXWmMloNd2+F/aamEwKtQ3NVNc1U1jVyPn8SmobWmhqNtLcYqK5xURTiwlFUdBqNWg0GrQa0Go16G102NvpcNDb4GBng4OdDoODLa5OdjjY6SzuB6W7sdXZclfsTAKc/NiQuYWyhgrm97lbNh/t5vJLa3nlo6N4ONvx0LS4Tlt5vy06vKjl5+fj6+uLTndhuRSdToePjw/5+fmtLmqenub5QXLzsOfVfSvZl3+YGb1u5ra4iRb9y9PbW/0br0aTQmFpLVn5VZwvqqawtI6i8joKy+ooLq/HaLpy15SNToNWo8GkKJhMClf55wDobXV4uNjh7myPl5sDfp6O+Hs64e914Y+Hi73Z/t8s4Rq3RWfnneUziSi/YBbtW87Lya/z55EPE+Ds26ZjyDXuWJ2Vt7Synv+uPYatjY7nHhiGv9e19251ZGarGNJfWlqDqTW/Da/A2V3P8zteJ73sFDOiJjLabwQlJZa7Yrm3tzPFxdWdek5FUSgoqyPjfCVn8irJKaolt6SGpuYf1wh0cbTFy82BEB8DA2K8cXXSY3C0JdjfFWNTC072tuhttehtdNjaaNFqNb86h6JAU4uR+kYj9Y0t1De1UN/YQnVdM5U1TVTUNFJZ20RlTSMnskvZfTQP00/u6+httQR4OhHkYyDI20Cw94WPnR31bfp+1bjG7aFW3nC7SH7X736WHFvBX7f+i/v73E2kW1irvlauccfqrLx1Dc08v+owVbVNLJiVgI1iuubzmiOzVqu5bGOnw4uav78/hYWFGI1GdDodRqORoqIi/P39O/rUF9U11/HK10vIKMvizp63MjRgUKed25L9UMRSzpRx4mw5p3MrqalvBsDJ3oYQX2dG9g0kyMeJYB8D/h5O2OkvvUBpa1+oGo0GjQbs9TbY621wd7a76te0GE2UVTVQVF5PUUU9BWV15BbXcvR0Cd8ey7/479wMesL9XYgIcCEywJUwf2fs9Vbxvs3ihbuG8MSAh3n96DIWHVnKb3rdToJPH7VjiU7Q3HJhLlpBaR2P3daXUD/Lbsl2+E+8p6cnsbGxbNq0iSlTprBp0yZiY2M79X7a60dXkFOTy7y42fTzie+081qiFqOJ41llHM0sJfVMKSWVDQD4uDvQL8qLqCBXooNc8fNwtJiuWRudFh93R3zcf71AamVtE+eLajhfXMPZwmrO5FWRnFECgEYDgV5ORAa60iPYjR4h7q0qouLSvB09+cPAh3jz2P9YlvoeZVETGBM8wmJeJ8L8fti9+lROBfdP7k3vMMvfckujdMJ43czMTBYsWEBVVRUuLi4sXLiQiIiIVn99e7ofFUVh45kvSAzvg6824JqOoQZzdiu0GE2kZZdz4EQhyadKqGtswc5WR2yoO/GRnsSFe+Dt1r6daS2p26amvpkzeVWcyavkTF4VmXlV1DdeWP7J18ORniFu9AhxY1j/YIyNzSqnbT1LucbNxmbeSV/D4aJj3BB8PdOjJl52sJWlZG4tyfsjk0lh6cbjfJdexKwbo7lxoHkWde/o7sdOKWrtZY57at3xxXq+uIadR/PYm1pAbUMLDnY2JER7MSjWh9hQD2xtzDdyyZKvr8mkkFNUQ/rZck6eK+fU+QrqG40ABHo7ER/hSXyEJ9FBrhY5musHlnSNTYqJdac3sz1nF4N8E5gTeys67a+7pi0pc2tI3gtMisLyzensSS3g1hsiGZ8YarZjW/09NdG5GpuN7E8rZOfRPM7kVaHTaugf483QOD96h5m3kFkLrVZDqJ8zoX7OJCWGYDIpnC2sJqekjv2p+Ww7kMPn+89hp9fR6/vWa58ITzxc7NWObrG0Gi3ToybiZOvExjOfU99Sx9y42eh1bRusIyyPSVF45/MT7EktYNrwcLMWtM4gRa2LqKxp5KvDuew4fJ7ahhb8PR25fXQU18X5tXlUYFen1WoI93dhcJ9ARsT7Ud/Ywomz5aScKSXlTOnFe3JB3gYSYrxIiPEm2Mcg945+QaPRkBQ2GidbR9acXMdrR95mfp97cLRtX1e2UI+iKKzelsHOo/lMHBrGpGHqbiNzLaSoWbn80lq27D/HvuMFGI0K/aK9uGlQMDHBbvJLuJUc7GzoH+NN/xhvFEUhr7SOlMxSkjOK2bg7m093Z+Plak9CjDcJMd5EBbr+aqpCdzY8cAhOto6sPL6a/yYv4aG+83C1s+wRcuLXTKYLO1d/cySPpMQQpg23voIGUtSsVmFZHZ/uzmJfWiG2Oi3D+wZw08Bg1bZQ7yo0Gg2BXk4EejmRlBhCZW0TR0+XcPhUMdsPn2frgRxcHG3pF+3FoJ6+9Ax1Q6ftfl26v5Tg0wcHG3uWprzDfw4t5pH+9+LlIGupWgujycSyzensO17IxKGhTBseYbVviqWoWZniino27s5mT2oBNjoN4waHkJQYgot0MXYIVyc9I/oGMKJvAPWNLaScKeXwqWL2pxex82g+zo62DOzhw+BYH6KD3VTfIFFNsR4xPNr/Pl4/spz/HHqd3/W/z+pW5+iOmltMvPnpcQ6fKmb6iAgmDg1TO1K7SFGzEvWNLWzck82XB3PQaDTcODCI8UNCcXWSYtZZHOxs6GeTSa/aj7nNqZx0l54csR/M7pR8diTn4u5sd6HA9fIhwt/Fat/ptkeYSwiPJcxn0ZGlvHx4CU+7PYYjrmrHEpfR2Gxk8boUUs+UcceYaMYOMs+wfTVJUbNwJpPCrmN5rNt5hqq6ZobF+zF9RKRMIlZBU8YeGnethJYmbDXQx5RGn6bTKBN+Q7oSxXfphexIPs+2gzl4udozONaXIb19CfLuXosABxj8eDzhARYlL+UfO/7LQ33nEuIcpHYs8QtVdU0sWnuMrLwq7h7fkxF9rWce75VIUbNgmbmVvPPFSXKKaogOcuWx26IJ83NRO1a31XTgY2j5xRYsLU1okz8hcdZLJPbypa6hmeSMEvanF/L5/nN8tu8sIb4Ghvb2I7GXL66G7vFmxNfRm8cT5vPa0bdYlLyUh/rOkw14LUhheR0vf3iU8upGHpwWz4AelrPJZ3vJ5GsLVN/Ywpbvcti8Ows3Zztmjo5iUE8fi+7Osqbr+4O2Zq5eevdln3O+b+WvHquqbWJ/eiF7UwvILqhGq9HQO9yDoXF+9I/2Qm976XU0zZXXIjg28fRXL1PdVM2DfecS5WbZI+qs7RpfS97MvEpe+egYAL+7pQ9RgZ3bPSyTr7uZ5Ixi3tt6ioqaRkYPCGL6iAgc7OS/yRJoDJ4oNaWXfPxSXJz0jB0YzNiBweSV1LL3eAF7jxfw5qfHsdfrGNjTh6G9/YgJ6boDTLydPHk8YT6Lkpey+Pt5bD08otSO1W0dOlnMWxuP42rQ8/ht/fDrgqOl5belhahraOa9bafYd7yQIG8n/nrPYDwcbdWOJX5CP2jGxXtqF9no0Q+acdWvDfByYsbISKaNiODkuQr2phZw4EQR3x7Lx9PFjiG9/Rga54e/Z9fbgd3NzpXHEubzavJbvHFsOfP73ENPj2i1Y3UrJkVh4+5sNnybRbi/C4/e0geXLjrITLofLcCJs+W8vTmNiuomJg0LY8J1ofj7uVps3kux5Ot7OdeSuSljD00HPkapKUVj8EQ/aAb66KHXdP7GZiPJGcXsSS3geFYZigLh/i4Mi/djcKwvBoefv6mx9mtc01TLK8lvUlxfyoN97yHG3fJabNZ2jVuTt76xhbc3pZGcUcLQOD9+k9QDW5u2dX2bkyxoTNctas0tJtbtOsMX+8/h4+7AvZN6ExFwYSCIJea9EmvLC5aVuaKmkX3HC9mTms/54lp0Wg39orwYGu9HfIQnNjqtReVtrV9mrm6q4ZXkNymtL+PBvnOJdm/9bh2dwdqu8dXyFpXX8erHKeSX1nHb6CjGDgxS/d683FProoor6nl9fSpnC6oZ1T+QmTdEXXYDTtH1uRnsSEq8MJH+XGE1e1IL2He8gEOnijE42DKkly8ThkfiYqdV/ZdSezjrDfyu/3389/CbvH5sOY/0m0eEa5jasbqkgyeKWLHlBFoN/H5mX3pZwV5o5iBFTQVHTpfw9sY0FOCR6fH0j+k6w2lF+4X4OhPi68wtoyJJzSpjT2oBXx/J5ctD5wn0cmJonB9DevtZ7VxFF70zj/a/j/8mL2HxkWU83O9eGe5vRs0tRj7Yfpodh3MJ93dm/pS4du+XaE2kqHUio8nE+l1ZbN57Ye7Sg9Pi8elGLzbRNjY6Lf2ivOgX5UVtQzPp56v4Ym8WH32dydpvMukd9v30gBhv7No4PUBtrnYuPNr/fl4+vITXjrzN7/rfS6iL9a9mobaCsjreWJ9KTlEN4wYHM2NkpEXvEdgRpKh1kpr6Zt5Yn0r62XJG9A3gzrHRqt6sFdbFyd6W8deFMTDKk8KyOnanFrA3tYClG9MuTg8YFudnVetPutm5XmixHV7Cq0fe5tH+9xHsHKh2LKukKApfH8njw+2nsbXR8ugtfegb5aV2LFVIUesE+aW1vLL2GGVVDdxzc0+G9+kay9EIdfh6ODJ9RARTh4dz6lwFe34yPcDL1Z6hcX5cF+eHr7vlz0HysHf/WYvt8YQH8HPyUTuWVSmprGfllhOkZZfTO8yde26O7dYb3Mroxw52PLuM19elYqPT8Mj0PkQFtW72flcbhWWJrC3zlfI2Nhk5nFHMnpR80rLLUYCoIFeGxvkxuKcPjvbqzHls7TUuqivmP4ffQKfR8fuEB/B0UGdQgzW9JhRFIflMOW9vSEFRYOboKEb2C7D4gUQypB/rLWo7Dp9n1bYM/L0ceXRGH7zacP/Mmn64wPrygvVlbm3esqoG9qUVsjsln/zSOmx0WhJivBga50fvcI9O3f+tLdc4tyaflw8vwWDryOMJD6qy0ai1vCbySmp5b+tJTpyroGeIG/fcHGs1g0FkSL8VUhSFtd9ksmXfOfpEenL/5N6y1JXoNB4u9tw8JJTxiSFkF1SzJ6WA/emFfJdehIuTniG9fBkW70+wj2XtHhBo8Oehvr9l0ZG3eO3IWzyWMB8nW8vvQu1MjU1GPt2TxdbvcrDX63hwRh8Sojyt5j5qZ5DftGZmNJn43+cn+fZYPqP6BTD7ph5otfKCE51Po9EQ7u9CuL8LM8dEcSyzlN0p+Xx16MIO3sE+BobF+ZHY289i9uULdw3l/vjf8MbR5bx+dDmP9LsXexvrnLpgToqicPBkMWu2Z1BW1cj18f7cckMkkaGeVtGy7ExS1MyoqdnIkg3HOXK6hMnDwphyfbjF92+L7uFCF6Q3CTHeVNc18V16EXtS8/lg+2k+3JFJrzB3BvX0oX+M96+W5+psPT2i+W3cnbyd+h5LU/7HA33uwVbXfddBPXmunI++zuRMXhVB3gbun92b6CA3tWNZLClqZlLX0MyitcfIOF/JnWNjGDNANkUUlsnZUc+YAUGMGRBEbknt94srF7Jiywne+eIksd8XuIQYb5xUGmDS1zuO2T1v5Z30NSw//j7z4maj03avKTC5xTV8/M0Zjpwuwd3Zjntu7smwOH/p+bmKdhe1f/zjH+zduxe9Xo+joyN//etfiY+PB6C+vp4///nPHD9+HJ1Ox5/+9CduuOGGdoe2NDX1zby05gjni2q4f0pvBsf6qh1JiFYJ9HLillGRzBgZwdnCag6kF3HgRBErPjvBO5+fpFeYx/ctOK9OL3CJ/gOoNzbw0akNrDm1jjt6zOgWPR/nCqvZtCebQyeLsbfTMWNkBDcODLa6CfZqaXdRGzFiBH/5y1+wtbVlx44dPP7443z55ZcALFu2DCcnJ7Zt20Z2djZ33nknW7duxcmp62yvUVPfzIurk8krreORGfH0ieyeEx6FddNoNIT5uRDm58ItoyLJLqjmwIkiDp4oYvln6eg+19Az1P3iCieerp0zD2pU0DCqG6v5/Ox2XPUuTIi4qVPOq4bM3Eo27snmWGYpDnY6JgwN5aZBIap3B1ubdhe1n7a8+vXrR0FBASaTCa1Wy5YtW3jhhRcACAsLIy4ujp07dzJ+/Pj2ntYiVNU18eLqIxSW1/G7GfHERVx6s0ghrMlPB5jc+pMCdySjhFXbTrFq2ylCfAz0i/aiX7QXob7OHdqCmhgxjoqmKj7L/hJXOxeuDxzSYefqbC1GEwdOFPHVofOcyavC4GDLtBERjEkIVG1uobUz6z21VatWMWrUKLTfz4PJy8sjMPDHZW/8/f0pKCgw5ylVU1XbxL8/SKaovJ7f3dKH3t1kBWzRvfy0wN12QxT5pbUcPV1KckYxG/dk8+nubNyd7egb5UV8uAc9Q93NPn1Fo9Ewq8cMqpqq+eDkOpz1zvT17m3Wc3S20soGdh3L4+sjeVTVNuHr7sAdN0YzvI8/9noZ6tAeV71606ZNIy8v75LP7dmzB53uQj/v5s2b2bhxI6tWrTJvQrjsJLu28vY2z2TO6rom/rHyACWVDTw9bwh9oztmlX1z5e0s1pYXrC+z2nm9vZ3p09OPOUBlTSMH0wvZf/zCNjlfJ+ei1WroEeJO/xhv+sX44OFhMlvmBZ4P8I8dL7Mi7X2eGvUoPbwizXLcX+qoa1zX0MzelHy2H8whJbMEgIGxvkwcFkG/GO9rHgCi9mviWnRkZrOsKLJt2zYWLlzIypUrCQr6cdTfhAkTeOGFFy4OHLn//vuZOnVqm7sfLWlFkfrGFl784Ag5RTU8fmsfYjuohWYtKxv8wNrygvVltuS8LUYTmbmVHM8u43hWGdn51SiAo70NPYLd6BHiTkywK8E+hnataFLdVMN/Dr1OTXMtfxjwIH5O5h2UZe5rXN/YQsqZUg6fKubI6RKamk34uDlcXJ+zvauAWPJr4nIsfkWRHTt28Pzzz7NixYqfFTSApKQk1qxZQ3x8PNnZ2aSkpPDSSy+195SqaWo28urHxzhbUM1D0+M6rKAJYW1sdFp6hLjTI8Sd6SMiqalv5sTZcjILqjmUXkhyxoWWiZ2tjshAF2KC3IgOciU8wKVN3W3OegMP9ZvLi4cW89qRZTwx8CHc7Fq3nmpnUBSFovJ60rLLOHK6lPSzZbQYFZwdbbmutx9D4/yICnTtFqM41dLultqQIUOwtbXFw+PHX/ArV67E3d2duro6FixYQHp6OlqtlieffJIbb7yxzeewhJZai9HE4k9SOJZZyr2TejGkt1+78lyNtb0Ds7a8YH2ZrS0v/Ji5rKqB07mVZORUcup8BeeLalAADeDn6UionzNhvs6E+l3YIPVq9+VyqnN5+fAbeDl48njCAzjYmGc0Zluv8Q9FLDOvkvSz5aSfLaesqvHCsdzsSYjxpn+0N1GBrh0yv8yaXxPtIQsa074LaVIU3tqYxv60Qu4a14NR/Tt+zydre7FaW16wvszWlhcun7muoYXTuZVk5VdxtqCas4XVlFdfKAYawNvNAX9PR/w9nfDzdCTg+79/Orw9vfQUrx9bTk/3aOb3udssk7OvdI2bW0wUlteRX1pHTlENWflVZOdXUdvQAoDBwZaeIW7EhroTG+aBr7tDh7fIutJroi1kQeN2+mjHafanFXLLqMhOKWhCdHWO9jb0ifSkT+SP02Aqa5s4W1BFdkE1ucW15JfWcjy7nBaj6cevs7PBw8UeTxc7PFzt6e04gpSyr1ly8EOSAm/G2dEWg4MeBztdqwuKoig0NZuoa2yhzqhw9nwFZVUNlFc3Ul7dSGlVAwVldRRX1PNDE0Cr0RDk7cSAHj5EBFwYHRro7SQLC1sAKWpX8eXBHL74LocxCUGMTwxRO44QXZark54+kV4/W8DAZFIoqawnr7SOgtI6SirrKau6UGgyzldS12iPTXA4af7JHNlaj7EwDACNBvRa0ClN2Cot2OgUbB0MKDb2GE0KJkXBaFJoaTFR32jEdJkOKyd7G9yd7QnxMZAY64u/1/etRg9H9LLCh0WSonYFh08Vs/rLDPpHe3HHjdFyc1eITqbVavBxd8TH3RGifv18fWMLFTWD+SBzDadDTzA8LgY3UwjV+Vk0nD1Oiwma0dGs6DA2lWLrFoaNiw86rQatVoNOp8HRzgZHexsc7Wzw83HG1GzEw8UON4OdLE1lhaSoXUZmbiVvfnqcMH8X7pvcWxYRFcICOdjZ4GBn4CG3Ofz38Jvsr93CYwnz8cz8FMWh9Ff/XqPxxDDp8iOwrfEelfi5ztsC14oUVdTzytpjuBn0PHpLH3m3JoSF0+v03N/nbpxsnVhybCXlDeWX/HdKza8LnehapKj9Qn1jC69+fAxFUXj8tn64WMjmiUKIK3O1c+bBvr+lydjMykBPGi5xu0BjkPVZuzopaj9hUhTe3pRGfkkd86fG4echW8kLYU0CDH7Mi59Nka2W1f5umH76pI0e/aAZakUTnUSK2k9s2JVFckYJM8dEyQLFQlipWI8YbusxlZOOtnzhd2Ekpcbgid3wu9FHD1U5nehoMlDke9+lF7JxTzbX9/HnRtm1WgirNjzwOnJrCvgmdy+hkx4h0X+A2pFEJ5GWGhd2ml2+OZ2oQFfm3NRDhu4L0QXcGj2ZaLcI3j+xlqzKs2rHEZ2k2xe12oZmXvskBScHWx6aHo+tTbe/JEJ0CTqtjnlxc3C1c2VpyjuUN1SoHUl0gm79G9ykKCzblE55dSMPTo3DVUY6CtGlGPROzO9zN43GRpam/I8mY5PakUQH69ZF7Yv95zhyuoTbRkcRGWg521cIIcwnwODHPb1nkVOdx3vpH2EFa7iLdui2Re3kuXLWfpPJoJ4+MjBEiC4u3qsXkyOSOFR0lC/O7lA7juhA3XL0Y0VNI29sOI6vuyN3j+8pA0OE6AbGho4ir7aAjWc+J9DgR7xXL7UjiQ7Q7VpqJpPC0k+P09DUwkPT4q66GaEQomvQaDTM6nkLIc6BrDz+AUV1xWpHEh2g2xW1z/ad5cS5CmaP7UGg96U3mRNCdE16nS3z4u5Cp9WyNOUdGloa1Y4kzKxbFbXMvErW78picKwPw+L91I4jhFCBp4M7v+19JwW1Raw6IQNHuppuU9TqGppZ+ulx3J3tuGucTLAWojvr6RHNlMjxHC46xlc5O9WOI8yo2xS1JZ8co6Sygfsm98LR3lbtOEIIld0YMpL+3vGsP/0ZJ8tOqx1HmEm3KGp7jxew49B5pgwLJzrITe04QggLoNFomB17K75OPiw/voqyy+zBJqxLtyhqa7afple4BxOGhqodRQhhQext7Lkvbg4tJiNvpbxLk7FZ7UiinbpFUZs3IZa/3pOITtstvl0hRBv4OvlwV6+ZnKs+z9uHVsvAESvXLX7Lx0V4yg7WQojL6uvdm6SwMXydtZfdefvVjiPaocvPPG7K2EPTgY+prilDY/BAP2iGbBQohPiVCeFjyW/I46OMTwl1CSbYOVDtSOIamK2ltn//fmJjY3nvvfcuPlZfX89jjz3G2LFjSUpKYseOzl1zrSljD427VqLUlAIKSk0pjbtW0pSxp1NzCCEsn1aj5ZHEezDYOvF26nvUt9SrHUlcA7MUtZqaGl588UVGjBjxs8eXLVuGk5MT27ZtY8mSJfztb3+jtrbWHKdslaYDH0PLL7aaaGm68LgQQvyCi70zv+19J2UN5bKiv5UyS1F74YUXmDt3Lu7u7j97fMuWLdx+++0AhIWFERcXx86dnTfR8UILrfWPCyFEpFsYUyLHc6Q4la/P71Y7jmijdt9T++abb6iqqiIpKYmvv/76Z8/l5eURGPhjv7S/vz8FBQVtPoen57Wt0Vjv4kVLVcmvHrdx8cLb2/majtmZrCHjT1lbXrC+zNaWF6wvs7e3M7d7TSCn/jzrTm+iX0gPYrwi1I51WdZ2faFjM1+1qE2bNo28vLxLPvf555/z0ksvsWLFCrMH+6nS0hpMprZ3A+gGTKdl18qfd0Ha6NENmE5xcbX5AnYAb29ni8/4U9aWF6wvs7XlBevL/NO8MyOmkVWaw0vfvsWCwY9isHVSOd2vWdv1BfNk1mo1l23sXLWorVu37rLPHTx4kOLiYm699VYAysvL2bFjBxUVFTz88MMEBASQm5uLh4cHAPn5+SQmJl7L93BNfhjl2HTgYxQZ/SiEaANHW0fmxc3mpUOL+V/aBzzQ5x60mm4xC8qqtav7ceDAgezdu/fi5wsWLCAuLo7Zs2cDkJSUxJo1a4iPjyc7O5uUlBReeuml9iVuI330UPTRQ63yHY0QQl0hLkHMiJ7MmlPr2Hb2a8aFjVY7kriKDn3bMXfuXKqqqhg7diz3338/zzzzDAaD7GEmhLAewwOHMMCnLxvPfEFGeabaccRVmHXy9QsvvPCzzx0dHVm0aJE5TyGEEJ3qwo7ZM8ipyWXF8dX8ZfDjGPSWd39NXCAdxEIIcRX2Nvb8tvdsaptreTf9Q5m/ZsGkqAkhRCsEOwcwNWoCqaXpMn/NgklRE0KIVhoVNIx4r1jWn95MTnWu2nHEJUhRE0KIVrqwsehtGPQGlqeuoqGlUe1I4hekqAkhRBsYbJ24u9ftFNeX8uGp9WrHEb8gRU0IIdoo2j2SpLAx7C84xHcFh9WOI35CipoQQlyD8WFjiHQN54OTn1BUV6x2HPE9KWpCCHENdFod9/S+A51Gx4rj79NialE7kkCKmhBCXDN3ezdmx97GuepcPs38XO04AilqQgjRLn29ezM88Dq+ytnJibIMteN0e1LUhBCinaZHTcDX0Zt30z+ktrlO7TjdmhQ1IYRoJ71Oz9297qCqqZrVJz+RZbRUJEVNCCHMIMQliEnh40guOibD/FUkRU0IIczkxtCRRLmF8+Gp9ZTUl6kdp1uSoiaEEGai1Wi5K/Z2QMP/0j7AaDKqHanbkaImhBBm5OngzsweUzlTmc3Ws1+rHafbkaImhBBmNtgvgYG+/fgsexvZVefUjtOtSFETQogOMDNmGq56F/53/AMajU1qx+k2pKgJIUQHcLR14K5eMymuL+XjjI1qx+k2pKgJIUQHiXGP5MaQkezO209qSbracboFKWpCCNGBJkTcRICTH6tOrKWmuVbtOF2eFDUhhOhAtlob7up1OzXNtXx0aoPacbo8KWpCCNHBgp0DuDlsLAcLj3C46Jjacbo0KWpCCNEJbgodRahzMB+c/ISqpmq143RZZilq7777LklJSUyaNImpU6defLy+vp7HHnuMsWPHkpSUxI4dO8xxOiGEsDo6rY67et1Go7GJ9098LIsedxCb9h5g69atfP7556xduxaDwUBx8Y/bmi9btgwnJye2bdtGdnY2d955J1u3bsXJyam9pxVCCKvj5+TL5IgkPjm9ie8KDpPoP0DtSF1Ou1tqy5cv5+GHH8ZgMADg7e198bktW7Zw++23AxAWFkZcXBw7d+5s7ymFEMJq3RB8PZGu4XyUsYHyhgq143Q57S5qmZmZHD16lNtvv53p06fz4YcfXnwuLy+PwMDAi5/7+/tTUFDQ3lMKIYTV0mq0zIm9DaNiYtWJtdINaWZX7X6cNm0aeXl5l3xuz549GI1G8vPzef/99ykvL+eOO+4gPDycQYMGmS2kp6fBLMfx9nY2y3E6i+TteNaW2drygvVl7oy83jhzV/N03j70AUerjjI2avi1H8vKri90bOarFrV169Zd8fmAgAAmTpyIVqvF09OToUOHcuzYMQYNGkRAQAC5ubl4eHgAkJ+fT2JiYptDlpbWYDK1792Mt7czxcXWM+JI8nY8a8tsbXnB+jJ3Zt5+Lv3p6X6I/x1ZS5A+GC8HzzYfw9quL5gns1aruWxjp93djxMnTmTXrl0A1NXVcejQIXr27AlAUlISa9asASA7O5uUlBSGD7/2dyRCCNFVaDQaZsfeihYt76V/hEkxqR2pS2h3Ubv77rvJz89nwoQJ3HrrrUyaNIlhw4YBMHfuXKqqqhg7diz3338/zzzzzMUBJUII0d2527sxI3oiGRVn2J23X+04XUK7h/Tb29vz73//+5LPOTo6smjRovaeQgghuqzr/AdxqPAo605vppdHTzwd3NWOZNVkRREhhFCRRqNhVs8ZKMDqkzIpu72kqAkhhMo8HTyYFnkz6WWn2Jd/UO04Vk2KmhBCWIDrA4cQ5RbOx6c3UtFYqXYcqyVFTQghLIBWo+XOnrfSYjLywclPpBvyGklRE0IIC+Hj6MWkiHGklKRzsPCI2nGskhQ1IYSwIDcEX0+YSwgfndogW9RcAylqQghhQbQaLbNjb6XR2MiHslN2m0lRE0IIC+Pv5Mv48LEkFx0juShF7ThWRYqaEEJYoLEhIwk2BLDm5Dpqm+vUjmM1pKgJIYQF0ml13Bl7K7Utdaw/vVntOFZDipoQQlioYOdARgcPZ0/+AU6VZ6odxypIURNCCAs2IXwsnvYerD75Mc3GZrXjWDwpakIIYcH0Oj139JxOUV0Jn5/drnYciydFTQghLFysRwyD/RLYenYHeTUFasexaFLUhBDCCkyPmoiDjT3vn1grG4pegRQ1IYSwAs56AzOiJpFVdY5dufvUjmOxpKgJIYSVGOyXQE/3aD7N3EJ5Q4XacSySFDUhhLASGo2GO3pOx6iY+EiW0LokKWpCCGFFvBw8mRA+lqMlx9l/PlntOBZHipoQQliZ0cHDCTIEsPzQGupb6tWOY1GkqAkhhJXRaXXM6jmDisYq1mduUTuORZGiJoQQVijUJZjx0TewO3c/WZXn1I5jMaSoCSGElZoZNwlXOxc+OPkJRpNR7TgWQYqaEEJYKQdbe2ZET+J8TR47c/eqHcciSFETQggr1t87nl6ePdh45nMqGivVjqO6dhe1rKws5syZw5QpUxg/fjyvvvrqxefq6+t57LHHGDt2LElJSezYsaO9pxNCCPETGo2GmTFTMSkm1mZsVDuO6tpd1P79738zbtw4NmzYwNq1a/nkk084duwYAMuWLcPJyYlt27axZMkS/va3v1FbW9vu0EIIIX7k5eDJuNAxJBcdI630pNpxVGXT3gNoNBqqq6sBaGhoQKPR4OHhAcCWLVt44YUXAAgLCyMuLo6dO3cyfvz4Np1Dq9W0N6ZZj9NZJG/Hs7bM1pYXrC+zteYdF34DmVVn2JbzNT08o7DVtvvXe4dp7zW+0tdrFEVR2nPw3Nxc5s+fT0VFBVVVVfzxj3/kzjvvBKB///589dVXF4vc3//+d0JDQ7nnnnvac0ohhBDikq5ayqdNm0ZeXt4ln9uzZw9r1qxhypQpzJs3j6KiIubMmUNcXBx9+/Y1e1ghhBDiSq5a1NatW3fF5999912+/PJLAHx8fBgyZAgHDhygb9++BAQEkJube7Gllp+fT2JiohliCyGEEL/W7oEiQUFB7Nq1C4CamhoOHTpEdHQ0AElJSaxZswaA7OxsUlJSGD58eHtPKYQQQlxSu++ppaam8txzz1FXV0dLSws333wzDz/8MAB1dXUsWLCA9PR0tFotTz75JDfeeKNZggshhBC/1O6iJoQQQlgKWVFECCFElyFFTQghRJchRU0IIUSXIUVNCCFEl9Gtito//vEPkpKSmDx5MrfffjspKSlqR7qiDRs2MGnSJHr16sV7772ndpzLysrKYubMmYwbN46ZM2eSnZ2tdqQrWrhwIaNHj6ZHjx6cOnVK7ThXVV5ezr333su4ceOYNGkSDz/8MGVlZWrHuqIHH3yQyZMnM3XqVGbNmkV6errakVrltddes5rXxejRo0lKSmLKlClMmTLl4tQqS9XY2MjTTz/NTTfdxKRJk/i///u/jjmR0o1s375daWpquvjxmDFjVE50ZSdPnlQyMjKUJ598Unn33XfVjnNZc+bMUdavX68oiqKsX79emTNnjsqJruzAgQNKXl6ecsMNNygnT55UO85VlZeXK/v27bv4+QsvvKD8+c9/VjHR1VVVVV38eNu2bcrUqVNVTNM6qampyty5c5VRo0ZZxevCWl6/P3j22WeVf/7zn4rJZFIURVGKi4s75DzdqqV2ww03YGtrC0C/fv0oKCjAZDKpnOryYmJiiIqKQqu13P+m0tJS0tLSmDhxIgATJ04kLS3NolsSAwcOxN/fX+0Yrebm5vazlXj69et32aXrLIWzs/PFj2tqatBoLHuR4KamJp555hmefvppi89qjWpra1m/fj2PPvroxevr5eXVIeey3GWcO9iqVasYNWqURRcMa5Cfn4+vry86nQ4AnU6Hj48P+fn5F5dHE+ZjMplYvXo1o0ePVjvKVf31r39l9+7dKIrC22+/rXacK3rllVeYPHkywcHBakdpkyeeeAJFURgwYAC///3vcXFxUTvSJeXk5ODm5sZrr73G/v37cXJy4tFHH2XgwIFmP1eXKmpXW3z5h1+8mzdvZuPGjaxataoz4/1Ka/MK8YNnn30WR0dHZs+erXaUq/rnP/8JwPr16/nXv/7FW2+9pXKiS0tOTiYlJYUnnnhC7ShtsmrVKvz9/WlqauKf//wnzzzzDC+++KLasS6ppaWFnJwcevXqxZ/+9CeOHj3K/Pnz2bZtGwaDwazn6lJF7WqLLwNs27aNl19+mZUrV3ZY87e1WpPX0vn7+1NYWIjRaESn02E0GikqKrKq7j1rsXDhQs6ePcuSJUusqodh6tSpPPXUU5SXl+Pu7q52nF85cOAAZ86cYcyYMQAUFBQwd+5cnn/+ea6//nqV013eDz9jer2eWbNm8cADD6ic6PICAgKwsbG5eJuib9++uLu7k5WVRXx8vFnPZT0/GWawY8cOnn/+eZYtW0ZQUJDacboET09PYmNj2bRpEwCbNm0iNjZWuh7N7OWXXyY1NZXFixej1+vVjnNFtbW15OfnX/x8+/btuLq64ubmpl6oK7jvvvv49ttv2b59O9u3b8fPz49ly5ZZdEGrq6u7uDmzoih89tlnxMbGqpzq8jw8PEhMTGT37t3AhRHTpaWlhIaGmv1c3WrtxyFDhmBra/uzX7grV660yHePcKFA/Otf/6KqqgpbW1scHBxYvnw5UVFRakf7mczMTBYsWEBVVRUuLi4sXLiQiIgItWNd1nPPPcfWrVspKSnB3d0dNzc3Nm/erHasy8rIyGDixImEhYVhb28PXNgdY/HixSonu7SSkhIefPBB6uvr0Wq1uLq68qc//YnevXurHa1VRo8ezZIlS4iJiVE7ymXl5OTwyCOPYDQaMZlMREZG8re//Q0fHx+1o11WTk4Of/nLX6ioqMDGxobHHnuMkSNHmv083aqoCSGE6Nq6VfejEEKIrk2KmhBCiC5DipoQQoguQ4qaEEKILkOKmhBCiC5DipoQQoguQ4qaEEKILkOKmhBCiC7j/wPfmUbsg/+B7QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 504x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_ = plot_estimated_function(x_sample=x_sample, y_sample=y_sample, w_est=w_ml1, d=d, \n",
" w_set=w_set, d_set=degree)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "df2b08f4-0edc-49ce-81b6-410426d75ab7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.allclose(np.dot(pp, ppi), np.eye(pp.shape[0]))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "8be9dba2-bc0a-441c-8d6f-c4f7510072f3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.875 , 0.25 , -0.0625 , -0.03125],\n",
" [ 0. , 0.5 , -0.25 , 0. ],\n",
" [ 0. , 0. , 1. , 0. ],\n",
" [ 0. , 0. , 0. , 1. ]])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.dot(pp, ppi)"
]
},
{
"cell_type": "markdown",
"id": "877ac284-f707-457d-a5e9-f807d6229a13",
"metadata": {},
"source": [
"## 最尤推定(numpy.linalog.pinv)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "ee08bd70-74d5-408e-9964-ce6a568e49c3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-1.36044521 1.46444715 -6.47618665 1.16327901]\n"
]
}
],
"source": [
"d = 3\n",
"Phi = design_matrix(x_sample, d)\n",
"\n",
"pim = np.linalg.pinv(Phi)\n",
"w_ml2 = np.dot(pim, y_sample)\n",
"\n",
"print(w_ml2)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "0d235580-70fd-4283-91bd-c8d153a6fbab",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 504x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_ = plot_estimated_function(x_sample=x_sample, y_sample=y_sample, w_est=w_ml2, d=d, \n",
" w_set=w_set, d_set=degree)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3d06775c-1c05-4d33-bee6-73f2f0680728",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment