{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "L5ALSPQSJp-n" }, "source": [ "# 확률적 경사 하강법" ] }, { "cell_type": "markdown", "metadata": { "id": "hnCwTs5KJp-t" }, "source": [ "\n", " \n", "
\n", " 구글 코랩에서 실행하기\n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "3x4OwaSIR50l" }, "source": [ "## SGDClassifier" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "j3z-zKXoRmWB" }, "outputs": [], "source": [ "import pandas as pd\n", "\n", "fish = pd.read_csv('https://bit.ly/fish_csv_data')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "WAiJVY9nR1fF" }, "outputs": [], "source": [ "fish_input = fish[['Weight','Length','Diagonal','Height','Width']].to_numpy()\n", "fish_target = fish['Species'].to_numpy()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "AW6LMW_URpto" }, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "train_input, test_input, train_target, test_target = train_test_split(\n", " fish_input, fish_target, random_state=42)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "id": "1RTAwK_DRutj" }, "outputs": [], "source": [ "from sklearn.preprocessing import StandardScaler\n", "\n", "ss = StandardScaler()\n", "ss.fit(train_input)\n", "train_scaled = ss.transform(train_input)\n", "test_scaled = ss.transform(test_input)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "id": "FSyujXY7sli6" }, "outputs": [], "source": [ "from sklearn.linear_model import SGDClassifier" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KofoXhbwR9yu", "outputId": "eedcd281-e908-42f0-ed16-f92344cc4a38" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.773109243697479\n", "0.775\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_stochastic_gradient.py:702: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n", " warnings.warn(\n" ] } ], "source": [ "sc = SGDClassifier(loss='log_loss', max_iter=10, random_state=42)\n", "sc.fit(train_scaled, train_target)\n", "\n", "print(sc.score(train_scaled, train_target))\n", "print(sc.score(test_scaled, test_target))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "duwA4N3eSUk5", "outputId": "a44fd468-ad76-4311-e815-3c9e8569d52e" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.8151260504201681\n", "0.85\n" ] } ], "source": [ "sc.partial_fit(train_scaled, train_target)\n", "\n", "print(sc.score(train_scaled, train_target))\n", "print(sc.score(test_scaled, test_target))" ] }, { "cell_type": "markdown", "metadata": { "id": "TEtfnUQhzKO2" }, "source": [ "## 에포크와 과대/과소적합" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "pt7BHZVZ-dWT" }, "outputs": [], "source": [ "import numpy as np\n", "\n", "sc = SGDClassifier(loss='log_loss', random_state=42)\n", "\n", "train_score = []\n", "test_score = []\n", "\n", "classes = np.unique(train_target)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "id": "-65Gz13tVOP7" }, "outputs": [], "source": [ "for _ in range(0, 300):\n", " sc.partial_fit(train_scaled, train_target, classes=classes)\n", "\n", " train_score.append(sc.score(train_scaled, train_target))\n", " test_score.append(sc.score(test_scaled, test_target))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 449 }, "id": "V19SzZJ5ZjSI", "outputId": "2d6cfa42-4924-4808-ef2a-6060222f9f69" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9JUlEQVR4nO3dfXxT9f3//2eSNmkLlAKFUsq1KF5wpVytiroJE5T58eqneLHJ2Gf4VeEzBk4FFd10s87P5KObTuYmH6fbR1Gmbk5lIgpOZSAIKpcCIjCg5Ura0tI2yXn//kiTNrRASU9z0uRxv916a3JykrxyTD1PXu/3OcdljDECAABIEm6nCwAAALAT4QYAACQVwg0AAEgqhBsAAJBUCDcAACCpEG4AAEBSIdwAAICkkuZ0AfFmWZZ2796tdu3ayeVyOV0OAABoAmOMysvL1a1bN7ndx+/NpFy42b17t3r06OF0GQAAIAY7d+5U9+7dj7tOyoWbdu3aSQptnOzsbIerAQAATVFWVqYePXpE9uPHk3LhJjwUlZ2dTbgBAKCVacqUEiYUAwCApEK4AQAASYVwAwAAkgrhBgAAJBXCDQAASCqEGwAAkFQINwAAIKkQbgAAQFIh3AAAgKRCuAEAAEmFcAMAAJIK4QYAACSVlLtwJgAArUlNwNLe8iqnyzgp3jS3urTLcOz9CTcAACQof9DS2Mfe17b9FU6XclLO6ZmjV247z7H3J9wAAJCg1u8uiwQbX1rrmUmS7nG2VsINAAAJ6uOvDkqSRp/eRc98f7jD1bQerScGAgCQYlZ+9bUkaVjvjg5X0roQbgAASEDGGK3cHurcDO/dweFqWhfCDQAACWj7gUrtP1wjb5pbA7u3d7qcVoU5N0CKqwlYemThRhWXta5DTYFkV1L7NzmooL18aR6Hq2ldCDdAivvHumL94YNtTpcB4BjO7ZfrdAmtDuEGSHEra4/GOP/UXI0+vYvD1QCoL8ubpu8Mzne6jFaHcAOkuI9rj8a4bnhPjR/E/0QBtH5MKAZSWFmVXxuLyyRJwzgaA0CSINwAKWz1jkOyjNSjY6bysp27DgwA2IlhKbRqQcvoi5JyBS3TpPX7dWmrjPTkPeqgOhDU5pLDTV5/0fpiSdLwXpwgDEDyINygVZv917X6v+U7mrz+wIL2ev2/RrVgRc76z2dX6oMt+0/6eZz9FEAyIdyg1TLGaNH6EklS53Y+pbldx11/T2mVPt9VquLSKnVtn3xDMOVVfn20NRRsumZnyHX8zRHRJTtD4wZ0bcHKACC+CDdotXYcrNS+8mp5PW79885vnXC46dLH/6n1e8q0cvtBfWdQtzhVGT/158/8886LnC4HABzDhGK0WuELyg3s3r5J82jC12YJPy/ZrNwe+lzMnwGQ6gg3aLXCF5Rr6iHM4Xkl4eclm/DJ+Jg/AyDVEW7QaoVPPjesiZ2KcAhav7tMh6sDLVaXE/xBS6t3HJLE+WoAgDk3aBXe27RX8z7YJsuEDvk2RtqyN3TI89BeTduZ57fPVEFOpnYdOqIb/7BcbX3Jc0h4ld/SEX9Q7TPT1a9zW6fLAQBHEW7QKjz85kZtKilvsHxgQXt1bONt8utccFquXlixU5/uPGRjdYlj1Km5cp/gqDEASHaEGyS80kp/JNg88v8Nki8tNJrqcrn0jT4nN7/knvFn6oJTO6smaNlep9PS3G6NOpWrBwMA4QYJb9WO0ETZvrltdO2wHs16rba+NF0ykItDAkAyY0IxEl5k4jATZQEATUC4QcJbFQk3HOIMADgxhqWQUCqqA7Vn2g0dFWUZozX/PiRJGk64AQA0AeEGCWXai6v1zoa9DZZ3auNV705ZDlQEAGhtCDdIGDUBS//cHLrwY/+8dvLUHtLsdks3juwlV1OvBAkASGmEGySMtbtLVR2w1CErXQt/fD5hBgAQEyYUI2GEr400tFdHgg0AIGaEGySM8CHfwznkGwDQDAxLISEYY7Rqu42HfPuPSNs/koL+5r8WAODkZOZIPb/h2NsTbtCinl/2lV5YsVPmBOtZltHBihr50twaUJDd/Dd++17p4z80/3UAACev+wjph4sce3vCDVqMZRk98o9NKq8KNPk5o/rlypdmw9W6924M/e54SuhfEACA+Onc39G3J9ygxXyxt1zlVQFleT166rtDdaIpwm6XS2f3zLHnzSsPhH5/53+kvhfa85oAgFaBcIMWs7J2gvA5PTvowtM6x/fNK0Pny1FWp/i+LwDAcRwthRZTd2h3nI9+siypMvTehBsASD2EG7SYukO743xNqOpSyQRDt7O4HhUApBqGpWC74tIqLdm0V7sOHZHH7dIQu+bRNFW4a+NtJ6X54vveAADHEW5gux88+7HW7ymTJJ2R305tfXH+moUnE9O1AYCURLiBrfYfro4EmwtO66zJ5/eJfxGRcMN8GwBIRYQb2Cp8hFT/vHZ67gcjnCmCcAMAKY0JxbBV+AipYU5eH4pwAwApjXADW63c7tARUvURbgAgpRFuYJsjNUGt3VUqyYFz29THhGIASGnMucExbdlbril/Xq3SI36d1rWdfn/TUP32va3aVFyux68fIl+aRzsOVOrm51fqUKVfActSwDLqmp2h7h0ynSu8gs4NAKQywg2O6a3Pi7WppFySVFxWpfe/2K8n3tuioGX0ry8P6sLTOuuV1f/WxuLyqOeNObOLXK4TXUmqBTEsBQApjXCDY9pdeiTq/u//+aWClpEUmjh84WmdI0dH/eiifrr4rK7yuF06La9d3GuNQrgBgJTm+JybJ598Ur1791ZGRoZGjhypFStWHHNdv9+vBx54QKeccooyMjI0ePBgLVy4MI7VppZdh6okSYO7t5ckrdh2MPLYx18dVCBo6ZMdoXBz6aB8DShorzPys+VxO9i1kQg3AJDiHA038+fP14wZM3T//ffrk08+0eDBgzV27Fjt3bu30fXvvfde/e53v9NvfvMbrV+/XrfccouuvPJKrV69Os6Vp4bdh0Kdm8sGd2vw2Jqdh/TZrlJV1gTVLiNNp3VxuFsTFgxIVYdCtwk3AJCSHB2WmjNnjiZPnqxJkyZJkubOnas33nhD8+bN08yZMxus//zzz+uee+7RpZdeKkm69dZb9c477+jRRx/Vn/70p7jWHhfBgOSp/U9UXS4F/XF7a2OMKg7tVY6CuqhXmp7NOKLDVQFJksftUtBvtOCfnypH5RrVPVfuqq/jVttxhbs2kpTp4BFbAADHOBZuampqtGrVKs2aNSuyzO12a8yYMVq2bFmjz6murlZGRkbUsszMTH3wwQfHfJ/q6mpVV1dH7peVlTWz8jj55DnpzTulG+ZLZbukv06RjBW3t3dJWuaWlCFpnvSBam/Xt1l6KEPSvyU9ErfSmiYjpy4YAgBSimPDUvv371cwGFReXl7U8ry8PBUXFzf6nLFjx2rOnDnavHmzLMvSokWL9Morr2jPnj3HfJ+ioiK1b98+8tOjRw9bP0eL+eoDKXBE2rk8dDuOwSYpnHWF0xUAABzSqv5p+/jjj2vy5Mk6/fTT5XK5dMopp2jSpEmaN2/eMZ8za9YszZgxI3K/rKysdQQcf2Xd7/DtcQ9LI26Oy9u/s75EN/9plQYVZOu1KaN0uDqgJ97drKvP6a4u7TL0q0UbdajSr76d2+rHo0919tDvxrg9TlcAAHCIY+EmNzdXHo9HJSUlUctLSkrUtWvXRp/TuXNnvfbaa6qqqtKBAwfUrVs3zZw5U3379j3m+/h8Pvl8Pltrjwv/kbrf4dveNnHbae8ur5Elt/JyQu/ZNtOjmeMHRB5/8MohcakDAICT5diwlNfr1dChQ7V48eLIMsuytHjxYhUWFh73uRkZGSooKFAgENBf/vIXXX755S1dbvyFA01NRV3nJj0rbm+/q/ZIqW45Dp5pGACAGDg6LDVjxgxNnDhRw4YN04gRI/TYY4+poqIicvTUTTfdpIKCAhUVFUmSli9frl27dmnIkCHatWuXfvrTn8qyLN15551OfoyWERmWqte5iWO42V17jpsCwg0AoJVxNNxMmDBB+/bt03333afi4mINGTJECxcujEwy3rFjh9zuuuZSVVWV7r33Xn355Zdq27atLr30Uj3//PPKyclx6BO0oMaGpdLjFzR207kBALRSjk8onjp1qqZOndroY0uWLIm6f+GFF2r9+vVxqCoBNDah2IbOjTFGt/7pE723KfpEib40t35x5cDICfsINwCA1srxyy/gGGoaG5ZqftDYdeiIFq4rVnXAivopqwrohRU7JEkHK2q0pzQ0LNW7U/yGwgAAsIPjnRscQ2RYyt7OTfhClwMKsvW77w2TJG0/UKEbfr9cq3cckj9oadX20Dr9urRVTpa32e8JAEA8EW4SkTHHmFDc/M7Nx1+FLn75jT6dIpOF87Mz1D4zXaVH/Fq/u0wra9cZ3pvLFwAAWh+GpRJRoFqSCd2uLpeCNaHbNoSbcFdmWO+OkWVut0vDeoWCzMrtX0cC0LBeHRu+AAAACY5wk4jCXRtJOnKw7nYzh6VKK/3aVFIuSRp2VFcmHHY+2LxPn+8qlSQN7024AQC0PgxLJaLwMJRU17WRS0pr2pmWD1XW6PXP9ug7A/Pldrs0/+MdOlwd1O5DR2SM1Ce3jXLbRr9WOOy8t2mfJKlzO596dORIKQBA60O4SUT1w01YepbUxOs3zfvwK/168WYVlx6RL82jOYu+iHp8RCMdmYEF7ZWR7laVP3SBzhF9Oibe9aIAAGgCwk0iqj8sFXYS822+3HdYkrRtf4W8ntDI4/DeHXRGfrYy0j36/rm9GzwnI92jJ284R0u/2Cevx63vFfaKqXQAAJxGuElEx+rcNFH4BHy7DlXJVxtuvlfYW/9Re4K+Yxl9Rp5Gn5HX9DoBAEhAhJtE1MzOTfi6ULsPHYl0bgpyMmwpDQCAREe4SUSNdm6aFm78QUt7y0PhZl95tTzu0LwZLqMAAEgVhJtE1GjnJnpYyrKMqgLByP3MdI9cLpdKyqpkmbr1gpaRx+1Sl3Z0bgAAqYFwk4hO0LmpCVi6/MkPtWFPWWTZkB45euXWcyNDUvV1zc6IdHAAAEh2nMQvEZ0g3Hy+qzQq2EjSmp2HtHnv4chk4voKGJICAKQQwk0iOsGw1KrtobMWjzmjizY8ME7f6Bs6b83K7Qe1q5Fwk89kYgBACiHcJKITdG4+rr2y98g+nZTp9WhEn06SQlf8Dndu0j11w1BMJgYApBLCTSI6TufGGBO5avfQ2ksmhC96+fFXB7WnNDTnZlD3nMhTCTcAgFRCuElEx+ncbN1Xoa8r/fKluTWgW3tJ0tk9c+R2Sf/++kjdVb971V0Yk3PcAABSCUdLJaJGws2SbYe1+LW12n4w1NUZ0iNH3rRQNm2Xka4z8rO1bneZSo/4JUlD64UbOjcAgFRCuElEkWEpl6TQSWv++VWFnt+6PbLKN/p2inrKN/p20rrdoSOovGluDe/dUb40tyxjOFoKAJBSCDeJKNy5ycyRjoSGmark0+jTu+isgvZq6/PouhE9o54y9Vv91LmdT5U1QQ3r1UEd2nj1zMThCliW2mWkx/kDAADgHMJNIgp3brI6RcLNEePV1UO769KB+Y0+pUMbr2658JSoZaNOzW3RMgEASERMKE5E4c5NVt3QU6Uy1CHL61BBAAC0HoSbRNRIuKmSVx3bEG4AADgRwk0CsmqHpaq9OZFlR4xPHdowdwYAgBMh3CSYKn9Q+w+G5tk8u7o8svyIvAxLAQDQBISbBLPr0BF5TbUk6YBpG1nu9mUp3cN/LgAAToS9ZYKprA4qUzWSpK/VLrLcl9n2WE8BAAD1EG4STEVVtXyu0FmGD5q6cJORRbgBAKApCDcJpvpI3TybgyY7crtNm3aNrQ4AAI5CuEkwVZUVkduHVNetadOGzg0AAE3BGYoTjL/qsCSp2pWhck97+Y1HpWqjnLZcHwoAgKYg3CSYmiOhzk2N26e27XM18eu7VG6yNI7DwAEAaBKGpRJMoDoUbgLuDHXLydRH1gB9bvpydmIAAJqIcJNgAtWhsxMHPKFwE8YJ/AAAaBrCTYIJVoU6N0FPZlS4oXMDAEDTEG4STPi6UlZahgpyMiLLO3JdKQAAmoRwk2BMTSjcmLRMhqUAAIgB4SbBmJojoRv1wo3LJbXPpHMDAEBTcCh4gnEFasONN0t9OrXRJQO6Ki87Q2lcNBMAgCYh3CQYlz8UblzeLLndLj313aEOVwQAQOtCOyDBuIOhcOPxZjlcCQAArRPhJsGkBaskSW4f4QYAgFgQbhKMpzbcpPnaOFwJAACtE3NuEoAxRkVvbVTPjllqY1VJHiktg3ADAEAsCDcJYMOecj39/peSpKfSqyVJXsINAAAxYVgqARiZyO1M1UiS0gk3AADEhHCTAExdtlGmK9S5cXO0FAAAMSHcJAB/0Irczqjt3CidcAMAQCyYc+Ok7cukNp3lD3bUUNcmfa12ylSoc6P0zOM/FwAANIpw45TyEunZS6UOfeS68Fn9xfczSdJOq3Po8XTm3AAAEAuGpZxyuFgyllSxT+7y3ZHF7Vyhq4LTuQEAIDaEG6fUXkNKVkDVrozI4hxXRegG4QYAgJgQbpzir+3QWAEFgqbh40woBgAgJoQbp9Tr3ASD/oaP07kBACAmhBunhMONsWQFqhs+TrgBACAmhBunhIelJFn+6HATdKVJnvR4VwQAQFIg3DjEqqkLNzqqcxNwZwgAAMSGcOOQr0tL6+4EqqIeMwxJAQAQM8KNQ6zqus6N8UeHG19m23iXAwBA0iDcOMT46w9LRYcbF4eBAwAQM8KNU6ImFEeHG46UAgAgdoQbp4QPBZcUqCHcAABgF8KNU+qFG1PvtiTOTgwAQDMQbhziqh9u6NwAAGAbwo1DXIF64SZwdLihcwMAQKwcDzdPPvmkevfurYyMDI0cOVIrVqw47vqPPfaY+vfvr8zMTPXo0UPTp09XVVXVcZ+TiNz1ws3RR0vRuQEAIHaOhpv58+drxowZuv/++/XJJ59o8ODBGjt2rPbu3dvo+v/3f/+nmTNn6v7779eGDRv0zDPPaP78+br77rvjXHnzuYN14cYVPOraUoQbAABi5mi4mTNnjiZPnqxJkybpzDPP1Ny5c5WVlaV58+Y1uv5HH32k8847TzfccIN69+6tiy++WNdff/0Juz2JyFOvW+NuEG4YlgIAIFaOhZuamhqtWrVKY8aMqSvG7daYMWO0bNmyRp9z7rnnatWqVZEw8+WXX+rNN9/UpZdeesz3qa6uVllZWdRPIvDU69w0DDd0bgAAiFWaU2+8f/9+BYNB5eXlRS3Py8vTxo0bG33ODTfcoP3792vUqFEyxigQCOiWW2457rBUUVGRfvazn9laux08wbrOTbrxS5Jq0rPlze0jnTbOqbIAAGj1HJ9QfDKWLFmihx56SL/97W/1ySef6JVXXtEbb7yhBx988JjPmTVrlkpLSyM/O3fujGPFx5ZWL9z4VCNJKuk2Rvp/70t5ZzpVFgAArZ5jnZvc3Fx5PB6VlJRELS8pKVHXrl0bfc7s2bP1ve99Tz/84Q8lSQMHDlRFRYVuvvlm3XPPPXK7G2Y1n88nn89n/wdojmBAntpujST5XKHbLrdj/zkAAEgajnVuvF6vhg4dqsWLF0eWWZalxYsXq7CwsNHnVFZWNggwHo9HkmSMabli7Vb/opmSfKoNNx7CDQAAzeXo3nTGjBmaOHGihg0bphEjRuixxx5TRUWFJk2aJEm66aabVFBQoKKiIknSZZddpjlz5ujss8/WyJEjtWXLFs2ePVuXXXZZJOS0CkddboFwAwCAfRzdm06YMEH79u3Tfffdp+LiYg0ZMkQLFy6MTDLesWNHVKfm3nvvlcvl0r333qtdu3apc+fOuuyyy/SLX/zCqY8Qm6M6N97acOP2pDtRDQAAScVlWtV4TvOVlZWpffv2Ki0tVXZ2tjNFlKyXnqobevu3yVV3136VDPx/yrv6EWdqAgAggZ3M/rtVHS2VNBoMS4WOlnIzLAUAQLMRbpxwjAnFhBsAAJqPcOOEY0woZs4NAADNR7hxwtGdG1dAEp0bAADsEFO4ee+99+yuI7Uc1bkJ86TRuQEAoLliCjfjxo3TKaecop///OcJczmDVuWozk0Yw1IAADRfTOFm165dmjp1qhYsWKC+fftq7Nixeumll1RTU2N3fcnpmJ0bhqUAAGiumMJNbm6upk+frjVr1mj58uU67bTTdNttt6lbt2760Y9+pE8//dTuOpPLMcINnRsAAJqv2ROKzznnHM2aNUtTp07V4cOHNW/ePA0dOlTnn3++1q1bZ0eNyecYw1LMuQEAoPliDjd+v18LFizQpZdeql69eukf//iHnnjiCZWUlGjLli3q1auXrrnmGjtrTR7H7NwwLAUAQHPFtDf9r//6L73wwgsyxuh73/ueHnnkEQ0YMCDyeJs2bfSrX/1K3bp1s63QpHKMzo3chBsAAJorpr3p+vXr9Zvf/EZXXXWVfD5fo+vk5uZyyPixHKNzQ7gBAKD5YtqbLl68+MQvnJamCy+8MJaXT361nZvDJkNtXVV1yxmWAgCg2WKac1NUVKR58+Y1WD5v3jz98pe/bHZRSa+2c3NYmdHL6dwAANBsMYWb3/3udzr99NMbLD/rrLM0d+7cZheV9MLhxhBuAACwW0zhpri4WPn5+Q2Wd+7cWXv27Gl2UUkvPCxF5wYAANvFFG569OihDz/8sMHyDz/8kCOkmqK2c1PeoHPjcaAYAACSS0ytgsmTJ+vHP/6x/H6/LrroIkmhScZ33nmnbr/9dlsLTEbGXymX6NwAANASYtqb3nHHHTpw4IBuu+22yPWkMjIydNddd2nWrFm2FphsLMvIxZwbAABaTEx7U5fLpV/+8peaPXu2NmzYoMzMTJ166qnHPOcNQiprAhr32D+16Mhh+UTnBgCAltCsvWnbtm01fPhwu2pJelv2HtaOgxXyZYTObVPeINww5wYAgOaKOdysXLlSL730knbs2BEZmgp75ZVXml1YMiqvCsgnf+R+BZ0bAABsF9PRUi+++KLOPfdcbdiwQa+++qr8fr/WrVund999V+3bt7e7xqRRXuVXpqoj96tcWdErEG4AAGi2mMLNQw89pP/5n//R66+/Lq/Xq8cff1wbN27Utddeq549e9pdY9IoqwooU6EuV7VJU9B91Bwlwg0AAM0WU7jZunWrxo8fL0nyer2qqKiQy+XS9OnT9fTTT9taYDIprwoo0xXq3FTJ2zDMEG4AAGi2mMJNhw4dVF5eLkkqKCjQ2rVrJUmHDh1SZWWlfdUlmdCwVKhzc0S+hhOImVAMAECzxdQquOCCC7Ro0SINHDhQ11xzjaZNm6Z3331XixYt0ujRo+2uMWmUVwWUUTvn5ojxhq4CHqy3Ap0bAACaLaa96RNPPKGqqtDhzPfcc4/S09P10Ucf6eqrr9a9995ra4HJpLzKr0xXqHNTJZ9cDEsBAGC7k96bBgIB/f3vf9fYsWMlSW63WzNnzrS9sGRUXhWIHC11RF7JnR69AuEGAIBmO+k5N2lpabrlllsinRs0XXm9o6WOGJ9cHubcAABgt5gmFI8YMUJr1qyxuZTkV17lV0bt0VKV8kkeOjcAANgtpr3pbbfdphkzZmjnzp0aOnSo2rRpE/X4oEGDbCku2dTv3FTJy5wbAABaQEx70+uuu06S9KMf/SiyzOVyyRgjl8ulYDB4rKemtLL6c26MT246NwAA2C6mvem2bdvsriMl1D9a6oi8ch8958bFnBsAAJorpnDTq1cvu+tIejUBS9UBSxlp4aOlfHLV79y43JI7pilQAACgnpjCzXPPPXfcx2+66aaYiklm5VWhq4HXn3PjTqu3+RmSAgDAFjHtUadNmxZ13+/3q7KyUl6vV1lZWYSbRpRXBSQpas6Np37nhnADAIAtYhoH+frrr6N+Dh8+rE2bNmnUqFF64YUX7K4xKRyurg03UXNu6NwAAGA32yZ5nHrqqXr44YcbdHUQUlY7LNXOE/rdYM4NJ/ADAMAWts5gTUtL0+7du+18yaQRHpZqnxYKN1XGKw+dGwAAbBfTHvVvf/tb1H1jjPbs2aMnnnhC5513ni2FJZtwuGnrruvceJhQDACA7WLao15xxRVR910ulzp37qyLLrpIjz76qB11JZ3w0VIZ9S6c6WZCMQAAtotpj2pZlt11JL1w5yaj3oUzPWnMuQEAwG6cNS5Owp0bnwldTb1KXqWl07kBAMBuMYWbq6++Wr/85S8bLH/kkUd0zTXXNLuoZGFZRiVloTAT7tx4rdD90Jwbwg0AAHaLKdy8//77uvTSSxssv+SSS/T+++83u6hk8fDCjRr50GItWl+i0iOhzk1aONwYL+EGAIAWEFO4OXz4sLxeb4Pl6enpKisra3ZRyeLp97+UJE2fv0brdpcpTQF5TKiD06+giy7on1+3MnNuAACwRUzhZuDAgZo/f36D5S+++KLOPPPMZheVbA5XB7TjYGXk7MSS9Kdbvqk+ndvVrUTnBgAAW8S0R509e7auuuoqbd26VRdddJEkafHixXrhhRf08ssv21pga9azY5Z2HKyM3B/YxSeVSpJLSvNJLlco1FgBwg0AADaJaY962WWX6bXXXtNDDz2kBQsWKDMzU4MGDdI777yjCy+80O4aW61Obb1R4WZ4QW248bYJBRuJcAMAgM1i3qOOHz9e48ePt7OWpBMImqj7g/O80npJ6Zl1C8Ohhjk3AADYIqY5Nx9//LGWL1/eYPny5cu1cuXKZheVLPzB6JMdDuoYDN3I7Fi3MBxq6NwAAGCLmMLNlClTtHPnzgbLd+3apSlTpjS7qGRRP9yc3rWdct2HQ3eyOtWtFOncEG4AALBDTHvU9evX65xzzmmw/Oyzz9b69eubXVSyCFihYamHrhyo0Wd0kTb9KfRAVv3ODeEGAAA7xdS58fl8KikpabB8z549SktjJx3mD4Q6N2d1y1ZedoZUeTD0QKOdG+bcAABgh5jCzcUXX6xZs2aptLQ0suzQoUO6++679e1vf9u24lo7f23nJt1Tu5krD4R+R4Ub5twAAGCnmPaov/rVr3TBBReoV69eOvvssyVJa9asUV5enp5//nlbC2zNwnNu0j21h303Gm4YlgIAwE4x7VELCgr02Wef6c9//rM+/fRTZWZmatKkSbr++uuVXv9K1ykufCj48Ts3hBsAAOwU8x61TZs2GjVqlHr27KmamtBlBd566y1J0n/8x3/YU10rF+7cpDWpc8OcGwAA7BBTuPnyyy915ZVX6vPPP5fL5ZIxRq7wGXclBYNB2wpszeqGpcKdm8YmFDPnBgAAO8U0oXjatGnq06eP9u7dq6ysLK1du1ZLly7VsGHDtGTJEptLbJ2CllHtfOJGhqU4FBwAgJYS0x512bJlevfdd5Wbmyu32y2Px6NRo0apqKhIP/rRj7R69Wq762x16p/AL83jkmoqJX/tdaaYcwMAQIuJqXMTDAbVrl07SVJubq52794tSerVq5c2bdpkX3WtWPgEfpLk9bjrujbudMnXrm5Fwg0AALaKaY86YMAAffrpp+rTp49GjhypRx55RF6vV08//bT69u1rd42tUvgEfpKU5nZFTyauNz+JCcUAANgrpnBz7733qqKiQpL0wAMP6Dvf+Y7OP/98derUSfPnz7e1wNbKb4XCjcsleY4ON/UxoRgAAFvFtEcdO3Zs5Ha/fv20ceNGHTx4UB06dIg6aiqVRc5x43aHtkn4SKk2R4cbhqUAALBTTHNuGtOxY8eYg82TTz6p3r17KyMjQyNHjtSKFSuOue43v/lNuVyuBj/jx4+PtfQW0aSzE0uEGwAAbGZbuInV/PnzNWPGDN1///365JNPNHjwYI0dO1Z79+5tdP1XXnlFe/bsifysXbtWHo9H11xzTZwrPz5/becm7XhnJ5aYcwMAgM0cDzdz5szR5MmTNWnSJJ155pmaO3eusrKyNG/evEbX79ixo7p27Rr5WbRokbKyshIw3Fjyyq/zXJ9LX7wtFX8WeoA5NwAAtChH96g1NTVatWqVZs2aFVnmdrs1ZswYLVu2rEmv8cwzz+i6665TmzZtGn28urpa1dXVkftlZWXNK7qJAkGje9P+pJusRdL/1XsgKzd6RY+v9rc3LnUBAJDsHA03+/fvVzAYVF5eXtTyvLw8bdy48YTPX7FihdauXatnnnnmmOsUFRXpZz/7WbNrPVk1QUs9XLVDazk9Qx2brE7SGd+JXnHo96WaCun0xJozBABAa9Wqx0KeeeYZDRw4UCNGjDjmOrNmzdKMGTMi98vKytSjR48Wry0QtORR7bluvnWvNHhC4yv2Pi/0AwAAbOFouMnNzZXH41FJSUnU8pKSEnXt2vW4z62oqNCLL76oBx544Ljr+Xw++Xy+Ztd6sgKWUZpqLyDKZGEAAOLG0QnFXq9XQ4cO1eLFiyPLLMvS4sWLVVhYeNznvvzyy6qurtZ3v/vdli4zJjVBSx5XbeeGycIAAMSN43vdGTNmaOLEiRo2bJhGjBihxx57TBUVFZo0aZIk6aabblJBQYGKioqinvfMM8/oiiuuUKdOnRp7WccFgvU7N45vZgAAUobje90JEyZo3759uu+++1RcXKwhQ4Zo4cKFkUnGO3bskNsd3WDatGmTPvjgA7399ttOlNwk/qAlD+EGAIC4S4i97tSpUzV16tRGH1uyZEmDZf3795cxpuHKCcQftJQmhqUAAIg3x0/il6wCQVOvc8OEYgAA4oVw00Lo3AAA4AzCTQvxW4Y5NwAAOIBw00L8AYujpQAAcADhpoUErPrnuWHODQAA8UK4aSH++ue58aQ7WwwAACmEcNNC/PWvLcWwFAAAcUO4aSGcoRgAAGcQblpIdOeGOTcAAMQL4aaF+OncAADgCMJNC+HaUgAAOINw00ICFmcoBgDACYSbFuL3B+V21V7ck3ADAEDcEG5aiGX56+4woRgAgLgh3LQQKxCou0PnBgCAuCHctJBgsH7nhnADAEC8EG5aiAkQbgAAcALhpoVYwXrDUi42MwAA8cJet4WEw43lSpNcLoerAQAgdRBuWoixQuHGuDhSCgCAeCLctBCrdkKxYb4NAABxRbhpISYYuvSC4Rw3AADEFeGmhYQ7N3LRuQEAIJ4INy2lds4NZycGACC+CDctxNQeLcWcGwAA4otw00LC4YYT+AEAEF+Em5ZiGJYCAMAJhJuWQucGAABHEG5aSPgkfi7CDQAAcUW4aSlW6Dw3dG4AAIgvwo1d9nwqPTFceu5yWZaRq3bOjctDuAEAIJ7Y89ol6Jf2fyEFquS3LKXJCi2ncwMAQFzRubFLOMQEAwoEjTwKDUu56dwAABBXhBu7eNJDvy2/AkFD5wYAAIcQbuzirg03Qb9qglakc8OcGwAA4otwY5dwiLECCliW0sLhhs4NAABxRbixS73OjT9g5HExLAUAgBMIN3apN+fGX69zQ7gBACC+CDd2CXdujKVAIChPZEIx15YCACCeCDd2qTdxOOCvpnMDAIBDCDd2CXduJB0sr4wcLUW4AQAgvgg3dvHUhZuSQ+Wc5wYAAIcQbuxSL8Ts/fpwvc4Nc24AAIgnwo1dXK5IwNlXepjODQAADiHc2Kl23s3+0sPyuJhzAwCAEwg3dqqdd3OgvJKjpQAAcAjhxk61QebrskrOcwMAgEMIN3aqd5ZiL50bAAAcQbixU+2cmzQF1c4bXka4AQAgngg3dqo9S3G6Asr2uULLCDcAAMQV4cZOUZ2bcLhhzg0AAPFEuLFT7ZybNFdQbcMnLKZzAwBAXBFu7OQOD0sF1YZwAwCAIwg3dgp3bhSQ180ZigEAcALhxk715tx4uPwCAACOINzYqbZzk66gPIYLZwIA4ATCjZ1quzShzg0n8QMAwAmEGzuFOzeugNyGcAMAgBMIN3aqN+eGcAMAgDMIN3by1A1LucWcGwAAnEC4sZO7bkIxnRsAAJxBuLFTvfPcEG4AAHAG4cZO9Y6WItwAAOAMwo2d6p3nxmUCoWXMuQEAIK4IN3Zy110400XnBgAARxBu7ORhQjEAAE5zPNw8+eST6t27tzIyMjRy5EitWLHiuOsfOnRIU6ZMUX5+vnw+n0477TS9+eabcar2+IwrPOcmIJcVHpYi3AAAEE+O7nnnz5+vGTNmaO7cuRo5cqQee+wxjR07Vps2bVKXLl0arF9TU6Nvf/vb6tKlixYsWKCCggJt375dOTk58S++EUG3R2kKTShmWAoAAGc4uuedM2eOJk+erEmTJkmS5s6dqzfeeEPz5s3TzJkzG6w/b948HTx4UB999JHS00NDQL17945nycdlueqGpWQxoRgAACc4NixVU1OjVatWacyYMXXFuN0aM2aMli1b1uhz/va3v6mwsFBTpkxRXl6eBgwYoIceekjBYPCY71NdXa2ysrKon5ZiueoOBa/r3KS32PsBAICGHAs3+/fvVzAYVF5eXtTyvLw8FRcXN/qcL7/8UgsWLFAwGNSbb76p2bNn69FHH9XPf/7zY75PUVGR2rdvH/np0aOHrZ+jvoBCXZo0V6Be54ZhKQAA4snxCcUnw7IsdenSRU8//bSGDh2qCRMm6J577tHcuXOP+ZxZs2aptLQ08rNz584Wqy9Y27nxuYJMKAYAwCGO7Xlzc3Pl8XhUUlIStbykpERdu3Zt9Dn5+flKT0+Xx1M3j+WMM85QcXGxampq5PV6GzzH5/PJ5/PZW/wxBGs3p9cVlCwunAkAgBMc69x4vV4NHTpUixcvjiyzLEuLFy9WYWFho88577zztGXLFlmWFVn2xRdfKD8/v9FgE28BVyjIhMINnRsAAJzg6LDUjBkz9Pvf/15//OMftWHDBt16662qqKiIHD110003adasWZH1b731Vh08eFDTpk3TF198oTfeeEMPPfSQpkyZ4tRHiBKsnXMTfbQU4QYAgHhydM87YcIE7du3T/fdd5+Ki4s1ZMgQLVy4MDLJeMeOHXK76/JXjx499I9//EPTp0/XoEGDVFBQoGnTpumuu+5y6iNECbjCw1IW4QYAAIe4jDHG6SLiqaysTO3bt1dpaamys7Ntfe1tS55XnyVT9Zn7dA2yNoYW3rlNyupo6/sAAJBqTmb/3aqOlkp0gdpGWIb8dQvp3AAAEFeEGxuFz3PjU03dQsINAABxRbixUQ3hBgAAxxFubBQwteHGEG4AAHAK4cZG/trOjVfVtUtckptNDABAPLHntVFN7YTiSOeGrg0AAHFHuLGR36q9cKY4xw0AAE4h3NjIf/TmJNwAABB3hBsb1ZijwgwXzQQAIO4INzaqMXRuAABwGuHGRjXmqE4N4QYAgLgj3Nio2jq6c8OwFAAA8Ua4sVGDOTe+ds4UAgBACiPc2KhB5yarkzOFAACQwgg3Nqo+ekJxVkdnCgEAIIURbmxUYx01x4bODQAAcUe4sVG15YpeQLgBACDuCDc28luSv/7h4IQbAADijnBjI3/QUkCEGwAAnES4sVEgaMlPuAEAwFGEGxv5g4bODQAADiPc2Cg0LFXvRH6EGwAA4o5wY6OAZZSuQN0Cwg0AAHFHuLGRP2ipnSrrFnjbOFcMAAApinBjI3/QUprLqlvgch17ZQAA0CIINzbyB43TJQAAkPIINzYKBK0TrwQAAFoU4cZGNfU7N+lZzhUCAEAKI9zYKKpz48t2rhAAAFIY4cZG/vrhJoNwAwCAEwg3NoqaUEznBgAARxBubBSwLD0VuCx0Z+wvnC0GAIAURbixkT9o9MvA9friPzdJPb/hdDkAAKQkwo2NwnNu0jLaOlwJAACpi3Bjo3C4SfewWQEAcAp7YRsFaicUp3m47AIAAE4h3NjEGKOAFQo3dG4AAHAOe2Gb1D8MPN3NZgUAwCnshW0SsOpO4JeexrAUAABOIdzYxB+o69yk0bkBAMAx7IVt4q/fuWFCMQAAjiHc2CRyjhu3Sy4X4QYAAKcQbmzCYeAAACQGwo1NajiBHwAACYE9sU3CnRvCDQAAzmJPbJO6Sy8wLAUAgJMINzapm1DMJgUAwEnsiW1iGSkz3aMsr8fpUgAASGlpTheQLIb26qAND45zugwAAFIenRsAAJBUCDcAACCpEG4AAEBSIdwAAICkQrgBAABJhXADAACSCuEGAAAkFcINAABIKoQbAACQVAg3AAAgqRBuAABAUiHcAACApEK4AQAASYVwAwAAkkqa0wXEmzFGklRWVuZwJQAAoKnC++3wfvx4Ui7clJeXS5J69OjhcCUAAOBklZeXq3379sddx2WaEoGSiGVZ2r17t9q1ayeXy2Xra5eVlalHjx7auXOnsrOzbX3tZMO2Ojlsr6ZjWzUd2+rksL2ariW2lTFG5eXl6tatm9zu48+qSbnOjdvtVvfu3Vv0PbKzs/niNxHb6uSwvZqObdV0bKuTw/ZqOru31Yk6NmFMKAYAAEmFcAMAAJIK4cZGPp9P999/v3w+n9OlJDy21clhezUd26rp2FYnh+3VdE5vq5SbUAwAAJIbnRsAAJBUCDcAACCpEG4AAEBSIdwAAICkQrixyZNPPqnevXsrIyNDI0eO1IoVK5wuKSH89Kc/lcvlivo5/fTTI49XVVVpypQp6tSpk9q2baurr75aJSUlDlYcP++//74uu+wydevWTS6XS6+99lrU48YY3XfffcrPz1dmZqbGjBmjzZs3R61z8OBB3XjjjcrOzlZOTo7+8z//U4cPH47jp4iPE22r73//+w2+Z+PGjYtaJ1W2VVFRkYYPH6527dqpS5cuuuKKK7Rp06aodZryd7djxw6NHz9eWVlZ6tKli+644w4FAoF4fpS4aMr2+uY3v9ng+3XLLbdErZMK2+upp57SoEGDIifmKyws1FtvvRV5PJG+V4QbG8yfP18zZszQ/fffr08++USDBw/W2LFjtXfvXqdLSwhnnXWW9uzZE/n54IMPIo9Nnz5dr7/+ul5++WUtXbpUu3fv1lVXXeVgtfFTUVGhwYMH68knn2z08UceeUS//vWvNXfuXC1fvlxt2rTR2LFjVVVVFVnnxhtv1Lp167Ro0SL9/e9/1/vvv6+bb745Xh8hbk60rSRp3LhxUd+zF154IerxVNlWS5cu1ZQpU/Svf/1LixYtkt/v18UXX6yKiorIOif6uwsGgxo/frxqamr00Ucf6Y9//KOeffZZ3XfffU58pBbVlO0lSZMnT476fj3yyCORx1Jle3Xv3l0PP/ywVq1apZUrV+qiiy7S5ZdfrnXr1klKsO+VQbONGDHCTJkyJXI/GAyabt26maKiIgerSgz333+/GTx4cKOPHTp0yKSnp5uXX345smzDhg1Gklm2bFmcKkwMksyrr74auW9Zlunatav57//+78iyQ4cOGZ/PZ1544QVjjDHr1683kszHH38cWeett94yLpfL7Nq1K261x9vR28oYYyZOnGguv/zyYz4nVbeVMcbs3bvXSDJLly41xjTt7+7NN980brfbFBcXR9Z56qmnTHZ2tqmuro7vB4izo7eXMcZceOGFZtq0acd8Tipvrw4dOpg//OEPCfe9onPTTDU1NVq1apXGjBkTWeZ2uzVmzBgtW7bMwcoSx+bNm9WtWzf17dtXN954o3bs2CFJWrVqlfx+f9S2O/3009WzZ8+U33bbtm1TcXFx1LZp3769Ro4cGdk2y5YtU05OjoYNGxZZZ8yYMXK73Vq+fHnca3bakiVL1KVLF/Xv31+33nqrDhw4EHkslbdVaWmpJKljx46SmvZ3t2zZMg0cOFB5eXmRdcaOHauysrLIv9KT1dHbK+zPf/6zcnNzNWDAAM2aNUuVlZWRx1JxewWDQb344ouqqKhQYWFhwn2vUu7CmXbbv3+/gsFg1H8sScrLy9PGjRsdqipxjBw5Us8++6z69++vPXv26Gc/+5nOP/98rV27VsXFxfJ6vcrJyYl6Tl5enoqLi50pOEGEP39j36vwY8XFxerSpUvU42lpaerYsWPKbb9x48bpqquuUp8+fbR161bdfffduuSSS7Rs2TJ5PJ6U3VaWZenHP/6xzjvvPA0YMECSmvR3V1xc3Oh3L/xYsmpse0nSDTfcoF69eqlbt2767LPPdNddd2nTpk165ZVXJKXW9vr8889VWFioqqoqtW3bVq+++qrOPPNMrVmzJqG+V4QbtKhLLrkkcnvQoEEaOXKkevXqpZdeekmZmZkOVoZkct1110VuDxw4UIMGDdIpp5yiJUuWaPTo0Q5W5qwpU6Zo7dq1UfPccGzH2l7152YNHDhQ+fn5Gj16tLZu3apTTjkl3mU6qn///lqzZo1KS0u1YMECTZw4UUuXLnW6rAYYlmqm3NxceTyeBjPCS0pK1LVrV4eqSlw5OTk67bTTtGXLFnXt2lU1NTU6dOhQ1DpsO0U+//G+V127dm0waT0QCOjgwYMpv/369u2r3NxcbdmyRVJqbqupU6fq73//u9577z117949srwpf3ddu3Zt9LsXfiwZHWt7NWbkyJGSFPX9SpXt5fV61a9fPw0dOlRFRUUaPHiwHn/88YT7XhFumsnr9Wro0KFavHhxZJllWVq8eLEKCwsdrCwxHT58WFu3blV+fr6GDh2q9PT0qG23adMm7dixI+W3XZ8+fdS1a9eobVNWVqbly5dHtk1hYaEOHTqkVatWRdZ59913ZVlW5H++qerf//63Dhw4oPz8fEmpta2MMZo6dapeffVVvfvuu+rTp0/U4035uyssLNTnn38eFQgXLVqk7OxsnXnmmfH5IHFyou3VmDVr1khS1PcrVbbX0SzLUnV1deJ9r2ydnpyiXnzxRePz+cyzzz5r1q9fb26++WaTk5MTNSM8Vd1+++1myZIlZtu2bebDDz80Y8aMMbm5uWbv3r3GGGNuueUW07NnT/Puu++alStXmsLCQlNYWOhw1fFRXl5uVq9ebVavXm0kmTlz5pjVq1eb7du3G2OMefjhh01OTo7561//aj777DNz+eWXmz59+pgjR45EXmPcuHHm7LPPNsuXLzcffPCBOfXUU83111/v1EdqMcfbVuXl5eYnP/mJWbZsmdm2bZt55513zDnnnGNOPfVUU1VVFXmNVNlWt956q2nfvr1ZsmSJ2bNnT+SnsrIyss6J/u4CgYAZMGCAufjii82aNWvMwoULTefOnc2sWbOc+Egt6kTba8uWLeaBBx4wK1euNNu2bTN//etfTd++fc0FF1wQeY1U2V4zZ840S5cuNdu2bTOfffaZmTlzpnG5XObtt982xiTW94pwY5Pf/OY3pmfPnsbr9ZoRI0aYf/3rX06XlBAmTJhg8vPzjdfrNQUFBWbChAlmy5YtkcePHDlibrvtNtOhQweTlZVlrrzySrNnzx4HK46f9957z0hq8DNx4kRjTOhw8NmzZ5u8vDzj8/nM6NGjzaZNm6Je48CBA+b66683bdu2NdnZ2WbSpEmmvLzcgU/Tso63rSorK83FF19sOnfubNLT002vXr3M5MmTG/zjIlW2VWPbSZL53//938g6Tfm7++qrr8wll1xiMjMzTW5urrn99tuN3++P86dpeSfaXjt27DAXXHCB6dixo/H5fKZfv37mjjvuMKWlpVGvkwrb6wc/+IHp1auX8Xq9pnPnzmb06NGRYGNMYn2vXMYYY28vCAAAwDnMuQEAAEmFcAMAAJIK4QYAACQVwg0AAEgqhBsAAJBUCDcAACCpEG4AAEBSIdwAAICkQrgBkPKWLFkil8vV4KJ/AFonwg0AAEgqhBsAAJBUCDcAHGdZloqKitSnTx9lZmZq8ODBWrBggaS6IaM33nhDgwYNUkZGhr7xjW9o7dq1Ua/xl7/8RWeddZZ8Pp969+6tRx99NOrx6upq3XXXXerRo4d8Pp/69eunZ555JmqdVatWadiwYcrKytK5556rTZs2tewHB9AiCDcAHFdUVKTnnntOc+fO1bp16zR9+nR997vf1dKlSyPr3HHHHXr00Uf18ccfq3Pnzrrsssvk9/slhULJtddeq+uuu06ff/65fvrTn2r27Nl69tlnI8+/6aab9MILL+jXv/61NmzYoN/97ndq27ZtVB333HOPHn30Ua1cuVJpaWn6wQ9+EJfPD8BeXBUcgKOqq6vVsWNHvfPOOyosLIws/+EPf6jKykrdfPPN+ta3vqUXX3xREyZMkCQdPHhQ3bt317PPPqtrr71WN954o/bt26e333478vw777xTb7zxhtatW6cvvvhC/fv316JFizRmzJgGNSxZskTf+ta39M4772j06NGSpDfffFPjx4/XkSNHlJGR0cJbAYCd6NwAcNSWLVtUWVmpb3/722rbtm3k57nnntPWrVsj69UPPh07dlT//v21YcMGSdKGDRt03nnnRb3ueeedp82bNysYDGrNmjXyeDy68MILj1vLoEGDIrfz8/MlSXv37m32ZwQQX2lOFwAgtR0+fFiS9MYbb6igoCDqMZ/PFxVwYpWZmdmk9dLT0yO3XS6XpNB8IACtC50bAI4688wz5fP5tGPHDvXr1y/qp0ePHpH1/vWvf0Vuf/311/riiy90xhlnSJLOOOMMffjhh1Gv++GHH+q0006Tx+PRwIEDZVlW1BweAMmLzg0AR7Vr104/+clPNH36dFmWpVGjRqm0tFQffvihsrOz1atXL0nSAw88oE6dOikvL0/33HOPcnNzdcUVV0iSbr/9dg0fPlwPPvigJkyYoGXLlumJJ57Qb3/7W0lS7969NXHiRP3gBz/Qr3/9aw0ePFjbt2/X3r17de211zr10QG0EMINAMc9+OCD6ty5s4qKivTll18qJydH55xzju6+++7IsNDDDz+sadOmafPmzRoyZIhef/11eb1eSdI555yjl156Sffdd58efPBB5efn64EHHtD3v//9yHs89dRTuvvuu3XbbbfpwIED6tmzp+6++24nPi6AFsbRUgASWvhIpq+//lo5OTlOlwOgFWDODQAASCqEGwAAkFQYlgIAAEmFzg0AAEgqhBsAAJBUCDcAACCpEG4AAEBSIdwAAICkQrgBAABJhXADAACSCuEGAAAklf8fYN/DvmrpaMcAAAAASUVORK5CYII=\n" }, "metadata": {} } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.plot(train_score)\n", "plt.plot(test_score)\n", "plt.xlabel('epoch')\n", "plt.ylabel('accuracy')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "pdp2Ykst1K_I", "outputId": "4b9ce3ab-c497-4541-b4e2-e88efcfabd7d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.957983193277311\n", "0.925\n" ] } ], "source": [ "sc = SGDClassifier(loss='log_loss', max_iter=100, tol=None, random_state=42)\n", "sc.fit(train_scaled, train_target)\n", "\n", "print(sc.score(train_scaled, train_target))\n", "print(sc.score(test_scaled, test_target))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "OL7-y1kgIP4S", "outputId": "e50984d7-4934-4090-9e5b-0ca308d407c4" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9495798319327731\n", "0.925\n" ] } ], "source": [ "sc = SGDClassifier(loss='hinge', max_iter=100, tol=None, random_state=42)\n", "sc.fit(train_scaled, train_target)\n", "\n", "print(sc.score(train_scaled, train_target))\n", "print(sc.score(test_scaled, test_target))" ] } ], "metadata": { "colab": { "name": "4-2 확률적 경사 하강법.ipynb", "provenance": [] }, "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.7.3" } }, "nbformat": 4, "nbformat_minor": 0 }