{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 선형 회귀 모형 (ML 모델)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import os\n", "\n", "np.random.seed(42)\n", "\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "mpl.rc('axes', labelsize=14)\n", "mpl.rc('xtick', labelsize=12)\n", "mpl.rc('ytick', labelsize=12)\n", "\n", "import warnings\n", "warnings.filterwarnings(action=\"ignore\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear regression using the Normal Equation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$y=4+3 \\times x + \\text{error}$$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "X = 2 * np.random.rand(100, 1)\n", "y = 4 + 3 * X + np.random.randn(100, 1)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(X, y, \"b.\")\n", "plt.xlabel(\"$x_1$\", fontsize=18)\n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18)\n", "plt.axis([0, 2, 0, 15])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\hat{\\theta}=(X^TX)^{-1}X^Ty$$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "X_b = np.c_[np.ones((100, 1)), X] # add x0 = 1 to each instance\n", "theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.21509616],\n", " [2.77011339]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta_best" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.21509616],\n", " [9.75532293]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 새로운 데이터를 테스트 한다.\n", "X_new = np.array([[0], [2]])\n", "X_new_b = np.c_[np.ones((2, 1)), X_new] # add x0 = 1 to each instance\n", "y_predict = X_new_b.dot(theta_best)\n", "y_predict" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 2, 0, 15]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEVCAYAAAARjMm4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzt3XmcFPWd//HXZy5OUVFAxAAaBPFWRrQFxolgNGazJHFN4pFgNgaPmPjz98vlGpWYZNGcZmM2Lm5ANKdxiVkTBXVCh1EHdYhGRI5EucQDRJSbZma+vz+qe6Z76Jnqnqmurp55Px+PeUBX1VR9uqa7PvX9fj9VZc45REREOlNW7ABERCT6lCxERMSXkoWIiPhSshAREV9KFiIi4kvJQkREfClZiIiILyULERHxpWQhIiK+KoodgJ/DDz/cjR49uthhiIiUlGXLlr3tnBsS1PoinyxGjx5NY2NjscMQESkpZrY+yPWpG0pERHwpWYiIiC8lCxER8aVkISIivpQsRETEV+Srofxs376dzZs3s3///mKHIiGprKxk6NChDBo0qNihiPQaJZ0stm/fzltvvcWIESPo168fZlbskKTAnHPs2bOHTZs2AShhiISkpLuhNm/ezIgRI+jfv78SRS9hZvTv358RI0awefPmYocj0muUdLLYv38//fr1K3YYUgT9+vVT16NIiAJNFmZ2nZk1mtk+M7u3g2VuMTNnZtMC2mYQq5ESo7+7SLiCHrN4Hfg2cD5wwCm/mb0fuBh4I+DtiohIAQXasnDOLXDOPQRs7WCRnwJfAxJBblc6duKJJzJr1qzW16NHj+b73/9+t9ZZW1vLdddd183IRKSUhDZmYWYXA/ucc4+Etc2ouuKKKzAzzIzKykqOOeYYvvzlL7Nr166Cb/u5557j2muvzWnZe++9l4EDBx4wfcGCBcyePTvo0EQkwkIpnTWzg4B/B87LcfmZwEyAkSNHFjCy4pk2bRr3338/+/fvp76+niuvvJJdu3bxs5/97IBl9+/fT2VlZSDbHTKk+3csHjx4cACRiEgpCatlMQu43zm3LpeFnXNznHPVzrnqIA5uUdSnTx+OOOII3ve+93HppZdy2WWX8dBDDxGPxzEzHnnkESZOnEhVVRWLFi0C4OGHH2bChAn07duXo48+mptuuolEoq1Hb/PmzUyfPp1+/foxatQo5s6de8B223dDvffee1xzzTUMHz6cvn37Mn78eH77298Sj8f57Gc/y65du1pbQanurPbdUNu2bWPGjBkceuih9OvXj2nTprFixYrW+akWSl1dHSeeeCIDBgzgAx/4AGvXrm1dZuPGjUyfPp3BgwfTv39/jjvuOH7zm98Etr9FpHvCuihvKnCUmaX6P4YAD5jZHc65O0KKIdLal4J+7Wtf4wc/+AFjxozhoIMOYtGiRVx22WX8+Mc/pqamhg0bNnD11Vezb9++1oP/FVdcwfr163niiSfo378/N9xwA+vWretwm845LrzwQrZt28a8efMYO3Ysq1evZu/evZx99tnceeed/Nu//RuvvPIKQNYuqdR2V69ezR/+8AcOPfRQbrrpJi644ALWrFnTWtq8b98+Zs+ezdy5c+nbty8zZszg6quvbk2E1157LXv37mXx4sUMGjSI1atXB7FbRSQozrnAfvCST19gNnB/8v8VwGHAEWk/G/Gqogb6rXPChAmuIy+//PKBE6E4P3mYMWOG+/CHP9z6+plnnnGHHXaY+8QnPuEWL17sAPfggw9m/M6UKVPcbbfdljHt97//vRswYIBraWlxq1evdoB78sknW+evW7fOlZWVuVtvvbV12qhRo9z3vvc955xzjz32mDOz7PvROTdv3jw3YMCAA6afc8457gtf+IJzzrk1a9Y4wP3lL39pnf/uu++6QYMGuXvuuad1PYBbtWpV6zK/+MUvXFVVlWtpaXHOOXfSSSe5WbNmdbzTsugobhFxDmh0AR7fg25ZfAO4Ne315cA3nXOz0hcys2Zgm3NuZ8DbLxkLFy5k4MCBNDU1sX//fqZPn85PfvITXn75ZQCqq6szll+2bBnPPvssd9zR1hBraWlhz549vPnmm6xcuZKysjImTpzYOn/UqFEceeSRHcbw/PPPM3z4cMaPH9/l95HabiwWa5128MEHc9JJJ7W+F/C63caNG9f6+sgjjySRSLBt2zYGDx7M9ddfz9VXX83ChQuZOnUqH/vYx5gwYUKX4xKRYAWaLJJJYVYOy40OcrvtVl6wVQeppqaGOXPmUFlZyZFHHtk6gJ06wA4YMCBj+ZaWFm699VYuvvjiA9aVPq4TpYvV0mOpqKjIOq+lpQWAz33uc5x//vk88sgjPPHEE5x99tnceOONGWW/IlI8JX27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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(X_new, y_predict, \"r-\", linewidth=2, label=\"Predictions\")\n", "plt.plot(X, y, \"b.\")\n", "plt.xlabel(\"$x_1$\", fontsize=18)\n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18)\n", "plt.legend(loc=\"upper left\", fontsize=14)\n", "plt.axis([0, 2, 0, 15])" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Normal equation을 사용하는 모듈\n", "from sklearn.linear_model import LinearRegression\n", "\n", "lin_reg = LinearRegression()\n", "lin_reg.fit(X, y)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([4.21509616]), array([[2.77011339]]))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 정규방정식을 그대로 사용했을 때와 동일함을 알 수 있다.\n", "lin_reg.intercept_, lin_reg.coef_" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.21509616],\n", " [9.75532293]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lin_reg.predict(X_new)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear regression using Batch Gradient Descent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "선형 회귀 모형의 비용 함수는 MSE이며, 그것의 편도함수는 다음과 같다.\n", "\n", "$$\\frac{\\partial}{\\partial \\theta_j} \\text{MSE}(\\theta) = \\frac{2}{m}\\sum_{i=1}^{m}(\\theta^T x^{(i)}-y^{(i)})x_j^{(i)}$$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "eta = 0.1\n", "n_iterations = 1000\n", "m = 100\n", "theta = np.random.randn(2,1)\n", "\n", "for iteration in range(n_iterations):\n", " gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)\n", " theta = theta - eta * gradients" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.21509616],\n", " [2.77011339]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.21509616],\n", " [9.75532293]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_new_b.dot(theta)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "theta_path_bgd = []\n", "\n", "def plot_gradient_descent(theta, eta, theta_path=None):\n", " m = len(X_b)\n", " plt.plot(X, y, \"b.\")\n", " n_iterations = 1000\n", " for iteration in range(n_iterations):\n", " if iteration < 10:\n", " # 반복 횟수가 10번이 되기전까지만(처음 10개의 직선만) plotting\n", " y_predict = X_new_b.dot(theta)\n", " style = \"b-\" if iteration > 0 else \"r--\"\n", " plt.plot(X_new, y_predict, style)\n", " gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)\n", " theta = theta - eta * gradients\n", " # Theta의 변화량을 기록할 것이다! Why? 나중에 batch, mini-batch, stochastic의 수렴도를 그림으로 그릴것이다.\n", " if theta_path is not None:\n", " theta_path.append(theta)\n", " plt.xlabel(\"$x_1$\", fontsize=18)\n", " plt.axis([0, 2, 0, 15])\n", " plt.title(r\"$\\eta = {}$\".format(eta), fontsize=16)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "여러 가지 학습률에 대한 경사 하강법을 그림으로 표현 (점선은 시작점)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "np.random.seed(42)\n", "theta = np.random.randn(2,1) # random initialization\n", "\n", "plt.figure(figsize=(10,4))\n", "plt.subplot(131); plot_gradient_descent(theta, eta=0.02)\n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18)\n", "plt.subplot(132); plot_gradient_descent(theta, eta=0.1, theta_path=theta_path_bgd)\n", "plt.subplot(133); plot_gradient_descent(theta, eta=0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stochastic Gradient Descent\n", "\n", "랜덤하게 데이터를 1개 선택한다. 그리고 그 데이터를 이용하여, 파라미터를 업데이트 한다." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "theta_path_sgd = []\n", "m = len(X_b)\n", "np.random.seed(42)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Randomness는 지역 최솟값에서 탈출시켜주기 때문에 좋지만 알고리즘을 전역 최소값에 다다르지 못하게 한다는 점에서는 좋지 않다. 이 딜레마를 해결하는 한 가지 방법은 학습률을 점진적으로 감소시키는 것이다. 매 반복에서 학습률을 결정하는 함수를 **학습 스케쥴(learning schedule)** 이라고 부른다." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 2, 0, 15]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_epochs = 50\n", "t0, t1 = 5, 50 # learning schedule hyperparameters\n", "\n", "def learning_schedule(t):\n", " return t0 / (t + t1)\n", "\n", "theta = np.random.randn(2,1) # random initialization\n", "\n", "for epoch in range(n_epochs):\n", " for i in range(m):\n", " # 첫 번째 에포크에 대하여 처음 20개의 학습곡선만 plotting\n", " if epoch == 0 and i < 20: \n", " y_predict = X_new_b.dot(theta) \n", " style = \"b-\" if i > 0 else \"r--\" \n", " plt.plot(X_new, y_predict, style) \n", " # 랜덤하게 1개를 선택한다.\n", " random_index = np.random.randint(m) \n", " xi = X_b[random_index:random_index+1]\n", " yi = y[random_index:random_index+1]\n", " gradients = 2 * xi.T.dot(xi.dot(theta) - yi)\n", " # 학습률은 고정되어 있지 않고 변한다. 학습률의 초기값은 5/50, 다음값은5/51이다.\n", " eta = learning_schedule(epoch * m + i)\n", " theta = theta - eta * gradients\n", " theta_path_sgd.append(theta) \n", "\n", "plt.plot(X, y, \"b.\") \n", "plt.xlabel(\"$x_1$\", fontsize=18) \n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18) \n", "plt.axis([0, 2, 0, 15]) " ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.21076011],\n", " [2.74856079]])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.1,\n", " fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',\n", " loss='squared_loss', max_iter=50, n_iter=None, penalty=None,\n", " power_t=0.25, random_state=42, shuffle=True, tol=-inf, verbose=0,\n", " warm_start=False)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.linear_model import SGDRegressor\n", "sgd_reg = SGDRegressor(max_iter=50, tol=-np.infty, penalty=None, eta0=0.1, random_state=42)\n", "sgd_reg.fit(X, y.ravel())" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([4.16782089]), array([2.72603052]))" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sgd_reg.intercept_, sgd_reg.coef_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mini-batch gradient descent" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "theta_path_mgd = []\n", "\n", "n_iterations = 50\n", "minibatch_size = 20\n", "\n", "np.random.seed(42)\n", "theta = np.random.randn(2,1) # random initialization\n", "\n", "t0, t1 = 200, 1000\n", "def learning_schedule(t):\n", " return t0 / (t + t1)\n", "\n", "t = 0\n", "for epoch in range(n_iterations):\n", " shuffled_indices = np.random.permutation(m)\n", " X_b_shuffled = X_b[shuffled_indices]\n", " y_shuffled = y[shuffled_indices]\n", " for i in range(0, m, minibatch_size):\n", " t += 1\n", " # 미니 배치를 선택한다.\n", " xi = X_b_shuffled[i:i+minibatch_size]\n", " yi = y_shuffled[i:i+minibatch_size]\n", " gradients = 2/minibatch_size * xi.T.dot(xi.dot(theta) - yi)\n", " eta = learning_schedule(t)\n", " theta = theta - eta * gradients\n", " theta_path_mgd.append(theta)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.25214635],\n", " [2.7896408 ]])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "theta_path_bgd = np.array(theta_path_bgd)\n", "theta_path_sgd = np.array(theta_path_sgd)\n", "theta_path_mgd = np.array(theta_path_mgd)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[2.5, 4.5, 2.3, 3.9]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdIAAAEZCAYAAAAjT6RBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzsnXd4VMX6xz+TQgqdEEASktClKUiRIoQmIFgABemggiKKqKj3pyIJqGABUVHAgrQgcEGK14s0KUoXBOlNSi6hhdDTk31/f0yyySabZEM6zOd55tmcOXNm3rO72e+ZmXfeUSKCwWAwGAyG28OpoA0wGAwGg6EoY4TUYDAYDIYcYITUYDAYDIYcYITUYDAYDIYcYITUYDAYDIYcYITUYDAYDIYcYITUYDAYDIYcYITUYDAYDIYcYITUYDAYDIYc4FLQBuQ15cuXl4CAgII2w2AwGAyFhN27d18WEe/cqu+OF9KAgAB27dpV0GYYDAaDoZCglDqTm/WZoV2DwWAwGHKAEVKDwWAwGHKAEVKDwWAwGHKAEVKDwWAwGHKAEVKDwWAwGHKAEVKDwWAwGHLAHb/8xRFu3LjBpUuXiI+PL2hTDIUYV1dXKlSoQKlSpQraFIPBUIi464X0xo0bXLx4ER8fHzw8PFBKFbRJhkKIiBAdHU1YWBiAEVODwWClQId2lVIhSqnzSqkbSqljSqmhGZRTSqkPlFJhSqnrSqmNSql6uWHDpUuX8PHxwdPT04ioIUOUUnh6euLj48OlS5cK2hyDwVCIKOg50olAgIiUAh4HPlBKNbZTrhfwLNAaKAdsA+blhgHx8fF4eHjkRlWGuwAPDw8zBWAwGGwoUCEVkYMiEpt8mJSq2ylaFdgsIidFJBEIAermlh2mJ2pwFPNdMRgMaSnoHilKqWlKqSjgCHAeWGmn2EKgulKqllLKFRgMrMpHMw0Gg8FgsEuBOxuJyAil1EigBdAWiLVT7DywGTgKJAL/A9pnVKdS6nngeQA/P79ctthgMBgMhhQKvEcKICKJIrIZ8AVetFNkLNAUqAK4A+OA9Uopzwzq+1ZEmohIE2/vXNspp8iwfPly2rRpQ4UKFfDw8MDf35/u3buzalVKJ37jxo0EBwdjsVjyzI4hQ4bg6+ubZ/WnZe/evQQHB3PlypV055RSBAcH55stBoPh7qFQCGkqXLA/R9oQWCQiZ0UkQURmA2XJxXnSO4Uvv/ySHj16ULNmTWbOnMl///tfxowZA8D69eut5TZu3Mi4cePyVEjzm7179zJu3Di7Qrpt2zaGDrXrFG4wGAw5osCGdpVSFdDDs78A0UBHoG9SSsufQC+l1EIgHOgPuAIn8sfaosOkSZPo3r07M2fOtOa1b9+eYcOG3VGimV2aN29e0CYYDIY7lILskQp6GPcscBWYBLwqIj8rpfyUUreUUskTnB8DfwN7gWvAa8CTInKtAOzOmEqVQKn0qVKlfDPhypUrVMqgPScn/XEHBwczbtw4QEfrUUrZeKOeP3+eQYMGUb58edzc3LjvvvsICQlJV9+pU6cYOHAglSpVws3NjWrVqjFq1Kh05fbs2UPr1q3x9PSkZs2azJgxw+Z8eHg4L7zwArVq1cLT05MqVarQr18/a/CDZI4dO0aPHj2oUKEC7u7u+Pn50atXLxISEpg9ezbPPPMMADVr1rTe0+nTpwH7Q7t///03PXr0wMvLCw8PD2rXrs3EiRMzeXcNBoMhPQXWIxWRcCAwg3OhQIlUxzHAS0mp8HLxYvby84BmzZoxZ84cqlWrxhNPPEGtWrXSlRk6dChnz55l5syZbN68GWdnZ+u5yMhIAgMDuXr1KhMmTKBKlSqEhIQwcOBAoqKieP755wEtos2aNcPT05Px48dTs2ZNQkNDWbNmjU1bN27coF+/frz66quMHTuWWbNm8eKLL1K7dm3atWsHaPF3d3dn4sSJeHt7c+7cOSZPnkyrVq04cuQI7u7uAHTr1o2yZcsyffp0ypcvT1hYGCtXrsRisdCtWzfGjBnDBx98wOLFi61zs/fcc4/d92nnzp20bduWGjVqMGXKFHx9fTl+/Dj79u3L+YdgMBjuLkTkjk6NGzeWzDh06FCm57MFZJzyiaNHj0qDBg2S1+SKl5eX9OnTR1avXm1TLigoSACJj4+3yZ86daoAsmHDBpv8Dh06iLe3tyQkJIiIyMCBA6V48eISFhaWoS2DBw8WQNavX2/Ni4mJkXLlysmwYcMyvC4hIUFCQ0MFkKVLl4qISHh4uACyYsWKDK+bNWuWAHL8+PF05wAJCgqyHrdu3Vp8fX0lMjIyw/oyIle/MwaDId8Bdkku6kxhczYqPNgbos0q5Wd9GVCrVi327NnDpk2bePfdd2nYsCHLli2jc+fOfPDBB1le//vvv+Pj40Pbtm1t8gcMGEB4eDiHDh0CYM2aNTz66KNUrlw50/o8PT2tPU8ANzc3atWqRWhoqE256dOnc//991OiRAlcXFysy5aOHj0KgJeXF9WqVeP//u//+O677zh+/HiW95IRUVFRbNmyhf79++Ppadfx22AwGBzGCGlGZN6/tJ/ys75McHZ2pk2bNnzwwQesW7eOkydP0qBBA8aNG8fVq1czvfbKlSt2h0OT512TPWIjIiIcWtpStmzZdHlubm7ExMRYj6dOncqIESPo2LEjS5cuZefOnWzfvh3AWk4pxdq1a2nSpAlvv/02tWrVolq1akyfPj1LG9Jy9epVLBZLvi7NMRgMdy5GSO8CKleuzNChQ0lISMiyJ1euXDkuXLiQLj85r1y5cgDWOcrcYOHChXTo0IHJkyfTqVMnmjZtSoUKFdKVq1atGnPnziU8PJw9e/bQvn17RowYwa+//pqt9sqWLYuTk1Ou2W8wGO5ujJDmJhUrZi8/Dzh//rzd/CNHjgApPUs3NzcAoqOjbcoFBgZy9uxZtmzZYpP/448/UqFCBerW1Ut3O3XqxC+//JJhe9khKioKV1dXm7xZs2ZlWF4pRcOGDfnss88AOHDgAJDxPaXF09OThx56iJCQkCzLGgwGQ1YUeIjAOwo7Pbn8pn79+nTs2JGuXbtStWpVbty4wcqVK5kxYwa9e/e2zj0mC+LkyZN55JFHcHZ2pkmTJgwZMoQvvviCnj178uGHH+Lr68v8+fNZu3Yt33zzjdXDd9y4caxcuZKWLVvyzjvvUKNGDcLCwli1apXdpTKZ0aVLFz7++GMmTJhAs2bNWL9+PUuWLLEps2/fPkaNGsXTTz9NjRo1SExMZPbs2bi4uNC+fXube/r6668ZPHgwrq6u3HfffRQrVixdm5MmTSIwMJAWLVowevRofH19OXnyJHv37mXq1KnZe9MNBsPdTW56LhXGlK9eu4WA6dOny2OPPSZ+fn7i5uYmnp6e0rBhQ/n4448lNjbWWi4hIUFGjBgh3t7eopQSUnkWnzt3TgYMGCBeXl5SrFgxadCggcybNy9dWydOnJA+ffqIl5eXuLm5SbVq1eS1116znh88eLD4+Pikuy4wMFACAwOtx1FRUTJ8+HApX768lChRQrp16yYnT5608bS9ePGiDBo0SGrWrCkeHh5StmxZadOmjaxatcqm7uDgYKlcubI4OTkJIKdOnRKR9F67IiJ//fWXPProo1K6dGlxd3eX2rVry0cffZTle3ynfWcMhrsNctlrV0kOnFqKAk2aNJFdu3ZleP7w4cPUqVMnHy0yFHXMd8ZgKNoopXaLSJPcqs/MkRoMBoPBkAOMkBoMBoPBkAOMkBoMBoPBkAOMkBoMBoPBkAOMkBoMBoPBkAOMkBoMBoPBkAOMkBoMBoPBkAOMkBoMBoPBkAOMkBoMBoPBkAMKVEiVUiFKqfNKqRtKqWNKqaGZlK2mlPpFKXVTKXVZKfVJftpqMBgMBoM9CrpHOhEIEJFSwOPAB0qpxmkLKaWKAWuB9UAlwBfIXmT0u4TZs2ejlEIpxbFjx9Kd37Rpk/X8unXrABgyZAgBAQG31V5AQABDhgzJstyQIUNydf/P5cuXW3d/yS7BwcEopUhISMg1ewwGw91LgQqpiBwUkdjkw6RU3U7RIcA5EflMRCJFJEZE9uWXnUWRkiVLMm/evHT5c+bMoWTJkjZ57733HsuWLbutdpYtW8Z77713W9fmhJwIqcFgMOQmBd0jRSk1TSkVBRwBzgMr7RRrDpxWSv2aNKy7USnVIF8NLWL07NmTkJAQUm9KEB0dzZIlS3jyySdtylavXp1GjRrdVjuNGjWienV7zz4Gg8Fwd1DgQioiI4CSQGtgKRBrp5gv0Af4EqgM/BdYkTTkmw6l1PNKqV1KqV3h4eF5Y3gWBG8MLpB2kxk4cCBnzpxh8+bN1rxly5ZhsVjSCWnaod3Tp0+jlOKbb75h7Nix3HPPPZQpU4bHHnuMs2fP2lzr6NBuMlu3bqVp06a4u7sTEBCQbu/P8PBwXnjhBWrVqoWnpydVqlShX79+hIWF2dg7Z84cwsLCrMPUqe0PDw9nxIgRVKlSBTc3N6pUqcLAgQOJjbX9ap06dYpu3bpRokQJ/P39GT9+PBaLxeF7MRgMBigEQgogIokishktmC/aKRINbBaRX0UkDpgEeAF297ISkW9FpImINPH29s4zuzNj3KZxBdJuMv7+/rRp08ZmeHfu3Ln06NGDEiVKOFTHxIkTOXHiBD/88ANffPEF27ZtY8CAAbdt040bN3j66acZPHgwy5cvp23btrzyyivMnj3bWubKlSu4u7szceJEVq1axaeffsrx48dp1aoVMTExgB6K7tq1K97e3mzbto1t27ZZh6avXr1Ky5YtWbRoEa+//jorV67kk08+IT4+nri4OBt7evToQfv27Vm+fDndu3cnKCiIOXPm3Pb9GQyGuxOXgjYgDS7YnyPdB7TKLyPUOFUo6pGgnO0VO2jQIEaPHs2XX37J1atXWbduHb/++qvD1wcEBPDjjz9aj8PDw3nzzTc5d+4clStXzrY9N2/e5Ntvv6VPnz4AdOnShbCwMIKCghg8eDBKKWrXrs0XX3xhvSYxMZFWrVrh5+fHr7/+So8ePahevTre3t4UK1aM5s2b27QxZcoUTp48ya5du2yGq/v27ZvOntGjR/PMM88A0LFjR9avX8+CBQuseQaDweAIBdYjVUpVUEr1UUqVUEo5K6U6A32B3+wUDwGaK6U6KqWcgVeBy8DhfDS5yNGrVy9iY2P5z3/+w/z586lUqRIdOnRw+PquXbvaHDdooKelQ0NDM7wmISHBJqXG2dk53bBynz59CA0NtRm6nT59Ovfffz8lSpTAxcUFPz8/AI4ePZqlzWvWrKFp06YOzfl269bN5rh+/fqZ3pvBYDDYoyB7pIIexp2BFvQzwKsi8rNSyg84BNQVkVAROaqUGpBUtgLwF/B40jBv7huWw54g6N5obtSTE0qWLEn37t2ZN28ep0+fpn///jg5Of7sVK5cOZtjNzc3AOsQa1pOnz5N1apVbfJOnTplnb8sW7Ysrq6uNucrVqwIQFhYGL6+vkydOpVXXnmF119/nU8//ZSyZctisVho3rx5hu2mJiIigvvvv/+278+RNgwGgyE1BSakIhIOBGZwLhQokSZvKdoZyZANBg0aRLdu3bBYLCxYsCBP26pcuTJ//vlnurxkrl69Snx8vI2YXrx4EQAfHx8AFi5cSIcOHZg8ebK1zKlTpxy2oXz58ja9W4PBYMhrCtsc6R1DUGBQQZsAwMMPP0zv3r0pU6YM9erVy9O2ihUrRpMmTTI8n5iYyE8//WSdIwUtnH5+flYhjYqKolSpUjbXzZo1K11dbm5uREdHp8vv1KkTH3zwAX///bfDPVODwWDICUZI84jgtsEFbQKg5yXzuifqKCVLluStt97i8uXL1KxZkwULFrBu3TprNCbQDkgff/wxEyZMoFmzZqxfv54lS5akq6tu3bpcuXKF6dOn06RJE9zd3WnQoAGvvfYaP/74Ix07dmTMmDE0aNCAy5cvs2LFCmbMmJEuGIXBYDDkFCOkhnyjVKlSLFy4kFGjRrF//34qVqzIF198weDBg61lxo4dy7Vr15gyZQoxMTEEBgayevVqqlWrZlPX0KFD2b59O++88w7Xrl3D39+f06dPU6ZMGbZs2cKYMWP46KOPiIiIoGLFirRv355ixewuOzYYDIYcoVJHvrkTadKkiezatSvD84cPH6ZOHbvLUQ0Gu5jvjMFQtFFK7RaRjOehskmhCMhgMBgMBkNRxQipwWAwGAw5wAipwWAwGAw5wAipwWAwGAw5wAipwWAwGAw5wAipwWAwGAw5wAipwWAwGAw5wAipwWAwGAw5wAipwWAwGAw5wAipwWAwGAw5wAjpHUZyAPjk5OzsjI+PD71793ZoY2x79f3www+3ZcuQIUPw9fW9rWsNBoOhqGCC1t+hLF68GF9fXxITE/nnn394//336dChAwcPHqR06dIO1zN79mwSEhJ49tln89Bag8FgKLoYIb1DadiwITVq1ACgVatWVK5cmYcffpitW7fyyCOPFLB1BoPBcOdghnZzmfnzISAAnJz06/z5BW2RJnmz7Pj4eABOnDjBwIEDqVq1Kh4eHlSrVo0XX3yRq1evWq9p27YtmzZtYsuWLdah4rZt21rPnzp1ioEDB1KpUiXc3NyoVq0ao0aNStf2nj17aN26NZ6entSsWZMZM2bk7c0aDAZDPlLgPVKlVAjQASgOXAA+EZHvs7jmN6A94CoiCXlvpWPMnw/PPw9RUfr4zBl9DNC/f/7akpiYSEJCAomJiZw8eZJ33nmHChUqWIXw3LlzVKlShc8//5yyZcty8uRJJkyYQNeuXdm2bRsA06ZNY8CAASQmJvLNN98AKYJ86tQpmjVrhqenJ+PHj6dmzZqEhoayZs0aGztu3LhBv379ePXVVxk7diyzZs3ixRdfpHbt2rRr1y7/3hCDwWDIK0SkQBNQD3BL+vtetJg2zqR8f+B3QACXrOpv3LixZMahQ4fS5UHhSdll1qxZkvTe2KTKlSvLzp07M7wuPj5e/vjjDwHkr7/+suYHBgZKq1at0pUfOHCgFC9eXMLCwjKsc/DgwQLI+vXrrXkxMTFSrlw5GTZsWPZvrpBg7ztjMBiKDsAuyUUdK/ChXRE5KCKxyYdJqbq9skqp0kAQ8FY+mVdkWbZsGX/++Sc7d+5k+fLl1K1bl65du3L48GEA4uLimDBhAvfeey8eHh64urrSunVrAIe8e9esWcOjjz5K5cqVMy3n6elp0/N0c3OjVq1ahIaG5uDuDAaDofBQ4EO7AEqpacAQwAPYA6zMoOgEYDq615pZfc8DzwP4+fnlmp1Fifr161udjQA6depElSpVCA4OZtGiRbz99ttMnTqVsWPH0rJlS0qWLMnZs2fp2bMnMTExWdYfERHh0NKWsmXLpstzc3NzqA2DwWAoChR4jxRAREYAJYHWwFIgNm0ZpVQToBUw1YH6vhWRJiLSxNvb+zbsub0UEgKenrZ1eXrq/NutM7dIdijat28fAAsXLmTQoEGMGTOG9u3b07RpU8qUKeNwfeXLlycsLCz3DDQYDIYiSqEQUgARSRSRzYAv8GLqc0opJ2AaMEoKkXNRWvr3h2+/BX9/UEq/fvtt/jsa2SMqKop//vmH5AeLqKgoXF1dbcrMmjUr3XVubm5ER0eny+/UqRO//PIL58+fzxuDDQaDoYhQKIZ20+BC+jnSUkATYJFSCsA5Kf+sUqqXiPyRj/ZlSv/+hUM49+7dy+XLlxERzp8/z1dffcWVK1cYOXIkAF26dGHOnDk0aNCAGjVqsHTpUrZu3Zqunrp16zJt2jQWLVpE9erVKVmyJLVr12bcuHGsXLmSli1b8s4771CjRg3CwsJYtWoVISEh+X27BoPBUGAUqJAqpSqgl7H8AkQDHYG+SSk114HUXi1VgJ1AYyA87y0tevTq1cv6t7e3N/Xr12fVqlV07twZgKlTpyIivPvuuwB07dqVBQsW0KxZM5t6/vWvf3H06FGGDh3KrVu3CAwMZOPGjQQEBLB9+3bGjBnD22+/za1bt/Dx8eGJJ57Iv5s0GAyGQoCS3JyIy27jSnkDS4D70cPMZ4AvReQ7pZQfcAioKyKhaa4LAE7hwDrSJk2ayK5duzI8f/jwYerUqZOT2zDcZZjvjMFQtFFK7RaRJrlVX4H2SEUkHAjM4FwoUCKDc6cBlXeWGQwGg8HgGIXG2chgMBROgjcGF7QJBkOhxgipwWDIlHGbxhW0CQZDocYIqcFgsMv1mOvM2GU2GDDcAVSqpNckJqXG2lE11yiMy18MBkMB8r/r/+PpJU+z7ew2a54ap10SggKDCG4bXECWGQy3ycWLeVq9EVJ04P6k9akGQ6YUpJd7XvPX+b+YvG0yiw4sIlESAXBSTljEggTdufdtuEOJi4PjxyEpvnhectcLqaurK9HR0Ximje1nMNghOjo6XUSoooxFLPx6/Fcmb5vMhtMbbM45K2d+fPJHnl7ydAFZZzA4QGQkHDkChw5p0Tx8WP995gxUqQL5EMr0rhfSChUqEBYWho+PDx4eHqZnarCLiBAdHU1YWBgVK1YsaHNyTExCDCH7Qvhs22ccvqyf2EsUK0FsQizxlnhcnFxY+ORCnqz7JIfCDxWwtQYDcOWKrVgmC2Z4ONSsCXXqQN260K8fVK0K27bBV19BvXqQSSyB3OCuF9LkjarPnTtHfHx8AVtjKMy4urpSsWJF63emKHI56jLT/5zOV39+xaXISwD4lvLllWavcCD8AHP/nourkyuLey3miXt1lCozJ2rINSpVsj9fWbEiXLigd+o4dy69WB4+DNHRKWJZpw60a6dfq1YF56SoseHhMG0avPwyPPggfPcdtG4NTnnrV3vXCyloMS3KP44GQ1YcjzjOlO1TmL13NtEJehOCRpUaMbrFaHrV68Wrq15l7t9zKeZcjJ96/8SjtR4tYIsNdyQZOf1cvAjNm2vBdHNLEcs6daBHD31cubL2urXHsWMwZQosXAi9esHGjfraZCpWzFOHIyOkBsMdioiw9X9bmbRtEiuOrEDQDkNda3ZldIvRtAtohyC88J8X+H7P97g5u7G8z3K61OhSwJYbCjWZ9Soh43MrVmRe76RJWvy8vByzQwS2btXXbdkCw4fruVJ7Uy8XbLew3q3UbscacQwjpAbDHUaiJZFlR5YxaeskdoTtAKCYczEG3jeQ11u8Tl3vutZyQ/8zlNl7Z+Pu4s7PfX7m4eoPF6Tp+UbwxmAzZH27ZNarzOyaYcMyr/ehhxxrPzERli/XAhoeDq+/rjd9Ll7csevzACOkBsMdwq24W8zaM4sp26dw6topAMp5lGNEkxG81OwlKpWoZC2baEnkmRXPMG/fPDxdPflP3//Qvmr7gjI937gafZUjl48wbtM4I6T5zb59GQ/NOkJkJMyapYdwK1aEN9+EJ55ImR8tQIyQGgxFnPM3zzN151Sm75rOtZhrAFQvW53XW7zO4PsHU7yY7ZN6giWBQcsGseDAAoq7Fmdl/5W08W9TEKbnORaxsPvcbladWMWqf1ax/ex2LGIpaLMM2eHCBe19+8030KYNzJsHLVsWtFU2ZFtIlVKewBtAPyAAvR/oPCBIRIzbq8GQT+y/uJ/Ptn/G/H3zibfof72WVVryRos3eLz24zg7pX9Sj0+Mp//S/iw+tJgSxUqwqv8qWvm1ym/T85RLkZdY888aVp1Yxep/VnM56rLdciZaUzZISIAFC2DQoJzVk5nTT9reqpcXdO8OP/2kl7Rs3aqXuRRCsiWkSql7gHVATWAZsAJ4FHgb8AJeyG0DDQZDCiLCupPrmLxtMqv/WQ3o6ENP1nmS0S1G06JKiwyvjUuMo8+SPiw7soxSbqVYPWA1zX2b55fpeUaCJYEdZ3dYe527z+22OlalpVGlRix7ehkBXwSYaE2OcPgwvPUW/PJL7tSXxukHyHi4NyIC/P11dKLy5XOn/TzCYSFVShUD/gP4A+1EZEtS/vvAQWCoUipIROy8UwaDISfEJcax8MBCJm+bzL6L+wDwdPXkuUbP8WrzV6lWtlqm18cmxNJ7SW9+PvozZdzLsGbAGpr6NM0P0/OEsBthrP5nNatOrGLtybXWIW0AN2c32ga0pVP1Tmw/u53FhxYD0Ld+X75//Hs8XU0Us3Rk5ImbtkyxYlrgIiPTn8/Ka/d2eO+927sun8lOj/QNdMT8l5NFFEBEbimllgGjgNbA4tw10WC4e7kWc41vdn3Dlzu/5NzNcwBUKlGJkc1GMrzJcMp5lMuyjpiEGJ7895OsPL6Ssu5lWTdoHQ/c80Bem56rxCXGsSV0i7XXmfwwkUzNcjV5pMYjdKnRhcCAQOIT4xmwbAC/HPsFJ+XEJx0/4fUWr1sjlwUFBgF3qfeuI6KZGg8P6NkTnnlGB0HI4+AGRRHlSBBupZQHcA6IBvzTzoUqpd4DxgOviMhUhxtXKgToABQHLgCfiMj3dsoNBl5BDynfAH4E3hGRhKzaaNKkiezK4/BQBkNuc/raaT7f/jkz98zkVtwtAOp51+ONlm/Qt35f3FzcHKonOj6aHot6sPqf1Xh5eLFu0DoaVmqYl6bbcDtClXzN6WuntXCeWMVvp36zvg+ge+MdqnagS40udK7emerlqlvPHb18lCcWPsHRiKOUdS/LwqcW0ql6p3TtJFgScH3f9e4b4s2u5+y1a1C6dN7YApnbk0ebRCildotIk9yqz9EeaQ+gDDAzA4ci96TXuGy2PxF4TkRilVL3AhuVUntEJO1iWU/gVWAH4A38jO4hf5TN9gyGQs3OsJ1M3jaZJYeWWL1LO1bryBst3qBT9U7ZigUdFR/FEwufYN3JdXh7evPboN9oULFBXplug4hwNOIo4zaNo0PVDgiCiCCI3k0m6e/UrxaxEJMQw7hN41h0cBFHLh+xqbN+hfp0qd6FLjW68JDfQ3YfJv577L/0W9qPG7E3qF+hPsufXm4jsudvnmfViVWsPLGStf+sBWBz6GYe8nNwDePdSF6K6L59WZcpAjgqpN2SXn2UUsF2zndMev1fdhoXkYOpD5NSdWB3mnLTUx2GKaXmA+2y05bBUFixiIVfjv3CpK2T+CP0DwBcnFzo36A/o1u1UHBSAAAgAElEQVSM5v5K92e7zsi4SB5d8CgbT2+kYvGKrB+83hqIIS+wiIX9F/ez6cwmNp3ZxO9nfrd6y7aZnf2lNUcuH6GUWykervawtddZpXSVDMuLCBP+mMB7G95DEHrW6cmc7nNwd3Fnc+hmfj3+KytPrGTvhb3prm09qzVgvHfznb//hi5dtFBfv57+fBHaHMJRIU1+XOuTRblsbxOhlJoGDAE8gD3ASgcua4N2cMqozueB5wH8/Pyya5LBkC9Ex0cz5+85TNk+hWMRxwAo7VaaFxq/wMgHR+Jbyve26r0Ze5NuP3bjj9A/uKfEPawfvJ57y9+bm6aTYElgz/k9/H7mdzad2cQfoX/YOPzYw6+UHwFlA3BSTigUSinr68mrJzl59aRN+eRe5dAHhmZYZ/DGYN5o+QbPrHiGJYeWoFC83PRlHrjnAZ77+TnW/LPGxi4PFw+a+za32TJOpicvyRiXlJJIDqR+pxAWpgO6Fwb27tUi+tVX8NRTBW1NjslyjlQpVRy4BRwUkfp2zpcEIoALIuKXlNeGFOekysAzIjI7kzacgRZAW+DjzNajKqWeRc/HNhQR+wvEUmHmSA2FjUuRl5j25zS+/vNra6/Nv7Q/rzZ/lecaPUdJt5K3XfeN2Bs8Mv8Rtv5vKz4lfdgweAM1vXK+9i4uMY5d53ZZhXNL6BZuxt20KeNX2o9A/0AC/QNp49+GGuVq4DTeKdtzkGqccvgaNU7RoEID9l/aD+iefILF1nWillctutboyiM1H6GNfxveXvc2n+/4nPsq3se+i/uQ4EwaKEobuWfkRFSuHHTqBEuWQJkycDnLn80U8uJh4q+/oGtX+PprePLJ3K07K5LeoybALpFc2zPTkR6pT9JrRrujdgJcse1JlgAOAHOTUqaISCKwWSk1AHgR+NJeOaVUd/S8akdHRNRgKEwcuXyEz7Z9xty/5xKbGAtA08pNGd1iNE/WfRIXp5wFGrsWc40uIV3YEbaDKqWqsGHwBpv5wewQkxDDjrM7rMO0W/+31bprTDLVy1bXwhmgxdO/jH+O7M8uW0L14oFkEQXdU/Zw8aBd1XZW8Uy9NGhL6Ba+2PEFzsqZWU/M4uejP2PTCy3KZOSJe+UKxMTowAYHD0JQENjbMjI/euC7d2sRnT5dewLnN3m0A4wj/7nFkl5jMzj/TNLrD8kZIrKSJGFVSs3Opj12//OVUl2A74BuIrLfXhmDobAhIvx+5ncmbZvEL8f0onaF4vHajzO6xWha+7XOlc3kr0ZfpVNIJ3ad24V/aX82DN5A1bJVHb4+Mi6SbWe3sen0Jn4P/Z0dZ3dYxT6ZOuXr0Ma/jbXH6VPKJ4PaUkheZpLM/Pnw7rsQGgp+fvDhh9C/v+05Qi0EzNLnIH354z7BjNuUXvyaVW7G+HbjaePfBg9Xj3Tno+OjefbnZxGEf7X6Fw/c80DSMqA7REgzY9ky2L5dB44/flwHOshvdu2Cbt10qL/u3fO//bxERDJNQHm0E9BOO+eaAxZgZSbX3wKG2MmvgJ5zLQE4A52BSOBxO2Xbo4eP22Rlb9rUuHFjMRjym/jEeFmwf4E0/qaxEIwQjLh/4C4v/OcFORJ+JFfbuhx5WRrNaCQEI9W+qCanr57O8prrMddl5bGV8q+1/5Lm3zcXl/EuVjuT033T75ORK0fK4oOL5eKtizm2MyRExNNTRI+X6lSsmEjfviJduog4O9ueU0rEyck2z9VVxMtLn6vsGyf07CvHI4471P6ba94UgpG6X9eVmPgYnXn1qm0DaVNRIrP7uHJFJCBAZNmygrFt506RChVEli8vmPaTSXo/GuvPNltaklnKskcqIpeVUoeBxkqp+0RkH4BSyh9YAFwHRtyOhqOHcWcATsAZ4FUR+Vkp5Yd2XKorIqHAe0BpYGWqp/c/ROSR22jXYMgzbsbe5Pu/vufzHZ8Tej0UAG9Pb15q+hIjmo7Au7h3rrYXHhlOx3kd2XdxHzXK1WD9oPV2vVuvRF9hc+hmNp3WXrV7LuyxCd7upJxofE9j61DtQ34PORTswVEuXYJRoyAqyjY/Lk6HcLVH8q9eauLjdWAdgHNnXSHsB5pvcufKlfQ93NTsOLuDydsm46Sc+OHxH/TSmbNn4ZG75Cdk6FB47LGC6Qnu3AmPPgozZ2obCoKDB2Hy5Dyr3tFJmQ+A+cBvSUEUigO90WLYTUROZ7dhEQkHAjM4F4ruqSYfm6UuhkLN2Rtn+XLHl3yz+xtuxN4AoLZXbV5v8ToD7xtod6gxp1yKvESHuR04cOkAtbxqsX7Qeutw66XIS/xx5g/rcpT9F/fbxJ91cXKhmU8zq3NQK79WlHIrlSN7Ug/bVqkCgweDxQKrVumpsTxB3K3CeuYMPP+8/ju1mMYmxPLsz89iEQtvtHiDB30fhAMHtIhWqQIVKmilT0sRWn6RJadPw48/5n+7O3Zo8fzhBy2m+YkIbNig9y3dswdefDHPmnJISEXkR6WUK/AWuhd5Gfg3ME5EMnJCMhjuePZe2MvkbZNZeGCh1Vs00D+Q0S1G061WN5xU3oRTe2PNG6w8vpLDlw9Tp3wdQnqG8PuZ361etYcvH7Yp7+bsxoO+D9LGrw2BAYG08G2Rbnu1nDB/vp5+i07yRwoNhfffd+zakiX1lpLXMl894xBRUTBggBb05N7p+E3jORR+iFpetRjfbjxs3Kh7Zg0awMqV2oA7gYx2VlEKFi0CN8eiYeUa27bp/UJnz9YORvlFfDz8+9+6BxoTA6NHw9Kl8MorOlZwXHbjBmWNQyECc9SAUrfQ8Xln52lDGWCWvxhyGxFh9T+rmbR1Er+d+g0AZ+VMr3q9GN1iNE0q51rkMbucu3kOn89SHH3KupflasxVmzIeLh60rNLS6hj0oO+DuLu4p60qVzh9Gu6/H27cyLiMszPUqAEnT9o6jHp6wrff6r+ff9526NfVVWvA7f7uKaU/K0qHQod32DxlBK22ndVbgbVooXc0KVEi64qKKjdvQuPGMG4c9O2bv21v3aofVubO1etF84MbN+C77+CLL6B6dXjjDT3q4OQE//d/sH49/PYblCyZ6yECc22yNXVCD8s2TEpRwNikv/3yor3MknE2MuQGQRuCJCY+Rmb+NVPqfV3P6pBTYkIJeW3Vaw45+OQGFotFGkxrkM4xqMSEEtIlpItM/GOibA3dKrEJsXlsh8iGDSI9eqR3CEqblizRPj0i2uHI3187C/n76+Nk7J1LneflpZ2TMmsro+TidEtC6JuSUaFCnr4/BY7FItKvn8jQofnf9ubNIt7eIqtW5U97oaEib7whUq6cSJ8+In/+aXv+o49E6tYVuXzZmgXsktzUvNyszFqpDqwgdtLsvGgvs2SE1JBTLkdeFoKRSpMqWYXLZ7KPfLL5E7kafTXf7AjaEJROQAlGhv08TOIT4/PFhshIkW+/FWnQwDEB8/fP3fZzJqwW8edUiqDeycycKVKvnv7A8pPff9ciunp17tVZsaL9D9TLS2TAAJGyZUVefVXk1Kn01377rfZWPnvWpr7c9trNV1EriGSE1JBT+izpYxWt+6ffL/P+npfnPb6sIDh/heD0aZG33tK/WfZ+0+rXF3Fzs83z9LTtceYFycKand6pIlEgMV2P+I7h4EGR8uX1a36yaZMW0bVrc7fezD7Mjz7SS3vssWiRSOXKIsePp6svt4XUbCxnMGRA8MZg1DjFwgMLrXl/X/ybE1dOUMy5WCZXFm3mz4eAAD21VKkSNG0K1arBJ5/A1VRTsZ6e2hHy4EHYv1+vbvD313OT/v567tPeUpTcpH9/PUcbEqLtcQT9s+dk9fKdPz8vLcxnoqKgd2/4+GOom3ebFKRj0yYdM3fBAujYMevyucW//gVly6YcV6qkv4BKwdNPw7lzULOmPq5UKe/syE1VLozJ9EgNuUF+9wCzImhDUJ7Uay9oQtpUtarI5Mkp856FhZTeqUUg0eEeqrNz4eyZZvUZ2z0/dKhI//56jtRRMho6rVjRsevXr9c94N9+y5v6M/vwrl3TwyV794ps3OjwsERu90jz3Gu3oDFeu4bcIDuB1IsyFSvaX1IJ0KGDXkHQrZv2wi2MHLx0kAe+aUTc3qeo8PMELiX4A1mHYNQevronnVFQh/xk2/+20fKHlpl+59J9Jxcs0HF0d+/O3pKenGysvX697vktXgxt22a//hs39Lqnq1f1a9p09Sp8/nnG15csqQPxlymje6a//565vc2bw/btBRK03mC460kbM/ZOY88eeOutjEVUKVi3Ln9tyi4JlgSeDXmKOEs8w+IX8G2PBOav9uL5G5OIIvM1s8l6ceaMXoc6apReRZFtQc1oBxYHA8JHxkXy1tq3mLZLb3cWmxCbbgPzn4/+zMhfR9peePy4fspZuzb/1sWuW6eX1SxZAoGBt1dH5copQmgvzZiR+fWp11ydOKGHcTNj27bMhf02MUJqMDjAnbrh85kzMGaMnmPMjKKwre+U6YPYefMIvjfg05I9Yc6P9HdxgaSIS2fOpPQ8syIiwn6UpNQEbwxO/73IaHcRB3Yd2fq/rTz646M2a4LdP9Rrf4MCg3iz5ZsEzg5k9/mUMFFqnBaFoKOVCA4OhoYNs2wnV1i7Fvr10zvKtMn+xu1Wbt60ny8C77wDtWrB+fMQHp6+TOrIU2Fheqs4R8gocEUOMM5GBsNdyJUrer16rVrpRdQlzeO1p2fKTiyFEhGOfvQm713QQXu/u9We0nMWWW8k2SFJBObNc3xYOipKhznMyBnJ3g40t0NsQixvr3ub1rNaW0W0Zx29xZgECRIkPF77cRp/29gqon6l/VLOX3mF4NiWMOJ2Qp7fBmvW6Dd12bKsRXTx4uzXL6IDKPz6qw6gcOmS/ZnO5B5+RIQW0eHDHav/wgV2Q64GrTRCajDcRcTE6NCj1avrCGqpowY98QQcOqQjuuW39+1tk5hI4qiRPPu/qcS6wJCbNegybU36p4Ek+veHOXMc9/BNTIQBA4TyKpxvXfux1U8x8wHFux1SDQ/Gx8Pff8OsWdk2f9/FfTT7vhkfbfnIuonAQ34PEdJDP91YxMInWz6h+ffNORpxFABXJ1cW90oSqOXL4eeftct0VkOWqT1aU6esSHtd5866h/jUUxlfc/WqHiN/772s60+NiPbEXbNGi2j58pmXv3lTRy967DHo00e7mmdEXsZOzk3PpcKYjNeuwSCSmCgyd66In1/6R/sHH9Tr6IscUVEiPXvKlF5VhGDknvc85cqty1lfJ7brT5Vy1NnTInhcEnr2TRcUI+ip8tpbNrMKUhGfGC8Tfp8gruNdbeqp+3VduRKl10W+tuo1aTe7Xbq2vtrxlYiIBC0bpddtbtvm2PuVncW2qb1qHbwnK2vWiPj6iowcqQNCOOq1a7GIjB4t0qiRSERE1vcTHS3Svr3IsGG6nQceEJk0ycG3oghENipMyQip4W5nzRqRhg3T/47VqCGyeHH2VkoUGiIiRFq1kuM924rHGCUEIz8ftr/Xpb1lIomWRDl19ZSsPLZS+gX9IsVKXk9aNuOAxrjekgqdtJjK1q0it26lVOyA6By7fExafN8inUD6TPaR0GuhIiLy7wP/lrIflRWCEc8PPa1l+i7pKxaLRSQuTqR5c5FPP3X8PcuuIGb3ushIkZdfFqlSRX/psoPFIvLaayKNGzsmovHxIt27i/TuLZKQoDe1HTDA4S9zbgupcTYyGO5Q9u7Vnrhr19rme3vrVRLPP68Dwxc5Tp+GRx7B0vohnnNfSLSL0L9Bfx6794l0RRMsCYzbNI6GlRpyKPwQhy8f5lD4IY5cPkJUfFKEfAWMBvb1hWVzQbL4WYwvTsSauTqieFCLlPy0b3QaRITpu6bz5to3iYqPwqekD56unhy/cpzSbqVZNWAVZdzL8OyKZ5m1Vw8Td63ZldiEWH479Rt1ytfh28e+RSmlh0zLlYPXX8/c1oy8iNNib4i3YkX46KPsX1ehAjz8cNZtZmSfl1fmXs4Wi95qKCZG72rz2Wdw7Bj88UeeeOQ6gllHajDcYZw5o39nQ0JsPVQ9PfXv7ptvQqmcbT1acOzdq/e1HDaMr/fP5OUG/6Ni8YocHHEQL08vQAvW7vO7mfnXTBYcWMD12Ot2q6pYvCJ1vetSp3wd6njXoa53XQ6vb8Rbr5QhKsqRH2TBy0vpZTLtzumdVmJjbcM/JXG2WnmeDW7E2pNabPs36E/lkpX5dOunFHMuxpoBa3B3caf/0v78c/Uf3F3cmdxpMhaxMPLXkRR3Lc6fw/6kjncdvcHrsGF6zVJmc4iOimhe4KiuZHcNq4j+Eu/cqedR//gDnn1W73taJf2G9hk3WwR2fylMyQztGu5kUgdx9/UV6do1fcxbJyc9jRQWVtDW5pA1a/Sc4DffyMmWdaR4kJ5f/OnQTyIiEhEVIV9u/1Lun36/3eD+BCOP/fiYbD6zWSKiMh4+DAnR8dAdHurFIl4uVyXkqaXp6rJYLDJ371wpPbG0EIx4fewliw8ulll7ZgnBiApWsnD/Qhm/cbw4j3O2xnM+eOmgPLfiOesc6sL9C3WFYWEilSrpKD5Zkd050VxIQW3tDPlmhMWSeX32GD9e5L77dHzdY8f09+GPPxxrz+atucPmSIEQ4DxwAzgGDM2k7GvAhaSyPwBuWdVvhNRwp+JIOL/HH8//2OV5wty52jll6VKx3NdAqo7VwtTr373kt5O/Sd8lfcXtfTerYHp97CWvrXpNDlw8kO3wjomWRPlw0wdCj77auSg7guqVEm7w0q1L0nNRTxsRP3/zvKw8ttIqmq+vel1azWxlLTN69WiJiY+R8Mhwa97IlSN1hQkJIm3bajGxR0ZOPfmYCM7gXFrHIkdsTcvUqSLVq4ucPy9y/bpInToiM2Zk67NN5k4U0nrJggjcmySUje2U6wxcTCpfFtgIfJRV/UZIDXcqme160qyZ3oyjyGOxiEyYoG9240aRevXkm/e6WkWmzEdlrH+rYCWd5nWSRQcWSUx8jLWKLIU0Kiq5CyoRHki3fik92DHtkLn0FWfis6UpJcvESMm+LwjBSMkJJWXmXzPFYrHIzrM7rc5DflP8pNTEUtrjeNI9svYfvWtKQmKCdJ7XWQhGmn/fPGWnoeLFMxapuLh8FczklKiQrb7IGw8jDw/MREhTC2NiomP1pyYkRA+5nDqlr3/sMZHhw2/7a5XbQlrgzkYicjD1YVKqTvoFs4OBmcnllVLvA/OB/8sPOw2GwsTly3ou1B5KwfbtBeZ3kXskJsLIkbB1KyxdCv37c65PV94o9h0krX+9FnONKqWq8GyjZ3mm4TP4l/FPV01QYJB2UAkN1U4pR4/q1+S/L1yA2Fh2VYanesOZMlAuCkKWwiMnABbgBDzPd1mGGkzm5jU3WDCNe9p1YuvSBwgoE8CJKyfo9mM3q5NT6PVQAHrc24PvHvsOL08vgjcG2wR62H52O24fuBHkN4jgyEj7jV28qB108okEJ/jDD36qC8vuhXNp5ttVsH4N2gjBG9NcbLHoLYMcIfkLXKYMuLnpuL4BATB2rJ6HXrLktu8htylwIQVQSk0DhgAewB5gpZ1i9YAVqY7/BioqpbxEJCJNfc8DzwP4FYXYZgaDg4jo6DyZOWv6+d0BIhoVpUPQRUbCwoXwxBME9/dhnHxmFdFkhjQckhKq78qVFKFMeg0+ehT++UR7udaurcM51a6tF/LXro34+TGjZTFe7QJxLtA0DBb/G/xT+Sj1R0dNGsUXRFAeRwLhgxPnN/SgSQ3F+E+uM/lWZ8KjUkLdebp68kWXL3iu0XPaExdo4dsClVS3IDoo/aVL8MADmTd16lTWwQtyQJwz/FZVi+eK2nA5zfOESyJ8vA5GdwYJzqASiwVeeAEOH85e49euaWeiunV1SMI5c7SzUbHCs5VhofHaVUo5Ay2AtsDHIhKf5vw/wEsisirp2BX9L1VVRE5nVK/x2jXcKRw/rh/mf/st4zKenoU8EpE9HPEuLVECbt5ERNjyz3paz++INPgpnWgSH28rlrVq6VSzpq4jDbfibjH8l+HM36/jAL60EyavBrfEjE2ZX2o4o2I/JSK2OI4JKoCAx2V4ZBTct4AmlZswv+d8annVspYIvR7KA988QER0BMGBwQRvCkbeS9Tb7TRqBBMnZlK95PrTU5QrrK6uxfM/teCGu/1yVa/CwiXQLEz3RjMU0mef1V/i//43+27jInrT2/bttddy48bZuz4Nd7zXLjADeMVO/t9A71THXuhhYK/M6jNzpIaiTmysyIcfpvfG9fcXeeONFK9df//Cua9mljg6J9e5s0hAgIibdiqSxx8XefNNke++0xPCFy5kK7rEoUuHpO7XdYVgpPg7yI/1HZirExFZvlzE319CvrkpbtkJ5IAIJMoDj2+VuIQ4mypjE2Llwe8eFIKRzvM6S6IlUQeS+PhjkZYtdQCCrOYTHZlzzOBcsrftdTf9PjzZG/F8x9bjucGLyFsdkebPpeQ91Qu56p6+HrupTRuRmzdFpk1z/DNPTpcvi1SrJjJ//m1+yWzhTnM2SmcQfA98YSf/R+DDVMftgQtZ1WeE1FCU2bJFpF49298UJycdSS11QJ0ijaM/pr/8InL8uEh8fI43Nl+wf4EU/7C4EIzU+aqOHCqfhQAlc/KkiLe3jJn7jLy3/j0tKD37ivKMyJagpvbuFREZuXKkEIxU+ayKhEeG68ytW0UqVBA5cybr90kkc0/YihUzPH/NTYtit35IsTG24tl0GPJRK+RYOeSgN1JvhM53G4NMb4JYHL1hV1f9hS1d2vHPO3Xq0EE/NeYSd5SQAhWAPugYIc5oz9xI4HE7ZbugPXrrAmWA9RivXcMdyrVrIi++mD4ObOPGIrt3F7R1uYyjP6a5QEx8jLz035esQtHvp35yM/amY/FgY2IktukD8t3HT9uIzfD/DJeouCi7n1dmSSn9GS/Yv0AIRlzHu8qOszt0W1eu6CGGFSv0cUiIfoK6DaG0dy6oLXLUC3mpq+6NWz2fg5A2Q5DPH0TOlNZlLSAzGyEe7+oytV9G9la8DTHMSerUSS//ySVyW0gLdI5UKeUNLAHuR+9Ecwb4UkS+U0r5AYeAuiISmlT+deBfaKekn4DhIhKbWRtmjtRQlBDR/hSvvKK3YUymeHH44AN4+eUMNzYpujg6t5fD36oz187Qe0lvdobtpJhzMT7v/DnDmwy3OvqkJio+iiOXj3C4dzsOFbvBYW845A1HM/HnCQoMomZYMKNGQUSE4Nj8adI9lT7D4NePMXtsp4znjL289JZhOSDeCdZVg64DMi6T2tv2ZjEY/ij8eJ8+HrwXvloJJeIyujoPcHbWu82ULZtrVeb2HGmhcTbKK4yQGooKoaHw0kvwyy+2+Y8+Cl9/XTQ2174t8lhIgzcG86DPgwxYNoAr0VfwK+3Hkl5LaOrTlOsx163xdw+HH+bQZf16+tppBMfaG9tmLOPa2e5NOn8+SYLquJ1KCcOHK6ZNz12noXgn2FAV/l1PL1e5krSFnFsCDPwbXtkB940gnZPQX/fA00/BCS8oHgfT/guD/s5V09Lz8svw5Zf6O7Fzp/7yb9yoPXZzESOk2cQIqaGwk5gIU6fCmDF6tUcylSrp/CefvAOWs2SGI167mQUxz4RESyIu76d04Ys5F6NX3V5cjLzIofBDnLt5zu51Lk4u1PKqRZ1Nh6gbDnXDoU441IoAj4Qk79QgQY1TeolKBowYAdOnW3B862fhRb5mGiMdv0k7JIvn4rqwtE6KeNojaCOMa5sipAJ81Qze6KSXA913ARYtgXsv58ikrOnfH+bO1XuKnj8PzZrBV1/pjXJzmdwW0jttkMhgKFLs2aN3YUn7rDd8uF7tUKZMwdiVr+zdC23bwpAh8H+5G1+l95LeNsdxiXHWpS4A7i7u3Fv+XuqU10Hrk4PY1yhXA1dnV3gp8yeYoMCgTM9PmwYXyy1j04wnHeydKqbzEtN5CX/O8CHvWNewZkRwWz0Um1o8l9WBiFTiGXAVSsXCvkpaMDNapnLVHZ59ApbX0ccv/qmXA3kkOGJ7Dpk1S4tobKx+ehw2TItoRg9at/lwlRcYITUYCoDISL2V2eef6x5pMnXr6nWgrVoVnG35yqVLem3ggAG5KqJpIwQlc3/F++nXoJ9VNP1L++Ps5Jy+AhGYNCnD+oM2AkGkBILIhJ8+eBI+SO6dOmK9Fu8zBDCQELbQMsMeaoKT7k2GlUwvnveGQ++D8PBJeLsDbPbPuMXgjbDNF/o8BaFloFQMzPwZDlTIXRFNFv10VKig9/QT0fMb99yjh2gg49GKixfTD9UUkLiaoV2DIZ9ZuVL/qKYO8efmprc+e/PNQhWwJW8JD9ci+uSTEBycJ01ExkVSYmIJLGMtdp2K7JKYqENHrV8PBw5kXO42fjufGRbF7O/dcXyoF0AowU1mMNymd/rXPfBoPzhfMqVksnj2OgT1LsGFEtBwOFxKH4vC6lRkUfBpS3i3AyQ6QbOzOsBC1WtZBFi4Daz13XsvHDmiPecSHFPqDEU4LQ58Lrk9tJudT9NgMOSACxegTx8dqCa1iLZrp4O2vPvuXSSiERHQsaMeugvKfHg0JxQvpmPZOSyiMTHw9NOwb5/e67JiRfvlMsrPhERLIqGtH4OeA3DzugDW0OJZobhFKQYwnxFMBeDttf9H4xdsRRS0iI7bCPUvwT/loNVzWkRrX4Y++3WZpw5qMQveCJeKQ9f+8H8PaxEdvRX+mAWRxeDxvtm+RUALXtq/t1aBl7qmyq90RP/hoIiC7nkXVszQrsGQx1gsMHMmvPWWDhuajJcXTJ4Mgwbd4c5EablyRYvoI4/A++/n+c1nNY9pY9cTT4Cvrw5D5+aWq8OE7/UoxfoHoqhQDf5auwAfoGnlqew69xKOLZXR86fzGET9d4ZDN2h4Hvbek77XuLcSdBkAF0+X6WIAACAASURBVEvo2MEr5+t4uQsbwJJ6sH8ThBeH/j3hQknwioI5y6DTP9B5oJ5rtbaaVLfdIPR2GNc2pdy4trAhAH4PSF8fOFbf6TIw776syzlMdHQuVqYxQ7sGQx5y+LB2Jtq82TZ/4EAtot7eBWNXgXHtmhbRtm3h008LzxPEmTNa2Lt1g48/1k4vuciKIyvovqg7ThZYNxfanU45N4KpzGAEks3hXlxvMqnYcN54c4GNkG7y173JG+7Q8R9YughKJq37fHAo7PTVfysBUdDmNMxfChEe8Ex32HNPmpaCyRIBVtXQwrnDFx44B39VzuKa4MyHa4956eU3e+9Jfy5TUU+raXFxeinN+vU67dqFiow0y1+ygxFSQ0EQE6O9bidO1HHUk6leHWbM0Fpy13H9Ojz8MLRsCVOmFB4R3btXr1d88029+DOXOXHlBE2+bcL12Ot8vBbe2pK+zPwpl3j3c2/OnLGge6eOB8NvUvlr/jynnZFW1Iane0GsC/Q6CPOW2gbg3+kDDw5LOR67Ef5vM3z0EExoDQnOKQJb8Zbu0WbVE91aBR7pn3FQ+6xIW//+CtqWf9cDS9KzRaPzWuAdmq9NSIC//oING7Rwbt2qNy1o316nhx5ClSplhDQ7GCE15DcbN+rdoo4dS8lzcdFDu2PGgIdHgZlWcNy4AZ076107pk4tPCK6bp3erm3aNHjqqdytu1Iloq5cpMVzetlJ98O6d2j3zpN/hytVYsTFMUxnBNlZe1qCm/T1G87MIQuwOMHwP3UEImdJqlsp/lsTBvdI8ez1ioLV83QvdH/SlO/LO2BfRT0U+/56CPeEL5vbClhyL/JABXi3Pfx8b7bfmWSzQaXUvasyfNg6ZelNMiN3wKdrwP09B4TUzU3/g/n4aNFs1w4CA/UWeqkwARmyiRFSQ34REaE7NbNm2eY3b66XtDRoUDB2FTg3b0KXLnDffVqwCouIhoTA6NF6g+jWrXO9elGKId1hbkOoGQF/fgulMw1omsJ8+vIC3xBJCbK1VVvVNYz170LwxpSr4hJieaerG5Nb6uP6F+FAGl+p6lfghxXgHQl1X9Z5g/fCnIZJNQenCKgK1kEa9lfUPde8oky0tqlHkl9SumHgGTN0j3PDBihdWotm+/Z62qBSpUzrNkKaTYyQGvKK+fO1p21oqH7gjYvTmpFMqVJ6aHf48Fyfcis6REbqucd779U/fIXhjRDR86AzZui1SLkcfi6Zb5oohj8GHvGw4ztocCn7dYxgarZ7pzo60jSmMZJTZaBPfzd2esfibIEPf4PAM9BiaMoVzf8Hv83VdjoFZ9/GvKCF+LJgZxX8f92WcaFBg1J6ndmMn2mENJsYITXkBfPnayeiqCj753v21CFDfXzy165CRVSUdt6pWhW+/75wiGhiot4RYPNm+PVXqJyFR8xt8mfYnzw0oxlxLnqecsC+269rimdfXo+bAQklyU7v1Jl4ij02hOjGC/C7BrNWaIegyS1S5h6TuTYRyrz9/+2dd5hTZfbHP4ehD+WnDAw2QGSxFwTUVRdRUBEbYlkV1y6oq2tbCy7KKGJhrSwCoqgoCFhQlOIiUkRcRGwoICi9CFIEKcPAzLy/P07CZEIyk2SS3CRzPs+TJ8m9b27Ozc293/u+7ymx2xhPHviqJo9O3Em14nIaVkC7LI7UMFKABx8MLaJZWTB2rFZwqdQimp8PF1ygPYWXX04NEc3P13nQhQvhs88SJqIbdmzgkncuYVdVuHV2xUR0VxaMunIk9KrPwYe8SGRxpwBCEdXJ/2gEVfoWcOmoK7nlXPi3L2PWDd9o9iI/XopozarqpdSwdkM+PnckT4yPQERBpwhE9KSLhj/+iN7IckiBf7dhpBerV+twbiiKi1U/KjU7d0KXLpq04NVXo7/QJYKNG6FDB61HN2GCzqklgKLiIrqN6caKLSs4cRU8+9+Kbe9fnaox+0Boshm+Xn07w+lGNn8QjaAW767OM2uHs2j8xxzxGwwaD+8eHruXbby4+St93lm4kzOWwPePrufstjFkgSiORHV9LF6sTgtxxoTUMKJg1KiynYYyttRZpBQU6Lj2PvvAsGGpIaJLl2ry4nbttLpIJOmjGjcu6fEEPspxYnlk+iNMWjyJnO3wztulQ0+ipVtXeLrtbrKKYeR7sM9O6Jg9kj/1qA9du4HsIBpBZelZLBi4mx5Nr2CLh57jF8+HP6+EwW0BB49OgUlvwn7bEvzF06fr/+C22+K+aRNSw4iAjRs1vd8VV8Dvv4duU7s29O2bXLtSil27dOg0O1s9YpNdgTyc+LVoAbffDk8+GfkQc1mJ0kFvGBYu1N5tvXoaXtJS6PNZH8Sp8B1UgRHENXVLimn36dCXk1t3Yck+mvLvu/1g3xYjWVo/mw5MIhoxdVSFMSNgwHexG1dB3jsC/nfQHpN46DNfmE4ieeUVuOwy/V/eemvcN29CahjlMHGi9kJHjy5Z1rSpeuw2barX6qZNNcSlWzfv7PSUXbv0QlWtGrz1VvJFFMKLX3GxVhSJlIJyYlSaNlXxPPdcLd+zdStL/w/+1lVX95kCHZdE/nV7mStwlW9bOflC09v+Rb/1H3DIHZo/d7+tWl+02WZ4NrcTjc/sBhQQVe90wzGQVwzj/hO7oeVQLRml18qjqAjuugv69dPcyQnKhOKZ166I1AAGAh2BfYHFQE/n3MQQbQXoA1wH1AG+Bf7unJtX3veY164RK9u2wT//CS+9VHr5DTfAs8/qtdRAUzddfrk+v/uud5n3y4pPHTNGhxI2by79HGpZYWHZydQXL9Yx/AMPhHXr2FkVTr5BM++cvxA+GAVVYrys5rWPPDn7Q9Oh3ymaxejI32DLJ/9h1c+3Em1mJADavAjnVayYeEWJNJdvSELp2JYtOoS0eze8/bZON/jImPAXEckG7gVeB1YAnYGRwNHOuWVBbS8DngdOBZYDjwFnO+eOL+97TEiNWJg5U8PUlgT0LBo10hGi88/3zq6Uo7BQMwPt2KGuyjVqeGdLWUJ64YVaJX2ffUqeA18HPteuXfYQsP+a6fu+Gy+AocdD800wZ4jOZVYEh27vpgug8VZNKl8We7UZ9jEsPYvIxdT3rVlb4aHEOGEFklUMd/0Pek+Hug/GqUxbsI4tXqwn6hlnaDrKatVKrY63kHpW/cU5tx3IC1g0TkSWAq2BZUHNDwY+d84tARCR4cBdSTDTqGQUFGhVr379Sp+bXbtq/H6lSzJfFoWFmn1/61Z4/31vRbQ8PvggIZsd2kpFr+ZueO/tCEQ0+IKflbWX16kAN36jQro+O/ym6hbAkI/gcl/J1FkHaqKFfS/txKZfroAxw9BLfGSVZSiqq8O9OXPhtuMi+Ez0HLQFxo+ILTlFxEyfrqXwHn44IfOhoUiZOVIRyQVaAqGGa0cBh4hISxGpBlwDfJxM+4zM5/vvoW1bTXrjv97Vrw9vvqkjliaiARQVwXXXqRfWmDFQ0+NYingTQR3SHufB38/V14PGw3HlVVwLtc0woRvP/lmfi8q4Qn/zUomIApy0Sp831QaOGQl51VUUo5k7TeD86dCxsOz50iLae1ocNhz4uybYqSgcKVGP1CeOI4BhzrmfQjT5FfgcWAgUASuBM8rYXnegO0CTSh+PYJRHUZFW9Hr44dKVWjp00Ly5Bx0U/rOVkuJinSheswY++ih1svDn5oZ2OIqhCHd5dUg35W9iiG9gsPscuLY8J9jc3L23GSKUxgEPdoAny0j9e8csqFMALTaVXj7l4BCNbzsO5l4BY94Asoi4dwow5+8w51bIq3gI0/p+kBMigUnMc6JVquiJ66eoSB0aJkxQp6KWLWPccIzmJPXbQiAiVYA3gV1AuACfh4G2wEFATeARYIqI1A7V2Dk3xDnXxjnXpqF1I4wy+OUXDS/s2bNERGvV0gIlkyaZiO5FcbHmRly2DD78UOcTU4W1a3UoIfgRx+Lcfm4edzOgJcca5MOoo+DbxrAt2M8q0Ibg8Jwg0S+sAt3PDy+i++TD2JHw/Mfw2NSArwDOugo6XBPG2GNGQl61KHunsKeHmleBYFhg5bOhRbT8rxe9AbnpJv3fBR7TQBHdskXnQ3/8EWbNSrqIgsc9Up837lAgF+jsnNsdpulxwGjnnG/wgtdF5HngCMA8iYyocU69ce+5p3SqvxNO0Jj9Qw/1zraUpbgYbrlF4ycnTtR40UpG3rQ8Hpn+yJ73TuCJIOE74A84dAMcuqMWh856gUNzDuXQBofS5Ld1hOvb7awKrXrAT2Hu+09ZAW+9B022lF6+rTrccAF80iIC4/f0Tt9E+1BR9E5j5JWxcGA08bTO6XRBq1awcqXe5Q4aFN6RrBynomThadJ6ERmMimRH51zYvBYi0hs4E7gYWA90AwYDBzjnNpf1Hea1awSzZo2OTH4cMMtetaoO7fbs6U0IZMrjnGaE+fZb+O9/oW45rqSpTOPG4YeAy+u9/vordOnCzuZNqHXYu7x6wass3LiQhRsXsmjjIn7Z9Au7inaF/GiNQi2n1nIjHLrRJ7YbYf+tcP4VWrO0PAJDRG4/B6Y127skWkTs8eyF8sXSQV7kg5cnrYRZB8GZi7Xe6Z6tb94Mxx9f2hU+mMJCLbk3ebLWr/3ww/DhVBVwKsqk8JemqHduARAYtNUDmAHMB45wzq0QkZrAM0BXIBv4BXjQOVeuw5EJqRHI6NHaqQrMTnTEEdoLbd3aO7tSGufgjjtg9mwd7073ANqywmTKuh5++62G0dx0E/TqhTxaBde7dPvC4kKWb17Owk5tWJi1mYU5sKgBLGwAa6L82Q7ZBG+8r9mMgkNExrWE86+MbnshydtN+XOn5Qvpwb9rXuGLLi9Ztuw5aBrYg77kEvXYGzQo/IYeeEAzUJ14Inz6afhRj1de0YwoI0bElGQhY4Q0WZiQGgCbNmlym1GjSpaJaNKTvn0zz+k0bjgHd9+tZcc++UTjLNOdWIT0vfe0sOygQSoI6DBvXvu8iL9ja3WfqOaosE46RHtuoWi9Bqa9DnV2aSFtv5AWC/RpB3mnh9+FqBnwnXrqquEhGpQtpP/6DE5fCpdfAhtC6F7vaZD3dV1o3lxvxMpz/tp/f5g3L/R/rbAQ7r1XnYo++ijm+dCMiSM1jGTx8cdw/fU6KuenaVN4/XVo394rq9IA5+C++7Tk2OTJmSGi0eIcPPaY5n/8+ONSwxZhRTQMdXdB61/18WMjeCVEOpnGW2Hoh9D555Jl/hCRzTXhhBvh55zod6NM/DGje5yKAsXUEc5Bqd0yeHoSvHEsnHm1zhf/aaPGtp5+bVAvOqeG9iIvvLB8e775JvR/bcsWzaBVWKhORQGZirzGhNTIWLZt05vXwYNLL7/+evVLSPcRyoTinBZdnTxZh9hS6KJVIVavjrxtfr7+WRYv1mHt/faLiwlfHATnXQm/h4ga+mHQ3h6uedNUeC/6K/zSIC4mhCYvK4SHrgsZ/jL8PahfAF3/CqvqQ9UiuG8m9PoMagVO1P3xh9583HmnDgmtX6+hK+FKny1dGrrHmiJOReEwITUyki++0BR/ixeXLGvUSGtMV/p6oZHQuzeMHw9TpsC++3ptTXz49Ve9EEfCmjVaU/WQQ9SpJU6xshNbwMV/hfwAHai/EwZMgJ/3DR0m8vaRcN2FsCPA5yaruOxkDTFTTsxogx0wcyj0Ph1GH6XL2qyGVz6EYwP8t/YkWrj5ZjjmGB3+qVdPHY1mziypCVpcrKJYXAzz50OzZnt/qd+pqHdvdXBIQUxIjYyioADy8jTFX+BN70UXabiLhRVHwKOParaiqVMhJ97jiB6xbp2K6KJFmq5qy5a92/h7Ql9/rSLao4c6tJQ1pxoFI46Ga7tAYYBWnbEEXv8gdMm1wirQswM8fUrp5Seugtxt8N8WmrA+mZy0StMQ/l4Lau+Cx6bAP77cuwzankQL06fr792qld7dbtgAf/5z6I0ffvjey15+GXr1itmpKFmYkBoZw9y5mvp17tySZfXqwYABcNVVcbseZjZ9+8LIkTBtWubcdaxfr2mqfvpJ455eeSV823fe0VCKwYPh4ovjZkL/E+GOc0re19wNT06G22eHrhSzvrY670xpXrKs3k544lNotxyOTl72u1KM9/n2NN8Ek9+Ag8sMPkS9/Lp00fybl18OTzwR2RcFOhV5kKkoWjzPbGQYFaWoSPPjtmlTWkTPOAN++EHF1UQ0Ap56SuOApkyJLa1eKrJxo/ZkNm/WOKf+/UO3cw4eeUQzdEyaFDcRdcBDp5cW0ePXwNdD4I4vQ4vonP2hdY/SInrZj7DgRVhbB86+Ki6mxUSDHfDmGPilfwQiCnpTkp+vIxuPPRbZl6RApqJoMSE10prFi+G00zT8zJ/ir2ZNvV5+8omWjTQi4JlntKc2ZUrcnGo85/ff4cwz1UW7oEBrUoZKabhjh/aWJk6EL7/UYcg48HB7uOU8eOw0fV+lGHpNh/8NhSPWl26b116fX20Fp14PK33VzJpu1mopo9+Fl1pDn9Oij0eNJwsGwFVzw0Sd5ubqDYnfCeGf/9RQlq+/1soPZZWm87N4sQ79tmihxyNNnNxsaNdIS5zTiIR77oHt20uWt22rnarDDvPOtrTj+edh4ECdzzrgAK+tqTjBmYu+/VafjzkmtLdo1apaMWTq1LKdipzTP9v69TrXt359ySPw/YYNFFSvQp/2Jd/VYiO8+X5JhZZgHmkP67JhcFt9n1UM93wBD88QsncWgwgfeZS2st5OGPUufHkgNAx2hqpWTW9E/OnAnntOsxHVqgVPP13SLpJMWCIqtgMGpKxTUTgsIYORdoRL8ffQQxqxYSn+omDAAO2NTp+eOd33WMbxp08vEcMgUSz1WkTnjhs21OFK/+ug97csG8DgXzT7xy1fwb8nQXaYTOIba0HO/SXvT1wFL30Ex6IpC4Pz+yYLcepI9NgUTQxRis8+g0sv1d6m/+br88/hL3+Bzp11brMiRJKusQJYZqMoMSHNLEKl+Dv8cO2FtonbaVFJGDRI50WnTQsddpCObN0aW4DwySeHFcVSr8updhNO9AJz5O5p2157osE81O4hHj390dILRWhyV8mQb6I5ap2GtJwYHHZbpYr29lu10iGhc3yTvytW6BB6Tg4sWBAfR7UEapMJaZSYkGYG4VL83XmnOpqmSknMtOHll6FPHxXR5s3LbZ4WbN+uF/YZM6L/bLyugwHDyoGp/cri95qw7wOw+u7V7F93/70brF3LjycezNHX74yPjeVw+hL4eARUD8zN4O8hFhfDeefB0UfrTRjAb7+VOKcVFECdOqUL+8ZKGgmpDYIZKU+oFH9NmsCwYZbiLyZefVVjRadOzRwR3bFDPT1btIhNSONFqKoy5bCPTx/3rxc0P92wIe7KKzgx/z98dX3yOjztVgSJaKCgPfOMekD7PXDXrSspUL5li97txkNE0wwTUiNl2b5dHf+CU/xdd536x1iKvxh44w0tOzVliopOJpCfrzlcDzxQe9qvvea1RUBAdh8/ublhhXavtsCqgvUctE9/SLDjavVC2FUVih4JHY6zh//9Tx2IZs9WJ6O1a3U410/9JI07pyAW/mKkJF98AcceW1pEGzaEDz7QDpWJaAyMGKEFVydPTovYvIjYuRO6dtU/x2uvQVZW+BjYcOEX8YqZbVy6oGjwnCjDh2ueyiFDtJfnf4Ro26cdHHR3yfsqUoUTDjghPnYG0GUBLHnB9x1lieimTXDqqTqM26yZzqvstx/sCl17tbJhPVIjpSgo0Lj4p57aO8Xf4MF6HTJiYPRo7d5Pnpw5sUEFBVrSrG5d7WlXqaIJ9lu21GW9ekG3bslz4y5vWLdbNz0OZcxH3N8R+p269/IGtRowe/XsqMypWlQ6HWEgjbfCixOg6wJ9H6pHvAfndBgoXKL5RJBmCUGsR2qkDHPnwgknaBYx/zlbr57Ohb73nolozLz7rnplTZoERx7ptTXxYfduTWRevbr2tKdO1dCLW2/VwtsLFsA116RWLNTMmWWK6H8P2VtEv+n+DQDrd6zfq32DfKFOwd7bqbNLePDUB7npxPCxmGvrwtyHuu+Jsd2r9xxI//4ac5ZIAnvoziU09CURmJAanlNUpEnm27YNneLv6qstxV/MvP8+3HabemwdfbTX1sRG48b6Bwh8VK9e4oV22mlw++0aFzV/vuaETCUBBb0LLGdOemDbktedF+nz8UNCFC0Fnjv7OTbWcmyrUbKsTvU6ACz9129cfMTFDJ6j8yJXNruAXYNyWNLhQwDciD/hmr1O3rrDI4sZu/NOsMiHMvFMSEWkhogMFZHlIrJVRL4TkXPKaN9cRMb52m4QkX7JtNdIDP4Uf/ffXzLdUrMmvPCCpfirMGPHahmrCRN0wjldCTdkWlCghcdvvx3mzdOh06yyy4AljF69yl5fxrBv3rnZSB58GDDiPqEl9JpTmyc67J3k/b6T72PswrF73mdXy+aBUx5g6R1L6X1abwbMHkDrIa1xvoLcby37kOq3bGDYbp8Y/vwzXHst3HWX3sWCFtJOs+HUVMLL27aqwErgNGAF0Bl4W0SOds4tC2woItWBT4AXgb8CRUCGeEtUTpxTB8u77y6d4q9NG03LmSnTeJ4xbhx07641RY8P3avJCH74wTvxDE5FGCN547aR53stjwjFDxczbtE47tn3Hn7+tOeedvvW2pebW9/M458/Xurz23dvp0bVGuTUziGvvW4pr30eRcVFVO1TFff9RTo30qcPTAtjxOZIMtAb4fBMSJ1z22HP/wdgnIgsBVoDy4KaXwuscc49G7BsLkZa8uuvmuJv4sSSZVlZGpXRs6d61hsVwD/kOW5c5qd78kJEoxXQKHt6nUZ0YtLiSaWWNfu/Znx545c0ym5E3w59WbdtHY2faYzrHcbVtnFjstat0yvs++/v8VjOi8qSOHH11Tpns3q1ploMJgN6wikzkSAiuWgvc16I1ScBy0RkItAW+BG43Tn3QxJNNGJkxAitj7xiBTRooGF/gb3Qww7TXmimX/OTwief6IVr7Fj13DLiTyQiGkNWnvGLxgPsJaL1a9Rn/JXjaZRd4m2XWyeE+IQQ+DK9cZPFtm2ahzc722tLEkZKOBuJSDVgBDDMOfdTiCYHApcD/YH9gfHAWN+Qb6jtdReROSIyZ32oOyAjaYwYoSOMy5frtWXDhtIieued8M03JqJxYcoUnSccM0ZLURlpQd60POQR4byR54Vcv6VgC0cOPJK8aXmllvc+rXfphiEEvkxv3GTxzjsZLaIAOOc8faBiPgqYAFQL02YsMDXgvQBbgGPL237r1q2d4R1Nmwb7tesjK8u5KVO8ti6DmDbNuYYNnZs+3WtL4k9ubug/UW6ut99f1iNGyMNtK9jmdhXucsXFxY68KLYVrY2JeOTmOjd2rHM5Oc6NGBHz75BogDkujjrm6dCuiAgwFMgFOjvnwiVpnAuckjTDjLhQWKg90VAUF8PppyfXnoxlxgwtaTV6NLRr57U18cfrmMI4OBRFQ3b1KHtvcXJ6ihn/MLZz8O9/axjSuHFw4one2ZRkvB7aHQQcDpzvnMsvo91w4CQR6SgiWcCdwAZgQRJsNGJg2bKyr+kW1hInvvgCLr4Y3nrL7kxShQo4zwQP1+41fBuIP742WhE97rj458UtKNCQmlGjYNasSiWi4GEZNRFpinrnFgCFAat6ADOA+cARzrkVvvZdgX5AI+Ab4O/OuVCOSaWwMmrJZ/Ro6NFDi0GEonZtTTfarVty7co4Zs2CCy5QT62zz/bamswlmmwgybyexpqlZMYMFbrqIV1MoiM3Vz1yL7pIc+8OG5YW86EZU0bNObccnesMR52g9mOAMQk1yqgQ27fDHXfA0KEly7KyNKf4l1/CypXaE+3b10S0wnz1lYro66+biCaSoET0ZZIuYRynhkjmGyuTJql3+N/+pkmywxUGyHBSJvzFSG+++w4uvxwWLixZdvDBOuJ40kne2ZWRfP21FlceOhQ6d/bamsymvGFTj0b0KsyGDfHZTocOmov3iivis700xYTUqBDO6Xl0332lKypdcQUMGlSpSxQmhu++U/F86SUtZG14R7r0QIOJZ+Lq8eMtXhkTUqMCrF+v1ZXGjy9Zlp0NL75oieYTwty50KkTDBwIXbp4bY3htTex1zRsaCLqo3IOaBsVZvJkOOaY0iJ6/PGaXOGaa0xE486PP+pcaP/+6qVrVF783rqRkpubmCHo336L/zbTFBNSIyp274YHHoCzzip9Q3733RqJ0dJKCcSfBQv0B3/mGbjsMq+tMbwiK6v8cBfntBJOTo7efDlfbc9onKaMqLGhXSNiFi/Wuc+vvipZ1qiRerx36uSdXRnNwoXQsSM89RRceaXX1lQ+cnNDC5cX86P+avdlsWOH3mw99VTpIu7xTtiQrvPDCcJ6pEZEjBgBrVqVFtGzzoLvvzcRTRg//6wi2revhhcYyWft2tDJ8FJ1fvQf/9AT9cEHSxdCjye5uam7/x5hPVKjTLZuhb//XWP+/VSrBo8/rsO5lTRsLPEsXqyhBb17a8YYo/IRS+q/GTM0PKpu3fjbYwIaFhNSIyxz5uhQ7i+/lCxr0QJGjrRqLQll6VI44wytPXfjjV5bY3hFLMOxl1yiSTriSbrGyiYRE1JjL4qL1a/lwQc18byfq6+GAQMSc7Nr+Fi+XEX0/vs1z6JhRMPjj3ttQaXEhNQoxdq1KpiffFKyrG5dTa5gaf0SzMqVKqJ33QW33uq1NYZhRIgJqbGHiRM1BjSwFvoJJ2iav0MO8c6uSsHq1Sqit92mDiOGkQqYd25EmKuIQUEB3HOPZp7zi6iIxot+/rmJaML59VcV0e7dtTdqGF6T6t7JKYb1SCs5ixZpsvlvvy1Z1rixeul27OidXZWGtWtVRK+9Fu6912trjFQiXAxrojFX/KixX6yS4pw69x1/SJeC+QAADn9JREFUfGkRPfdcTelqIpoEfvtNQ1yuvBJ69vTaGiPVCBfDmkicg6KixH5HBmJCWgnZskWv3dddpzVEQWv8vvACfPSR5qI2EsyGDSqil1wCDz3ktTVGpuMXYZvzTAg2tFvJmDVLY0OXLStZdthhGht63HGemVW52LhRRfSCCyAvz2trjHQj2iHfQPFcu9YqSiQA65FWEoqKNMTs1FNLi+iNN2riBRPRJLFpk46bd+oEjz1mFzUjevxDvuF6l/5qL+Echsr6nBETnvZIRaQGMBDoCOwLLAZ6OucmlvO5T4EzgGrOucKy2hoaWfG3v8HUqSXL6teHl1+GSy/1zq5Kx+bNmqC4Qwd48kkTUaNixOpRa564ccfrod2qwErgNGAF0Bl4W0SOds4tC/UBEekGVEuahWnORx/pXOjGjSXLTj5ZY0ObNvXOrkrHli1aT/TUU+Hf/zYRNYwMwtOhXefcdudcnnNumXOu2Dk3DlgKtA7VXkTqA72B+5JpZzqycyfcfrtOw/lFVET9WqZPNxFNKn/8oUO5bdvCc8+ZiBpGhuF1j7QUIpILtATmhWnyODAIKHNsQkS6A90BmjRpEk8T04L58zU29IcfSpYdcAAMHw7t23tmVuVk2zbNdHHccfCf/5iIGkYGkjLORiJSDRgBDHPO/RRifRvgFOA/5W3LOTfEOdfGOdemYSWK5XAOhgzRyiyBItqli9YNNRFNMtu3a2Du4YfDiy+aiBpGhpISQioiVYA3gV3AbWHWDwTuMOei0Pz+uzoO9egB+fm6rGZNGDgQxoyBBg28ta/SsWMHnH8+NG8OL71k2WIMI4PxfGhXRAQYCuQCnZ1zu0M0qwe0AUZrc7J8y1eJyKXOuRlJMTZF+fxzTbCwcmXJsiOPhFGj4KijvLOr0pKfDxdeCAceCK+8YiJqGBmO50KKznkeDnR0zuWHabMF2D/g/UHAbNQpaX3IT1QCCguhb1949FGtIernllu0nmitWt7ZVmnZuVPH0hs1gtdeg6ys8j9jGEZa43UcaVOgB1AArJWSOaQewAxgPnCEc24FAQ5GIlLT93JdZR3qXbECrroKZgT0xffZB159Va/jhgcUFEDXrnoghg0zETWMSoKnQuqcWw6U5YFRJ8znlpXzuYzmvfc0I9HmzSXL2rVTr9yDDvLOrkrNrl2aNzc7Ww9E1VQY7DEMIxnY5E0asWMH3HyzXq/9IpqVBX36wJQpJqKesXs3XHYZVKummS5MRA2jUmFnfJowd64mm58/v2RZkyZ63T7lFO/sqvTs3q0HprgY3n5bxdQwjEqF9UhTHOc0BPGEE0qL6KWXamyoiaiHFBbqRHV+PrzzjtaiMwyj0mE90hRmwwa44Qb48MOSZbVrQ//+cP31Ft/vKUVFcPXVmkP3gw+gRg2vLTIMwyNMSFOUqVO1s7NmTcmyY4/V2NDDDvPOLgMV0euug/Xr9S6nZs3yP2MYRsZiQ7spxu7d8K9/aaWtQBG94w4tym0i6jHFxeoyvWoVjB1rwbqGYWR+jzQnJ8drEyJm6VLNUDRrVsmynByN6z/vPO/sMnwUF2sOxiVLYMIEHWc3DCMd2RDPjYlzLp7bSzlE5Edgp9d2VIAc4nzQPcD2ITWwffCedLcfMmMfajrn4pZANeN7pMBO51wbr42IFRGZk872g+1DqmD74D3pbj9kzj7Ec3s2R2oYhmEYFcCE1DAMwzAqQGUQ0iFeG1BB0t1+sH1IFWwfvCfd7Qfbh73IeGcjwzAMw0gklaFHahiGYRgJw4TUMAzDMCpAWgmpiNQQkaEislxEtorIdyJyTpi214pIkYhsC3i0D1jfTESmisgOEflJRDqm4D4MDrK/QES2BqyfJiI7A9YvTMY++L57uIj8KiJ/iMgiEbmxjLZ3ichaX9tXRaRGwDpPjoPvuyPaBxG5RkS+9rVbJSL9RKRqwPqUPw4pfD5Ean/KngsBNvzJZ8PwMOtFRJ4SkY2+x1MiJRmzReQ43/9sh+/5uORZv8eG8vbhXhH50XftWioi9watXyYi+QHHYVJyLC9lQ3n7kCciu4P+T80D1kd/HJxzafMAsoE8oBl6E3AesBVoFqLttcDnZWzrf8CzQC3gYmAz0DCV9iHEZ18HXg14Pw240aNjcSRQw/f6MGAt0DpEu7OBdb72+/hsftLr4xDlPtwC/AWoDhwAfA08kGbHIVXPh4jsD/G5lDkXAmyYBMwAhodZ3wNYCBzo+x/NB272rasOLAfuAmoA//C9r55i+3AfcDyag+BQn42XB6xfBnRM8eOQV8a6mI5DWvVInXPbnXN5zrllzrli59w4YCnQOprtiEhL9M/Q2zmX75x7D/gBvYAklFj3QUSyffYNS7SNkeCcm+ecK/C/9T0OCdH0GmCor/3vQB/0ou7pcYDI98E5N8g5N8M5t8s5txoYAaREAbsojkNYPD4forY/1c4FABG5HL35+LSMZtcAzzjnVvn+R8/gOxeA9qg4Pe+cK3DO9QcEOCNhRgcRyT445/o5575xzhU65xYCY0mRcwEiPg5l0Z4YjkNaCWkwIpILtATmhWnSSkQ2+IaMHgoYjjsSWOKc2xrQ9nvf8qQSwT74uRhYD3wWtPwJ3z7ODByqSwYiMlBEdgA/Ab8CE0I0OxL9bf18D+SKSANS4DhEuA/BtGPv45XqxwFS9HyI4Rik1LkgIvWAR4G7y2ka6lw4MmDdXOfrFvmYS/KOQaT7EPgZQUdqgs+FESKyXkQmicixcTSzPHui2YfzRWSTiMwTkVsClsd0HNJWSEWkGtozGOac+ylEk8+Ao4BG6Il3BeAfz68DbAlqvwWomxhrQxPBPgRyDfBG0AG+H2iODhMNAT4Skah6IxXBOXcr+pv9BRgDFIRoFvxb+1/XDbHOvz5pxyHCfdiDiFwPtAGeDlicDschZc+HaI8BqXcu9EFHXVaV0y7UuVDHJ0henwuR7kMgeaiGvBawrBs6bdUUmAr8V0T+L042lkek+/A2cDjQELgJeFhErvCti+k4pKWQikgV4E1gF3BbqDbOuSXOuaW+4dMf0DuVS3yrtwH1gj5SD52rTAqR7ENA2ybokMMbgcudc18657b6hiCGATOBzomxODTOuSLn3OfovM8tIZoE/9b+11tDrPOvT9pxgIj2AQAR6QI8AZzjnNsQ8PmUPw6pfj5EcQxS6lzwOaJ0BJ6LoHmoc2Gb74bAs2MQ5T74P3MbcDVwbsDQPM65mb7pgR3OuSfQYda/xNvmEPZEvA/OufnOuTW+/9wXwAtU8FxIOyH13b0NBXKBi51zuyP8qEPHukGHIpqLSOBdxrGUP7waF2LYh78BM51zS8ppF7iPyaYqoee25qG/rZ9jgXXOuY14fBxCEG4fEJFOwMvA+T4hKotUPA7BpMz5EER59qfaudAe7YGtEJG1wD+Bi0XkmxBtQ50L8wLWHRPoxQscQ3KOQXsi3wf/qMwDQIcIen+peByCCT4Xoj8OZXkipeIDGAzMAuqU0+4cINf3+jDgR9SZwr9+Fjo8VxO4iOR6i0a0DwHtFwLXBy37P9QjtiZ68ekGbAdaJsH+RsDl6DBIls+O7cAFIdp2Qj0xj/DZPIXSXrueHIco9+EMYCPQLsS6dDkOKXc+RGN/Cp8LtYHGAY+ngXdD/XbAzcACdPh5f/TiHOy1ewfqLXobSfLajXIfuvnO58NDrGuCOh5V9x2Le9G57AYptg8XohEEApwArAauqchxSOjOJeDHaorePexEu+D+RzffQdwGNPG1fRoNu9gOLEGHsqoFbKsZ6jKf7zs5k+KyHc0++Nr/2bcPdYO20xD4Ch1y2IxeCM9M0j40BKb7vvcP1MPzJt+6UPtwt+9Y/IHOp9RIgeMQ8T6gcz2FQcdrYjodh1Q8H2L4H6XcuRBin/LwhVagQ5rbAtYJ0A/Y5Hv0w5em1be+FRpalQ98A7RKwX1YCuwOOhcG+9YdiTrmbEdvPD8F2qTgPoz02bcNdXD7R9Bnoz4OlmvXMAzDMCpA2s2RGoZhGEYqYUJqGIZhGBXAhNQwDMMwKoAJqWEYhmFUABNSwzAMw6gAJqSGYRiGUQFMSA3DMAyjApiQGkaGISK1ReRh0QLdO0VkpYg87iuSYBhGnLGEDIaRQYjIfsBk4E/A+2ih5fPQFI1DnHM9vLPOMDITE1LDyBBEpDrwBZpL92zn3Ezf8jpoXtcDgQOcc2u9s9IwMg8b2jWMzOGfQGvgfr+IAjjntqG90yokoaSVYVQ2TEgNIwMQkVpotY1f0cLWwWz0PTdOmlGGUUkwITWMzOAitJzYWy50fduavuddyTPJMCoHVb02wDCMuHCu7/kAEckLsb6j73llcswxjMqDORsZRgYgIsvRGp7lcbBzblmCzTGMSoUN7RpGmiMi2aiIznPOSfADqIcWY14ZKKIicquILPXFmn4tIuaIZBgxYEJqGOnPAb7n1WHWnwVUAyb4F4jIX4EXgMeBVmjYzEQRiaRXaxhGACakhpH+VPc9F4RZf53v+dWAZXcDrzvnXnbOLXDO3Y56/N6SIBsNI2MxITWM9MefYGGv0BYROQnoDEx0zs32LauOxptOCmo+CTg5gXYaRkZiQmoYaY5zbgOwAGgtIsf4l4tIU2AksAW4NeAjOUAWsC5oU+uwOFPDiBoLfzGMzOAxYATwqYgMB7KBywAHnGueuoaROKxHahgZgHPuLeBa4Dd0nrMz8DZwlHPui6DmG4AiIDdoeS4lw8SGYUSIxZEaRiVERL4EvnfOdQ9Ytgh4zznX0zvLDCP9sKFdw6icPAu8KSKzgZnAzcD+wGBPrTKMNMSE1DAqIc650SLSAOgF7Af8CHR2zi331jLDSD9saNcwDMMwKoA5GxmGYRhGBTAhNQzDMIwKYEJqGIZhGBXAhNQwDMMwKoAJqWEYhmFUABNSwzAMw6gAJqSGYRiGUQFMSA3DMAyjApiQGoZhGEYF+H/Dek/+KUXxLAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(7,4))\n", "plt.plot(theta_path_sgd[:, 0], theta_path_sgd[:, 1], \"r-s\", linewidth=1, label=\"Stochastic\")\n", "plt.plot(theta_path_mgd[:, 0], theta_path_mgd[:, 1], \"g-+\", linewidth=2, label=\"Mini-batch\")\n", "plt.plot(theta_path_bgd[:, 0], theta_path_bgd[:, 1], \"b-o\", linewidth=3, label=\"Batch\")\n", "plt.legend(loc=\"upper left\", fontsize=16)\n", "plt.xlabel(r\"$\\theta_0$\", fontsize=20)\n", "plt.ylabel(r\"$\\theta_1$ \", fontsize=20, rotation=0)\n", "plt.axis([2.5, 4.5, 2.3, 3.9])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Polynomial regression" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import numpy.random as rnd\n", "\n", "np.random.seed(42)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$y = 0.5 \\times x^2 + x + 2 + \\text{error}$$" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "m = 100\n", "X = 6 * np.random.rand(m, 1) - 3\n", "y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-3, 3, 0, 10]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEWCAYAAACAOivfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAF5dJREFUeJzt3XuM5Wddx/H3t7NLq9tWU1iaKC5VlKKIgkw0A1FXW0XwGtdLtbpoxFUIKsZL2NiVlcVs1EQaRdDVgnhFFGwUESOV1apLcGrU2lirCFQEYlvQtkvZttuvf5w5djyemXP7/Z7f7f1KJrN75lyec3s+z+33/CIzkSQN0wVNF0CS1BxDQJIGzBCQpAEzBCRpwAwBSRowQ0CSBswQkKQBqzQEIuLFEbEZEeci4lcn/nZVRNweER+NiHdExBOrfGxJ0uKq7gl8AHgF8NrtF0bE44A3A8eAy4BN4HcqfmxJ0oL2VHlnmflmgIhYB56w7U9fD9yWmb+79ffjwN0R8ZTMvL3KMkiS5ldpCOziqcDfj/+TmWcj4t1bl/+/EIiII8ARgH379j3zKU95SqFiSlJ3nD0L//zPkAkRcOWVsG/f6G+33HLL3Zm5f9Z9lAqBi4G7Ji77b+CSaVfOzFPAKYD19fXc3Nyst3SS1EEnT8KxY3D+PFxwARw+DEePjv4WEe+b5z5KrQ66H7h04rJLgfsKPb4k9c7Bg/CYx8Da2uj3wYOL30epnsBtwPPH/4mIfcCTti6XJC1hYwNuuglOnx4FwMbG4vdRaQhExJ6t+1wD1iLiIuBh4PeBn4mIQ8AfAT8O/IOTwpK0mo2N5Sr/saqHg64DHgBeCnzb1r+vy8y7gEPATwIfAb4AuKbix5YkLajqJaLHgeM7/O3tgMt8JKlF3DZCkgbMEJCkATMEJGnADAFJGjBDQJIGzBCQpAEzBCRpwAwBSRowQ0CSBswQkKQBMwQkqSPOnBmdQ+DMmerus9RW0pKkFZw5A1ddBQ8+ODp3wE03rbZ76Jg9AUnqgNOnRwFw/vzo9+nT1dyvISBJHVDFWcSmcThIkjqgirOITWMISFJHrHoWsWkcDpKkATMEJGnADAFJGjBDQJIGzBCQpAEzBCRpwAwBSRowQ0CSBswQkKQBMwQkacAMAUnaQR3797eNewdJ0hR17d/fNvYEJGmKuvbvbxtDQJKmqGv//rZxOEiSplh1//4zZ+a/7fbrQvXnDNiNISBJO1h2//5F5hO2X3fPHsgcDUGVmodwOEiSKrbIfMLkdR96qOw8hCEgSRVbZD5h8rp795adhyg6HBQRVwCvBjaAc8DvAS/JzIdLlkOS6rTIfMLkdW+9Fd70Jjh0qMycQGRm/Y8yfrCItwL/CXwv8InAnwK/nJk/t9Nt1tfXc3Nzs1AJJWl+i0z+znt/VR2bEBG3ZOb6rOuVnhj+VOBVmfkx4EMR8TbgqYXLIEkrq+NgsmlzCX2bGL4euCYiPj4iPhl4LvC2yStFxJGI2IyIzbvuuqtwESVptjoOJmvi2ITSIfAXjFr+9wLvBzaBGyevlJmnMnM9M9f3799fuIiSNFsdFfZ4fuDEiXLbVBQbDoqICxi1+k8BzwIuBl4L/BTwo6XKIUlVWOZgsnnmEHY7NqHqOQgoOydwGXCA0ZzAOeBcRLwOeAWGgKQOWuRgslXnEOra0K7YcFBm3g28B3hhROyJiE8Eng/8Q6kySFJTVp1DqGtDu9JzAl8PfAVwF/CvwEPADxYugyQVt+ocQl2TxkWXiGbm3wEHSz6mJLXBqhvSrXr7nRQ9WGwZHiwmSYub92Ax9w6SpAEzBCRpwAwBSRowQ0CSBswQkKQBMwQkacAMAUkaMENAkgbMEJCkATMEJGnADAFJGjBDQJIGzBCQpAEzBCRpwAwBSRowQ0CSBswQkKSWO3MGTp4c/a5a0dNLSlKTzpyp/vSMdTtzBq66anRy+cc8ZnSKySrLbghIGoS6K9O6nD49KvP586Pfp09XW26HgyQNwrTKtEp1DdkcPDgKrbW10e+DB6u9f3sCkgZhXJmOewJVVqZ19jI2Nkb3V9cwliEgaRDqrEzrHrLZ2Khv6MoQkDQYdVWmdfYy6mYISNKK6h6yqZMhIEkVqHPIpk6uDpKkATMEJGnADAFJGjBDQJIGzBCQpAEzBCRpwAwBSdpFnds4t0Hx4wQi4hrgZcAB4EPAd2TmzaXLIUmzdHXn0UUU7QlExJcBPwV8J3AJ8EXAv5Usg6T69aX1XPfOo21QuifwE8DLM/OdW///j8KPL6lmbWo9r3oSmS7vCTSvYiEQEWvAOvAHEfGvwEXAjcCPZOYDE9c9AhwBOHDgQKkiSqpA3TtqzquKMOrynkDzKjkcdDmwF/gG4AuBpwPPAK6bvGJmnsrM9cxc379/f8EiSlpV3SdBmVdVQzkbG3D0aD8DAMqGwLi1//OZ+cHMvBv4WeB5BcsgqWbj1vOJE80OBbUljNqu2HBQZn4kIt4P5PaLSz2+pHLasKPmEIZyqlB6Yvh1wPdFxNuAh4AfBN5SuAySBqINYdR2pUPgBPA44A7gY8AbgZ8sXAZJ0paiIZCZDwEv2vqRpEqtuiR0iOaaGI6IX4yIjIhPmvK3KyPiwYj4ueqLJ0nzGS8JPXZs9LvrB6qVMu/qoPHL+flT/vZK4F5GW0FIUiO2Lwk9dw6OHzcI5jFvCIyP8P0/IRARXwk8F/jxzPxIlQWTpEWMl4RecAE88gi8/e32COYxbwjcAXyYbSEQEXsZrfP/R+CXqi+apD6pez+h8ZLQq69+NAh2OkisL3sbVWGuieHMzIh4J/DsiIjMTOAHgCcDV2fm+ToLKanbSu0ntLExGga6+ead9/tp095GbbDIEcPvBD4BuDIiHg8cA27MzJtqKZmk3ii5G+esI5aHsDPoIhZZIrp9cviLgAuBH6q8RJJ6p/RunLsdJDaEnUEXsUgIvAt4BHgB8GzgZzLTcwFImqlNWzi0qSxtEKPh/TmvHHEr8NmMzgj25My8r66Cja2vr+fm5mbdDyNJvRIRt2Tm+qzrLbqL6Lu2fh8tEQCSpHrNHQJbS0IPApvA6+sqkCSpnEXmBH4Y+FTg2lxkDEmS1Fq7hkBEXAY8B/gc4EeAn912fmBJUsfN6gk8B/gt4D8Z7RH00tpLJEkqZtcQyMzfBn67UFlaya1pJfVZ6ZPKdIqHl0vqu5Inmu8cDy+X1HeGwC7Gh5evrXl4uaR+cjhoFx5eLrWTc3XVMQRm2G0jKqkthlQpOldXLUNA6riuVIpVBdW0ubo2Pt+uMASkjutCpVhlULkVdLUMAanjulApVhlUztVVyxCQOq4LleKiQTVr6Mi5uuoYAlIPtL1SXCSoujLH0ReGgKQixhX5+KDLnSr2nQ7SbHNPp8sMAUlFzNvCnxw6euxj7RnUaTBHDJ85AydPjn5LKm/ebVjGQ0cnTox+33OP27fUaRA9AccYpeYtMjk8OcfR9tVPXdabENhtNUEX1lFLfbDb93CVVUzPf/7o9+HDfner1osQmNXS78I6aqnr5ulxL7qKafI+Dx+utszq8JzA9jH+WWONk2OMtiSk6tWx9brbudevkz2BydbB9dfPbum3fR211HV19LjtxdevkyEw2Tq45572HzG5iCHtCKn+qOPI5S4cDd11jYRARHwGcCvwe5n5bYveflrroC8tfVcyqcv68j0ckqZ6Ar8A/M2yN+5z68CVTNKjbBTVr3gIRMQ1wH8Bfw18+jy3mTY80tcWh2Og0qNsFNWvaAhExKXAy4EvBV6wy/WOAEcALr/8SYNqCfS5lyMtykZR/Ur3BE4AN2Tm+yNixytl5ingFMATnrCeQ2sJ9LWXIy3KRlH9ioVARDwduBp4xiK3u+QS+PCHbQlIQ2WjqF4lewIHgSuAO7d6ARcDaxHxWZn5eTvdaN8+WwKSVJeSIXAKeMO2//8wo1B44awb2hKQhs1jZ+pTLAQy86PAR8f/j4j7gY9l5l2lyiCpe1wmWq/G9g7KzOPLHCgmaVjcP6hend1ATuoqT3C0mPEy0bU1F4fUoZN7B0ld1fWhjVlj83WM3btMtF6dDoFlPnBOMKlJpY+ArfLzPivA6gw4F4fUp7MhsMwHruutMHVfySNgq/68zwowt3jops7OCcwzWTQ59uoEk5pW8gRHVX/eZ43NO3bfTZ3tCcxqUU1rBbkPidqg1NBG1Z/3WWPzjt13U2dDYNYHblor6OhRP6QajrpO8rLb/Th23z2RmU2XYVfr6+u5ubm58O3qGP93UllSV0TELZm5Put6ne0JzFJ1K8hJZXWBDRUtqrchANV2TXeaZPMLp7awoaJl9DoEqjQ5yfbYx/qFU7u4RFPL6OwS0VUsc9j+5NK+e+5xuek0bonQHJdoahmD6wms0mWeHF5yuen/5XBEs1yiqWUMLgQmu8y/9mvLfWn8wv1/Dkc0zyWaWtTgQmD72P7aGtxwAzz8MOzdu3ilNfQv3ORKFA/Gk7pncCGwvQX/rnfBjTeOLh/3Cpqu1LuyxG+noR97R/Ppyvus/htcCMCjLfgXzjyxZVldGlPfaehn6L2jeXTpfVb/DXJ10Njhw3DhhRAx+n34cLPl6dIGd65EWV6X3mf13yB7AmMbG/COd7SnW96lMXWHfpbXpfdZ/dfbvYO6yrHiYfB9Vt3m3TvIEJCkHpo3BAY9JyBJQ2cISB3j1hyq0qAnhqWuKbG81PmKYTEEpA6pe2sOj2EYHoeDajKty243Xquq+/gMj2EYHnsCNZjWmoJ2tbDs8ndT3cdneAzD8BgCNdipNdWWHTbt8nfbKltzzAp/DwIcHkNgRdO+VDu1ppZtYU17jFVa8nWOK9vDaK95w9/9n4bFEFjBTl+qnVpTy7Sw6hhaqqvL35ceRl+DzPM9aBpDYAW7fammtaaWaWHVMbRUV5e/D5VMX4JsGsf7NY0hsIIqvlSzWp1VDy2N1dHl70Ml04cg24nj/ZrGEFjBql+qeVqdVQ4t1a0PlUwfgmw3jvdrUrEN5CLiQuDVwNXAZcC7gaOZ+ce73W7ZDeS6MK578iQcOzZqda6twYkTcPRo06VSFZ+dLnz+1G/zbiBXsiewB/h34IuBO4HnAW+MiKdl5nurfKCujOtOa3VaeVRj8nVc5HVdtbXclc+fBAVDIDPPAse3XfSWiHgP8EzgvVU+VlfGdSeHT8DKowqTlfD118NLXlLudS35+bPRoFU1NicQEZcDTwZum/K3I8ARgAMHDix8310a193e6jx5shvh1XaTlfCb3lT2dS31+bPHoSo0sndQROwFfhN4fWbePvn3zDyVmeuZub5///6F73/cwj5xoltfDM/bW43J1/HQobKva6nPn/v8qArFewIRcQHw68CDwIvrepw2roLwkP0ypr2OT3ta2dd1/BjjirmOx+xSj1ftVfT0khERwGuBK4DnZeYDs27Tl9NLdqnrXmqcuc/j2aXe7z6/hlpNG1cHAbwG+Ezg6nkCoE+6MlldsvLqSiguo9T73cYer7ql2JxARDwR+B7g6cCHIuL+rZ9rS5WhSV0Z7y81ztz38exl3m/PN6EmlFwi+j4gSj1e3RbthndlvL/UOHPfx7MXfb/73jNSe7ltxBKW/cJ2oeteKqx2epw+jXEv8n53ZbhQ/WMILKHvX9jJymuVo28XfZyhtob73jNSexkCUyy7s2cflTz6tu/hupuuDBeqfwyBCavs7Fl3uZqoIEoefTukcJ2mC8OF6h9DYMK8rdGSX9gmh0kmK+ZDh+Dmm+upqG0NS+UZAhPa2Bptcpik9NG3toalsgyBCW1sjTYdTJMVsxW11B+GwBRtq+TaGExVq2vOo+RcSp+Wt2o4DIGOqDuYmqzA6przKDmXMuTlreq2RraSVruMK7Bjx0a/S29bUNcWEiW3pmhiGwy3mVAV7Amo8fX5dc151HG/O/WYSs/b2PNQVQwBtWLiuY45j6rvd7eKt/S8TdPBrf4wBNSKiee65jyqvN9ZFW/JBQVNB7f6wxAQ0L4VUW3Upoq3DcGtfjAEpDm1reI1uFUFQ0BagBWv+sYlopI0YIaAFjb09elDf/7qF4eDtJAm1qe3aTuGNq3Pb9Prou4yBLSQ0uvT21TpwnzPv0Tl3LbXRd3lcJAWMl4mubZWZplkE9sx7GbW8y+1BUfbXhd1lz0BLaT0Msk2rc2H2c+/VE+pba+Luisys+ky7Gp9fT03NzebLoYa1KWx79I7l3bldVF5EXFLZq7PvJ4hUI8hfEGH8ByX4euiNpg3BBwOqkEdrcG2VSxOTO7MA8rUJU4M16DqSbum9/ufxolJqR8MgRpUvYKmjRVu6VVCkurhcFANql5B08aVIG3bTG1ZbRtmk0pzYrgjulZZdaG8zmuoz5wY7pkuTTbOU7m2ISQ8O5dkCKgGsyrXtrTA2zjMJpVmCKhysyrXtrTA+zKvIa3CEFDlZlWubWqBd2mYTaqDIaBdLTt2v1vlagtcao+iIRARlwE3AF8O3A0czczfKlkGza/OsXtb4FI7lD5Y7BeAB4HLgWuB10TEUwuXQXNq40FqkqpVLAQiYh9wCDiWmfdn5l8CfwB8e6kyaDEeFSz1X8nhoCcDD2fmHdsu+3vgiyevGBFHgCNb/z0XEf9YoHxNeRyjobGWumQfXHrJAw/ce9+znnXf2SXuoOXPbyV9fm7g8+u6K+e5UskQuBi4d+Ky/wYumbxiZp4CTgFExOY8R711lc+vu/r83MDn13URMddWCyXnBO4HLp247FLgvoJlkCRtUzIE7gD2RMRnbLvsc4HbCpZBkrRNsRDIzLPAm4GXR8S+iHg28LXAr8+46anaC9csn1939fm5gc+v6+Z6fkV3Ed06TuC1wJcB9wAv9TgBSWpO67eSliTVxzOLSdKAGQKSNGCdCIGI+I2I+GBE3BsRd0TEC5ouU1Ui4sKIuCEi3hcR90XE30XEc5suV5Ui4sURsRkR5yLiV5suz6oi4rKI+P2IOLv1vn1r02WqUt/er+0G8n1bqL7sRAgAJ4ErMvNS4GuAV0TEMxsuU1X2AP/O6MjpTwCuA94YEVc0WKaqfQB4BaNFAX3Q9z2w+vZ+bTeE79tC9WUnQiAzb8vMc+P/bv08qcEiVSYzz2bm8cx8b2Y+kplvAd4D9CXkyMw3Z+aNjFaEddoQ9sDq0/s1aSDft4Xqy06EAEBEvDoiPgrcDnwQeGvDRapFRFzOaJ8lD6Jrp532wOpTT2Aw+vp9W6S+7EwIZOaLGO0z9IWMDjo7t/stuici9gK/Cbw+M29vujyaau49sNRuff6+LVJfNh4CEXE6InKHn7/cft3MPL/V/X4C8MJmSryYeZ9fRFzA6OjpB4EXN1bgBS3y/vWEe2D1QFe/b4uYt75s/PSSmXlwiZvtoSNzAvM8v4gIRmdcuxx4XmY+VHe5qrLk+9dl/7sHVmb+y9Zl7oHVIV3+vi1p1/qy8Z7ALBHx+Ii4JiIujoi1iHgO8C3ATU2XrUKvAT4T+OrMfKDpwlQtIvZExEXAGrAWERdFROMNkGWssAdWZ/Tp/dpBb79vS9WXmdnqH2A/8OfAfzEai70V+O6my1Xh83sio9n7jzEaahj/XNt02Sp8jsd5dJXC+Od40+Va4flcBtwInAXuBL616TL5fs393Hr9fVumvnTvIEkasNYPB0mS6mMISNKAGQKSNGCGgCQNmCEgSQNmCEjSgBkCkjRghoAkDZghIEkDZghIO4iIj4uI90fEnRFx4cTffiUizkfENU2VT6qCISDtIEebi70M+BTgRePLI+Ik8F3A92XmGxoqnlQJ9w6SdhERa4zOHPZ44NOAFwCvBF6WmS9vsmxSFQwBaYaI+CrgD4E/A74EeFVmfn+zpZKqYQhIc4iIvwWeAbyB0dbROfH3bwK+H3g6cHdmXlG8kNISnBOQZoiIb2Z09jCA+yYDYMtHgFcBP1asYFIF7AlIu4iIL2c0FPSHwEPANwJPy8x/2uH6Xwdcb09AXWFPQNpBRHwBo1NJ/hVwLXAd8AhwsslySVUyBKQpIuKzgLcyOrH812Xmucx8N6MTlH/t1rmFpc4zBKQJEXEA+BNG4/zPzcx7t/35BPAA8NNNlE2q2p6mCyC1TWbeyegAsWl/+wDw8WVLJNXHEJAqsHVQ2d6tn4iIi4DMzHPNlkzanSEgVePbgddt+/8DwPuAKxopjTQnl4hK0oA5MSxJA2YISNKAGQKSNGCGgCQNmCEgSQNmCEjSgBkCkjRg/wNaQOiGCWCc1gAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(X, y, \"b.\")\n", "plt.xlabel(\"$x_1$\", fontsize=18)\n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18)\n", "plt.axis([-3, 3, 0, 10])" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "# PolynomialFeatures는 훈련 데이터를 변환한다. 훈련 세트에 있는 각 특성을 제곱한다.\n", "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "poly_features = PolynomialFeatures(degree=2, include_bias=False)\n", "X_poly = poly_features.fit_transform(X)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-0.75275929]\n", "[-0.75275929 0.56664654]\n" ] } ], "source": [ "print(X[0])\n", "print(X_poly[0])" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([1.78134581]), array([[0.93366893, 0.56456263]]))" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lin_reg = LinearRegression()\n", "lin_reg.fit(X_poly, y)\n", "lin_reg.intercept_, lin_reg.coef_" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-3, 3, 0, 10]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEWCAYAAACAOivfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzt3Xd4VFX+x/H3SQiELihgpSgoqNiIaOCnIqKiK6CyNnAVyyJiQSyriBRRwS6W1RULuqtiYZFdFVFEcFWCgoIiXUBRLBRRICQhJOf3xyEhhJSZ5M69c2c+r+eZZ5Ip955p53vvKd9jrLWIiEhySgm6ACIiEhwFARGRJKYgICKSxBQERESSmIKAiEgSUxAQEUliCgIiIknM0yBgjLnWGDPXGJNnjHmh1H2nGGOWGGO2GmNmGGNaeLlvERGJntdnAj8BdwPPl7zRGLMXMAkYBjQG5gKvebxvERGJUg0vN2atnQRgjMkA9i9x17nAQmvtGzvuHwmsN8a0tdYu8bIMIiISOU+DQAUOA74q+sdam22MWbHj9t2CgDGmP9AfoG7duh3atm3rUzFFRMIjOxuWLgVrwRg45BCoW9fd98UXX6y31japbBt+BYF6wLpSt/0B1C/rwdbaccA4gIyMDDt37tzYlk5EJITGjIFhw6CgAFJS4JJLYMgQd58x5vtItuHX6KAtQINStzUANvu0fxGRhNOlC9SsCamp7rpLl+i34deZwELg0qJ/jDF1gYN23C4iIlWQmQnTp8PMmS4AZGZGvw1Pg4AxpsaObaYCqcaYdGA78CbwgDGmN/AOMBz4Wp3CIiLVk5lZtcq/iNfNQXcAOcBtwMU7/r7DWrsO6A3cA2wEjgMu9HjfIiISJa+HiI4ERpZz3weAhvmIiMTaI49E/FC/+gRiZtOmTaxdu5b8/PygiyI+SUtLo2nTpjRoUHqsgYgwdSrceGPEDw91ENi0aRO//vor++23H7Vr18YYE3SRJMasteTk5LBmzRoABQKRkvLy4LrronpKqBPIrV27lv322486deooACQJYwx16tRhv/32Y+3atUEXRyS+PPQQfPsttGsX8VNCHQTy8/OpXbt20MWQANSuXVtNgCIlrV4Nd9/t/n7iiYifFuogAOgMIEnpcxcpZfBgyMmBCy6Arl0jflrog4CISNJ7/32YNMklDnrwwaieqiAgIhJmublwzTXu7+HDYf/9K358KQoCCe7www9n5MiRxf+3bNmSB6M8UiitS5cuXHvttdUsmYh44oEHdnYG33BD1E9XEAhAv379MMZgjCEtLY0DDzyQm2++mezs7Jjve86cOQwcODCix77wwgvUq1dvt9snTZrEmDFjvC6aiERr5UoYPdr9/eSTLotclEI9TyDMunXrxr/+9S/y8/P5+OOPufLKK8nOzuapp57a7bH5+fmkpaV5st8mTSpNL16pxo0be1ASEakWa92cgNxcuPjiqqUQRWcCgalVqxZ77703BxxwAH369KFv375MnjyZmTNnYoxhypQpdOzYkZo1a/Lee+8B8NZbb9GhQwfS09Np1aoVQ4cOZdu2bcXbXLt2Lb169aJ27dq0aNGC559/frf9lm4O+uOPP7j66qvZZ599SE9Pp127drz22mvMnDmTyy67jOzs7OKzlqJmpdLNQRs3buTSSy+lUaNG1K5dm27durFw4c4EsUVnFNOnT+fwww+nbt26nHzyyaxatar4MT/88AO9evWicePG1KlTh7Zt2/Lqq6969n6LJIKsLLeGQFYW8J//wJQp0KCBaxKqosQ7Ewhq6KC11Xp66XHvt956Kw899BCtW7emfv36vPfee/Tt25dHH32UE088kdWrVzNgwADy8vKKK/V+/frx/fff88EHH1CnTh0GDx7Md999V0GRLWeeeSYbN25k/PjxHHzwwSxdupTc3Fw6derE2LFjuf3221mxYgVAmU1DRftdunQp//nPf2jUqBFDhw6le/fuLFu2rHgeR15eHmPGjOH5558nPT2dSy+9lAEDBhQHuIEDB5Kbm8uMGTNo0KABS5curdb7KZJosrLglFNg2zZolLaFHxteTy2Ae+6Bvfeu+oattXF96dChgy3PokWLdr/RVcf+X6Jw6aWX2j/96U/F/3/22Wd2zz33tOeff76dMWOGBezEiRN3ec4JJ5xgR40atcttb775pq1bt64tLCy0S5cutYD95JNPiu//7rvvbEpKih0xYkTxbS1atLAPPPCAtdba999/3xpjyn4frbXjx4+3devW3e32k046yV5zzTXWWmuXLVtmAfvRRx8V3//777/bBg0a2GeeeaZ4O4BdsmRJ8WNeeuklW7NmTVtYWGittbZ9+/Z25MiR5b9pZSiv3CKJaPRoa1NTXXXzgLnF/XH00dZu317m44G5NoI6NvHOBKp5RO6XqVOnUq9ePbZv305+fj69evXi8ccfZ9GiRQBkZGTs8vgvvviCzz//nPvuu6/4tsLCQnJycvjll19YvHgxKSkpdOzYsfj+Fi1asO+++5Zbhnnz5rHPPvvQLoop5qUV7TezRELzhg0b0r59++LXAq7565BDDin+f99992Xbtm1s3LiRxo0bM2jQIAYMGMDUqVM55ZRTOOecc+jQoUOVyyWSaIpWETs4bwE3FD6MNQbz9NNuWbFqUJ9AQE488UTmz59f3PwyadIkmjZtWnx/3aLVoncoLCxkxIgRzJ8/v/jy9ddfs3z58l06e+NpJm3JstSoUaPM+woLCwG44oorWLVqFZdddhnLli2jU6dOuwxtFUl2mZkwfVohb+8/gBoUYAYOhGOPrfZ2FQQCUqdOHVq3bk2LFi0iGvlzzDHHsGTJElq3br3bpUaNGrRt25bCwkI+//zz4uesXr2an376qdxtHn300fz8888sXry4zPtr1qxJQUFBheVq164dhYWFZGVlFd+2adMmFixYwKGHHlrp6ypp//33p3///rz++uuMGjWKcePGRfV8kUSXueg59l89y/UB3HOPJ9tUEAiJ4cOH88orrzB8+HC++eYblixZwsSJE/nb3/4GwCGHHEL37t256qqryMrKYv78+fTr16/CBHunnHIKxx13HL179+a9995j1apVTJs2jcmTJwNuJFFubi7Tpk1j/fr1bN26dbdttGnThl69enHVVVfx8ccfs2DBAi6++GIaNGhAnz59In59gwYNYurUqaxcuZL58+czderUqIOISEJbuxZuvdX9PXYsNGzoyWYVBELi9NNP55133mHGjBl07NiRjh07cu+999K8efPix7zwwgu0atWKrl270qNHD/r06UPLli3L3WZKSgrvvvsunTt35uKLL6Zdu3YMGjSoeNhpp06dGDBgABdddBFNmjTh/vvvL3M748ePp2PHjvTs2ZOOHTuydetWpk6dGlWG18LCQq677joOPfRQTj31VJo1a8aLL74Y8fNFEt5NN8HGjXDaaXD++Z5t1tg470jNyMiwc+fOLfO+xYsXV6tTU8JNn78kjWnTXOWfng7ffAMHHVTpU4wxX1hrMyp7nM4ERETiWU4OXH21+3vEiIgCQDQUBERE4tldd8GKFdC+vWsS8piCgIhIvFqwwKWEMAbGjQOPcoiVpCAgIhKPCgqgf3/Yvt01Bx1/fEx2E/ogEO8d2xIb+twl4T35JMyeDfvuuzNddAyEOgikpaWRk5MTdDEkADk5OZ6l1xaJO6tXw+23u7+ffNKzOQFlCXUQaNq0KWvWrGHr1q06MkwS1lq2bt3KmjVrdkmzIZIwrHXNP1u2QO/e0KtXTHcX6gRyDRo0AOCnn37aJQ2zJLa0tDSaNWtW/PmLxEpWFsyc6ZK3lciRGFuvvebWCWjYEB5/POa7C3UQABcIVBmIiNdK5u+vWROmT/chEGzYANdf7/5+8EHYZ58Y7zDkzUEiIrEyc6YLAAUF7nrmTB92OngwrFsHJ50EV1zhww4VBEREylSUvz811V1XcQnfyE2ZAv/6l0sN8eyzvq2SqCAgIlKGzEzXBHTXXVVrCtplPeBKfP7BJv7oMwCA7668izFvtI7oeV4IfZ+AiEisZGZWrR8gmv6ErCxY0P02Ohb8wBxzLCc9fQPbCv3rh9CZgIiIx6LpT1gx/n/0L3iKfGpwhX2O3O01fO2HUBAQEfFYxP0JW7fy5ymXA3CvuZ1ltdqTluZjPwQ+NwcZY1oCTwKZQB4wEbjBWrvdz3KIiMRSUX9CpXMMhg4lfc0Ksg9qT81LhzKjm8sZ9+9/u3lifsxN8HVRGWPMFGAtMADYA5gGPGOtfay851S0qIyISJCqNZns00/hhBMgJQU++ww6dPB0bkKki8r43THcCnjCWpsL/GKMmQoc5nMZRESqrVoVdk4OXH65SxFx663QoQNQdl9ConUMjwUuNMbUMcbsB5wBTC39IGNMf2PMXGPM3HXr1vlcRBGRylVrMtnw4bBsGRx6qPt7B9/nJuB/EPgf7sh/E/AjMBeYXPpB1tpx1toMa21GkyZNfC6iiEjlqlxhz5oFDz3kmoHGj4datYrvqu7chKrwrTnIGJOCO+ofB3QC6gHPA/cBf/OrHCIiXoi487eEz2Zspc15/Whc1AzUsWOZ261oToHXCe387BNoDDTH9QnkAXnGmPHA3SgIiEgIRTOZLCsLvjj1do4rWM5Ccxibu48kmrXCYpXQzrfmIGvtemAVcLUxpoYxZg/gUuBrv8ogIhKUFc9/xLUFj7KdVC4zLzJjVq3Kn1RCrBLa+d0ncC7QHVgHfAvkA4N9LoOIiL+2bOHPUy4DYIwZyje1OkTd6RurTmNfh4haa+cDXfzcp4hI4G6+mfSfVpHd5khq/mUo07tF35RTlT6ISPg6WawqNFlMRELt3XfhzDPd4fucOXDEEb7sNtLJYsodJCISK7/9tnNxmLvu8i0ARENBQEQkVq65Bn7+GTp3hptuCro0ZVIQEBGJhddeg1dfhbp14cUXXY9uHFIQEBHx2po1cPXV7u8HH4SDDgq2PBVQEBAR8VJhIfTrBxs3ug7hq64KukQVUhAQEfHS44/DBx/AXnvBc8/5tmB8VSkIiIh4ZeFClxMI4JlnYO+9gy1PBBQERES8kJcHffu668svh7PPDrpEEVEQEBHxwh13wFdfQatWMHZs0KWJmIKAiEh1ffCBGwWUmgovvwz16wddoogpCIiIVMeGDXDJJe7v4cP9WQnGQwoCIiJVZS389a87ZwXffnvQJYqagoCISFU9+yy8+SY0aAAvvQQ1fE3M7AkFARGRqli0CAYNcn8/+SS0bBlocapKQUBEJFq5uXDhhZCT4/oD+vYNukRVpiAgIhKtW26BBQugdWt44omgS1MtCgIiItF46y1X8aeluSyhPgwHzcqCMWPctdfC14shIlJFWVnVXJ7xhx9ccjhwtXKHDt4VrhxZWXDKKW5x+Zo13RKTXo5CVRAQkaRQ7cp0+3bo08etFnbGGTB4cMzKWtLMma7MBQXueuZMb4OAmoNEJCmUVZlGZeRI+OQT2Hdft0hMyq7VZ6yabLp0cUErNdVdd+ni7fZ1JiAiSaGoMi06E4iqMp02DUaPdhX/K69Akya73B3LJpvMTLe9ajVjVUBBQESSQpUr019+gb/8xc0OHjkSTjppt4fEuskmMzN22SgUBEQkaURdmRYUuH6AX3+Fk0+GoUPLfFi1zjICpiAgIlKeO++EGTOgWTPXDFTOYvGxbrKJJQUBEZGyvP8+3H33zn6ASlYJi2WTTSwpCIiIlLZmjUsFYa07G+jaNegSxYyGiIqIlJSfDxdcAOvXw6mnhjI9dDQUBERESrrtNvj0U9hvP5ceupx+gEShICAiUmTiRHj4YbcuwBtvQNOmQZco5hQEREQAli2Dyy93fz/4YDh7eatAQUBEJDsbeveGzZvh/PPh+uuDLpFvFAREJLlZC1deCd98A23buiUjjSm+O5ZpnOOB70NEjTEXAiOA5sAvQD9r7cd+l0NEBICxY926APXqufWCS6wPEOs0zvHA1zMBY8ypwH3AZUB94ERgpZ9lEJHYC83R88yZbpUwcJlB27bd7e5qZR4NAb/PBO4ERllrZ+/4f43P+xeRGIuno+cKF5H58Uc3H6CgwA0LPffc3Z4f5pxAkfItCBhjUoEM4L/GmG+BdGAycIu1NqfUY/sD/QGaN2/uVxFFxAOxzqgZqQqDUW6uq/TXroVu3Vx6iDKEOSdQpPxsDmoGpAF/Bk4AjgKOBu4o/UBr7ThrbYa1NqNJqbzdIhLfYr0ISqTKbcqxFgYMgDlzoGVL1x9QwYSwzEwYMiQxAwD4GwSKjvYft9b+bK1dDzwMnOljGUQkxoqOnu+6K9imoHKD0RNPuPb/2rVh8mTYc89gChgnfGsOstZuNMb8CNiSN/u1fxHxTzxk1CyzKWfmzJ1rA48fD0ceGVwB44TfHcPjgeuMMVOBfGAw8LbPZRCRJLFLMFq1Cv78Z9c+dOutrlNYfA8CdwF7AcuAXOB14B6fyyAiyWbzZujZEzZsgDPOgHtU7RTxNQhYa/OBgTsuIiKeKnNIaGEhXHKJmxF8yCEwYULCZwaNRkQdw8aYfxhjrDFm3zLuO8QYs80Y85j3xRMRiUzRkNBhw9x18US1kSNdB/Aee8Bbb0HDhkEWM+5EOjqo6O3sWMZ9jwCbcKkgREQCUXJIaF6eq/uX3TnBDVNKSYHXX4c2bYIuZtyJNAgUzfDdJQgYY/4EnAEMt9Zu9LJgIiLRKBoSmpLiWoA2T5tN85GXuTsfecStEia7iTQILAN+o0QQMMak4cb5fwM87X3RRCSRxDqfUNGQ0G7doIVZzSR7Nunk8WXHAXDddb6WJUwi6hi21lpjzGygszHGWGstMAg4GOhmrS2IZSFFJNz8yieUmQmjbtlM7Wk92Jtf+TDlFOo8+NhuqaHjJbdRPIhmxvBsoCFwiDGmKTAMmGytnR6TkolIwvAtG+f27Rw39iKOsF+zYa+DqTflDY4/IS2YsoRENENES3YOnwjUAm7yvEQiknB8y8Z5443wzjvQuDF7znqbPds0Cq4sIRFNEPgcKASuBDoDD1hrtRaAiFTKl2ycjz0Gjz/uavbJk8sdCZQMmUGjYVzzfoQPNmYBcDhuRbCDrbWbY1WwIhkZGXbu3Lmx3o2IhNlbb0GvXi5D6MsvQ58+QZcocMaYL6y1GZU9Ltosop/vuB7iRwAQEanUnDlw4YUuAIwapQAQpYiDwI4hoV2AucCLsSqQiEjEVq6Es86CrVuhXz+4Y7flSaQS0fQJ3Ay0AvraaNqQRERioSgZ3Nq1biLYuHG7DAWVyFQYBIwxjYHTgSOAW4CHS6wPLCISjJwclxV02TK3JsDEiZCWVvnzZDeVnQmcDrwCrMXlCLot5iUSEanI9u1w0UUwaxYccABMmQINGgRdqtCqMAhYaycAE3wqS1wqMzWtiATDWrjmGvjPf1xW0HffhX13S24sUfB7UZlQ0fRykThz552u7T89Hd5+Gw47LOgShZ6fC82HjqaXi8SRf/zDBYGUFHj1VejcOegSJQQFgQoUTS9PTdX0cpFAvf46DNyxIOFTT7mJYeIJNQdVQNPLReLA++/DxRe7/oB77oH+/dVX5yEFgUpkZupLJvEvYSvF2bPhnHMgPx8GD4YhQ9RX5zEFAZGQC0ulGHWgWrAAzjzTzQa+5BJ48EEwpsy+unh8vWGhICAScmGoFKMOVMuXu1nAGzdCjx7w7LOuQxilgvaagoBIyIWhUowqUK1e7daI/PVXFzlef32X2cDqq/OWgoBIyIWhUow4UP36qwsAq1fzY/NM1gyZzHHp6bs9TH113olqPYEgaD0BkcRQaZ/A+vXuzoUL+cocRVczg5xae8RtH0e8i3Q9AZ0JiIgviiryokmXu1TsGze6PoCFC1nX9FC6r3+P3wr3ILXEJM14PtMJMwUBEfFFuZ3Df/wBp58O8+dDmzZ8/9AH/HFBU1J3PG7PPcMx+imskmbGcFYWjBnjrkXEf2WmYdm0ya0JMGcOtGoFH35IRo99mD4d7rrLVfgbNih9SywlxZlAWMZRiySy0p3DXY/d7AJAVhY0bw4ffgj77w/s3vEb76OfwixhgkBFnU5hGEctkggq+h2WHMXU9djNHDei+841AWbMgJYty93upZe660su0W/XawkRBCo70g/DOGqRsIvkjDszEzIP2+RmAhcFgJkz4cADI9rmJZfE/nUkm9D2CZRs468s5XPREUhRG6OOJES8F1Hq9d9/d53An37qmn5mzCg3AES8TamWUJ4JlD46GDu28iN9TS4Ria1Kz7h/+80FgLlzoUULFwBatareNqXaQhkESh8dbNgQ/zMmo5GwGSEloVU4c3n9ejcPYP58d+T/4YcuEFRnm+KJQIKAMaYNsACYaK29uMIHr1u3201lHR0kypG+RjJJmJX5O/z5Z5cKYtEiaNNml1FAErygzgT+DsyJ6JGrV7sUsjffXHxTIh8daCSTJJTvv3dHNStWwKGHwgcfwD77RPx0HRTFnu8dw8aYC4HfgekRP+mWW/i06zCyZu3Mc5SZCUOGJN4XQktaSsJYtgz+7/9cADjmGPjoo6gCAKhj2A++BgFjTANgFHBjJY/rb4yZa4yZ+1vDpmwnlc4z7mbeiYPI+rTQn8IGRCOZJCHMmwcnnAA//ugWhP/wQ9hrr6g3o4Oi2PM1i6gx5lHgJ2vtfcaYkUDryvoE9t8/wx7381BeKbyQWmxjwdF/of1nz+2SX1xE4sjHH8NZZ7mUEKeeCm++CXXrVnlzGihRNZFmEfXtTMAYcxTQDXgkmufVrw/v1jqHninvsIW6tJ/3L7fm6NatsSmoiFTd22/Daae5AHDeefDWW9UKAJC4Tb/xws/moC5AS2C1MeYX4GagtzHmy4qeVLeuaxbpcnc3Vj37oUsp+M477ou2cWPsSy0ikXnxRTj7bMjNhf79YcIEqFUr6FJJJXxrDjLG1AEalLjpZlxQuNpau/s40B12W1Rm8WIXAH78EQ47DN591009F5FgWAv33gu33+7+HzIE7rkHjPFsF2oSil7cLSpjrd0KFLfhGGO2ALkVBYAytWvnco6cfjosXOi+Ee++C+3be1xiEalUQQHccAM88YSr9B97DK691tNdaJhobAWWO8haO7LSiWLlOeAA+OQTN/pgzRp3rbFjIv7KyYHzz3cBoGZNtyC8xwEANEw01kKbQI7GjeH99+HPf3YrE512Grz0UtClEqlUQixwtG4ddO0KkyZBw4Y7f4sxoGGisRXK3EHF0tPh1Vfhppvg0UfhL3+BlSth2DBP2yNFvBL2po2sLPh64jIufe1M0tescPl/pkxxs4GJTdt9ImcIiAehDgLuC5dKlwvGknnggTB4MIwY4WYoPvOM+5WV+Rx9mSQYfqcF8fL7npUFI7p8xIRt55LOb2xp24F6M96Gvfcuvj9WAS5RcoPFo9AGgd2/cNeT+WZLuOgi+Oc/4bvv4N//3mWWYtiPwiT8/EyN7PX3fcND43l721XUJJ+3OYslF0zg5r3rFd+vvFfhFNo+gTI7i3r2hP/9z+Un+d//yD3yOMbdsKi47VUdTBI0P9OCePZ9LyyE227jrH9fTk3yGWsGc2H6ZDqfXm+Xh6ntPpxCeyZQ7hFVhw4wZw5bTulJvaVfcsGjmVzy1GvcNrO7FqiQuOBX04Yn3/dNm1xf23//C6mprLjp7+TscRXTulS8hrCaW8PD19xBVbHbZLESKmrvfODOrbQaeSl/ZiIFpPBR93vpOuVmsmYbfUklaVSrT2DFCnd2vWgRNGrkhoB26xaDUkosRDpZLNRBoCJZWdCtayG35o1iuL3T3dinDzz7LNSuXaWyqFNZksYHH7g5ABs3ugma//0vtG4ddKkkCnGXQM5vmZnwwYcppN0zkqWj/+2SEL3yistv/v33UW+vqJNt2DB3Heox3pKwqj0HwVq4/343I3/jRujRA2bPVgBIYKHtE4jEzrbXc+GsNi651ZdfugUuJkxwE8wiVF4nm84MJF5UezTQ5s1w+eUwcaL7/4474M47ISVhjxWFBD4T2E379jBnDpxxBvz2G3Tv7pJcFUa2SE3pkQ977qkzA4kv1RoNtGQJHH+8CwD168PkyW4IkwJAwkuuT7hxY3j7bX64fIQ77b3jDujVywWFSpQe2rdhg4abliUhUiKEVJWHaE6YABkZrgO4XTt3sNSrVwxLKnHFWhvXlw4dOlgvzZplbe3a1vZIedv+xh7WgrXNm1s7e3aVtpOa6q5nzfK0mKGk9yR4s2ZZO3p0hO99bq61Awe63wBYe+GF1m7eHPMyij+AuTaCOja5zgTYecr8VuGfyEiZx6qmHWH1agr/7wQYO9b9HCKgtYB3p8l4wYt4Fa5vv4VOneDJJ91SrX//uxs4Ua9eJU+URJN0QaDkKfOPNVpy+G8f8yiDSNme73IP9ewJ69dHtK1kX/audNOPZoyGxIQJbnDEl19Cy5bw6acwcKCSLiaphJ0nUJGi8f6ff+76vwDO5k1ernk5dbb9Dvvu69JSn3yyp/uNpmzxPuKovJEoYSl/0AJ5n7ZsgUGD4Pnn3f/nnQfjxsEee/hUAPFTpPMEAm/zr+zidZ9ASQMG7GwOBWuH9P3e2s6d3T/GWDtkiLV5eTHbf2lhalMfPdqVE9z16NFBlyg8AvmcP/vM2tat3QeWnm7t009bW1jow44lKKhPoHKXXOLWwTbGXfe4prk7PCtaj2DMGHeYtmSJL+UJU5u6mn6qztfPuaDADYXu1Mn1AxxxBMyd6xaCV/OPkIR9AiVlZsKMGe43MmPGjtPyGjVg1CiXjbRVq52Ty554IuI5BVUVpopVHeNV59vnvHy5W3r1jjtcMLjxRtcGethhMdqhhFFS9glEbNMm14b6wgvu/65dXXtqixYx26Xa1JNDTD/nwkJ46in4299g61bXxzV+fFQz5CX8kj6BnKcmTYIBA9y6qvXrw8MPwxVX6HRa4s+qVXDllfDhh+7/vn3h8cddFlBJKkmfQM5T554L33wDvXu7/Cp//as7qlq5MuiSiTiFha6yP/xwFwD22sulgHjpJQUAqZCCQKSaNoU33nATavbay6Xabd/eTTArKAi6dJJEdkvNsXgxnHQSXH+9a/654AIj51FfAAAQ7UlEQVSXAqJ370DLKeGgIBANY9waxosWueutW90Es+OPh3nzgi6dJIGSKc3P7JrLD1eMgCOPhE8+gWbNXNPlq69CkybV2ofyPyUPBYGqaNLEnRH897+w335uyF1Ghht9sWVL0KWTBFY0vPSEghlk5R7FAc+Pgvx810S5eDGcc061tq91M5KPgkB19Ojhfng33OD+f+QRl4Xx9dfJmmV3O5rSEZZU16mH/cQrXMQMutKWpWxt0dYNZx43zpO2/zDNVRGPRDKjLMhLLGcMe+qLL6zNyCiefjw95RR7WMqi4hmh8TYbOKpskxK8vDxrH3zQ2nr1rAW7La22/b7/3S4TqIfi7XsqVUeEM4YTemUxXx1zjFuG77nnyLlhCF1zpjOPI3gy9xpmTxlObp3Gux1hBTUPoNorUIl/rIUpU1xT47Jl7rZevUgbO5bmLVtGvbnK5icUTQLUXJUkEkmkCPIS72cCZR1Rf/7uevtM6lW2AOOO2ho0tisHP2brp2+r0hFWWfuozpF8LPP+6AzDQwsWWNu9+87kVoccYu0771R5czrKTy5EeCYQeCVf2SWeg0BFP6pZs6x99rr59vdjTi7+EW9tfrCd2OffdtankSfuKmsf1f0xx6oySJRKJvBAtmaNtVdcYW1KivvuNGxo7cMPVzuZoZL+JZdIg4Cag6qhrE60otNnt8j9kWCnu1FEt9xC7eXL6P1Kb1h5PNx/v8vrUoV9QPn7jUSsTvkrej/CItCmst9/hwcfdAMMtm51eawGDoThw6s15LNIUc6iotcWz7mpxD8KAtUQ0Y/KGLde65lnwjPPwJ13ur6DE0+E00/n6/Pv5p1fM8qtjMvbR3V/zC5IRf+8iiRCJRNIIMvOdrN977vPBQJws9THjIGDD/ZsN2rvlzJFcroQ5CWem4OsrULTwaZN1o4YYW39+sXNRG9ytj2u1rxyt+F1n0AsxWu5IuVrk9aWLW7ET9OmO9v9u3QJ75sncYUIm4N8SyBnjKkFPAl0AxoDK4Ah1tp3K3peVRPIxX02zvXryer9AEf+73HqkAPA8rY9aPPPYXDssQEXLrl58d2pcBubN8M//gEPPOCSEoL7zEePdm1RSkwoHoi7lcWAusBIoCVuktpZwGagZUXPq8qZQFg6KGfNsrZl+s/2ETPYZlO7+GhwZetT7TePfaCVn6qh9BmJn2co5X7/1q2zdtgwaxs12nnk37GjG/Gjz1o8RhhGBwFfA70rekxVgkCYRkEUVU6fv/2r/fHiW+0m6hVXEJvbdrD2tdeszc8PupihUroSfvppfw8KSn//nrppubXXXut2XlT5d+pk7ZQp1a78w978JrET90EAaAbkAm3LuK8/MBeY27x586hffFjOBEobPdravVI22KHcZX+lyc4Ko3lza++/39rffgu6iKFQuhI+7TR/DwpmzbK2dnqh7ZLykf1Pytm20Jidn+WZZ1r78cfe7SeE33PxR6RBIJDcQcaYNOBl4EVr7W4L+Fprx1lrM6y1GU2qMDQurEsfdukC2bUac2/qHbRN/56VN/0d2rSB1avdKlH77w9XXQXz5wdd1LhWevnG3r19XLZzyxYyv/oH6/Y7khmFJ9GzcDImLQ0uuwy++greeQf+7/882ZXy/IgXfF9ZzBiTArwCNAB6WWvzK3p8XKws5pFIOhx3e0xhIbz7Ljz6KEybtvOBxx3nVjs77zyoWzfmZQ+b0u9jzAcKfPklPPssvPyyW5YU2NaoKZ8fdRXpNw4k46y9Pd+l0n9IReJyeUljjAGex3UOn2mtzansOYkSBDz5wS5e7EaVvPgi/PGHu61ePbeIyOWXuw16MLLEr5FVcT+CqzLr17vc/c8/v+t6Ep07s+zUa+h477lsya8V0wo69O+hxEzcjQ7aEWz+AcwG6kX6nHifJxApTzurs7Otfe4517lY1NYM1h50kBt9smRJlTftVztzaNuzs7OtfeMNa3v2tLZGjZ3vfePG1g4aZO3XX1trwzU4QRIT8dYnYIxpAVwFHAX8YozZsuPS168yBKl0O3W12qXr1HFH/p9+6s4O/vY32GcfWLHCdYS0beuymo4ZA8uXR7Vpv9qZQ9WenZMDkydDnz5umdHzznOpQKyFM86ACRNgzRq31Gj79kDVPm+tNyGBiCRSBHmJ1zOBqgzNi+lwvu3brZ02zdp+/XaZjWzB2vbtrR061NrZs60tKKi0jDoTsNauX2/tiy9ae8451taps+v72bGjtY88Yu0vv1S4iWg+77h/PyR0iLcZw1UVj30Ccd8hl5vrOpHfeMMdsRb1H4Bbh/b0093l1FPLTEwWZJ9AYG3cBQXwxRcwdarriP/8c9cpX6RDBzj/fHcW0KqV57sfM8Yt6VhQ4M4e7roLhgzxfDeSRCLtE1ACuSqI+2yZ6elu6csePSAvDz76CN56ywWE1avhn/90F2PgqKNcjXvSSS6raePGuyWXi9VIm7L241twLSiABQvc0owffuheUMlgmZYGXbvC2WdDz55wwAExKoiTCMn3JJwUBMpQWSUXqh9srVpw2mnu8thj8M038P778N57rgKcN89dHnnEPb5du521c8eOzP6jHaecnlb8WseOdUsqx6Kijmlw/fVXmDsX5syBWbNcJtfNm3d9zIEHujOk7t1dAKhXz6OdV04ZPiUoag4qJdKjUb+bLWKyv5ycnRueORM++8y98BK216jFvO1HMI+jWGwOo+Yxh/PSvMP4qbAZqanG02YLT84EcnJcZ/jChe5I/+uv3SStH3/c/bGtWrmJW127wsknQ4sWnrwOkXig5qAqivRoNBb5+MsTs2aS2rVdBdi1q/s/L8+dFWRluSPlL76gxooVHMscjmUOWOALuA/YRH1WFrZm/+lt4I9WrrmkeXM3q7lZM9fXkJYWVXEqPRq21h29//yzu6xZA999B99/D6tWuTV4V68ue+P16rl2/YwMOP546NzZjagSSXIKAqXEY1OPb30QtWq5CvL443fe9vvvLHxpHj+9t4AjUhfSbN03bF+wiAabf+coOw+mz4Pp5WyvcWN32WMPd6lf3wWe2rVdv0Vq6s5LQQHk55O5fTuZubkwLxvuznaV/saN8Ntv7pKbW/FrqFHDNeu0a+eGax5xhLs++GBICSRLikhcU3NQGeJtFmbcjUay1lXIy5fDt9+6I/HVq91lzRrX/r5unXuc1+rUcUfw++wD++7rmnBatnTXbdq4Jp4oz0BEElFcpo2oingcIhqEeAtMlSoogA0b3FH877+76+xs12afk+OO6AsK3KWwkO9+SGX5qhocdEgNDmxXyzXf1K3rrhs1cmcUjRq526JIjeHn+xa6z0gSmvoEEkys+yA8r8BSU93s2qZNI9p38ZnOdO/OdPw8g4q7szWRCKmRVIorsGHD3LXfaQtilULCz9QUQaTBUJoJ8YLOBCTwyW+x6oyPxXbLO2Pye0CBzjzEKwoCEviIqFhNlPJ6uxVVvH5P9go6cEviUBCQuJitGqs+Dy+3W1nF6+fckaADtyQOBQEB/K3AwiqeKt54CNySGBQERCIUbxWvArd4QUFAJAqqeCXRaIioiEgSUxCQqCX7+PRkf/2SWNQcJFEJYnx6PKVjiKfx+fH0vkh4KQhIVPwenx5PlS5E9vr9qJzj7X2R8FJzkESlaJhkaqo/wySDSMdQkcpev18pOOLtfZHw0pmARMXvYZLxNDYfKn/9fp0pxdv7IuGlVNIS98LU9u135tKwvC/iP60nELBk+IEmw2usCr0vEg+0nkCAYnE0GG8Vizomy6cJZRIm6hiOAa877YLO918WdUyKJAYFgRjwegRNPFa4fo8SEpHYUHNQDHg9giYeR4LEWzK1qoq3ZjYRv6ljOCTCVlmFobzq15BEpo7hBBOmzsZIKtd4CBJanUtEQUBioLLKNV6OwOOxmU3EbwoC4rnKKtd4OQJPlH4NkepQEBDPVVa5xtMReJia2URiQUFAKlTVtvuKKlcdgYvED1+DgDGmMfAccBqwHhhirX3FzzJI5GLZdq8jcJH44Pdksb8D24BmQF/gKWPMYT6XQSIUj5PURMRbvgUBY0xdoDcwzFq7xVr7CfBf4C9+lUGio1nBIonPz+agg4Ht1tplJW77Cjip9AONMf2B/jv+zTPGfOND+YKyF65pLE7VrwsN6ufkbNrcqdPm7CpsIM5fX7Uk8msDvb6wOySSB/kZBOoBm0rd9gdQv/QDrbXjgHEAxpi5kcx6Cyu9vvBK5NcGen1hZ4yJKNWCn30CW4AGpW5rAGz2sQwiIlKCn0FgGVDDGNOmxG1HAgt9LIOIiJTgWxCw1mYDk4BRxpi6xpjOQC/gX5U8dVzMCxcsvb7wSuTXBnp9YRfR6/M1i+iOeQLPA6cCG4DbNE9ARCQ4cZ9KWkREYkcri4mIJDEFARGRJBaKIGCMeckY87MxZpMxZpkx5sqgy+QVY0wtY8xzxpjvjTGbjTHzjTFnBF0uLxljrjXGzDXG5BljXgi6PNVljGlsjHnTGJO943PrE3SZvJRon1dJSfJ7i6q+DEUQAMYALa21DYCewN3GmA4Bl8krNYAfcDOnGwJ3AK8bY1oGWCav/QTcjRsUkAgSPQdWon1eJSXD7y2q+jIUQcBau9Bam1f0747LQQEWyTPW2mxr7Uhr7XfW2kJr7dvAKiBRghzW2knW2sm4EWGhlgw5sBLp8yotSX5vUdWXoQgCAMaYJ40xW4ElwM/AlICLFBPGmGa4PEuaRBefysuBlUhnAkkjUX9v0dSXoQkC1tqBuDxDJ+AmneVV/IzwMcakAS8DL1prlwRdHilTxDmwJL4l8u8tmvoy8CBgjJlpjLHlXD4p+VhrbcGO0+/9gauDKXF0In19xpgU3OzpbcC1gRU4StF8fglCObASQFh/b9GItL4MfHlJa22XKjytBiHpE4jk9RljDG7FtWbAmdba/FiXyytV/PzCrDgHlrV2+Y7blAMrRML8e6uiCuvLwM8EKmOMaWqMudAYU88Yk2qMOR24CJgedNk89BTQDuhhrc0JujBeM8bUMMakA6lAqjEm3RgT+AFIVVQjB1ZoJNLnVY6E/b1Vqb601sb1BWgCfAT8jmuLXQD8Nehyefj6WuB673NxTQ1Fl75Bl83D1ziSnaMUii4jgy5XNV5PY2AykA2sBvoEXSZ9XhG/toT+vVWlvlTuIBGRJBb3zUEiIhI7CgIiIklMQUBEJIkpCIiIJDEFARGRJKYgICKSxBQERESSmIKAiEgSUxAQEUliCgIi5TDG1DbG/GiMWW2MqVXqvmeNMQXGmAuDKp+IFxQERMphXXKxEcABwMCi240xY4ArgOusta8GVDwRTyh3kEgFjDGpuJXDmgIHAlcCjwAjrLWjgiybiBcUBEQqYYw5C3gL+BA4GXjCWnt9sKUS8YaCgEgEjDFfAkcDr+JSR9tS958PXA8cBay31rb0vZAiVaA+AZFKGGMuwK0eBrC5dADYYSPwBDDUt4KJeEBnAiIVMMachmsKegvIB84D2ltrF5fz+LOBsToTkLDQmYBIOYwxx+GWkvwU6AvcARQCY4Isl4iXFAREymCMORSYgltY/mxrbZ61dgVugfJeO9YWFgk9BQGRUowxzYH3cO38Z1hrN5W4+y4gB7g/iLKJeK1G0AUQiTfW2tW4CWJl3fcTUMffEonEjoKAiAd2TCpL23Exxph0wFpr84ItmUjFFAREvPEXYHyJ/3OA74GWgZRGJEIaIioiksTUMSwiksQUBEREkpiCgIhIElMQEBFJYgoCIiJJTEFARCSJKQiIiCSx/weazFrDSm3HZAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X_new=np.linspace(-3, 3, 100).reshape(100, 1)\n", "X_new_poly = poly_features.transform(X_new)\n", "y_new = lin_reg.predict(X_new_poly)\n", "plt.plot(X, y, \"b.\")\n", "plt.plot(X_new, y_new, \"r-\", linewidth=2, label=\"Predictions\")\n", "plt.xlabel(\"$x_1$\", fontsize=18)\n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18)\n", "plt.legend(loc=\"upper left\", fontsize=14)\n", "plt.axis([-3, 3, 0, 10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "모델의 차원을 1, 2, 300 해서 비교해보자." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[-3, 3, 0, 10]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.preprocessing import StandardScaler\n", "from sklearn.pipeline import Pipeline\n", "\n", "for style, width, degree in ((\"g-\", 1, 300), (\"b--\", 2, 2), (\"r-+\", 2, 1)):\n", " polybig_features = PolynomialFeatures(degree=degree, include_bias=False)\n", " std_scaler = StandardScaler()\n", " lin_reg = LinearRegression()\n", " polynomial_regression = Pipeline([\n", " (\"poly_features\", polybig_features),\n", " (\"std_scaler\", std_scaler),\n", " (\"lin_reg\", lin_reg),\n", " ])\n", " polynomial_regression.fit(X, y)\n", " y_newbig = polynomial_regression.predict(X_new)\n", " plt.plot(X_new, y_newbig, style, label=str(degree), linewidth=width)\n", "\n", "plt.plot(X, y, \"b.\", linewidth=3)\n", "plt.legend(loc=\"upper left\")\n", "plt.xlabel(\"$x_1$\", fontsize=18)\n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18)\n", "plt.axis([-3, 3, 0, 10])" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import mean_squared_error\n", "from sklearn.model_selection import train_test_split\n", "\n", "def plot_learning_curves(model, X, y):\n", " X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=10)\n", " train_errors, val_errors = [], []\n", " for m in range(1, len(X_train)):\n", " model.fit(X_train[:m], y_train[:m])\n", " y_train_predict = model.predict(X_train[:m])\n", " y_val_predict = model.predict(X_val)\n", " train_errors.append(mean_squared_error(y_train[:m], y_train_predict))\n", " val_errors.append(mean_squared_error(y_val, y_val_predict))\n", "\n", " plt.plot(np.sqrt(train_errors), \"r-+\", linewidth=2, label=\"train\")\n", " plt.plot(np.sqrt(val_errors), \"b-\", linewidth=3, label=\"val\")\n", " plt.legend(loc=\"upper right\", fontsize=14)\n", " plt.xlabel(\"Training set size\", fontsize=14)\n", " plt.ylabel(\"RMSE\", fontsize=14)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 80, 0, 3]" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAESCAYAAADTx4MfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzt3Xl4VOX5//H3DQlLQBCQRVFEBYoookBdqnyl7qjVX8VdtFrX+tXaWr5qL21Bq9W2Vqu1rdC6i1VrRSm1rlUrVlsDihRFlFXZQQUSliTk/v3xzHQmwySZTGbL5PO6rnNlzjLn3HPm5Nxznuec5zF3R0REpKna5DsAERFpmZRAREQkLUogIiKSFiUQERFJixKIiIikRQlERETSogQiIiJpyWkCMbNHzWyFmW0ws/lmdlEDy37fzFZGlr3fzNrnMlYREWmY5fJBQjPbB/jE3bea2WDgNeAEd5+ZsNyxwMPAEcByYCrwtrtfl7NgRUSkQTm9AnH3ue6+NToaGfZKsui3gPsiy38B/AQ4PzdRiohIKkpyvUEz+y0hGXQE3gWeS7LYPsCzceOzgd5m1sPd1yWs7xLgEoBOnTqNGDx4cDbCFhEpWjNnzlzr7j2b+r6cJxB3v9zMrgQOAUYDW5Ms1hlYHzcefb0DUCeBuPtkYDLAyJEjvby8PNMhi4gUNTNbks778nIXlrtvc/cZwK7Ad5IsUgF0iRuPvt6Y7dhERCQ1+b6Nt4TkdSBzgWFx48OAVYnFVyIikj85SyBm1svMzjSzzmbWNnKn1VnAK0kWfxi40MyGmNmOwA3Ag7mKVUREGpfLKxAnFFd9BnwB3A58z92nmVk/M6sws34A7v488HPgVWApsASYkMNYRUSkETmrRHf3NcDh9cxbSqg4j592B3BHDkITEZE05PwuLBGRptiwYQOrV6+muro636G0SKWlpfTq1YsuXbo0vnATKYGISMHasGEDq1atom/fvnTs2BEzy3dILYq7s3nzZpYtWwaQ8SSS77uwRETqtXr1avr27UtZWZmSRxrMjLKyMvr27cvq1aszvn4lEBEpWNXV1XTs2DHfYbR4HTt2zEoRoBKIiBQ0XXk0X7b2oRKIiIikRQlERETSogQiIlLARo8ezRVXXJHvMJLSbbwiIhk2evRo9t13X+65555mr+vpp5+mtLQ0A1Flnq5ARKR1mDgx3xHUkepdUd27d2eHHXbIcjTpUQIRkdbhxhtzspnzzz+f119/nd/85jeYGWbGgw8+iJnx3HPPceCBB9KuXTteeOEFFixYwMknn0yfPn3o1KkTw4cPZ/r06XXWl1iE1b9/f26++WYuvfRSunTpwq677sovfvGLnHy2REogItJymKU/NOf9TXDXXXdxyCGHcMEFF7BixQpWrFjBbrvtBsC1117LzTffzLx58zjooIOoqKhgzJgxvPTSS8yePZuxY8dyyimnMG/evAa3ceeddzJ06FBmzZrFtddeyzXXXMNbb72V1i5tDiUQEZEM6tq1K+3ataOsrIw+ffrQp08f2rZtC8DEiRM55phj2HPPPenZsyfDhg3jsssuY+jQoQwYMIDrr7+e4cOH89RTTzW4jWOOOYYrrriCAQMGcOWVVzJgwABeeSVZzxjZpUp0EWk53NN/r1nz3p8BI0eOrDNeWVnJjTfeyPTp01mxYgXV1dVs2bKF/fbbr8H1JM7fZZddstJUSWOUQEREcqRTp051xsePH8/zzz/P7bffzsCBAykrK+O8886jqqqqwfUk3pVlZtTW1mY83sYogYhI6zAhd33StWvXjm3btjW63IwZMzjvvPMYO3YsAFu2bGHBggUMGjQo2yFmhOpARKR1yOFtvP379+ff//43ixcvZu3atfVeHQwaNIipU6cya9Ys5syZw7hx49iyZUvO4mwuJRARkQwbP3487dq1Y8iQIfTs2ZOlS5cmXe6OO+6gV69ejBo1ijFjxnDwwQczatSoHEebPvM8Vypl0siRI728vDzfYYhIhnz44Yfsvffe+Q6jKDS0L81spruPTDqzAboCERGRtCiBiIhIWpRAREQkLUogIiKSFiUQERFJixKIiIikRQlERETSkrMEYmbtzew+M1tiZhvN7D0zG1PPsueb2TYzq4gbRucqVhERaVwu28IqAT4FDgeWAscDT5rZUHdfnGT5t9z9sBzGJyIiTZCzKxB3r3T3ie6+2N1r3X06sAgYkasYRERagsReCAtV3upAzKw3MAiYW88iB5jZWjObb2Y/MjO1HCwiUkDyclI2s1JgCvCQuyfru/EfwL7AEmAf4AmgBrg1ybouAS4B6NevX7ZCFhGRBDm/AjGzNsAjQBWQ9BrN3Re6+6JIUdcc4Cbg1HqWnezuI919ZM+ePbMWt4hIKiZPnkzv3r236w/k7LPP5qSTTmLBggWcfPLJ9OnTh06dOjF8+HCmT5+ep2ibJ6cJxMwMuA/oDYx19+oU3+pA03q2F5GiY5a/IVWnnXYa69ev56WXXvrvtIqKCp599lnGjRtHRUUFY8aM4aWXXmL27NmMHTuWU045hXnzkhXGFLZcX4H8Dtgb+Ia7b65vITMbE6kjwcwGAz8Cns1NiCIi6evWrRvHH388U6ZM+e+0Z555hpKSEk466SSGDRvGZZddxtChQxkwYADXX389w4cP56mnnspj1OnJ5XMguwOXAvsDK+Oe7zjHzPpFXkcrMY4E3jezSuA54Gngp7mKVUSkOcaNG8czzzzDpk2bAJgyZQpjx46lQ4cOVFZWcs011zBkyBC6detG586dKS8vr7fTqUKWs0p0d19Cw8VQneOWHQ+Mb+o2amrSCExEWoyW0v/dCSecQElJCc8++yxHHnkkL7/8Mi+88AIQeit8/vnnuf322xk4cCBlZWWcd955VFVV5TnqpiuqW2Nnz4bychjZ5H61REQyp3379px22mlMmTKFtWvX0qdPH0aPHg3AjBkzOO+88xg7diwAW7ZsYcGCBQwaNCiPEaen6NrCuvfefEcgIhKKsV544QXuvfdezjrrLNq0CafbQYMGMXXqVGbNmsWcOXMYN24cW7ZsyXO06Sm6BPLHP8KXX+Y7ChFp7UaNGkXfvn354IMPGDdu3H+n33HHHfTq1YtRo0YxZswYDj74YEaNGpXHSNNn3lIKFVNgNtKhnLvvhiuvzHc0ItJcH374IXvvvXe+wygKDe1LM5vp7k0u/C+6KxAIxVhFlBdFRApSUSWQSBEjH3wAM2bkNxYRkWJXVAmke/fY69/9Ln9xiIi0BkWVQOKbwnrqKVi9On+xiIgUu6JKIGVlcPDB4XV1NTzwQH7jEZHmK6YbffIlW/uwqBIIwGWXxV5PmgS1tfmLRUSap7S0lM2b6202T1K0efNmSktLM77eoksgp58O3bqF14sWwYsv5jceEUlfr169WLZsGZs2bdKVSBrcnU2bNrFs2TJ69eqV8fUXVVMmAB07wvnnw513hvHf/haOOy6vIYlImrp06QLA8uXLqa5OtfcHiVdaWkrv3r3/uy8zqageJBw5cqSXl5czfz585SthmhnMnw8DBuQ3NhGRQqUHCeMMGgTHHx9eu8Ovf53feEREilFRJhCA730v9vr++2H9+vzFIiJSjIo2gRx1FAwZEl5XVIQkIiIimVO0CcSs7lXI3XdDQh/3IiLSDEWbQADGjYMePcLrxYth2rS8hiMiUlSKOoF07AiXXhob/9Wv8heLiEixKeoEAnD55VASedrlH/+AWbPyG4+ISLEo+gTSt294Oj0q+oChiIg0T9EnEICrroq9fvJJWLs2f7GIiBSLVpFADjwwDABVVfDgg3kNR0SkKLSKBAJ1K9MnT1aXtyIizdVqEsgZZ0C0LbGPP4ZXX81vPCIiLV2rSSCdOsG558bGJ03K/DZqa0PDjTU1mV+3iEihaTUJBOoWY02dmvkub889N7QCfNRR6shKRIpfzhKImbU3s/vMbImZbTSz98xsTAPLf9/MVprZBjO738zaNzeGoUPhkEPC60x3efvxx/DYY+H166/DK6/Uv+yKFeFusCuvhAMOCN3wzpuXuVhERHIhl1cgJcCnwOFAV+AG4Ekz65+4oJkdC1wHHAnsDuwJ3JiJIBIr0zN1pZCYjO69d/tl5s+HYcNgl11Cncw998B778G//gXnnKO2ukSkZclZAnH3Snef6O6L3b3W3acDi4ARSRb/FnCfu8919y+AnwDnZyKO00+HHXcMrxcubPhKIdHKlaGb3EQ1NfDQQ3WnPfssLFtWd9r//i+8/37ydc+alZ16GRGRbMlbHYiZ9QYGAXOTzN4HmB03PhvobWY9kqznEjMrN7PyNWvWNLrdjh3hvPNi442dtFesCB1SHXYY7Lwz7Lkn/OY3dZd54QVYvrzutG3b4A9/iI3//e/w8svRmOHww+GGG+peEV1/febrZUREssbdcz4ApcDLwKR65i8AjktY3oH+Da13xIgRnoq5c93DkyDubdq433ff9st8/LH7sce6m8WWjQ4dO7ovWhRb9pRTYvOGDIm97tvXvbravbbW/cADY9MvvDD23s2b3QcMiM07//zYvMpK9x/8wH333d333NP9q18NMY0b5/7MMyl9VBGRRgHlns65PJ03NWcgXPU8DjwHlNazzGzg9LjxHpEE0qOhdaeaQNzdjzmmblK4/fbYvCefdN9hh+0TR/xw0klh2VWr3EtKYtNnz3bv2TM2PnVqGKLj7du7L11aN5a//a3uumfMcJ85033vvRuO4dJL3bdsSfkji4gklW4CKcnZpQ5gZgbcB/QGjnf36noWnQsMA56MjA8DVrn7ukzF8sgjcNxx8O67YXz8+NBGVkVFqNyOxRyKm844A3bbDU48MUyfNg2mT6/73MfXvgb77QcXXgi33Ram/eY3oRgs6vLLw3riHXccnHIKPP10GD/jjFCUVV3f3omYNClUwj/1FOy6a3r7QUQkbelknXQH4F7gbaBzI8sdB6wEhgA7An8Hbmts/U25AnF3//JL91Gj6v+Fv8ce7u+8U/c9F15Yd/7gwbHxP/whLLNoUfKir86d3VevTh7LkiXuZWXbv6dTJ/fJk90/+sj9rbfcp093P+OMusv06uX+2mtN+ugiIv9FoRdhEW7HdWALUBE3nAP0i7zuF7f81cAqYAPwANC+sW00NYG4u2/a5H7iidufuE85xf2LL7Zffs0a9+7dk5/oN2yILXf88dsvM2FCw7Hcemvd5Q86KNTFJKqtdb/jDve2bWPLtmnjft11uSnS2rrV/f77QxHa6ae7H3WU+/DhoZ7n7rvdq6qyH4OIZE66CcTCe4vDyJEjvby8vMnvq66Gb38bHn0USkvhl7+EK64IxVfJTJ5c9+4pgAsugPvvj41Pnw7f+EZsvEePcNtwtD2uZKqq4NRT4Y03QhP0118f4qnPa6/Firui9tkn3FI8ItnN0Slyh6VLoX176NOn7vQ//xl++EP45JP63z9wYCjC++Y3wz789NNwF9p774W72M48E3r2TD++5li3DrZuDc/iJFq5MtwZN20a7LAD7L13GAYPDk3hVFWFY6WqCjp3DsWGu+4a+pwpK8v9ZxHJFDOb6e4jm/w+JZDAPdSH7LJL3ZNmMrW14Yn2f/87Nu2NN8KtvlHbtoWT5dKlYfyXv4Srr049lvqSV6LPPgu3Jcc3Dtm2bXjKfcSIcHLbdddwglu+PDybsmwZbNwYmrg/9NCQKCDU5Tz1FNx+O8ycGabtsUeo2xkxAv70J3jrrdTiAhg+HDZs2D7ZlJSEuqTzzw8xbN4MlZWwaVNImLvtBjvtlPo+aMjWrfDmm/Dii/DSS7EeKUeMgIsvhrPOgg4d4O674aabwn5JR9++cPzxcPLJcMQR4XZxkZZCCYTmJZCmmjkznPxqa8Ov/jlztj/hvfhiuLI56CCYMiWcqLKhthZ+9zu45ppwEm6KTp3CCW/o0BDjkiWpvW/HHeF734NBg6B7d+jWLTThcsstsH590z9Dog4doF+/cKWyeXP4XJs2hcS8334hqR16aPgOOnXa/v3Ll8Ndd4UbDRqKp6wsbCPVz52KsjI4+mj46ldDywPDhoUknomEKJINSiDkNoFAeIDwb38LxV0DBuRss/X65JNQlDZjRvPX1b49tGkTTt7x2rULn/f660PiSLRuXUgi99wTu4usY8dwdXbggaHY7c03mx9fVNu2IYEfcEC44hk4MFwpPfpo8rvY2rYNQ1VV8vUNHgx33BGuKObNgw8/jN1p165dGEpL4csvw9XfZ5+FK7rGWmDu1i0cI3vsEYb+/cOVWFVVbKitDfvcLAxdu4b3DBwYrozbtKqmT9P3xRdQXh7uqNyyJQzRq9yKitjQpUv4vqNDt27hvevWhTsyq6rC97TbbuGYKWZKIOQ+gRSibdvCCfSdd8KJLXqCq6wMJ6G+fcNgFp6MX7iw7vt32ikkiMsvDyew994LJ/zycujVC7773XACbMzixfDPf4Zf3gcdFCsmg3BCfvjh0KDk+vXhCqKsLPzdtCkU+23YkLl90r9/KF465hgYPTqc7KdMgd//Hv7zn7BM164wcWJobqaheqdktm0LRXvTpoUmbObPz1zsUR06hP0eLWLdeefwt2fP8J3ttFOoZzML8USH2towuIe/ZiERRYdosopq3x52370wT5gbN4ak/sEHIYH36BH77Fu2hOP5hRdC0XI6bdyZJe9orrQ07Pu99gr/Az16hKF797CdTZtCgtq8ORzHvXrFhrKyUIwa/ZHQpk347vr2DfVsEN73ySehQdZPPw1X97vsEht23DH7V69KICiBpOOTT+D558M/5QEHwLhxhVF+v359SCRffBH+CaPD1q2h8ck33wzD3GQN4UR87Wvwf/8HJ52U/Ne7ezjZzJ0bbnjIVMX+vHmhTuz992H27DBkMiFmW4cOMGRIKNYcMiScQKurQ+KtqWm8N89osoreIwjhaqukJCSmmppQZLhoUfih8emnYXrHjrGhXbuwfGlpmLdqVaw+sVh07hySSPxzYsm0aROulrp2rfs3OuywQ+xHWFlZ2GeJV1s1NeEHU32UQCjiBDJxYhhkO+vXhxP0rFnhJogPPww3L1x5ZagjKQTu4Upw0aLYED0Ztm8fKxpr0yZ28q2thTVrYr9M12XsEdriZxa7gaRDhzC0bx9O2NGTdqdOYf9++GFI+B99FK4EunaNXc21bRuu0Fetyvcnar62bcOPgPquZJRAKKIEEk0Y1dWhHGj0aPj881BIK63SF1+EX+0rV4ZhxYrwd+3a2PD552HZaD1PdIgWW0VPHtEEFR3iffllWG8hKikJN20MGQK9e4fPu3ZtSARVVeHOyGOOCR26Jaufa0h0X5QkaZtj48aQSBYvDtuL1pF88UVYvqwsXDV16BB++a9eHYZVq8IVc/yPhKqq8N0tXx6K3SB8N3vsEeq6+vcPV6vLl8eGiorm7rlg8+b6b+RJN4HktCkTScGmTXDjjaFw/qWXYmUfRx8d2p7v2jW19bSUq5ZCjTMxrjzH2a1b7n4/rFsX7iqcMydcAZmFYpFoMVQqlfmJ9SvbtoVilGifN7vuGk6We+wR6lzMYvUImzeH307RYrPq6tgNBU2tn0pVtE6ojsh3vsMOkbvppk7c/hhI87hwD8n6yy/DlVK7dvUvW10dTgPr14dhw4bYsH59SHDxdypGn1NKHLJyE0Y6Tx8W6pDOk+h5Ud8j6bW17kcfvf0j7PHDD3/Y8Lpra92nTQvLFqLEz14IccbHtHix+z33hLjuuiu8njQpjG/blvw9haRQ42qJosdmTY37+vXbHwPxy0RlYv8nrqOp42mg0JsyycXQYhJIspPmhAnJE0Z0+q67hr9HHRXagE92EL39tvshh8Tee9VV4eAvJBAa9zrtNPc+fcL4c8+FxOeenxMguP/lL+4nnJC8EbPosMsu7t/5jvvzzzd+4sjCP3mDtmxxf/317JzQWovovpo50/2ss8K+7NCh7jHQvr37V77iftxx4VgA93/9K/xPumfmuIiuY8sW9w8/DOOVldvPr288je9cCaQlJJAvvwwdekBoUCrehg3hBBU9UONBaE2xd+/wOtp416JF7gsXhjbkG7pque66/J9I5s1z33ffhuM8//zkyTWb/vKXhmNqaLj44nDS3rYt+Xe2ZUv4XtesCePRJBnV3CQzYUI4pn72M/edd47FdeihoX+CBQuUUFJVWxv2Vf/+6R8P0f/Pb3/b/eqr3X/ykzA+a1askbro97F1a/ifBvc//tH9t791v+UW9+9/P0zba6/QwF38+rt0cR80KLz++tfDD57TTgvjd94Z+oVYtCj5/1Aj37sSiBd4AvnRj5IfdNEvdvz4MB7teSpedJk5c5K35Bj/6+iHP4xdbvfoEf5GT9z5Ev1sicPll9eNMzr88Y+xX3TZOuHVd8U3fnyYnywhXHJJ8vd06RL+jh4dOnHp1i35cj16uB95ZNjGlClh2pIlsR8Tqf563bbN/d13w/KNdVwD7jfcEJqVjp4k09lXmZRsfblIbMn2Z3W1+2OPuQ8bFttfnTvHTuSVlbHED+4bN4b/w2nTQoum4L7TTo1/ByUlsf/DPfbYPjlkehg61H3s2HA+eOCBRr93JRAv8AQSPSDjT5ZXXRUOzrlzwwFmFv7R6/tnqu+klywpgfsnn9Rtb/7VV3P3eaMqK0OzwhC6VEx2Yr7uuuSfY+TI1E546RQTvP566Foyuq3GyraTjR92WOb+4aO9kP385+GKMv5kv369+3vvhfEzz6zbYxm4H3FEKFaLvufUU5NvI5pspk8PzVDXt28SNZbYmmLDhrC+adNC/wQffxyuopq6jVRimDAh7JOFC93/9KewjX/8IxQLrVgRxnfcseH/oXjJjsXotI0b3d98M4x/4xvpHQOHHhquJsH9P/+pe9VSW+v++eex7lRffjlcPT/xRN3/lYaGBiiBeAEnkOgBVVoaK6cuLQ1/b7stdtl86aWpr7Oxg3vChPoTzo9/nJtffDU1sQTWv7/7ypUNnyg+/zzMHzGibryHHeb+5z+H9UWXr60NRTRPPhmWWbmy7i/F2lr3devcy8t9uwRx8cWxk+lFFyX/52osCUXfs21b6EIS3F96Kfw6Xb06+fezdGlIAKmcTDp1Cn8buuJMPOHFx+UeTkANnVwGDgx/FyzY/nOuXh3qqqLFijNmbF8MU9++qc/Wre6HH17/Zzj77HDTQvTqKpX9n2z+/PmhCA9i9WwNDQMHhs/a2DZTuXKq7/+ysjLUlUAozq1vXza0jqaMv/NO3b62kx0rdd6SxQQC/BQoixs/HugYN94FeDidADI5FGQCiSYMiPU4NWGC++OP162w7d7dfe3a1Nebyq+jqJqaugdQNKFlW/Sqa8cd3T/4IExr7GQTPcCTHfjRX4tnnRU6nE+c361b7CaCrl3rzuvSJdzh9sMfxqadcUbdpNQUqZ446huPn1ZT4/7pp2E8viiloeHHP06+zvriqq2NJdNkCWXgQPcrrgivv/71+re7227h7xtvxDp+SeVYisbblOHrXw/f1zPPhPGpU93vvdf9xhvD+OTJ7i+8EE7I4P7Tn7rvv3/TtxN/zDVXJo6L5t6FlUpS2m52dhPINqBX3PgGYM+48d7AtnQCyORQcAlk9epY+ej3v7/9/Lvvjh3AkyY1bd1NrYCFcMkbf8k+aVIoPkh1HU3x4IOx7TSl6CzZP8Pdd7vvuWd6J4b6hhNPzGzPV8252yZxvLY2FGFAKGqJv7Jq6P2pxNVQgo4fSkvdx4yJlfP36pV8uWil7gcfNHwnXXQ90bua4kV/4CTrhS1TQypFUtm4Ks/H3XmpHGvbzc5uAqlNSCAblUAa0dBtuanMz0Y89W1z333dX3wxc/9Q9VWap7O+hk54P/5xbJnaWvdly9z//vcwvnp13RPv1Vfndn+noqm/JDPx/STbRmM3eES3+/nnsWeMEm98iA777Rf+Ll0a28ZZZ8UqjaNl9omSfdb6ivuidU/1Xa1df33962xovJjl8y4sJZA0ffvbsYO6Ibk+kKNl48mKKo44IhxsL7/c+AmrvoPynHPCe6O3LDdHOpfnxXLiyMWv1VT2TX3fwdKloVi2viuUAQPcL7wwNn7jjcnX19A20h1PNi3Xz+a0IEoghZhAopf3hZZA4rd51VXb/+PHD2PHuj/6aOggPpV/2uiVTIcOyZ9DyFTc8TJRRtxapbNvkr2nsTqOM8/c/jmY5sSVStxKECnLRQL5MXB1ZNgM3BI3PkEJJMGqVWH3lpWF+/Abko8Dvb5y0tNPT34CiBZBDBkSiryiRRWzZsXev2lTeAAK3G+9tf7tZDrufKyjWOWqWCzTcek7bZZ0E0hKrfGa2WKg0QXdPYWuhrKnoFrjnToVTjkl9Bf7yiv5jiY1iT3qmMFxx4UOQxozfjy8/XboDnHffUP76tlq+U4KW7LjKIXzjORPVlvjdff+TY6otYv2K3vYYfmNoykmTNh+2t/+Fv5+/nnoJGHOnNDudU1N6HShpCS8/sMfQtOiAJMnK3m0ZsmOIylK6mU5W954I/xtSQkksVnq+BNBtIOFffeF/fYLHZBD6Hbv2GNjyeOyy0LHDNJ6NXQcSVFJKYGY2TAz+3rCtHPMbKGZrTaze82sgRbtW5nKylCE07YtHHxwvqNJX2MnggkT4IknQkfUUffeG4osCrGPD8kPHQtFK9U6kL8A/3b3n0TGhwDvAa8C84BvAz+Pzs+XgqkD+fvf4cgjQxFPIcSTKyrrFmmR0q0DSbUIazjwYtz4mcAH7n6su18FfA84o6kbL1otsf5DRKSJUk0gPYDlceP/A/wlbvw1oF9jKzGzK8ys3My2mtmDDSx3vpltM7OKuGF0irHmX2tNICrrFmlVUk0ga4C+AGbWFhgB/CtufjvCsyKNWQ7cDNyfwrJvuXvnuOG1FGPNr5oaeOut8PrQQ/MbS66prFukVUk1gbwGTDCzPYEfRKa9Gjd/CLC4sZW4+9Pu/gywrgkxtizvvw8VFbDXXrDzzvmORkQka1J6DgT4EfAy8AmhZd7vuntl3PxzgUw/LXeAma0FPgceAW5195rEhczsEuASgH79Gi1Fy77WWnwlIq1Oqg8SLjazwcA+wBp3X56wyAScZ9RuAAAU8ElEQVTgswzG9Q9gX2BJZJtPADXArUlimwxMhnAXVgZjSE/0+Y9Ro/Ibh4hIlqX8IKG717j77CTJg8j0jBVLuftCd1/k7rXuPge4CTg1U+vPGnddgYhIq5HSFYiZXZ3Kcu5+R/PCqX/VgGVp3ZmzcCGsXBleDxqU31hERLIs1TqQ24G1QAX1n8gdaDCBmFlJZJttgbZm1gGoSazbMLMxwCx3XxUpOvsR8KcUY82faPEVhIfqRESKWKpFWO8AZcDrwLnuvkeSYc8U1nMDoSn464Bxkdc3mFm/yLMe0VrwI4H3zawSeA54mtAve+GaOBEuuCA2bqYmPUSkqKXUlAmAme0DXEg48X8B3Ac85O6rshde0+S1KZPqaujVK9aooJr0EJEWIttNmeDuc939asIDhdcDo4HFZvasmbVv6oaLzj//GZLH4MH5jkREJCea3Jy7u1e7+1PArwhPo58AdMx0YFmRzeKkv/41/D3hBDXpISKtQpMSiJn1N7ObzGwJ8HvgDWCgu3+Zlegy7cYbs7fu6dPD3xNPVL2HiLQKqfYHco6ZvQJ8AHwFuBTo7+4/cvdF2QwwYxZFwlyzJvPrXrgQPvwQunZtfe1fiUirleptvI8ASwnFVmsJbV8NsYRbVbP4HEj6Jk6se+XRq1f4O2FC5q4UosVXxx6rrlxFpNVINYEsJTzncVYDyzT6HEheTJwYhosugvvuCyf4RYugb9/MbSO+/kNEpJVIqQjL3fvX8+zHfwfg8CzH2jyVkbYfq6vhrrtSf19jVykVFfDqq+GZjzFj0g5PRKSlafJdWInMrI+Z3QPMz0A82VMZ13jwvffC+vWpva+xivdXXoGqKjjoIOjZM/34RERamFQr0Xc0sylmtsbMlpvZdy2YACwEDib0i164ogmkSxfYuBEmTWp4eXe48srY6/rE330lItKKpHoF8lNCN7YPEfrnuBOYRii2GuPuI939j9kJMUOiCeR73wt/f/Ur2Lo1+bITJ0KbNnDPPWG8TZvkzZK4w+OPh9dKICLSyqSaQE4ALnD38cBJhAYVF7j7Ee7+etaiy6RoAjnlFBg6FFasgClTktdxXHMN7LZbbLxHj3D7b+Ky774b6kB23RX22y9bkYuIFKRUE8guhGdAcPeFwBbCg4QtRzSBdO4cEgTAz3+evI7j9tvh009h2LAwvm4d/N//bb/cww+HvyecoNZ3RaTVSTWBtAGq48a3AZsyH04WRRNIp05wxhnQrx989NH2y336Kdx2W3h9111wxRXQvj08+CC8HrnYmjAhJIzo3VyTJqnlXRFpdVJ9DsSAR80sWmnQAfi9mdVJIu5+UiaDy6j4BHLLLbB0aWxe9OphwgT4859h82Y49VQ4/PAw9OwZ5l12GXzzm7BsWVi+pARqatTyroi0Sik1525mD6SyMne/oPGlsqfe5tzdoW3b8LemJryuqQnFUr/6VVjmyCPh8sth7NhwxTFvHvTvH+Zt3RqKs+KvWDp1gqeeCs9+KIGISAuWbnPuKV2B5DsxNNvmzeEk36FDSB4Qrh7uvDMkkJ49w/Mcr7wS5o0fH0seEBLK734HRxwRxnfaKTx9fuCBanlXRFqtZj9I2CLEF18lmjABzj237rRbbqlbpzFxYix5AKxdGx4cjDaTIiLSCqXcI2FLUG8R1uLFsMceoeJ8yZLkb66tDQ8Fnnxyw0VSZiqyEpGikvUeCVu0hq5Aotq0gZMK9x4AEZFCowSSqLE6DdV5iIgASiDba6xOQ3UeIiKAEoiIiKRJCURERNKiBCIiImlRAhERkbQogYiISFpymkDM7AozKzezrWb2YCPLft/MVprZBjO738zap71hJRARkYzL9RXIcuBm4P6GFjKzY4HrgCOB3YE9gUY6J2+AEoiISMblNIG4+9Pu/gywrpFFvwXc5+5z3f0L4CfA+WlvWAlERCTjCrUOZB9gdtz4bKC3mfVIXNDMLokUi5WvWbMm+dqUQEREMq5QE0hnYH3cePT1DokLuvtkdx/p7iN79uyZfG1KICIiGVeoCaQC6BI3Hn29Ma21KYGIiGRcoSaQucCwuPFhwCp3b6zuJDklEBGRjMv1bbwlZtYBaAu0NbMOZpasV8SHgQvNbIiZ7QjcADyY9oaVQEREMi7XVyA3AJsJt+iOi7y+wcz6mVmFmfUDcPfngZ8DrwJLgSVA+u2oK4GIiGRcSn2iZ4q7TwQm1jO7c8KydwB3ZGTDSiAiIhlXqHUgmaUEIiKSccWfQNyVQEREsqD4E0hVFWzbBqWlYRARkYwo/gSiqw8RkaxQAhERkbQogYiISFqUQEREJC1KICIikhYlEBERSYsSiIiIpEUJRERE0qIEIiIiaVECERGRtCiBiIhIWpRAREQkLUogIiKSFiUQERFJixKIiIikRQlERETSogQiIiJpUQIREZG0KIGIiEhalEBERCQtrSeBlJXlNw4RkSLTehKIrkBERDKquBNITQ1UVYEZdOiQ72hERIpKThOImXU3s6lmVmlmS8zs7HqWm2hm1WZWETfs2eQNxl99mDUrdhERqaskx9v7DVAF9Ab2B/5qZrPdfW6SZZ9w93HN2pqKr0REsiZnVyBm1gkYC/zI3SvcfQYwDTg3axtVAhERyZpcFmENAmrcfX7ctNnAPvUs/w0z+9zM5prZd9LaohKIiEjW5DKBdAY2JExbD+yQZNkngb2BnsDFwI/N7KxkKzWzS8ys3MzK16xZU3emEoiISNbkMoFUAF0SpnUBNiYu6O4fuPtyd9/m7v8E7gJOTbZSd5/s7iPdfWTPnj3rzlQCERHJmlwmkPlAiZkNjJs2DEhWgZ7IgabfRqUEIiKSNTlLIO5eCTwN3GRmnczsUOBk4JHEZc3sZDPrZsGBwHeBZ5u8USUQEZGsyfWDhJcDHYHVwB+B77j7XDMbZWYVccudCXxCKN56GPiZuz/U5K0pgYiIZE1OnwNx98+B/5dk+huESvboeNIK8yZTAhERyZribspECUREJGuUQEREJC1KICIikhYlEBERSYsSiIiIpEUJRERE0qIEIiIiaVECERGRtCiBiIhIWpRAREQkLUogIiKSFiUQERFJS/EmkNpa2Lw5vC4ry28sIiJFqHgTyKZN4W/HjtCmeD+miEi+FO+ZVcVXIiJZpQQiIiJpUQIREZG0KIGIiEhalEBERCQtSiAiIpIWJRAREUmLEoiIiKRFCURERNKiBCIiImlRAhERkbQogYiISFqUQEREJC05TSBm1t3MpppZpZktMbOz61nOzOxnZrYuMvzMzKzRDSxfHnutBCIiklUlOd7eb4AqoDewP/BXM5vt7nMTlrsE+H/AMMCBl4BFwL0Nrn3FCpg5M7yOJhMlEBGRrMhZAjGzTsBYYF93rwBmmNk04FzguoTFvwX80t0/i7z3l8DFNJZAAEaOrDveuXNzQxcRkSRyeQUyCKhx9/lx02YDhydZdp/IvPjl9km2UjO7hHDFQg9gZOICxxwDwCpY8RksT5ydJzsBa/MdRAoUZ+a0hBhBcWZaS4nzK+m8KZcJpDOwIWHaemCHepZdn7BcZzMzd/f4Bd19MjAZwMzK17pvl0MKjZmVu+LMmJYQZ0uIERRnprWkONN5Xy4r0SuALgnTugAbU1i2C1CRmDxERCR/cplA5gMlZjYwbtowILECnci0YSksJyIieZKzBOLulcDTwE1m1snMDgVOBh5JsvjDwNVm1tfMdgF+ADyYwmYmZyreLFOcmdUS4mwJMYLizLSijtNyWSpkZt2B+4GjgXXAde7+mJmNAv7m7p0jyxnwM+CiyFv/AFyrIiwRkcKR0wQiIiLFo3ibMhERkaxSAhERkbQURQJJtY2tXDOzK8ys3My2mtmDCfOONLN5ZrbJzF41s93zFGN7M7svst82mtl7Zjam0OKMxPKoma0wsw1mNt/MLoqbVzBxxsU00My2mNmjcdPOjuzrSjN7JlIvmK/4XovEVxEZPirQOM80sw8jsSyI1JkWzHcet/+iwzYz+3Xc/IKIMxJLfzN7zsy+MLOVZnaPmZVE5u1vZjMjcc40s/0bXaG7t/gB+CPwBOEBxMMIDx7uUwBxnUJo0+t3wINx03eKxHga0AH4BfB2nmLsBEwE+hN+UJxIeDanfyHFGYl1H6B95PVgYCUwotDijIv3ReAN4NG4+DcC/xM5Vh8DHs9jfK8BF9WznwsiTsINN0uAgyPHZ9/IUKjfeWfCc2z/ExkvqDiB5wh3tHYA+gBzgO8C7SL7+ftA+8i0JUC7BteX7x2egR3SidBA46C4aY8At+U7trh4bk5IIJcA/0z4DJuBwfmONRLP+4R2ywo2TkLTCyuA0wsxTuBM4MlIco4mkJ8Cj8Uts1fk2N0hTzHWl0AKJk7gn8CFSaYX3HceieNbwEJiNygVVJzAh8DxceO/ACYBxwDLonFH5i0FjmtofcVQhFVfG1tJ284qEHXa+vLwjMwCCiBmM+tN2KdzKcA4zey3ZrYJmEdIIM9RYHGaWRfgJuDqhFmJcS4g8uMnd9Ft51YzW2tmb5rZ6Mi0gojTzNoSmrfraWafmNlnkSKXjklizPuxGfEt4GGPnIEpvDh/BZxpZmVm1hcYAzwfief9uLgh/JBsMM5iSCBNaWOrUCS29QUFELOZlQJTgIfcfR4FGKe7Xx7Z/ijCg6lbKbw4fwLc55HWpOMUWpzXAnsSioQmA38xs70onDh7A6XAqYTve3/gAOAGCifG/4rUbRwOPBQ3udDi/AchKWwAPgPKgWdIM85iSCBNaWOrUBRczGbWhlD0VwVcEZlccHECuPs2d58B7Ap8hwKKM1LxeBRwZ5LZBRMngLv/y903uvtWd38IeBM4nsKJc3Pk76/dfYW7rwXuoLBijHcuMMPdF8VNK5g4I//jzxN+eHUi1M90Izy0nVacxZBAmtLGVqGo09aXhb5S9iJPMUee/L+P8ItvrLtXR2YVVJxJlBCLp1DiHE24AWGpma0ExgNjzWwW28e5J6HCcv72q8kLB4wCidPdvyD8So4vVom+LqTvPOo86l59QGHF2R3oB9wT+dGwDniAkJDnAvtFzgVR+9FYnPmscMpgxdDjhDuxOgGHUjh3YZUQ7na4lfDrvkNkWs9IjGMj035Gfu/MuBd4G+icML1g4gR6ESqmOwNtgWOBSuCkAouzjHB3S3S4HXgqEmO06GBU5Fh9lPzd3bRjZB9Gj8lzIvtzUIHFeRPwTuT770a4q+0nhfSdR+L8WmT/7ZAwvdDiXEjowK8kcgxMJdxlF70L6yrCj4UraA13YUV2SndCOV4l4c6Bs/MdUySuiYRfTPHDxMi8owgVwZsJd8P0z1OMu0fi2kK4jI0O5xRYnD2B14EvIye3OcDFcfMLIs56joFH48bPjhyjlcCzQPc87s93CEUUXxJ+QBxdgHGWAr+NxLgSuBvoUGjfOeFOpkfqmVdIce4fieELQkdXTwK9I/MOAGZG4pwFHNDY+tQWloiIpKUY6kBERCQPlEBERCQtSiAiIpIWJRAREUmLEoiIiKRFCURERNKiBCJFz8weN7Onmviet83s9mzFVEjMbLCZuZntm+9YpGXRcyCSd2bW2EH4kLuf34z1dyUc61824T3dgWp3L+Q21TCzx4ESdz+1GetoS3iwcK2712QsOCl6JfkOQATYOe71icDvE6ZtJgkzK/VYu131cvfEVkYb5e6fN/U9LZW7byM85S3SJCrCkrxz95XRgdBkRZ1p7r4+rpjlNDN73cy2AN8ys95m9oSZLYt0xfkfMzsnfv2JRViR4qk7zewXZvZ5pGvPW+Mbkksswoosc62Z3W+h699Pzey7CdsZEulXY4uZfWBmR5tZjZmdWd9nN7MDIl3LbowM75rZYXHzh5rZ85GuUldZ6Na3Z2TebcAZhMYaPTIc3NTtJBZhRT67JxkOjszvYGa/jOzzSjP7l5kd0dj3LMVHCURamtsITaXvTehMqiOhHacTgH0J3Qc/FH8Srse3CY3cHQT8ALiG0P1wQ8YD/ya0GXQXcJeZDQew0K/0s4S2pQ4k9ET3Uxr/H3sSWEToOOkAQu+VWyPr3I3Qf8M7hK57jyU0wf3nyHtvjmxzOuGKbWdCW0ZN2k4Sx8etb2dCi63LgE8i86dEPuMZhBZbnwD+ZmZ7N/JZpdjkq1EvDRqSDYTOgzzJ9MGERh//N4V1PENosjo6/jjwVNz428CrCe95I+E9bwO3x42vBB5IeM+nwPjI65MJfan0ipt/RCTmM+uJ0wiNWJ5Rz/yfA39NmNYnss79kn22NLcT3bf7Jpn3LUKDisMj40OAbUQa4Itb7nngjnwfPxpyO6gORFqa8viRyC//6wmJpy+hWer2wN8aWc/7CePLCU2Gp/uewcBid18dN/9fDa3M3d3M7gQeNbOLgL8TksHHkUVGAKPMrCLJ2/dKEk+620nKzA4hNPU/zt1nxcXUBlhQt+sI2lP/FY0UKRVhSUtTmTB+PfC/hD5Xvk5orvo5QiJpSGLlu9P4/0M672mQu/+QUPT2HPA/wNy4Opw2hKup/ROGgcBLGdzOdsysH6GviJvd/c9xs9oQ9sMBCTHtDVzWlJik5dMViLR0hwFT3f0x+G+3nYMIneHk0jxgdzPr6e5rItMOTOWN7v4R8BFwp5k9AFxIqGeYBRwHLPJwp1QyVYRf/83ZTh2RXvOmAS+7+y0Js2cR+ujYyd3fSmW7Urx0BSIt3XzgWDM7JFKJOwnYJQ9x/JXQAdNDZrafmR1KqPCPdiS2HTPramZ3m9nhZra7mX0NOAT4ILLIXYRK7MfM7KtmtqeZHWNm95lZ9AprMTDMzAaa2U6RIr2mbifR/YQfl9ebWZ+4odTd5xAq8aeY2TfNbI9IbNea2TeavtukJVMCkZZuAqEu4CVCT2urCV3I5pSHB/BOJnQT+g7wB0J3rBAqsJOpJtShPEJIhH8CXgWujaxzKaGr1PaEz/cfQo98FYSKbAh3nS0C3gXWEO6yatJ2kjic0K3tYmBF3DAiMv8cQjeodxCuaKYBBxMSqLQiehJdJEvM7CDC3Vz7uvvcfMcjkmlKICIZYmanEfqa/oRwl9SvgE3uflBeAxPJElWii2ROV8LdYLsC64BXgKvzGpFIFukKRERE0qJKdBERSYsSiIiIpEUJRERE0qIEIiIiaVECERGRtPx/xKyHKwoQ6OsAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 1차원 모델의 RMSE 비교\n", "lin_reg = LinearRegression()\n", "plot_learning_curves(lin_reg, X, y)\n", "plt.axis([0, 80, 0, 3])" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 80, 0, 3]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAESCAYAAADTx4MfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzt3Xl8VPXV+PHPIQkQAgHUAIIsVUBkEYS4tQ+KtdXiAn1E60ZdqsW6tLaK0v5AAbUu1eJj1bYPPiio1KUq2KKlVeva1gVQRBYRZFF23CBAIJDz++PMOJNhkpkMk5m5k/N+ve4r9965c+dkCPfc73K/X1FVnHPOufpqku0AnHPOBZMnEOeccynxBOKccy4lnkCcc86lxBOIc865lHgCcc45lxJPIM4551KS0QQiIo+KyDoR2SIiS0Xk0jqO/YWIrA8d+6CINMtkrM455+ommXyQUET6AMtUdaeI9AJeAU5V1bkxx50MPAx8G1gLzADeVNVfZixY55xzdcpoCURVF6rqzvBmaDkkzqEXAlNCx38B3AxclJkonXPOJaMw0x8oIr/HkkEx8C7wfJzD+gDPRm3PB9qLyP6q+lnM+UYBowBKSkoG9erVK6k4PvgAdoZSWd++0CwgFWTvvgvV1bY+YAAUFGQ3Hudc8M2dO3ezqpbV930ZrcL6+kNFCoBjgSHAHapaFfP6cuBKVZ0d2i4CdgHfUNWVtZ23vLxc58yZk1QM3bvD8uW2/tFHth0EpaWwdautf/WVbTvn3L4QkbmqWl7f92WlF5aq7lHVN4CDgMvjHFIBRF8aw+tbGzq2IPFxMJ1z2ZTtbryFxG8DWQj0j9ruD2yIrb5qjESyHYFzzpmMJRARaSci54hISxEpCPW0Ohd4Kc7hDwOXiEhvEWkDjAOmZirWoPASiHMumzJZAlGsuupT4AvgLuDnqvoXEekiIhUi0gUg1PbxG+BlYDWwChifwVhzlpdAnHO5ImO9sFR1E3B8La+tBlrG7JsETMpAaM4551KQ8W68uSIfqn/y4XdwLpEtW7awceNGqqqqEh/s9lJUVES7du0obYAum402gUQLUrVQkGJ1bl9t2bKFDRs20KlTJ4qLixH/D1AvqsqOHTtYs2YNQNqTSLZ7Ybl94CUQl+82btxIp06daNGihSePFIgILVq0oFOnTmzcuDHt5/cEEjD+f8g1JlVVVRQXF2c7jMArLi5ukCpATyDOuZzmJY9911DfoSeQAPMqLOdcNnkCCRi/GXPO5QpPIAHmJRDn8t+QIUO46qqrsh1GXI22G29QL75eAnEu9w0ZMoS+ffty33337fO5nnnmGYqKitIQVfp5CYTgXpSDmgSdy4oJE7IdQQ3J9orab7/9aNWqVQNHkxpPIAET1GTnXNZNnJiRj7nooot49dVXuf/++xERRISpU6ciIjz//PMcddRRNG3alL///e8sX76c4cOH06FDB0pKShg4cCCzZs2qcb7YKqxu3bpxyy23cNlll1FaWspBBx3EnXfemZHfLZYnEOdccIikvuzL++vhnnvu4dhjj+Xiiy9m3bp1rFu3js6dOwMwZswYbrnlFpYsWcLRRx9NRUUFQ4cO5YUXXmD+/PmMGDGCM844gyVLltT5GXfffTf9+vVj3rx5jBkzhuuvv57//Oc/KX2l+8ITSIB5FZZzuad169Y0bdqUFi1a0KFDBzp06EBBaO7pCRMmcNJJJ3HwwQdTVlZG//79+clPfkK/fv3o3r07Y8eOZeDAgTz11FN1fsZJJ53EVVddRffu3fnpT39K9+7deemleDNjNKxG24geVF6F5Rq1fblrEsn6XVd5ec1ZY7dt28bEiROZNWsW69ato6qqisrKSg4//PA6zxP7eseOHRtkqJJEPIEEmJdAnAuWkpKSGtujR49m9uzZ3HXXXfTo0YMWLVpwwQUXsGvXrjrPE9srS0Sorq5Oe7yJeAIJGC+BOJei8Zmbk65p06bs2bMn4XFvvPEGF1xwASNGjACgsrKS5cuX07Nnz4YOMS0abRuI370718hksBtvt27dePvtt1m5ciWbN2+utXTQs2dPZsyYwbx581iwYAEjR46ksrIyY3Huq0abQKIF9a7ek6BzuWn06NE0bdqU3r17U1ZWxurVq+MeN2nSJNq1a8fgwYMZOnQoxxxzDIMHD85wtKkTzaOrUHl5uc6ZMyepY7/xDVi50tY//ti2g6BDB9iwwdbXrbNt5/LV4sWLOeyww7IdRl6o67sUkbmqWh73xTp4CSTA8ij3O+cCyBNIwAS1us05l388gQSYl0Ccc9nkCSRgvATinMsVnkCcc86lpNEmkO3bI+s5OtR+Ql6F5ZzLpkaZQCorITxsTEFBsLrCehWWcy5XZCyBiEgzEZkiIqtEZKuIvCciQ2s59iIR2SMiFVHLkHTFEv1Mz0EHQWFAB3TxEohzLpsyWQIpBD4BjgdaA+OAJ0WkWy3H/0dVW0Ytr9Tnw5Ytg1mzYPfuvV8LP0AI0K22T89RXgJxzuWKjCUQVd2mqhNUdaWqVqvqLGAFMCjdn7ViBQwaBKefDmPG7P36qlWR9a5d0/3pzjm3b2JnIcxVWWsDEZH2QE9gYS2HHCEim0VkqYjcICJJVzTddhts2WLrs2fv/Xq+JBCvwnLOZVNWav9FpAiYDkxT1XhzN74G9AVWAX2AJ4DdwG1xzjUKGAXQpUsXVq+GqVMjry9fDtXV0CQqVUZXYQUtgXgVlnMuV2S8BCIiTYBHgF1A3DKaqn6sqitCVV0LgJuAM2s5drKqlqtqeVlZGXfeCVVVkdd37oRPP635nugSSNDaQKJ5CcS53DN58mTat2+/13wg5513HsOGDWP58uUMHz6cDh06UFJSwsCBA5k1a1aWot03GU0gIiLAFKA9MEJVqxK8JUyBhPfeVVXwwAN771+2rOZ2kKuwvATiGjOR7C3JOuuss/jqq6944YUXvt5XUVHBs88+y8iRI6moqGDo0KG88MILzJ8/nxEjRnDGGWewZEm8ypjclukSyB+Aw4DTVXVHbQeJyNBQGwki0gu4AXg20ck3bLASR6zoBFJVBWvWRLY7d0429NzjJRDnck/btm055ZRTmD59+tf7Zs6cSWFhIcOGDaN///785Cc/oV+/fnTv3p2xY8cycOBAnnrqqSxGnZpMPgfSFbgMGACsj3q+43wR6RJa7xI6/ETgfRHZBjwPPAPcmugzNm2KrB91VGT9o48i659+am0iAB07QrNm+/JbZZ6XQJzLfSNHjmTmzJlsDw15MX36dEaMGEHz5s3Ztm0b119/Pb1796Zt27a0bNmSOXPm1DrpVC7LWCO6qq6i7mqollHHjgZG1/czwomhf3+4+mo4/3zbji6BBLkB3bnGLiil7lNPPZXCwkKeffZZTjzxRF588UX+/ve/AzZb4ezZs7nrrrvo0aMHLVq04IILLmDXrl1Zjrr+AvoMdt3Gjq3ZOB6dQILc/hErKP+ZnGtsmjVrxllnncX06dPZvHkzHTp0YMiQIQC88cYbXHDBBYwYMQKAyspKli9fTs+ePbMYcWryLoH06gVnnBF5DgQsgYS78ga9B5ZXYTkXDCNHjuTEE09kxYoVnHvuuTQJPUvQs2dPZsyYwfDhwykqKmLixIlUVlZmOdrU5N1gimPH2gCJbdvC/vvbvspKWLvW1vOpCstLIM7lrsGDB9OpUycWLVrEyJEjv94/adIk2rVrx+DBgxk6dCjHHHMMgwcPzmKkqcurEkiHDnDOOZHt7t3hs89s/aOPbODEoFdheQnEuWAQEVZG37GGdO3alRdffLHGvtGjazb5vvLKKw0YWfrkVQmkU6eaI+v26BFZD7eDBL0KyznnckVeJZBY3btH1pctgz17ag7l3qXL3u8JEq/Ccs5lU14nkOgSyEcfwbp1keHdDzgASkqyE9e+8Cos51yuyOsEElsCybfqKy+BOOeyKa8TSGwbyIoVke0gNqCDl0Bc46N+p7TPGuo7zOsE0rYt7Lefre/YAW++GXktqAkkmv+/cvmuqKiIHTtqHTbPJWnHjh0UFRWl/bx5nUCgZjVWdM+5oFZheQnENSbt2rVjzZo1bN++3UsiKVBVtm/fzpo1a2jXrl3az59Xz4HE06MHvP22rX/4YWR/PpRAnMt3paWlAKxdu5aqqmRnf3DRioqKaN++/dffZTrlfQKJLoFEy4cE4jdkrjEoLS1tkIuf23d5X4UV3ZAeLagJxKuwnHO5Iu8TSLwSSOvW0KZN5mNJNy+BOOeyqVEmkKCWPsBLIM653JH3CWT//a07b7Sg9sByzrlckvcJBPYuhQS5BBLNq7Ccc9nUKBJIbEN6kBOIV2E553JFo0ggsSWQfKnC8hKIcy6bGkUC8RKIc86lX6NIIN4G4pxz6dcoEkiPHpE799JSmwvEOefcvmkUCWT//eH66+3hwYkTg10NFOTYnXP5Je/Hwgq7/Xa47bbgX4CbNo2sf/VV9uJwzrlGUQIJC3ryAOjTJ7I+b1724nDOuUaVQPJBeXlkfc6c7MXhnHMZSyAi0kxEpojIKhHZKiLvicjQOo7/hYisF5EtIvKgiDTLVKy5bNCgyPrcudmLwznnMlkCKQQ+AY4HWgPjgCdFpFvsgSJyMvBL4ESgK3AwMDFTgeayI46IVMUtXAjbt2c3Hudc45WxBKKq21R1gqquVNVqVZ0FrAAGxTn8QmCKqi5U1S+Am4GLMhVrListhUMPtfU9e2D+/OzG45xrvLLWBiIi7YGewMI4L/cBoi+N84H2IrJ/nPOMEpE5IjJn06ZNDRNsjvFqLOdcLshKAhGRImA6ME1Vl8Q5pCUQ3Uk1vN4q9kBVnayq5apaXlZWlv5gc5A3pDvnckHGE4iINAEeAXYBV9VyWAUQPQlyeH1rA4YWGJ5AnHO5IKMJREQEmAK0B0aoalUthy4E+kdt9wc2qOpnDRxiIAwYEGlIX7wYtm3LbjzOucYp0yWQPwCHAaer6o46jnsYuEREeotIG6zH1tQMxBcILVvCYYfZenU1vPdeduNxzjVOmXwOpCtwGTAAWC8iFaHlfBHpElrvAqCqs4HfAC8Dq4FVwPhMxRoE0Q3pXo3lnMuGjI2FpaqrgLoGE2kZc/wkYFKDBhVg5eXwyCO27j2xnHPZ4EOZBJQ3pDvnss0TSEANGABNQv96S5bAVu+f5pzLME8gAdWiBfTubeuq3pDunMs8TyAB5tVYzrls8gQSYN4TyzmXTZ5AAiy6BOI9sZxzmeYJJMD694eCAlv/8EPYsiW78TjnGhdPIAFWXFxzittbb7Uh3p1zLhM8gQTcd74TWb/jDtteuzZ78TjnGg9PIAF3441w/PGR7Vdesaqt55/PWkjOuUbCE0jAtW4NL70E48dHHizcvBlOPRWefjq7sTnn8psnkDxQUAATJlgi6dgxsv+KK+Dzz7MWlnMuz3kCySNDhsC770KnTra9cSOMHp3VkJxzecwTSJ5p1w7uvz+y/dBD8M9/Zi8e51z+SiqBiMitItIiavsUESmO2i4VkYcbIkBXf8OHw4gRke1Ro2BHXdN3OedcCpItgYyh5nwdjwMHRm0XA+enKyi37+691xrYAZYvh5tuym48zrn8k+yEUrETQdU1MZTLAQceCL/5DVx2mW3feafNny5iS9u2cPXVcPjh2Y3TORdcGZuR0GXepZfCo4/C66/bE+rPPlvz9bfegg8+yE5szrng80b0PNakCTzwAJSWxn994UJYvTqzMTnn8kd9SiA/EZGKqPddIiKfhbZbpTcsly6HHgqLFtlw79XVNvnUbbdFhn9/7TUYOTK7MTrnginZBLIauDhqez1wXpxjXA7q1CnybAhYySOcQF591ROIcy41SSUQVe3WwHG4DIoeO+u117IXh3Mu2LwNpBE66iho1szWly6FdeuyG49zLpiSfZCwv4icELPvfBH5WEQ2isgfRaRpw4To0q15czj66Mi2l0Kcc6lItgRyC/Bf4Q0R6Q08BHwEPIY9RDgm7dG5BuPVWM65fZVsAhkI/CNq+xxgkaqerKpXAz8Hzk53cK7hHHdcZP3VV7MXh3MuuJJNIPsD0fPcHQf8NWr7FaBLopOIyFUiMkdEdorI1DqOu0hE9ohIRdQyJMlYXRKOPRYKQ10oFi60OUScc64+kk0gm4BOACJSAAwC3op6vSlQncR51mLVYQ8mcex/VLVl1PJKkrG6JJSUwJFHRrZffz17sTjnginZBPIKMF5EDgauDe17Oer13sDKRCdR1WdUdSbwWaJjXcPzaizn3L5INoHcAPQAlgG/Bq5X1W1Rr/8QeCnNsR0hIptFZKmI3CAicZ9ZEZFRoWqxOZs2bUpzCPktuiHdE4hzrr6SfZBwpYj0AvoAm1R1bcwh44FP0xjXa0BfYFXoM58AdgO3xYltMjAZoLy8XNMYQ9771rdsvKzqapg/H778Etq0yXZUzrmgSPpBQlXdrarz4yQPQvvTVi2lqh+r6gpVrVbVBcBNwJnpOr8zpaUwcKCtq8Ibb9R+bGUlrFljDx7Om2ddf//1L1i1CqqqMhOvcy63JFUCEZFrkjlOVSftWzi1nxqfg6RBHHdczXGxTjvNSiKLF1uimDvXloULbUj4eJo0sflHDj3UBmo86qjMxe+cyx5RTVzrIyLVwGaggtov5KqqByc4TyGWtMYDBwE/Bnar6u6Y44YC81R1Q6jq7Cngz6o6sa7zl5eX65zw1dAl5S9/sSlwwUokLVrA+vWpn69PH59jxLmgEZG5qlpe3/clOxrvO1hbxHPAFFWto7KjTuOw5BE2EpgoIg8Ci4DeqroaOBGYKiItgQ3Ao8CtKX6mq8PgwTZDoSps2WJLbdq3h1atoGVL6wZcVQWffFJzLK2FC630cthhDR+7cy67kiqBAIhIH+AS7KL/BTAFmKaqGxouvPrxEkhqhg2Dv0Y9FtqsGfTsCf36waBBthxxRO0TU+3cCWefHZnx8OabYdy4ho/bOZceqZZAkk4gUR9UBAwHfgScgA1x8gNV3VnfD083TyCp+eorePFFKC6GXr2ga1coKKjfOR57DM4LzRAzYAC8+27643TONYyGrsL6mqpWAU+JyBagBXAqUAxkPYG41LRuDSNG7Ns5Tj0VmjaFXbvgvffg44/h4DpbxJxzQVev+UBEpJuI3CQiq4AHgNeBHqr6ZYNE5wKjtBROOimy/fTT2YvFOZcZyc4Hcr6IvIQ1dB8KXAZ0U9UbVHVFQwbogiO6FPPUU9mLwzmXGclWYT2CzXn+P1h33t5Ab5GaPXob8DkQFwDDhtkIv7t3w9tvWw+tzp3ttX/9C8aPt15cAwdGGufbt89uzM651CWbQFZjD/OdW8cxCngCacT22w9OOAFeeMG2n3kGrr7auvaeckqki/DMmZH3FBdbt+Dw0qqVnadtW1u6dYNLL7X9zrnckuxYWN0SHSMinfc5Ghd4I0ZEEsjTT8O559rT7bU9X7Jjhy11jYP56qs1k45zLjfUqxE9HhHpICL3AUvTEI8LuO9/3x5MBBtba+hQWLnStlu2hHvugauugm9+0556T8azz1o3Y+dcbkl2LKw2wP3ASUAVcDtwL3AjNhf6Iuy5ENfItW9vT7e/9po93T5vnu1v0gQef9y6+4ZVV8P27bBtG1RUwNatVlL54gtbnngCZs+2Y6+91s5V3+dTnHMNJ9k2kFuxaWynAd8D7ga+C5QAQ1XVZ5NwXxsxwhJItEmTaiYPsKQSbvuI15h+0knQo4clmfffh4cesvYQ51xuSLYK61TgYlUdDQzDBlRcrqrf9uThYp1xRs3tyy+Hn/2s/ufp2BHGjIlsjxtnpRTnXG5INoF0xKqpUNWPgUrsQULn9nLQQfDTn9r6uefC734XaRepr2uvhU6dbH3DBrjjjvTE6Jzbd8kO574H6KCqm0LbW4HDc+0hQh8LK7ds3558Q3ldHn4YLrzQ1ps3h6lTbSKrDz6wn337wsiRcMwxqScq5xqzBh1MMTQfyAtExrsaCrwKbI8+TlWH1TeAdPIEkp+qq22Sqrlz6z7ukEMiiaRZMxubq2lTSyq7d0eWZs3s2LKy5BLO7t32gKRz+aqhB1OcFrP9aH0/yLlUNWkCd99tsyfWZflymFjnlGM1tWoF3bvb6MMQSTC7dsHnn8Nnn9myfbv1LHvuOX+g0blo9R7OPZd5CSS/3XYbPPigNa737WvLgQfahf3Pf7Zh6RvSGWfYGF9eTebyTcbmA8llnkAar8pKmDULZsyAzZutFLFrl012BVYFVVhoz5Fs2QLLltmzJ/V1663wq1+lN/bGTNWWJkl25/nkE5g82UqbnTvblAEHH2xVkt26JX8eV5MnEDyBuOSpwsaNlkjWrrXEEk4yhYU2DtcBB8D++8ONN9oT9GClj7/9DU4+ObvxZ8Prr8P06ZaA67psVFZGHgb94gtL1Lt3w549kZ/V1TXP0a+fPSd02mnWhhX7wOjcufDb38KTT9r74ykpsfMcfrj9LCuLjK9WUmLvCw+ds2OHTZ7mUy8bTyB4AnENo6oKvvtdG5MLLLnMmWMDQb77Lsyfb/OhnHeevZZPVG00gFtvtaFpMmH//a1UsWdP5KK/tIEGSvrBD+D22+Eb32iY8weFJxA8gbiGs2GDDT+/Zo1tFxVZYolWVgZ33QU//GHw20k+/RT++lerLnrvvYb7HJG6SzPxDBkCZ59tJciPP7ZlyZK6B+SsS9OmNmr02LE2O2esigpYv946VBQW2vHhXn4lJVbCadYs2P/mnkDwBOIa1ltvWU+wXbvqPu644+D3v4c+fTITVyq2b7fk8MEHVnpq08ZKT59/Dn/5S2QMs2hFRXDBBTZkv0jtF8ymTe1c4XOWltp7w9WEBQXWVhE+R0UFvPSStWE99xysW7f3OQsLLWlcc43NJxPP+vU25M38+fDhh9apoqIishQWWqmxuNjaxl59de/PaNnSnl0qLo6cc9u2xN9nQUFkKoL27aFdO/vZqlWkuq662hJOeblV03XsmPi86aJad4LzBIInENfwpk6FSy6xi0GLFjBggNW5z5pld+1hTZpYNUyPHtCzZ2Q59FB7sj5bjb2qNkjl9ddbg3Qyioth1CgbFaBzA0/aoAqLF9uQNQUFkeWgg+zinE7/+Q/84hd2Y5ANXbpYqba4OJJQCwutQ0D//rYcdJAd+/nn9tDsqlWW/EpK7O+vRQt7uDaclAsKLOEtWWLL4sX2s6io7pKkJxA8gbjMWLXKGoq7d4809lZUwE032fMqu3fX/f7iYksmRx5p1TEnnNAwd6Pbt1uDd7jReN06mxXyX/9K/N7CQotr2DC78y8rS398uSCcUMePr72dpVkz6NDBvoPq6kjvvp077WK9dWviUmmq2ra1cydTCqpLYaH9PRQVxX/dEwieQFz2ffCB3dXWd/6SHj2sxBJdzRCu4gnfnRYX20OP3brZ0qGDJYjNm61+PtwmsGyZLevX1/2Z7drBz39uF5Uvv7QeU9XVltS+97347QH5StVuCnbssAvtjh32XbRvb99DovaNXbvsJmLzZmsv27jRfm7bZv9+4X/DdevgzTfhnXfsMzJp6VL7O4vHEwieQFzu2L7dLuIffWT/cT/80H4uXWoX+2wqKrJG43HjGleSyCVVVbBggf1d7NkTaSPZsQMWLbJ2nPfei8zk2bKl3Tx07WrVV9u3R5bKSntvuNdaUZElinA35V69bKlrFIWGHsrEOVcPLVpY28jhh+/92mefWUnltdfg5Zfh3/+OPPCYToWF1m4QbjguLran98eNsyo0lz1FRdYZoLYOAWBJZe1a+3dr2zY3e3lltAQiIlcBFwH9gMdU9aI6jv0FNtthC+Ap4HJVrfO/mZdAXBBVVlqvp9ihWMK9d8J3p1u2WPvLypWwYoVVk7RpE3ng8YAD7A61e3dbOnf2QSBdcoJSAlkL3AKcDBTXdpCInAz8Evh26D0zgImhfc7llebNbY5454Imo50JVfUZVZ0JJKoFvhCYoqoLVfUL4Gas5OKccy5H5OrQY32A+VHb84H2IrJ/7IEiMkpE5ojInE2pPorqnHOu3nI1gbQEomuEw+t79SNQ1cmqWq6q5WX52lndOedyUK4mkAqgNGo7vL41C7E455yLI1cTyEKgf9R2f2CDqma5B71zzrmwjCYQESkUkeZAAVAgIs1FJF5PsIeBS0Skt4i0AcYBUzMYqnPOuQQyXQIZB+zAuuOODK2PE5EuIlIhIl0AVHU28BvgZWA1sAoYn+FYnXPO1cGHMnHOuUYu1QcJc7UNxDnnXI7zBOKccy4lnkCccw5gwoT6bde2rxHxBOKcC550X9wXLoSJE+Hhh2HaNHjoIdt++mn4xz9s+sKJE20o5eh244kT6xdXOuLOpaSlqnmzDBo0SJ1zjQDUvR1v3/jxe2+//77qGWeEBz1ObmnaVLVbN9VvftO2L7lEdcwY1TvvtO2nnlJ98UXVOXNse8eO9MadzO8VK96+GqdkjqZwzfVeWM65+pkwoeZdcOx2fd9fn2M2boQxY2xy+j59bKalkhL45z/h9NNrTuM4YwZcdZXNmlVaau97+GF7T1GRHZ8pbdrYFJJLltjsTlu32rJli427f+CB9nqHDjB5MowebTEWFdlcyWPH2mxRu3fDXXfBfffZlJLt2tkUkps22eQv4akPY6/r8fbVeDm1XlhZLzWkc/ESiAu0RHeSCe4iG+Qz4+1LdBed6Jzx7roTHXPjjarDhtWvpJDM0qyZ6s9+prp2beLfK7xdUaH60Ueqr75q+047Lf1xpbI0aaJaVmbr/furHnmk6re+pTpkSPzvvMav5iUQL4G44Hr/fejfH5580u40q6vh/PNtztNvfMPuRGPvIuPdpde3dBB7ztruXv/+d5g+Hf76V5s8/YgjoGNH6NTJ7pinTYMuXWxGq4MPtvjDU+iJ2J33m2/a8sc/wjnn2PFduth5zjgDbr/dJnLfsAEeewxuuMFeKyuDM8+MxHPSSdYu8f77NhH5tm3w3e/CzJmRy+mePXDWWTa5++zZib//8eOtPaOu7yKZO/t423v22He2bh3062fTUbZqZaWitm1tIvv16+31DRvgiivgO9+BF1/cO87w/kGDYO7cxL9Xbb9rzN+El0DUSyAuhyQOGwcHAAAVWklEQVRbWqiuVr311rrvLAsLVXv2tPUrrlC9/XbVxx6z7U8+Ud29O3K+ZEsHK1aoTpxor198seqVV6ped51t33hjZLniitTvhktLVTt2TN8ddlmZ6vTp9p2l0pawryWndJTOGiLu8PauXZGS1Lx5qm+9pfr666ovvRT/c2qcIrUSSNYv+ulcPIG4nJHo4qSqOm6c6hFH7PuFtaBAtUuXSKPu6aernnmm6siRtn3//arPP6+6aJFtd+uW+mddeaX9fPtt1RkzVO+7z7b79k3u/d/5jv185BHVb387/jHf/779PO64+K+PH98wF/d0qG8SSiXuVH4vTyCeQFwOGz/e7ozffFP1mmvsv9aoUdYzZ+ZM2966NXL8l19GLojNm6s+/XTtF4Jt21Tnz7ftk09O/eIfvTRvrnreebY+ZYrqvfeq3nGHbU+YEFl+/WvbV129d1x1be/apfrFF6qrVyd+f7Ln3FeZaFNqCInizGIvrKxf9NO5eAJxWbFwof1Xat068YW7dWu7W+/a1bbLyizpqNb/IhrerqxUXbYs0qg7c6bqE0+oTptm27WVcsaPT+5CnegOeF8b2ZM5piFKC+5rnkA8gbhMGj9edckS1XPOURWJXJQ7dlS9+mpb/973EieU+lTLJHNRrW8SSsPda8Ljk3l/fe+yXVqlmkC8F5Zz9bVihfU0qk1tPXqqq+1J5k8+gc8/tx41+/L/L5VeWAmeB3CNU6q9sOJN5uRcsNX3wbb6+Oc/YdgwWy8shB/9yB7y6to18YVZBA44wJZ0SGYYjNjt8ePT89nO4WNhuaBJ5qKZaHyiVM4J9lzGiSfacwdgTwVPngwPPpj4/fEu3Nm4mOfSOEou8LwKywWLiD101aoVFBfbviZN7OGqDz6ARYsiF/XeveGww2woi+i/8+gSyvr1NozEsmX20Fr4nLFVPT/4gT2oVlUFl18Of/hD7ed0LmBSrcLyBOKC4//9P7jttsh2QQE0bx4pEdRl8GA45BBbbrjBnnx+5x1rj4jWpo09Xb1wIVx/PfTsaU87//zn9vq118Kdd1rSyqP/O65x8yfRvRdWbkpH75lwd9NklvBzEsk+2Faf5cYbI88zeK8gl0dIsReWt4G4hlXf+RLiGTbMShph4Uv6zp02xlD0vvC4RwsW2HZVlW3/8Ifxz33jjZH3V1fbqKbz5tm+IUNqHnvTTVby8Ooq5wCvwnINZcECuO46G4Tvmmts0LzOnWHECLvwN21qxyUaIPC662yAwdWr4cc/hgce2LvqKNE5khnwLtE5vfury2PejdfljhtvhJtvjmxPmlTz9ZISa1vo29e2p0+37R49rMQSvvhXVdncBwDHHgv33msN3bFiezPVt+tqrvSQci5gvATi0u/ee+FnP7NSx+rV1vX1pZeSf3/LltZArmoT7nToYENXx0seqUilCsqrrVwe815YeALJCevXw6GH2oV/xgz47//euyqoogIWL7aeThddZF1tFy9OfO448xg45/adV2G53HDddZY8TjkFhg+PXxVUUgLl5bZcdJE9uwHWiF1QAF99Zet79thT23l0k+NcPvEE4tLnoovg0UehWTP43e+stJGoPSJ6u0moU2BpaUNG6ZxLk4x24xWR/URkhohsE5FVInJeLcdNEJEqEamIWuoYvc5lXVWVTWsK8Ktf2QN78dR3rCZvzHYuZ2W6BHI/sAtoDwwAnhOR+aq6MM6xT6jqyIxG51J3333285BDYMyY1M+TynMizrmsyFgJRERKgBHADapaoapvAH8BannCywXChAlWVXXNNba9fLmNJ+UXfufyXiZLID2B3aq6NGrffOD4Wo4/XUQ+B9YB96nqHxo6QJeCCRNs0MKzz7bt6mpLKM65vJfJNpCWwJaYfV8BreIc+yRwGFAG/Bi4UUTOjXdSERklInNEZM6mTZvSGa9L1r33RtY9eTjXaGQygVQAsd1rSoGtsQeq6iJVXauqe1T138A9wJnxTqqqk1W1XFXLy8rK0h60S+C99+CNN2x49V/+MtvROOcyKJMJZClQKCI9ovb1B+I1oMdSwG9tc1G48fzii2sOte6cy3sZSyCqug14BrhJREpE5FvAcOCR2GNFZLiItBVzFPAz4NlMxeqS9NlnNo4VwJVXZjcW51zGZXo49yuAYmAj8BhwuaouFJHBIlIRddw5wDKseuth4A5VnZbhWF2inlRTpkBlJZx8sg2G6JxrVHwsLFe7uoZJ37MH9t/fhh2ZNQtOPTUbETrn0sDHwnLps3ZtZCKoUaOgbVtbJk6EY46xUXEXLLDkcfDBMHRoduN1zmWFJxAXMWECLF0Kjz0W2ffAAzWPiU0WV14ZGcPKOdeo+P/8xiJRe8bOnVbCCCePk06yn4mqpq69Nv6gic65vOcJpLGobW7y9evhwQfh6KNtu7AQfvMb+NvfbHvWrMh84xBZj932BOJco+NVWEEVO0NebTPmffwxjAyNSdmxo03e1KsX/P738NxzENvpYPduuP562LbNR8J1ztXJe2EFjSo8/zycdhqsWwft21sVUrweUwsWwDPP1H2+5s1tytlTT4Urrqh78qZkk5ZzLlBS7YXlVVhB8+CDljwADjzQZuw77jjbnjTJShWLF1uVVTh5jBhhP6++eu/zVVbazICXX574s32odedcFC+BBMkNN8AttyR/fPPmcM898OMfW0+p2LnJY//tvUThXKPkJZDG4ODQpIyHHmo/q6thzRr4xz9s+8gjax5fWQmXXWalkWTaMzx5OOfqwRvRg2L3bvj1r2197Fi44AIrRXTsaAvA229Hjo9XwojmDeTOuX3kCSQoHn/cZvs75BA491xbj1bfhOClDefcPvIqrCDYsyfS9jF2rD2rkahB20sYzrkG5gkkCM4+Gz78ELp1izzTkYiXMJxzDcwTSK6rroann7b1X/0KioqyG49zzoV4AslF4dLDl1/aU+EAnTvDhRdmLSTnnIvlCSQXTZwIJ5xgQ6j/9re275NP7LkOr5pyzuUI74WVa6ZMsZ+vvGI/TzgBXn657i65zjmXBV4CyRXjx9uzG5deWnN/eJgS55zLMV4CyQU33AArV9p6QYF12/USh3Mux/lYWNn21VfQpo2tl5TAn/8Mp5ziCcQ5lzE+J3oQqcLpp9t6+/Y2ku6gQf4QoHMuELwNJFsmTLARcl9/3bY3bLBh1X1EXOdcQHgJJFsmTIDXXrMeVuBVVs65wPESSLa89ZYlj9LSbEfinHMp8RJIttx+u/284gpo1iy7sTjnXAo8gWTDokUwc6Yljquvhg4dsh2Rc87Vm1dhZcMdd9jPH/3Ik4dzLrAymkBEZD8RmSEi20RklYicV8txIiJ3iMhnoeUOEZGEH7B2bc3tRHNmJHNMfbcTHbNqFTzyiD0weN11e7/XOecCIqMPEorIY1jSugQYADwHfFNVF8YcdxlwDXAioMALwO9U9Y91nb9cpOaDhOXlUNd2MsfUdzvRMffdB1OnwnnnwfTpdf06zjmXEak+SJixBCIiJcAXQF9VXRra9wiwRlV/GXPsv4Gpqjo5tH0J8GNVPaauzygX0cA8h/7++9CvX7ajcM65QDyJ3hPYHU4eIfOB4+Mc2yf0WvRxfeKdVERGAaMA9gfq/Q1ky+GHA7AB1n0KaxMcnS0HAJuzHUQSghBnEGIEjzPdghLnoam8KZMJpCWwJWbfV0CrWo79Kua4liIiGlNkCpVSwiWVOZtTyKKZJiJzUsn2meZxpk8QYgSPM92CFGcq78tkI3oFEPvUXCmwNYljS4GK2OThnHMuezKZQJYChSLSI2pff2BhnGMXhl5LdJxzzrksyVgCUdVtwDPATSJSIiLfAoYDj8Q5/GHgGhHpJCIdgWuBqUl8zOR0xdvAPM70CkKcQYgRPM50y+s4M92Ndz/gQeC7wGfAL1X1TyIyGPibqrYMHSfAHUB4er7/A8Z4FZZzzuWOvJpQyjnnXOb4UCbOOedS4gnEOedcSvIigSQ7xlamichVIjJHRHaKyNSY104UkSUisl1EXhaRrlmKsZmITAl9b1tF5D0RGZprcYZieVRE1onIFhFZKiKXRr2WM3FGxdRDRCpF5NGofeeFvuttIjIz1C6YrfheCcVXEVo+zNE4zxGRxaFYlofaTHPm3zzq+wsve0Tk3qjXcyLOUCzdROR5EflCRNaLyH0iUhh6bYCIzA3FOVdEBiQ8oaoGfgEeA57AHkD8L+zBwz45ENcZwPeBP2BDs4T3HxCK8SygOXAn8GaWYiwBJgDdsBuK07Bnc7rlUpyhWPsAzULrvYD1wKBcizMq3n8ArwOPRsW/FTgu9Lf6J+DxLMb3CnBpLd9zTsSJdbhZBRwT+vvsFFpy9d+8JfYc23Gh7ZyKE3ge69HaHOgALAB+BjQNfc+/AJqF9q0CmtZ5vmx/4Wn4QkqAXUDPqH2PALdnO7aoeG6JSSCjgH/H/A47gF7ZjjUUz/vAiFyOExt6YR3wg1yMEzgHeDKUnMMJ5FbgT1HHHBL6222VpRhrSyA5Eyfwb+CSOPtz7t88FMeFwMdEOijlVJzAYuCUqO07gf8FTgLWhOMOvbYa+F5d58uHKqzaxtiKO3ZWjqgx1pfaMzLLyYGYRaQ99p0uJAfjFJHfi8h2YAmWQJ4nx+IUkVLgJmxE6WixcS4ndPOTuej2cpuIbBaRf4nIkNC+nIhTRAqw4e3KRGSZiHwaqnIpjhNj1v82Qy4EHtbQFZjci/N/gHNEpIWIdAKGArND8bwfFTfYjWSdceZDAqnPGFu5InasL8iBmEWkCJgOTFPVJeRgnKp6RejzB2MPpu4k9+K8GZiiqp/G7M+1OMcAB2NVQpOBv4rIIeROnO2BIuBM7N97AHAEMI7cifFrobaN44FpUbtzLc7XsKSwBfgUmAPMJMU48yGB1GeMrVyRczGLSBOs6m8XcFVod87FCaCqe1T1DeAg4HJyKM5Qw+N3gLvjvJwzcQKo6luqulVVd6rqNOBfwCnkTpw7Qj/vVdV1qroZmERuxRjth8Abqroial/OxBn6Pz4bu/Eqwdpn2mIPbacUZz4kkPqMsZUraoz1JTZXyiFkKebQk/9TsDu+EapaFXopp+KMo5BIPLkS5xCsA8JqEVkPjAZGiMg89o7zYKzBcunep8kKBYQciVNVv8DukqOrVcLrufRvHnYBNUsfkFtx7gd0Ae4L3TR8BjyEJeSFwOGha0HY4SSKM5sNTmlsGHoc64lVAnyL3OmFVYj1drgNu7tvHtpXFopxRGjfHWS3Z8YfgTeBljH7cyZOoB3WMN0SKABOBrYBw3IszhZY75bwchfwVCjGcNXB4NDf6qNkr3dTm9B3GP6bPD/0ffbMsThvAt4J/fu3xXq13ZxL/+ahOL8Z+v5axezPtTg/Bn4Z+jdvA8zAetmFe2Fdjd0sXEVj6IUV+lL2w+rxtmE9B87LdkyhuCZgd0zRy4TQa9/BGoJ3YL1humUpxq6huCqxYmx4OT/H4iwDXgW+DF3cFmCzVJJLcdbyN/Bo1PZ5ob/RbcCzwH5Z/D7fwaoovsRuIL6bg3EWAb8Pxbge+B3QPNf+zbGeTI/U8louxTkgFMMX2ERXTwLtQ68dAcwNxTkPOCLR+XwsLOeccynJhzYQ55xzWeAJxDnnXEo8gTjnnEuJJxDnnHMp8QTinHMuJZ5AnHPOpcQTiMt7IvK4iDxVz/e8KSJ3NVRMuUREeomIikjfbMfigsWfA3FZJyKJ/ginqepF+3D+1tjf+pf1eM9+QJWq5vKYaojI40Chqp65D+cowB4s3Kyqu9MWnMt7hdkOwDngwKj104AHYvbtIA4RKdLIuF21UtXYUUYTUtXP6/ueoFLVPdhT3s7Vi1dhuaxT1fXhBRuyosY+Vf0qqprlLBF5VUQqgQtFpL2IPCEia0JTcX4gIudHnz+2CitUPXW3iNwpIp+Hpva8LXogudgqrNAxY0TkQbGpfz8RkZ/FfE7v0LwalSKySES+KyK7ReSc2n53ETkiNLXs1tDyroj8V9Tr/URkdmiq1A1i0/qWhV67HTgbG6xRQ8sx9f2c2Cqs0O+ucZZjQq83F5Hfhr7zbSLyloh8O9G/s8s/nkBc0NyODZV+GDaZVDE2jtOpQF9s+uBp0RfhWvwIG+TuaOBa4Hps+uG6jAbexsYMuge4R0QGAojNK/0sNrbUUdhMdLeS+P/Yk8AKbOKkI7DZK3eGztkZm7/hHWzq3pOxIbifDr33ltBnzsJKbAdiYxnV63PiOCXqfAdiI7auAZaFXp8e+h3PxkZsfQL4m4gcluB3dfkmW4N6+eJLvAWbPEjj7O+FDfp4ZRLnmIkNWR3efhx4Kmr7TeDlmPe8HvOeN4G7orbXAw/FvOcTYHRofTg2l0q7qNe/HYr5nFriFGwQy7Nref03wHMx+zqEznl4vN8txc8Jf7d947x2ITag4sDQdm9gD6EB+KKOmw1Myvbfjy+ZXbwNxAXNnOiN0J3/WCzxdMKGpW4G/C3Bed6P2V6LDRme6nt6AStVdWPU62/VdTJVVRG5G3hURC4F/oklg49ChwwCBotIRZy3HxInnlQ/Jy4RORYb6n+kqs6LiqkJsLzm1BE0o/YSjctTXoXlgmZbzPZY4EpszpUTsOGqn8cSSV1iG9+VxP8fUnlPnVT1V1jV2/PAccDCqDacJlhpakDM0gN4IY2fsxcR6YLNFXGLqj4d9VIT7Hs4Iiamw4Cf1CcmF3xeAnFB91/ADFX9E3w9bWdPbDKcTFoCdBWRMlXdFNp3VDJvVNUPgQ+Bu0XkIeASrJ1hHvA9YIVaT6l4dmF3//vyOTWEZs37C/Ciqv465uV52BwdB6jqf5L5XJe/vATigm4pcLKIHBtqxP1foGMW4ngOm4BpmogcLiLfwhr8wxOJ7UVEWovI70TkeBHpKiLfBI4FFoUOuQdrxP6TiBwpIgeLyEkiMkVEwiWslUB/EekhIgeEqvTq+zmxHsRuLseKSIeopUhVF2CN+NNF5L9F5Buh2MaIyOn1/9pckHkCcUE3HmsLeAGbaW0jNoVsRqk9gDccmyb0HeD/sOlYwRqw46nC2lAewRLhn4GXgTGhc67Gpkpthv1+H2Az8lVgDdlgvc5WAO8Cm7BeVvX6nDiOx6a1XQmsi1oGhV4/H5sGdRJWovkLcAyWQF0j4k+iO9dARORorDdXX1VdmO14nEs3TyDOpYmInIXNNb0M6yX1P8B2VT06q4E510C8Ed259GmN9QY7CPgMeAm4JqsROdeAvATinHMuJd6I7pxzLiWeQJxzzqXEE4hzzrmUeAJxzjmXEk8gzjnnUvL/AVfEa8fmG/WpAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.pipeline import Pipeline\n", "\n", "# 10차원 모델의 RMSE 비교\n", "\n", "polynomial_regression = Pipeline([\n", " (\"poly_features\", PolynomialFeatures(degree=10, include_bias=False)),\n", " (\"lin_reg\", LinearRegression()),\n", " ])\n", "\n", "plot_learning_curves(polynomial_regression, X, y)\n", "plt.axis([0, 80, 0, 3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regularized models" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.linear_model import Ridge\n", "\n", "np.random.seed(42)\n", "m = 20\n", "X = 3 * np.random.rand(m, 1)\n", "y = 1 + 0.5 * X + np.random.randn(m, 1) / 1.5\n", "X_new = np.linspace(0, 3, 100).reshape(100, 1)\n", "\n", "def plot_model(model_class, polynomial, alphas, **model_kargs):\n", " for alpha, style in zip(alphas, (\"b-\", \"g--\", \"r:\")):\n", " model = model_class(alpha, **model_kargs) if alpha > 0 else LinearRegression()\n", " if polynomial:\n", " model = Pipeline([\n", " (\"poly_features\", PolynomialFeatures(degree=10, include_bias=False)),\n", " (\"std_scaler\", StandardScaler()),\n", " (\"regul_reg\", model),\n", " ])\n", " model.fit(X, y)\n", " y_new_regul = model.predict(X_new)\n", " lw = 2 if alpha > 0 else 1\n", " plt.plot(X_new, y_new_regul, style, linewidth=lw, label=r\"$\\alpha = {}$\".format(alpha))\n", " plt.plot(X, y, \"b.\", linewidth=3)\n", " plt.legend(loc=\"upper left\", fontsize=15)\n", " plt.xlabel(\"$x_1$\", fontsize=18)\n", " plt.axis([0, 3, 0, 4])\n", "\n", "# Alpha가 0이면, 선형회귀와 동일하고, alpha가 커질수록 각 feature의 갸중채는 줄어든다.\n", "plt.figure(figsize=(8,4))\n", "plt.subplot(121)\n", "plot_model(Ridge, polynomial=False, alphas=(0, 10, 100), random_state=42)\n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18)\n", "plt.subplot(122)\n", "plot_model(Ridge, polynomial=True, alphas=(0, 10**-5, 1), random_state=42)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1.55071465]])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.linear_model import Ridge\n", "ridge_reg = Ridge(alpha=1, solver=\"cholesky\", random_state=42)\n", "ridge_reg.fit(X, y)\n", "ridge_reg.predict([[1.5]])" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.49905184])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sgd_reg = SGDRegressor(max_iter=50, tol=-np.infty, penalty=\"l2\", random_state=42)\n", "sgd_reg.fit(X, y.ravel())\n", "sgd_reg.predict([[1.5]])" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1.5507201]])" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ridge_reg = Ridge(alpha=1, solver=\"sag\", random_state=42)\n", "ridge_reg.fit(X, y)\n", "ridge_reg.predict([[1.5]])" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.linear_model import Lasso\n", "\n", "plt.figure(figsize=(8,4))\n", "plt.subplot(121)\n", "plot_model(Lasso, polynomial=False, alphas=(0, 0.1, 1), random_state=42)\n", "plt.ylabel(\"$y$\", rotation=0, fontsize=18)\n", "plt.subplot(122)\n", "plot_model(Lasso, polynomial=True, alphas=(0, 10**-7, 1), tol=1, random_state=42)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.53788174])" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.linear_model import Lasso\n", "lasso_reg = Lasso(alpha=0.1)\n", "lasso_reg.fit(X, y)\n", "lasso_reg.predict([[1.5]])" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.54333232])" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.linear_model import ElasticNet\n", "elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5, random_state=42)\n", "elastic_net.fit(X, y)\n", "elastic_net.predict([[1.5]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Early stopping\n", "$$y=2 + x + 0.5 \\times x^2 + \\text{error}$$" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'RMSE')" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "np.random.seed(42)\n", "m = 100\n", "X = 6 * np.random.rand(m, 1) - 3\n", "y = 2 + X + 0.5 * X**2 + np.random.randn(m, 1)\n", "\n", "X_train, X_val, y_train, y_val = train_test_split(X[:50], y[:50].ravel(), test_size=0.5, random_state=10)\n", "\n", "poly_scaler = Pipeline([\n", " (\"poly_features\", PolynomialFeatures(degree=90, include_bias=False)),\n", " (\"std_scaler\", StandardScaler()),\n", " ])\n", "\n", "X_train_poly_scaled = poly_scaler.fit_transform(X_train)\n", "X_val_poly_scaled = poly_scaler.transform(X_val)\n", "\n", "sgd_reg = SGDRegressor(max_iter=1,\n", " tol=-np.infty,\n", " penalty=None,\n", " eta0=0.0005,\n", " warm_start=True,\n", " learning_rate=\"constant\",\n", " random_state=42)\n", "\n", "n_epochs = 500\n", "train_errors, val_errors = [], []\n", "for epoch in range(n_epochs):\n", " sgd_reg.fit(X_train_poly_scaled, y_train)\n", " y_train_predict = sgd_reg.predict(X_train_poly_scaled)\n", " y_val_predict = sgd_reg.predict(X_val_poly_scaled)\n", " train_errors.append(mean_squared_error(y_train, y_train_predict))\n", " val_errors.append(mean_squared_error(y_val, y_val_predict))\n", "\n", "best_epoch = np.argmin(val_errors)\n", "best_val_rmse = np.sqrt(val_errors[best_epoch])\n", "\n", "plt.annotate('Best model',\n", " xy=(best_epoch, best_val_rmse),\n", " xytext=(best_epoch, best_val_rmse + 1),\n", " ha=\"center\",\n", " arrowprops=dict(facecolor='black', shrink=0.05),\n", " fontsize=16,\n", " )\n", "\n", "best_val_rmse -= 0.03 # just to make the graph look better\n", "plt.plot([0, n_epochs], [best_val_rmse, best_val_rmse], \"k:\", linewidth=2)\n", "plt.plot(np.sqrt(val_errors), \"b-\", linewidth=3, label=\"Validation set\")\n", "plt.plot(np.sqrt(train_errors), \"r--\", linewidth=2, label=\"Training set\")\n", "plt.legend(loc=\"upper right\", fontsize=14)\n", "plt.xlabel(\"Epoch\", fontsize=14)\n", "plt.ylabel(\"RMSE\", fontsize=14)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "from sklearn.base import clone\n", "sgd_reg = SGDRegressor(max_iter=1, tol=-np.infty, warm_start=True, penalty=None,\n", " learning_rate=\"constant\", eta0=0.0005, random_state=42)\n", "\n", "minimum_val_error = float(\"inf\")\n", "best_epoch = None\n", "best_model = None\n", "for epoch in range(1000):\n", " sgd_reg.fit(X_train_poly_scaled, y_train) # continues where it left off\n", " y_val_predict = sgd_reg.predict(X_val_poly_scaled)\n", " val_error = mean_squared_error(y_val, y_val_predict)\n", " if val_error < minimum_val_error:\n", " minimum_val_error = val_error\n", " best_epoch = epoch\n", " best_model = clone(sgd_reg)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(239, SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.0005,\n", " fit_intercept=True, l1_ratio=0.15, learning_rate='constant',\n", " loss='squared_loss', max_iter=1, n_iter=None, penalty=None,\n", " power_t=0.25, random_state=42, shuffle=True, tol=-inf, verbose=0,\n", " warm_start=True))" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "best_epoch, best_model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 훈련 세트에 있는 특성들이 각기 아주 다른 스케일을 가지고 있습니다. 이런 데이터에 잘 작동하지 않은 알고리즘은 무엇일까요? 그 이유는 무엇일까요? 이 문제를 어떻게 해결할 수 있을까요?\n", " - 훈련 세트에 있는 특성의 스케일이 매우 다르면 비용 함수는 길쭉한 타원 모양의 그릇 형태가 됩니다. 그래서 **경사 하강법(SGD) 알고리즘이 수렴하는 데 오랜 시간이 걸릴 것** 입니다. 이를 해결하기 위해서는 모델을 훈련하기 전에 데이터의 스케일을 조절해야 합니다. **정규방정식은 스케일 조정 없이도 잘 작동** 합니다. 또한 **규제가 있는 모델은 특성의 스케일이 다르면 지역 최적점에 수렴할 가능성** 이 있습니다. 실제로 규제는 가중치가 커지지 못하게 제약을 가하므로 특성값이 작으면 큰 값을 가진 특성에 비해 무시되는 경향이 있습니다. 따라서 특성값들의 스케일을 조절해야합니다.\n", "\n", "- 다항 회귀를 사용했을 때 학습 곡선을 보니 훈련 오차와 검증 오차 사이에 간격이 큽니다. 무슨 일이 생긴 걸까요? 이 문제를 해결하는 세 가지 방법은 무엇일까요?\n", " - 검증 오차가 훈련 오차보다 훨씬 더 높으면 **모델이 훈련 세트에 과적합** 되었기 때문일 가능성이 높습니다. 이를 해결하는 \n", " - 첫 번째 방법은 **다항 차수를 낮추는 것**입니다(다항회귀이기 때문에, 예를 들어 20차 회귀 방정식이었으면 10차 회귀 방정식으로 줄이는 것). \n", " - 두 번째 방법은 **모델을 규제**하는 것입니다. 예를 들어 비용 함수에 $l_2$ 패널티(ridge)나 $l_1$ 패널티(lasso)를 추가합니다. 이 방법도 모델의 자유도를 감소시킵니다. \n", " - 세 번째 방법은 **훈련 세트의 크기를 증가**시키는 것입니다.\n", "\n", "- 릿지 회귀를 사용했을 때 훈련 오차와 검증 오차가 거의 비슷하고 둘 다 높았습니다. 이 모델에는 높은 편향이 문제인가요? 아니면 높은 분산이 문제인가요? 규제 하이퍼파라미터 $\\alpha$를 증가시켜야 할까요? 아니면 줄여야 할까요?\n", " - 훈련 에러와 검증 에러가 비슷하고 둘 다 매우 높다면 모델이 훈련 세트에 과소적합(underfitting)되었을 가능성이 높습니다. 즉 bias가 높은 모델입니다. 따라서 규제 하이퍼파라미터 $\\alpha$를 감소시켜야 합니다.\n", "\n", "- 다음과 같이 사용해야 하는 이유는?\n", " - 평범한 선형 회귀(즉 아무런 규제가 없는 모델) 대신 릿지 회귀\n", " - 일반적으로 규제가 있는 모델이 없는 모델보다 성능이 좋습니다. 그래서 평범한 선형 회귀보다 릿지 회귀가 선호됩니다.\n", " - 릿지 회귀 대신 라쏘 회귀\n", " - 라쏘 회귀는 $l_1$ 페널티를 사용하여 가중치를 완전히 0으로 만드는 경향이 있습니다. 이는 가장 중요한 가중치를 제외하고는 모두 0이 되는 희소한 모델을 만듭니다. 또한 자동으로 특성 선택의 효과를 가지므로 **단지 몇 개의 특성만 실제 유용할 것이라고 의심될 때 사용**하면 좋습니다. 만약 확신이 없다면 릿지 회귀를 사용해야 합니다.\n", " \n", "- 3가지 각기 다른 gradient를 무한하게 또는 충분하게 반복하면 같은 모델들을 만들어낼까요?(Global optimum에 도달할까요?)\n", " - 최적화할 함수가(선형 회귀나 로지스틱 회귀처럼) **볼록 함수(convex function)이고 학습률이 너무 크지 않다고 가정**하면, 모든 경사 하강법 알고리즘이 전역 최적값(global optimum)에 도달하게 되고 결국 비슷한 모델을 만들 것입니다. 하지만 학습률을 점진적으로 감소시키지 않으면 Stochastic Gradient Descent와 Mini-batch Gradient Descent는 진정한 최적점(optimum)에 도달하지 못할 것입니다. 대신 전역 최적값 주변을 이리저리 맴돌게 됩니다. 따라서 매우 오랫동안 훈련을 해도 경사 하강법 알고리즘들은 조금씩 다른 모델을 만들게 됩니다." ] } ], "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.7" }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }