{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Uczenie maszynowe\n",
"# 5. Metody ewaluacji"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## 5.1. Metodologia testowania"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"source": [
"W uczeniu maszynowym bardzo ważna jest ewaluacja budowanego modelu. Dlatego dobrze jest podzielić posiadane dane na odrębne zbiory – osobny zbiór danych do uczenia i osobny do testowania. W niektórych przypadkach potrzeba będzie dodatkowo wyodrębnić tzw. zbiór walidacyjny."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Zbiór uczący a zbiór testowy"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Na zbiorze uczącym uczymy algorytmy, a na zbiorze testowym sprawdzamy ich poprawność.\n",
"* Zbiór uczący powinien być kilkukrotnie większy od testowego (np. 4:1, 9:1 itp.).\n",
"* Zbiór testowy często jest nieznany.\n",
"* Należy unikać mieszania danych testowych i uczących – nie wolno „zanieczyszczać” danych uczących danymi testowymi!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Czasami potrzebujemy dobrać (hiper-)parametry modelu, np. $\\alpha$ – który zbiór wykorzystać do tego celu?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Zbiór walidacyjny"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Do doboru parametrów najlepiej użyć jeszcze innego zbioru – jest to tzw. **zbiór walidacyjny**."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
" * Zbiór walidacyjny powinien mieć wielkość zbliżoną do wielkości zbioru testowego, czyli np. dane można podzielić na te trzy zbiory w proporcjach 3:1:1, 8:1:1 itp."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Walidacja krzyżowa"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Którą część danych wydzielić jako zbiór walidacyjny tak, żeby było „najlepiej”?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
" * Niech każda partia danych pełni tę rolę naprzemiennie!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Walidacja krzyżowa\n",
"\n",
"* Podziel dane $D = \\left\\{ (x^{(1)}, y^{(1)}), \\ldots, (x^{(m)}, y^{(m)})\\right\\} $ na $N$ rozłącznych zbiorów $T_1,\\ldots,T_N$\n",
"* Dla $i=1,\\ldots,N$, wykonaj:\n",
" * Użyj $T_i$ do walidacji i zbiór $S_i$ do uczenia, gdzie $S_i = D \\smallsetminus T_i$. \n",
" * Zapisz model $\\theta_i$.\n",
"* Akumuluj wyniki dla modeli $\\theta_i$ dla zbiorów $T_i$.\n",
"* Ustalaj parametry uczenia na akumulowanych wynikach."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Walidacja krzyżowa – wskazówki\n",
"\n",
"* Zazwyczaj ustala się $N$ w przedziale od $4$ do $10$, tzw. $N$-krotna walidacja krzyżowa (*$N$-fold cross validation*). \n",
"* Zbiór $D$ warto zrandomizować przed podziałem.\n",
"* W jaki sposób akumulować wyniki dla wszystkich zbiórow $T_i$?\n",
"* Po ustaleniu parametrów dla każdego $T_i$, uczymy model na całych danych uczących z ustalonymi parametrami.\n",
"* Testujemy na zbiorze testowym (jeśli nim dysponujemy)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### _Leave-one-out_\n",
"\n",
"Jest to szczególny przypadek walidacji krzyżowej, w której $N = m$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Jaki jest rozmiar pojedynczego zbioru $T_i$?\n",
"* Jakie są zalety i wady tej metody?\n",
"* Kiedy może być przydatna?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"source": [
"Metoda *leave-one-out* może się przydać w dwóch przypadkach:\n",
" * kiedy zbiór danych jest mały\n",
" * kiedy dokładność ewaluacji jest dla nas ważniejsza niż szybkość"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Zbiór walidujący a algorytmy optymalizacji\n",
"\n",
"* Gdy błąd rośnie na zbiorze uczącym, mamy źle dobrany parametr $\\alpha$. Należy go wtedy zmniejszyć.\n",
"* Gdy błąd zmniejsza się na zbiorze uczącym, ale rośnie na zbiorze walidującym, mamy do czynienia ze zjawiskiem **nadmiernego dopasowania** (*overfitting*).\n",
"* Należy wtedy przerwać optymalizację. Automatyzacja tego procesu to _early stopping_."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## 5.2. Miary jakości"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"source": [
"Aby przeprowadzić ewaluację modelu, musimy wybrać **miarę** (**metrykę**), jakiej będziemy używać.\n",
"\n",
"Jakiej miary użyc najlepiej?\n",
" * To zależy od rodzaju zadania.\n",
" * Innych metryk używa się do regresji, a innych do klasyfikacji"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Metryki dla zadań regresji\n",
"\n",
"Dla zadań regresji możemy zastosować np.:\n",
" * błąd średniokwadratowy (*mean-square error*, MSE):\n",
" $$ \\mathrm{MSE} \\, = \\, \\frac{1}{m} \\sum_{i=1}^{m} \\left( \\hat{y}^{(i)} - y^{(i)} \\right)^2 $$\n",
" * pierwiastek z błędu średniokwadratowego (*root-mean-square error*, RMSE):\n",
" $$ \\mathrm{RMSE} \\, = \\, \\sqrt{ \\frac{1}{m} \\sum_{i=1}^{m} \\left( \\hat{y}^{(i)} - y^{(i)} \\right)^2 } $$\n",
" * średni błąd bezwzględny (*mean absolute error*, MAE):\n",
" $$ \\mathrm{MAE} \\, = \\, \\frac{1}{m} \\sum_{i=1}^{m} \\left| \\hat{y}^{(i)} - y^{(i)} \\right| $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"source": [
"W powyższych wzorach $y^{(i)}$ oznacza **oczekiwaną** wartości zmiennej $y$ w $i$-tym przykładzie, a $\\hat{y}^{(i)}$ oznacza wartość zmiennej $y$ w $i$-tym przykładzie wyliczoną (**przewidzianą**) przez nasz model."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Metryki dla zadań klasyfikacji\n",
"\n",
"Aby przedstawić kilka najpopularniejszych metryk stosowanych dla zadań klasyfikacyjnych, posłużmy się następującym przykładem:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Przydatne importy\n",
"\n",
"import ipywidgets as widgets\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas\n",
"import random\n",
"import seaborn\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"def powerme(x1,x2,n):\n",
" \"\"\"Funkcja, która generuje n potęg dla zmiennych x1 i x2 oraz ich iloczynów\"\"\"\n",
" X = []\n",
" for m in range(n+1):\n",
" for i in range(m+1):\n",
" X.append(np.multiply(np.power(x1,i),np.power(x2,(m-i))))\n",
" return np.hstack(X)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"def plot_data_for_classification(X, Y, xlabel=None, ylabel=None, Y_predicted=[], highlight=None):\n",
" \"\"\"Wykres danych dla zadania klasyfikacji\"\"\"\n",
" fig = plt.figure(figsize=(16*.6, 9*.6))\n",
" ax = fig.add_subplot(111)\n",
" fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n",
" X = X.tolist()\n",
" Y = Y.tolist()\n",
" X1n = [x[1] for x, y in zip(X, Y) if y[0] == 0]\n",
" X1p = [x[1] for x, y in zip(X, Y) if y[0] == 1]\n",
" X2n = [x[2] for x, y in zip(X, Y) if y[0] == 0]\n",
" X2p = [x[2] for x, y in zip(X, Y) if y[0] == 1]\n",
" \n",
" if len(Y_predicted) > 0:\n",
" Y_predicted = Y_predicted.tolist()\n",
" X1tn = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 0]\n",
" X1fn = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 0]\n",
" X1tp = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 1]\n",
" X1fp = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 1]\n",
" X2tn = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 0]\n",
" X2fn = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 0]\n",
" X2tp = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 1]\n",
" X2fp = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 1]\n",
" \n",
" if highlight == 'tn':\n",
" ax.scatter(X1tn, X2tn, c='red', marker='x', s=100, label='Dane')\n",
" ax.scatter(X1fn, X2fn, c='gray', marker='o', s=50, label='Dane')\n",
" ax.scatter(X1tp, X2tp, c='gray', marker='o', s=50, label='Dane')\n",
" ax.scatter(X1fp, X2fp, c='gray', marker='x', s=50, label='Dane')\n",
" elif highlight == 'fn':\n",
" ax.scatter(X1tn, X2tn, c='gray', marker='x', s=50, label='Dane')\n",
" ax.scatter(X1fn, X2fn, c='green', marker='o', s=100, label='Dane')\n",
" ax.scatter(X1tp, X2tp, c='gray', marker='o', s=50, label='Dane')\n",
" ax.scatter(X1fp, X2fp, c='gray', marker='x', s=50, label='Dane')\n",
" elif highlight == 'tp':\n",
" ax.scatter(X1tn, X2tn, c='gray', marker='x', s=50, label='Dane')\n",
" ax.scatter(X1fn, X2fn, c='gray', marker='o', s=50, label='Dane')\n",
" ax.scatter(X1tp, X2tp, c='green', marker='o', s=100, label='Dane')\n",
" ax.scatter(X1fp, X2fp, c='gray', marker='x', s=50, label='Dane')\n",
" elif highlight == 'fp':\n",
" ax.scatter(X1tn, X2tn, c='gray', marker='x', s=50, label='Dane')\n",
" ax.scatter(X1fn, X2fn, c='gray', marker='o', s=50, label='Dane')\n",
" ax.scatter(X1tp, X2tp, c='gray', marker='o', s=50, label='Dane')\n",
" ax.scatter(X1fp, X2fp, c='red', marker='x', s=100, label='Dane')\n",
" else:\n",
" ax.scatter(X1tn, X2tn, c='red', marker='x', s=50, label='Dane')\n",
" ax.scatter(X1fn, X2fn, c='green', marker='o', s=50, label='Dane')\n",
" ax.scatter(X1tp, X2tp, c='green', marker='o', s=50, label='Dane')\n",
" ax.scatter(X1fp, X2fp, c='red', marker='x', s=50, label='Dane')\n",
"\n",
" else:\n",
" ax.scatter(X1n, X2n, c='r', marker='x', s=50, label='Dane')\n",
" ax.scatter(X1p, X2p, c='g', marker='o', s=50, label='Dane')\n",
" \n",
" if xlabel:\n",
" ax.set_xlabel(xlabel)\n",
" if ylabel:\n",
" ax.set_ylabel(ylabel)\n",
" \n",
" ax.margins(.05, .05)\n",
" return fig"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Wczytanie danych\n",
"import pandas\n",
"import numpy as np\n",
"\n",
"alldata = pandas.read_csv('data-metrics.tsv', sep='\\t')\n",
"data = np.matrix(alldata)\n",
"\n",
"m, n_plus_1 = data.shape\n",
"n = n_plus_1 - 1\n",
"\n",
"X2 = powerme(data[:, 1], data[:, 2], n)\n",
"Y2 = np.matrix(data[:, 0]).reshape(m, 1)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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tUpr1qxRz549/dunT5+uyy+/XBkZGbriiiv06quvauvWrSotLQ16nAULFqimpsb/cPHhE7GueXGNsrLgRTgAAADQqqgKX/3791dCQoKqq6sDtldXVystLa3N5z700EO6//779eabb+qcc85ps+3QoUPVv39/7d27N+j+pKQk2e32gAcQs5oHr9JSaezYlkU4CGAAAABtiqrwZbPZNGrUKK1fv96/zev1av369crKymr1eQ888IDuvfdeFRcXa/To0e3+nC+++EIHDx7UoEGDuqXf6GbtrSXFWlPdx+ORnM7gVQ2bV0F0Ojn3AAAAbYiq8CVJ8+bN01NPPaVnnnlGu3bt0vXXX69jx45p5syZkqQZM2ZowYIF/va///3vdffdd2vFihU67bTTVFVVpaqqKh09elSSdPToUd1+++1699139dlnn2n9+vXKycnRGWecoUmTJoXlNaINRUVSRkbroywul29/UZG5/YpVNptUUCClpwevatgUwNLTfe1Y5wsAAHSnGPvSPerCV25urh566CHl5+dr5MiR2rFjh4qLi/1FOCorK3XgwAF/+8cff1wej0f/8R//oUGDBvkfDz30kCQpISFBH3zwgS6//HKlp6dr1qxZGjVqlDZs2KCkpKSwvEa0wuOR8vOliorgt7k13R5XUeFrF2W/jBErN1faubP1qoYOh29/bq65/QIAALEtBr90j7p1viIR63yZKNj8I4ej9e0AAACIPh6PL1hVVAT/bHf8Z7/0dN8XwSbegRMX63wBLeYZTZggbdpE8AIAAIglNptUUhK8uFfzL91LSqJm6gPhC9GneQDLziZ4ATBVbX2tqo9Wq7a+NtxdAYDYFYNfuhO+EJ0cDqmwMHBbYWFU/fIBiD4bKzdqWtE09V7UW2l/SFPvRb01rWiayirLwt01AIhNMfalO+EL0cnlkvLyArfl5bHWFICQeXzr4xq/crzWVayT1/BKkryGV+sq1umilRdp2XvLwtxDAIhRMfSlO+EL0af5fb5lZSz2CyCkNlZu1NzX58qQoQZvQ8C+Bm+DDBm64bUbGAEDgFCIoS/dCV+ILsGqGo4d2/J+4Cj8ZQQQuRaXL1aCNaHNNgnWBD387sMm9QgA4kSMfelO+EL08HgkpzP4fb7N7wd2OlnnC0C3qK2v1do9a1uMeDXX4G3Qmt1rKMIBAN0lBr90J3wheths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xw7NmjWrxb65c+eqf//+GjNmjFasWKG2BgTr6urkdrsDHgAAAIApcnN9I1qtVTV0OHz7c3PN7RfaFTUjX1VVVRo4cGDAtsTERPXr109VVVUdOsby5ct11llnaezYsQHbCwoK9K//+q/q1auX3nzzTd1www06evSofv3rXwc9zqJFi3TPPfd07YUA6ByPp+1v7drbDwBNeD9BLGnvWuVajkhhH/maP39+q0Uxmh67d+8+4Z9TW1ur559/Puio1913363s7Gydd955uvPOO3XHHXfowQcfbPVYCxYsUE1Njf/hYjIjEBpFRb772lv7HXO5fPuLisztF4Dow/sJgAgQ9oIb33zzjQ4ePNhmm6FDh+pPf/qTbr31Vv3jH//wb29oaFDPnj21evVqTZ06tc1jFBYWatasWfryyy81YMCANtu+9tpr+ulPf6rvv/9eSUlJ7b4GCm4AIcCEYgDdwePx/dna+4nHI1VX834CoFOituDGgAED2g1DkpSVlaXDhw9r27ZtGjVqlCTp7bffltfrVWZmZrvPX758uS6//PIO/awdO3aob9++HQpeAELEZvNNJG76QDRhwg8fmJqX2C0p4YMSgJaKin4oShDs/UTy/ffRo9LXX/N+AiDkwn7bYUedddZZmjx5smbPnq0tW7aorKxMN954o6ZPn+6vdPjll19q+PDh2rJlS8Bz9+7dq3feeUe/+tWvWhx33bp1+p//+R99+OGH2rt3rx5//HH993//t2666SZTXheANjRVbDp+zZJNm1qubdLahGMA8cvj8QWvigrfe4YU+H4ybpx04YW+//76a+n003k/ARByURO+JOm5557T8OHDNXHiRF122WUaN26cnnzySf/++vp67dmzR999913A81asWKFTTjlFl1xySYtj9ujRQ0uWLFFWVpZGjhypJ554QosXL9bChQtD/noAdEDzAJadTfAC0L6m0fPjv7yRfO8bQ4ZIlZXSV1/5tg0ZIv3tb7yfAAi5sM/5igXM+QJMsGmTL3g1KSuTmlUuBYAWmt+mXFgo/exnPwQvifcTAJ3W1c//UTXyBSBOuVxSXl7gtry81quWAUCTYKPnxwcvifcTAKYhfAGIbM2/tS4rC7yNiA9MANrjcPhGvI43eDDvJwBMR/gCELmaB6/SUt+tQc2LcPCBCUBbXC7pqqsCtyUmBi/qw/sJgBAifAGI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VVdeeaUeffRRc14UAAAdlZsrTZ3aerBqqjJI8AKAiBV163xFoq7W+QcAAAAQfVjnCwAAAAAiGOELAAAAAExA+AIAAAAAExC+AAAAAMAEhC8AAAAAMAHhCwAAAABMQPgCAAAAABMQvgAAAADABIQvAAAAADAB4QsAAAAATJAY7g7EAsMwJElutzvMPQEAAAAQak2f+5tyQEcRvrrBkSNHJEkOhyPMPQEAAABgliNHjiglJaXD7S1GZ+MaWvB6vfrqq6908skny2KxhPRnud1uORwOuVwu2e32kP6seMe5Ng/n2jyca/Nwrs3F+TYP59o8nGvzdPZcG4ahI0eOaPDgwbJaOz6Ti5GvbmC1WnXKKaeY+jPtdju/hCbhXJuHc20ezrV5ONfm4nybh3NtHs61eTpzrjsz4tWEghsAAAAAYALCFwAAAACYgPAVZZKSkrRw4UIlJSWFuysxj3NtHs61eTjX5uFcm4vzbR7OtXk41+Yx61xTcAMAAAAATMDIFwAAAACYgPAFAAAAACYgfAEAAACACQhfAAAAAGACwhcAAAAAmIDwFWF+97vfaezYserVq5f69OnToecYhqH8/HwNGjRIycnJcjqd+uSTTwLaHDp0SFdffbXsdrv69OmjWbNm6ejRoyF4BdGls+fls88+k8ViCfpYvXq1v12w/atWrTLjJUWsrlyDEyZMaHEe58yZE9CmsrJSU6ZMUa9evTRw4EDdfvvtamhoCOVLiXidPdeHDh3STTfdpGHDhik5OVlDhgzRr3/9a9XU1AS047qWlixZotNOO009e/ZUZmamtmzZ0mb71atXa/jw4erZs6cyMjL0+uuvB+zvyPt3vOrMuX7qqad00UUXqW/fvurbt6+cTmeL9tdee22L63fy5MmhfhlRoTPn+umnn25xHnv27BnQhuu6dZ0518H+DbRYLJoyZYq/Ddd1cO+8847+/d//XYMHD5bFYtHLL7/c7nNKS0t1/vnnKykpSWeccYaefvrpFm06+29AUAYiSn5+vrF48WJj3rx5RkpKSoeec//99xspKSnGyy+/bPz97383Lr/8cuP00083amtr/W0mT55snHvuuca7775rbNiwwTjjjDOMq666KkSvInp09rw0NDQYBw4cCHjcc889Ru/evY0jR47420kyVq5cGdDu+P8f8agr1+DFF19szJ49O+A81tTU+Pc3NDQYZ599tuF0Oo3333/feP31143+/fsbCxYsCPXLiWidPdc7d+40pk2bZrzyyivG3r17jfXr1xtnnnmmceWVVwa0i/fretWqVYbNZjNWrFhhfPTRR8bs2bONPn36GNXV1UHbl5WVGQkJCcYDDzxgfPzxx8Zdd91l9OjRw9i5c6e/TUfev+NRZ8/1L37xC2PJkiXG+++/b+zatcu49tprjZSUFOOLL77wt7nmmmuMyZMnB1y/hw4dMuslRazOnuuVK1cadrs94DxWVVUFtOG6Dq6z5/rgwYMB5/nDDz80EhISjJUrV/rbcF0H9/rrrxv/+Z//abz00kuGJGPNmjVttt+3b5/Rq1cvY968ecbHH39sPPbYY0ZCQoJRXFzsb9PZ/3+tIXxFqJUrV3YofHm9XiMtLc148MEH/dsOHz5sJCUlGX/+858NwzCMjz/+2JBkbN261d/mjTfeMCwWi/Hll192e9+jRXedl5EjRxr/+3//74BtHflFjyddPdcXX3yx8Zvf/KbV/a+//rphtVoD/uF//PHHDbvdbtTV1XVL36NNd13XL7zwgmGz2Yz6+nr/tni/rseMGWPMnTvX//fGxkZj8ODBxqJFi4K2//nPf25MmTIlYFtmZqbxf/7P/zEMo2Pv3/Gqs+e6uYaGBuPkk082nnnmGf+2a665xsjJyenurka9zp7r9j6fcF237kSv64cfftg4+eSTjaNHj/q3cV23ryP/dt1xxx3GT37yk4Btubm5xqRJk/x/P9H/f0247TDK7d+/X1VVVXI6nf5tKSkpyszMVHl5uSSpvLxcffr00ejRo/1tnE6nrFarNm/ebHqfI0V3nJdt27Zpx44dmjVrVot9c+fOVf/+/TVmzBitWLFCRhyvZ34i5/q5555T//79dfbZZ2vBggX67rvvAo6bkZGh1NRU/7ZJkybJ7Xbro48+6v4XEgW66/e9pqZGdrtdiYmJAdvj9br2eDzatm1bwHut1WqV0+n0v9c2V15eHtBe8l2fTe078v4dj7pyrpv77rvvVF9fr379+gVsLy0t1cCBAzVs2DBdf/31OnjwYLf2Pdp09VwfPXpUp556qhwOh3JycgLeb7mug+uO63r58uWaPn26TjrppIDtXNcnrr336+74/9cksf0miGRVVVWSFPDhs+nvTfuqqqo0cODAgP2JiYnq16+fv0086o7zsnz5cp111lkaO3ZswPaCggL967/+q3r16qU333xTN9xwg44ePapf//rX3db/aNLVc/2LX/xCp556qgYPHqwPPvhAd955p/bs2aOXXnrJf9xg137TvnjUHdf1t99+q3vvvVfXXXddwPZ4vq6//fZbNTY2Br3edu/eHfQ5rV2fx783N21rrU086sq5bu7OO+/U4MGDAz4oTZ48WdOmTdPpp5+uTz/9VL/97W916aWXqry8XAkJCd36GqJFV871sGHDtGLFCp1zzjmqqanRQw89pLFjx+qjjz7SKaecwnXdihO9rrds2aIPP/xQy5cvD9jOdd09Wnu/drvdqq2t1T/+8Y8Tfl9qQvgywfz58/X73/++zTa7du3S8OHDTepRbOvo+T5RtbW1ev7553X33Xe32Hf8tvPOO0/Hjh3Tgw8+GHMfUkN9ro//8J+RkaFBgwZp4sSJ+vTTT/XjH/+4y8eNRmZd1263W1OmTNGIESP0X//1XwH74uW6RnS7//77tWrVKpWWlgYUgpg+fbr/vzMyMnTOOefoxz/+sUpLSzVx4sRwdDUqZWVlKSsry//3sWPH6qyzztITTzyhe++9N4w9i23Lly9XRkaGxowZE7Cd6zr6EL5McOutt+raa69ts83QoUO7dOy0tDRJUnV1tQYNGuTfXl1drZEjR/rbfP311wHPa2ho0KFDh/zPjyUdPd8nel5efPFFfffdd5oxY0a7bTMzM3Xvvfeqrq5OSUlJ7baPFmad6yaZmZmSpL179+rHP/6x0tLSWlQaqq6ulqSYu7bNONdHjhzR5MmTdfLJJ2vNmjXq0aNHm+1j9boOpn///kpISPBfX02qq6tbPa9paWlttu/I+3c86sq5bvLQQw/p/vvvV0lJic4555w22w4dOlT9+/fX3r174/ZD6omc6yY9evTQeeedp71790rium7NiZzrY8eOadWqVSooKGj353Bdd01r79d2u13JyclKSEg44d+VJsz5MsGAAQM0fPjwNh82m61Lxz799NOVlpam9evX+7e53W5t3rzZ/81UVlaWDh8+rG3btvnbvP322/J6vf4Ps7Gko+f7RM/L8uXLdfnll2vAgAHttt2xY4f69u0bcx9QzTrXTXbs2CFJ/n/Qs7KytHPnzoCw8dZbb8lut2vEiBHd8yIjRKjPtdvt1iWXXCKbzaZXXnmlRenoYGL1ug7GZrNp1KhRAe+1Xq9X69evDxgFOF5WVlZAe8l3fTa178j7dzzqyrmWpAceeED33nuviouLA+Y8tuaLL77QwYMHAwJCvOnquT5eY2Ojdu7c6T+PXNfBnci5Xr16terq6vTLX/6y3Z/Ddd017b1fd8fvil+nynMg5D7//HPj/fff95cvf//99433338/oIz5sGHDjJdeesn/9/vvv9/o06ePsXbtWuODDz4wcnJygpaaP++884zNmzcbGzduNM4880xKzRvtn5cvvvjCGDZsmLF58+aA533yySeGxWIx3njjjRbHfOWVV4ynnnrK2Llzp/HJJ58YS5cuNXr16mXk5+eH/PVEss6e67179xoFBQXGe++9Z+zfv99Yu3atMXToUGP8+PH+5zSVmr/kkkuMHTt2GMXFxcaAAQMoNd/Jc11TU2NkZmYaGRkZxt69ewNKFjc0NBiGwXVtGL4yw0lJScbTTz9tfPzxx8Z1111n9OnTx19tMy8vz5g/f76/fVlZmZGYmGg89NBDxq5du4yFCxcGLTXf3vt3POrsub7//vsNm81mvPjiiwHXb9O/nUeOHDFuu+02o7y83Ni/f79RUlJinH/++caZZ55pfP/992F5jZGis+f6nnvuMf7yl78Yn376qbFt2zZj+vTpRs+ePY2PPvrI34brOrjOnusm48aNM3Jzc1ts57pu3ZEjR/yfoSUZixcvNt5//33j888/NwzDMObPn2/k5eX52zeVmr/99tuNXbt2GUuWLAlaar6t/38dRfiKMNdcc40hqcXjr3/9q7+N/rnWThOv12vcfffdRmpqqpGUlGRMnDjR2LNnT8BxDx48aFx11VVG7969DbvdbsycOTMg0MWr9s7L/v37W5x/wzCMBQsWGA6Hw2hsbGxxzDfeeMMYOXKk0bt3b+Okk04yzj33XGPZsmVB28aTzp7ryspKY/z48Ua/fv2MpKQk44wzzjBuv/32gHW+DMMwPvvsM+PSSy81kpOTjf79+xu33nprQHn0eNTZc/3Xv/416PuOJGP//v2GYXBdN3nssceMIUOGGDabzRgzZozx7rvv+vddfPHFxjXXXBPQ/oUXXjDS09MNm81m/OQnPzFee+21gP0def+OV50516eeemrQ63fhwoWGYRjGd999Z1xyySXGgAEDjB49ehinnnqqMXv27E5/aIpVnTnXN998s79tamqqcdlllxnbt28POB7Xdes6+x6ye/duQ5Lx5ptvtjgW13XrWvt3ren8XnPNNcbFF1/c4jkjR440bDabMXTo0IDP2k3a+v/XURbDiJM6wQAAAAAQRsz5AgAAAAATEL4AAAAAwASELwAAAAAwAeELAAAAAExA+AIAAAAAExC+AAAAAMAEhC8AAAAAMAHhCwAAAABMQPgCAAAAABMQvgAA6IA///nPSk5O1oEDB/zbZs6cqXPOOUc1NTVh7BkAIFpYDMMwwt0JAAAinWEYGjlypMaPH6/HHntMCxcu1IoVK/Tuu+/qRz/6Ubi7BwCIAonh7gAAANHAYrHod7/7nf7jP/5DaWlpeuyxx7RhwwZ/8Jo6dapKS0s1ceJEvfjii2HuLQAgEjHyBQBAJ5x//vn66KOP9Oabb+riiy/2by8tLdWRI0f0zDPPEL4AAEEx5wsAgA4qLi7W7t271djYqNTU1IB9EyZM0MknnxymngEAogHhCwCADti+fbt+/vOfa/ny5Zo4caLuvvvucHcJABBlmPMFAEA7PvvsM02ZMkW//e1vddVVV2no0KHKysrS9u3bdf7554e7ewCAKMHIFwAAbTh06JAmT56snJwczZ8/X5KUmZmpSy+9VL/97W/D3DsAQDRh5AsAgDb069dPu3fvbrH9tddeC0NvAADRjGqHAAB0A6fTqb///e86duyY+vXrp9WrVysrKyvc3QIARBDCFwAAAACYgDlfAAAAAGACwhcAAAAAmIDwBQAAAAAmIHwBAAAAgAkIXwAAAABgAsIXAAAAAJiA8AUAAAAAJiB8AQAAAIAJCF8AAAAAYALCFwAAAACYgPAFAAAAACb4/xm/7/XuDz1BAAAAAElFTkSuQmCC\n",
"text/plain": [
"