{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Ensemble methods" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "//anaconda/lib/python3.5/site-packages/sklearn/utils/fixes.py:313: FutureWarning: numpy not_equal will not check object identity in the future. The comparison did not return the same result as suggested by the identity (`is`)) and will change.\n", " _nan_object_mask = _nan_object_array != _nan_object_array\n" ] } ], "source": [ "%matplotlib inline\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.datasets import load_digits\n", "from sklearn.model_selection import StratifiedKFold\n", "from sklearn.model_selection import cross_validate\n", "import warnings; warnings.simplefilter('ignore')\n", "\n", "# load data\n", "digits = load_digits()\n", "X = digits.data\n", "y = digits.target\n", "X /= X.max()\n", " \n", "cv_generator = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at accuracy as a function of the number of trees used in the ensemble:\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num estimators: 10\n", "num estimators: 20\n", "num estimators: 50\n", "num estimators: 100\n", "num estimators: 250\n", "num estimators: 500\n", "num estimators: 1000\n" ] } ], "source": [ "n_estimators = [10, 20, 50, 100, 250, 500, 1000]\n", "accuracy = []\n", "for estimators in n_estimators :\n", " print (\"num estimators: \", estimators)\n", " classifier = RandomForestClassifier(n_estimators=estimators)\n", " results = cross_validate(classifier, X, y, cv=cv_generator, scoring='accuracy', return_train_score=False)\n", " accuracy.append(np.mean(results['test_score']))\n", " " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5,1,'performance of random forests on the digits data')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5,0,'number of trees')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0,0.5,'accuracy')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.semilogx(n_estimators, accuracy, 'ob')\n", "plt.title('performance of random forests on the digits data')\n", "plt.xlabel('number of trees')\n", "plt.ylabel('accuracy')\n", "plt.show()\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compared to a single decision tree:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.84981986131845166" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.tree import DecisionTreeClassifier\n", "classifier = DecisionTreeClassifier(max_depth=None)\n", "results = cross_validate(classifier, X, y, cv=cv_generator, scoring='accuracy', return_train_score=False)\n", "np.mean(results['test_score'])\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num estimators: 10\n", "num estimators: 20\n", "num estimators: 50\n", "num estimators: 100\n", "num estimators: 250\n", "num estimators: 500\n", "num estimators: 1000\n" ] } ], "source": [ "from sklearn.ensemble import AdaBoostClassifier\n", "from sklearn.ensemble import BaggingClassifier\n", "n_estimators = [10, 20, 50, 100, 250, 500, 1000]\n", "accuracy_bagging = []\n", "accuracy_adaboost = []\n", "for estimators in n_estimators :\n", " print (\"num estimators: \", estimators)\n", " classifier = BaggingClassifier(base_estimator=DecisionTreeClassifier(), n_estimators=estimators, random_state=0)\n", " results = cross_validate(classifier, X, y, cv=cv_generator, scoring='accuracy', return_train_score=False)\n", " accuracy_bagging.append(np.mean(results['test_score']))\n", " classifier = AdaBoostClassifier(DecisionTreeClassifier(max_depth=3), n_estimators=estimators)\n", " results = cross_validate(classifier, X, y, cv=cv_generator, scoring='accuracy', return_train_score=False)\n", " accuracy_adaboost.append(np.mean(results['test_score']))\n", "\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5,1,'performance of ensemble methods on the digits data')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5,0,'number of trees')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0,0.5,'accuracy')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n/wNwHzby74vITQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.semilogx(n_estimators, accuracy, 'ob', label='Random Forests')\n", "plt.semilogx(n_estimators, accuracy_bagging, 'dc', label='Bagging')\n", "plt.semilogx(n_estimators, accuracy_adaboost, 'sr', label='AdaBoost')\n", "plt.legend()\n", "plt.title('performance of ensemble methods on the digits data')\n", "plt.xlabel('number of trees')\n", "plt.ylabel('accuracy')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "//anaconda/lib/python3.5/site-packages/sklearn/model_selection/_split.py:1943: FutureWarning: You should specify a value for 'cv' instead of relying on the default value. The default value will change from 3 to 5 in version 0.22.\n", " warnings.warn(CV_WARNING, FutureWarning)\n", "//anaconda/lib/python3.5/site-packages/sklearn/model_selection/_split.py:1943: FutureWarning: You should specify a value for 'cv' instead of relying on the default value. The default value will change from 3 to 5 in version 0.22.\n", " warnings.warn(CV_WARNING, FutureWarning)\n", "//anaconda/lib/python3.5/site-packages/sklearn/model_selection/_split.py:1943: FutureWarning: You should specify a value for 'cv' instead of relying on the default value. The default value will change from 3 to 5 in version 0.22.\n", " warnings.warn(CV_WARNING, FutureWarning)\n", "//anaconda/lib/python3.5/site-packages/sklearn/model_selection/_split.py:1943: FutureWarning: You should specify a value for 'cv' instead of relying on the default value. The default value will change from 3 to 5 in version 0.22.\n", " warnings.warn(CV_WARNING, FutureWarning)\n", "//anaconda/lib/python3.5/site-packages/sklearn/model_selection/_split.py:1943: FutureWarning: You should specify a value for 'cv' instead of relying on the default value. The default value will change from 3 to 5 in version 0.22.\n", " warnings.warn(CV_WARNING, FutureWarning)\n" ] }, { "data": { "text/plain": [ "0.99166603238065887" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn import svm\n", "from sklearn.model_selection import GridSearchCV\n", " \n", "param_grid = [\n", " {'C': [1, 10, 100], 'kernel': ['linear']},\n", " {'C': [1, 10, 100], 'gamma': [1, 0.1, 0.01], 'kernel': ['rbf']},\n", " ]\n", "classifier = GridSearchCV(estimator=svm.SVC(), param_grid=param_grid)\n", "results = cross_validate(classifier, X, y, cv=cv_generator, scoring='accuracy', return_train_score=False)\n", "np.mean(results['test_score'])\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 0.96 0.92 0.94 185\n", " 1 0.83 0.79 0.81 192\n", " 2 0.85 0.83 0.84 183\n", " 3 0.82 0.82 0.82 182\n", " 4 0.83 0.86 0.85 176\n", " 5 0.90 0.87 0.88 187\n", " 6 0.92 0.96 0.94 174\n", " 7 0.90 0.90 0.90 178\n", " 8 0.74 0.74 0.74 174\n", " 9 0.76 0.83 0.79 166\n", "\n", " micro avg 0.85 0.85 0.85 1797\n", " macro avg 0.85 0.85 0.85 1797\n", "weighted avg 0.85 0.85 0.85 1797\n", "\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5,20.7222,'true label')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(127.222,0.5,'predicted label')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQoAAAEKCAYAAADqyxvJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnXmcTfX/x59vMwZjnzEzCNkTUjEi\nhGwRZRhbaCUpRYlkS4ikb/3aI1SyL0VCkxaMlH2L7GXNMJaxjBkzc+fz++PeO83IzD0z93yYW5/n\n43Efc++597zOez7nc9/3nPM579dHlFIYDAZDVuS50QEYDIbcj0kUBoPBIyZRGAwGj5hEYTAYPGIS\nhcFg8IhJFAaDwSMmURgMBo+YRGEwGDxiEoXBYPCI/40OIDMK3Pms7beMntv4gd2SAKSm6rm7NU8e\n0aLr0BCvn6ZYdbWtiKZ4NdzprEPTTeF81nacOaIwGAweMYnCYDB4xCQKg8HgEZMoDAaDR0yiMBgM\nHjGJwmAweCTXDo+mZ9KoHrRpXJPYsxcJ7zwegBkTHqdK+TAAihUuQNzFBOp3mwDAoCda8Vj7u3Gk\npvLixIX88OvubG1v7Zpo3pgwjlRHKh0iO9PryT5e/w8xMScYOWwIZ06fRvLkIbJTF7r3fMRrXdAT\n75UrV+j9WE+SkpJwOBw0b9mKp/v1z5Wx6mrbUSOGEh29iqCgYL5cvNRrPTe62hbA4XDw8EOdCQ0N\n5Z0PJtmiCT6SKGZ8s45J81YzdezfO//hlz9Lez5hYAfOX0oAoFrFknS+rza1O42jVEhRlk96ltsi\nxlgej3c4HIwfN4bJUz4jLCyM7l070fTeZlSqXNmr/8HPz4+Bg4Zwa/UaxMdfonvXSOrd3YBKlbzT\n1RVvQEAAk6d9TmBgQZKTk+n1aA8aNmpMrdvvyHWx6mrbByM60q17T0YMG+KVztXoaFs3c2bNoEKF\nisTHX7Ih0r/RduohItVEZIiIvCci77qe35oTrbVbDnL2/OVM349sWZv5UZsBaNe0Fgu+20JScgqH\n/zrDwaOnqVuzvOVt7fxtB2XL3kyZsmXJGxBA6/vbsmrljzkJOwMhIaHcWr0GAAULFqJChUrEnjzp\nta6ueEWEwMCCAKSkpJCSkuL1TUq+1rZ1wutSpGhRr3WuRkfbApyMiWFt9GoiOnbyWutqtCQKERkC\nzAUE2ABsdD2fIyIv27mthrUrcfLsRQ4eiQXgppCiHIs5l/b+8VPnKB1qfWefOnmSkqVKpr0ODQvj\npA2dLj1/HT/G3j27qVnrdq+1dMbrcDjo1imCFk0aUq9+A27zMl5fa1ud2N22AG9NfJ3+Awcheez/\nWus6ougF1FVKTVBKzXQ9JgB3ud67JiLSR0Q2icimlNO7LG2oS+twFkRtSi/yj89k5w5YxT8/bOft\nvpcvxzPohf4MGjKUQoUKea2nM14/Pz/mLlxM1A+r2LVzBwf27/NKz9faVid2t+2a1SsJCgpKO7Ky\nG12JIhUofY3lpVzvXROl1CdKqXClVLh/Cc//sJ9fHto3u52F321JW3b8VBxlShZPe31TaHFOxJ63\nHHhYWEliTsSkvT518iShoaGW18+K5ORkBr3QnzZtH6B5i1a2aOqM103hIkWoU/cuflm7xisdX2vb\n64Fdbbt921aiV63kgdbNGf7Si2zcsJ6RQ1+yKUp9ieJ54EcR+VZEPnE9ooAfgQF2baRZvVvYd+gk\nx0/FpS1btmoHne+rTUBef24uHUzlciFs3HnIsmaNmrdx5Mghjh07SnJSElHLl9Hk3mZex6qUYvSo\nEVSoWImHH33caz03uuI9d/YsFy9cACAxMZH1636lfIWKuTJWXW2rCx1t++yAgSz/YRXfRP3IuIlv\nUfeueox9faId4QKaRj2UUlEiUhXnqcZNOK9PHAM2KqUc2dWb/vpj3FOnCiWKFeJA1FjGTlrO9MW/\n0vm+OmkXMd3s/iOGL1dsZeuXw0lxpPL8hPnZqkD09/dn6PBXeLpPb1JTHUR0iKRy5SrZDfkfbNu6\nhWXffE2VKlXp2ikCgGf7v8A9jZt4pasr3tjYWEaNeBmHw4FSipatWtO4yb25MlZdbfvy4IFs2riB\nuLhztGremKefeY4OkZ29jldH2+pGcusEQKbM3JSZgykz16XpxpSZGwwG2zCJwmAweMQkCoPB4BGT\nKAwGg0dMojAYDB4xicJgMHgk1w6PJqZc435fLyne8WO7JQH4a673pdLXIp+/njye7LB/nwdoilVX\n/9Q1PHohIdl2TV1tC1A80M8MjxoMBnswicJgMHjEJAqDweARkygMBoNHTKIwGAwe8QnPzKzIqVnr\npP5NaRNentjzCYQ/Nw+A4Q+F80SrW4k9nwjAqBnr+W7zEYIK52P2kPuoUyWUmT/t4YXJP+co1jkz\np7Nk0UJEhEqVqzJi9Djy5cuXIy03Ok17L164wLgxIzl4YD8iwohXX6PW7Xd6panDsNYXzHUnjBnB\nLz9HU7x4ENPnLQZg6sfv83P0T+SRPBQLCmLYqHGUCMm5P4eO/uXGp48o3GatH02ayqIly4havpSD\nBw5YWnfGj3tp/+o/d/77X++g/vMLqP/8Ar7bfASAxCQHY2ZtYOhnv+Q41lOnTjJ/zkw+m7WA2QuX\nkJrq4PvvludYz43bWParJcv5YtZc5s2dxcGD1trAE29NHE/9Bo1YsHg5s+YvokKFSl5rPhjRkY8m\nTbUhur/R1QZ2xtq6XQRvvpfRFfuhhx/n8zmL+HT2lzRo1ITPp+Z8+F5X/3Lj04nCG7PWtbtOcPbS\nFUufvXwlhV92x5CYlG0rjQw4HA6uXEkkJSWFxMREQrz49XCjy1j20qVLbN2yifYdnEatefMGULhI\nEa91dRjW+oK57h21wylSJKNWwXR2fYkJCV7f26Gjf7nx6VOPa5m1/rZjh1eafdvWpHuzW9hy4BQv\nT/uFuPgkb8N0xhYaRo9HHieiTXPy5cvPXXc3oN7dDW3RdmOnsexfx45SvHgQY14Zxv59e6lWvTov\nvjSMAgUCbYhUH75irutmykfvErVsCYUKFebdSZ/mWEd3/7ruRxQiYptXmd1mrVO+3UX1p2ZTb8B8\nYs5eZkKvBt6El4ELF84Tveonvlr6PUtXrCIxIYFvly2xTd9uY9kUh4O9e34nsks3Zs77igL5A5n+\n6RQbItWHL5nrunnymQF8uexHWrZuy1fzZ+dYR3f/uhGnHqMzeyO9C/e0KZ94FLLbrPVUXAKpqQql\n4NMVuwmvEpZjravZuP5XSpe+ieJBQfjnzUvTZi35bfs2W7R1GMuGhoURGhpGzducv8zNWrZi7+7f\nbdHWga+a67pp0botq3/6Icfr6+xfoOnUQ0QyO/4XINNvn1LqE+ATsFbrkd6sNSw0jKjly3j9zbdy\nFDNAyeKBxJxzTjTUvn4Ffj98JsdaVxNWshQ7f9tOYkIC+fLnZ9OGdVSzwVpdl7FsiRIhhJYsxeFD\nf3Jz+QpsXL+OChW9m3lLF75mruvm6JHDlC13MwBro1dSrnyFHGvp6l9utBSFichJ4D7g3NVvAb8o\npa5l5Z8Bq0Vha6JXM3HC+DSz1iefejrTz6YvCps+qAX31CxNiSL5ORWXwNg5G2lcszS1KpRAAYdP\nXuS5j1anJY49U3pQODCAAH8/zsdfod2opew56vz3rBaFTfn4fX5YEYWfnx9Vq93KsFfGEhAQkOnn\nrRSFbd2ymSce7UGVKlXTJn7xZCxrtShs357dvDZmJCnJyZS+qSyvjBn3jwtybqwWLqU3rA0KDvZo\nWGulf+akDaycomY3Vsi8KGz08MFs3byR83FxBAUH83ifZ1i3dg1HDx9C8gglS5bmxaGvEBL6z99R\nq22b3f4F1ovCdCWKacBnSql/3HAgIrOVUt09aZjqUVM9CqZ6FHJH9aguu/5MZwOzkiQMBkPuwqfv\nozAYDNcHkygMBoNHTKIwGAweMYnCYDB4xCQKg8HgkVxrrpuQbP/waPyVFLslASjbXc+tzSfm6Rl2\nzZ/XT4uuDnTNPaqLxORU2zULBOjbXwXyYsx1DQaDPZhEYTAYPGIShcFg8IhJFAaDwSMmURgMBo+Y\nRGEwGDzi04li1Iih3Nv4biIj2nmtNX70CNq2uIeeXdqnLbtwPo4Bz/Sma0QbBjzTmwsXznvUmdS/\nKYe/eIxN73dNWzb8oXAOfvYw697pzLp3OnNfnXIABBXOR9RrDxI7rzf/91SjHMV9+NCf9OzSIe1x\nb8O6zJn5RY60rmbtmmgebHsf7Vq3xIqR0I3SjIk5wZNPPELHB+8nMqIds236/3Xpzps9gx6dH6R7\npweYO8seTbD3+3A1Pp0o7HRJvv+BCN5+f3KGZTM+n0p43XrMW/wt4XXrMfNzz9u63u7eN5evwMz5\ni5g5fxHT5ywkf/78NG3WPMd6brxxOL+emqDPhVuH7sED+1myaAHTvpjHF3MXsXbNKo4eOeR1rKDH\n4dyNtkQhItVEpLmIFLpqeWu7tmG7S/JVWmtWr6RNuwgA2rSLIHrVTx51boS7t5uN69dRpkw5SpW+\nyWstbxzOr6cm6HPh1qF76M+D1LjtdvIXKIC/vz931qnL6p+8bwPQ43DuRkuiEJH+wNfAc8BOEWmf\n7u3xOrapg3NnzlAiJASAEiEhxJ09m2Otvm1rsuG9Lkzq35RiBbN2Hcop33+3nFZt7rdF61oO5ye9\n/JLo0LwaXS7cdulWqlSFbVs2cT4ujsSEBH79OZqTJ0/YFKU+dNn1PwnUUUpdEpHywEIRKa+Uehes\n3TL6b2LKt7t4fd5mlFKM6nEXE3o1oO97q2zdRnJyEmtWr+SZ/i/Yome3w7kuzfTocuG2U7d8xUr0\nfKw3/Z/pRWCBQCpXvQU/v9w/a4auUw8/pdQlAKXUIaAp0EZE3iaLRJHBhXuqPRe6vKF4cDCnY2MB\nOB0bS7GgoBzp6HT3dvPLz2u4pVp1goNL2KJnt8O5Lk03uly4deg+GBHJ9Nlf8vG0GRQpUjTNYDc3\noytRxIjIHe4XrqTRDigB3JbZSkqpT5RS4Uqp8F699RREZYdGje/l26XOeSK/XbqYe5rcmyOdksX/\nnjTHbndvNyuiltOqtT2nHZDR4Tw5KYmo5ctocm+zXKcJ+ly4demePevc/zEn/mLVyh9oaeN+04Uu\nc90yQIpSKuYa7zVUSq31pGGlejS7LslZVY+OGjaIrZs2EudySe71VD8aN23OyJcHcjLmBGElS/Ha\nG29TpGixf6ybvnrUTndvq9WjiQkJPNC6GYuWrqBQ4cIeP2+1ejQ7DudWya6mlerRnLhwWyEnulaq\nR/s+0ZPz5+Pw989L/4EvUbfe3Vl+3mr1aE5cw61Wj5oycxswZeb6MGXmpszcYDD4CCZRGAwGj5hE\nYTAYPGIShcFg8IhJFAaDwSMmURgMBo/k2uFRHZMU6yI5xf4hMYDQbnoqAc/Mf9J2TYemYcy8mibo\nvaJhGBP0tENea/MI54jC+fOY4VGDwWAPJlEYDAaPmERhMBg8YhKFwWDwiEkUBoPBIyZRGAwGj+R+\nax0PrF0TzRsTxpHqSKVDZGd6Pel9xaUOTYAH2jQnMLAgfn5++Pn5MWPOQsvrTnq2CW3CyxF7PoHw\nAc71hnerwxMtqxF7IQGAUTM38t3mowAMiryDx1rcgiNV8eKUX/hh27FsxRoTc4KRw4Zw5vRpJE8e\nIjt1oXvPR7KlcS28aYOs0LXPLl64wLgxIzl4YD8iwohXX6PW7Xd6pTlv9gyWLFqAUooHO3SmWw/v\n2xX0tS1kkShEJEs7J6VUzg0kbcLt6jx5ymeEhYXRvWsnmt7bjEqVK+cqzfRMnjqdYsWLZ3u9GT/t\nZdLynUwdkNE85/0lv/HO1zsyLKtWphidG1Wi9nMLKBVUkOVj2nLbM/OyVbLtdqC+tXoN4uMv0b1r\nJPXubkClSt63Q07bIDN07rO3Jo6nfoNGTPjfuyQnJ5GYkOiVXnoXbv+8eXnh2T40vKcxZcuV9zpW\nsL9t3WR16rEZ2OT6e/VjkydhEblLROq6nlcXkYEiYquVjy85RXvL2t9jLLt7t6tXngU/HyQpJZXD\npy5y8MR56lYJydb2dDlb60DXPrt06RJbt2yifYdOAOTNG0DhIkW80tTpwq2TTBOFUqqCUqqi6+/V\nj4pZiYrIKOA94GMReR34ACgEvCwiw+0K3tecogWhX99e9OwWyVcL59ui2bdtDTa8E8mkZ5ukuXvf\nFFSQY6cvpX3m+Jl4SgcVzPE27HS21tEGuvbZX8eOUrx4EGNeGUbPrh15bfQIEhIue6Wp04VbR9u6\n8XiNQpw2yT2ACkqpsSJSDiiplNqQxWqdgDuAfEAMUEYpdUFE3gTWA+My2VYfoA/ABx9N9nie6WtO\n0dOmzyYkNJSzZ87Qr28vyleoQO06dXOsN+Xb33l9/hanu3f3ukx4/G76frD6mvbFOb2x2G5na7vb\nAPTtsxSHg717fmfQy8OpedvtvPXGeKZ/OoW+/QbkWFOnC7eOtnVjZdTjI+BuoLvr9UXgQw/rpCil\nHEqpy8BBpdQFAKVUApDpTfYZzHUtXIzyNafoEJdOUHAwTZu1YNfO37zSO3U+nbv397sJd51eHD8T\nT5kSf3+pbwouyImz8dnW1+FAbXcbgL59FhoWRmhoGDVvcx5JNWvZir27f/daV5cLt462dWMlUdRT\nSvUDEgGUUucATzPYJImI23q6jnuhiBQli0SRXXzJKTrh8mXi4+PTnq//dS2VKlfxSrNk8QJpz9vX\nq8DvR5ymvMs2HKZzo0oE+Ofh5tDCVC5VlI37Y7OlrcOBWkcbgL59VqJECKElS3H40J+Acya2ChW9\nv0Cqw4VbV9u6sXLMkywifriOXkUkBM9f9sZKqSsASqn0n80LPJqTQK+Fv78/Q4e/wtN9eqe5Olf2\nsnF0aAKcOXuGwS88B4AjJYX77m9Hg4b3WF5/+sBmae7eB6Z2Z+zczS5372CUUhw+dYnnPo4GYPfR\nc3y59g+2ftCFFEcqz3+yNtsmtdu2bmHZN19TpUpVunZyTqvorbO1t22QGbr2GcDgIcMZOWwwKcnJ\nlL6pLK+MueZZc7YYNmhAmgv3oCEjKFLE+2kAdbWtG49l5iLSA+iK88jgc5zXH0YopRbYFsU1MGXm\npswcTJk55I4yc49HFEqpWSKyGXBPkR2hlNrtTXAGg8G3sHq5NRBwn34U8PBZg8HwL8PjcZ2IvAJM\nB4JwTgn4mYiM0B2YwWDIPVg5ongIuFMplQggIhOALcBrOgMzGAy5BytXig4B+dO9zgcc1BKNwWDI\nlWRVFPY+zmsSV4BdIvK963VL4OfrE57BYMgNZDo8KiJZ3u+glJquJSIXl5NyqT34NbDrFu/rRVDk\nx7Zrnl7Y13ZNgBSHnm5gbVAw+/hpENb5RSgYYK3zZnpEoTsRGAwG38FKUVgV4HWgOumuVXiqIDUY\nDP8erFzM/Az4GEgB7gW+AGboDMpgMOQurCSKAkqpH3FezzislHoV8L7ixmAw+AxW7qNIFJE8wH4R\neRY4DthTd20wGHwCK0cUz+O8hbs/zsKwh7GxAtRgMOR+rBSFbXQ9vQTYY0xgEzqconW5T48aMZTo\n6FUEBQXz5eKlXuvZpTupf1PahJd3uns/Nw+A4Q+F80SrW4k97zSSHTVjPd9tPkJQ4XzMHnIfdaqE\nMvOnPbwwOXu301y5coXej/UkKSkJh8NB85ateLpf/2zHfC10uGWDHmdrHX1MZ9tC1jdcfUMWQ7hK\nqQdtiyKH6HCK1uU+/WBER7p178mIYUO80rFbd8aPe5m0dCdTX2ieYfn7X+/gncXbMyxLTHIwZtYG\nqt8cRI2bszRpvyYBAQFMnvY5gYEFSU5OptejPWjYqDG1br8jR7Gnx2637PTY7Wyto4/pbFvI+oji\nf7ZswYWIfKGUsmcCAxchIaGEhDgvl6R3ivamwXVoAtQJr8vx49mbW+N66K7ddYJyoYUtffbylRR+\n2R1DxVI5M1oREQIDnSa/KSkppKSk2HKzmtste9TY1wGnW3bevJ5M2G4cOvqYrrZ1k9UNV6tzKioi\nS65eBNwrIsVc2rYfjdjpFK1T01fo27Ym3ZvdwpYDp3h52i/ExSfZoutwOOjRNZKjR47QpVt3brOh\nbdO7Ze/ft5dq1avz4kvDKFAg0PPKHnA7W4sIHTt1pWOnLl5rpsfOPqajbd3omlKwDHABeBt4y/W4\nmO75NRGRPiKySUQ2fTr1E8sbs9spWpemrzDl211Uf2o29QbMJ+bsZSb0amCbtp+fH3MXLibqh1Xs\n2rmDA/v3ea3pdsuO7NKNmfO+okD+QKZ/OsWGaJ3O1rPmfcV7H37Cgnmz2bJ5o+eVLGJ3H9PRtm50\nJYpwnBMFDQfOK6VWAQlKqdVZHamkd+F+ore1KeF0OEXr0PQlTsWlc/desZvwKmG2b6NwkSLUqXsX\nv6xd47WWLrds0OdsrbOP2dm2brQkCqVUqlLq/3COkgwXkQ/QMM+pDqdoHZq+Rsnifx+yt69fgd8P\nn7FF99zZs1y8cAGAxMRE1q/7lfIVvK8E0OWWrcvZWkcf09W2brKqHrVt1ENE2gINlVLDrK5jpXp0\n65bNPPFoD6pUqYrkceY8b52ic6Jp5aLRy4MHsmnjBuLizhEUHMzTzzxHh8jOOY7TG9301aPTB7VI\nc/c+FZfA2DkbXe7eJVDA4ZMXee6j1cScc86QtWdKDwoHBhDg78f5+Cu0G7WUPUfPWaoe3bd3L6NG\nvIzD4UApRctWrenzdL8s17FaPbpvz25eGzMyg1t2Vu7WVoo8jx07+g9n615PZv1/WqkezW4fs9IC\nOWlbsF49mlWicEfdESgJzHS9fgg4lJ0vfU4wZeb6MGXmpszcjR1l5qsBRGSsUqpxure+EZFoL+Mz\nGAw+hJVrFCEiknayIyIVgOxNjW0wGHwaKxcYXwBWicgfrtflgae0RWQwGHIdVmo9olzmNdVci/a4\npws0GAz/DazM6xEIDAaeVUptB8qJSDvtkRkMhlyDVYerJOBu1+tjmDk9DIb/FFYmKd6klAoXka1K\nqTtdy7YrpbQWQOgYHs2jaUxM1wS92oYGNdxmF9pspP2iwNlV3s8e7uskaZoEG6BoAWtfCitdJklE\nCuAazhWRSjjn+jAYDP8RrIx6vApEAWVFZBbQkFxmYGMwGPRiZdRjhYhsBurjLBcfoJQ6rT0yg8GQ\na7Ay6vGjUuqMUmqZUmqpUuq0iPx4PYIzGAy5g6ys8PLjNNUtISLFcR5NABQBSl+H2AwGQy4hq1OP\np3A6cJfG6S3hThQXgA81x2UJXUa4a9dE88aEcaQ6UukQ2ZleT1rzxsgKXzSWdTgcPPxQZ0JDQ3nn\ng0mW15s0tCNtGt5C7Ll4wh9+L235053q0zeyPimOVKJ+2cvwj74j/NYyfDAkAnB2sHGf/sSS6Ox5\nSeRW4+LrraurH4C14dHnlFLv27K1bGBleDQ29hSnY2MzmJS+/e6HmXoPWhkedTgcPNj2PiZP+Yyw\nsDC6d+3EhDffplLlzP0NrAyPKqVISLicwfx00JBhWZqfWh0efXXEy9xRuw4RHTunGcsWLlIk089b\nHR6d+cXn7N61k/j4Sx4TRfrh0Ya3lyc+IYmpIzulJYrGtSsw5JGmdBj8BUnJDkKKFSQ2Lp4C+fKS\nlOLA4UilZHBh1k9/lort38DhcA4JWhke3bxpI4GBgYwYNsTWL15u0bU6PJrdfgD2Do+mur0uAUSk\nuIg8Y0VcNyEhodxavQaQ0aTUG3b+toOyZW+mTNmy5A0IoPX9bVm10vtLMrqNZdt36AQ4jWU9dQ4r\nnIyJYW30aiI6dsr2umu3H+LshcsZlvWJqMf/ZkaTlOwAIDbOZQhzJTktKeQL8Ccnd8/UCa9LkaI5\nM/z9t+jq6gdurCSKJ5VSce4XSqlzwJPZ2YiINBKRgSKizVfOLpPSUydPUrJUybTXoWFhnPQy+bhx\nOBx06xRBiyYNqVe/ge3Gsj27duS10SNISLjseUUPvDXxdfoPHJRmrOItlcuVoOHt5Yn+pC8rPuhN\nnWo3pb1Xt3oZNs/sz6YvnqP/m1+nJQ6DdXT1AzdWekEeSffTJyJ+QJZe6CKyId3zJ4EPgMLAKBF5\nOYexZoqdJqXqGjYhdhnT+Iqx7JrVKwkKCko7WrMDf788FC+cn8Z9JjHswyhmju2W9t7G349Rp+d7\nNOr9MYMfbkK+ANtdE//16DQYBmuJ4jtgvog0F5FmwBycN2BlRd50z/sALZVSo4FWQI/MVsqJC7fd\nJqVhYSWJORGT9vrUyZOEhto71WpuN5bdvm0r0atW8kDr5gx/6UU2bljPyKEveaV5/NR5Fq92xrVp\n9zFSlaJEsYx2+nsPxxKfmESNivab+f7b0WkwDNYSxRDgJ+BpoB/wI+Cp1+RxXcsIxnnBNBZAKRUP\npGS2UnZduHWYlNaoeRtHjhzi2LGjJCclEbV8GU3u9X7ydl8yln12wECW/7CKb6J+ZNzEt6h7Vz3G\nvj7RK81v1uymaR3n/1u5bDAB/n6cjrvMzaWK4+fn7IblwopRtVwJDp8459W2/ovoMhh2Y+XOzFTg\nY9fDKkX5e0hViUhJpVSMiBTi72FWr9m2dQvLvvmaKlWq0rWTc4jNW3Ndf39/hg5/haf79CY11UFE\nh0gq2+C8HBsb+w/z08ZN7vVaF2DwkOGMHDY4g7HsjWT6q124586KlCgWyIFFLzF22o9MX7qZycM6\nsmlGf5KSHfR+7UsAGtS6mUEPNyY5JZXUVMWA/y3hzPnsnVunNxhu1byxFuNiX9DV2Q+yMtedr5Tq\nIiK/cQ1/T6VUrWxvzOltEaaU+tPTZ031qKkeBVM9CrmjejSrI4oBrr+2mdQopS4DHpOEwWDIXWTl\nwn3C9ffw9QvHYDDkRrKq9bhI1hMA2Xc3h8FgyNVkdURRGEBExgAxwAycFyJ74LwnwmAw/Eewclnr\nPqXUR0qpi0qpC0qpj4FI3YEZDIbcg5VE4RCRHiLiJyJ5RKQH4NAdmMFgyD1YqR4tD7yL0wJPAWuB\n55VSh3QGlpCsdcpFW/GxqUe1DOfqaoLghi9q0T3369tadH2N/P7Wdp2VG64OAe29DchgMPguVqzw\nqorIjyKy0/W6loiM0B+awWDBzdJsAAAXzklEQVTILVi5RjEFGAokAyildgDdslzDYDD8q7CSKAKV\nUhuuWpZpYZfBYPj3YSVRnHZN+uOeAKgTcEJrVAaDIVdhxSGkH/AJUE1EjuOs1cjUU8JgMPz7yPKI\nQkTyAOFKqRZACFBNKdUot9R/jBoxlHsb301khL2Tq+vSXbsmmgfb3ke71i2ZNsWaMc+N0r1y5QoP\nP9SZrpHt6RTRjo8/fM/zSh6IiTnBk088QscH7ycyoh2zZ36RrfUnjezK4e9Gs2nu4AzLn+7SiO0L\nX2bzvJcY95xzn3VrXZt1s15Me8Sv/x+1qmZ/lglf2me6YgUPicLlRfGs63m8UuqirVv3kgcjOvLR\npKk+oetwOBg/bgwfTZrKoiXLiFq+lIMHDuRa3YCAACZP+5x5X37NnAWL+HXtz+zYvs0rTT8/PwYO\nGsJXS5bzxay5zJs7i4MHrcc6Y+lG2vfP+AVoXKcy7ZrUpO5Db1Kn60TembkKgLlRW6jf4y3q93iL\nXq/M5vCJc+zY91e24vWlfaYrVjdWrlF8LyKDRKSsiAS5H1mtICL1RKSI63kBERktIt+IyBsiYpv9\nsC+5JOty9/Yl13BvXdPXbv3jn+7ekQ343/Qf/3b3PnfpH+t1ue9O5n+3Jdvx+tI+0xWrGyuJ4gmc\n1ymicbpWbQY2eVjnU8C9R9/F6Xj1hmvZZzmK1MfR5e7ta67hbuxyTa98cwgN76hI9GcDWDG5H3Wq\nl/3HZzq1vIP5K7ZmW9uX9pnOfgDW7syskAPdPEop9xBquFKqtuv5zyLi3fGrj6LL3ft6uIZfvHCB\nF59/lgP791G5SlWvde10TXe6ewfS+PF3Ca9ejpnjH+HWiL9dserWKMflxGR+PxiThcq18aV9prMf\ngLU7M/O75uT4SkS+FJHnXfOSZsVOEXG73W4XkXCXVlVcN25lsq00F+5pFl24fQVd7t6+5hput2v6\n8VPnWbxyBwCbfj/icvcumPZ+51Y5O+0A39pnuvuBlVOPL4AawPs45+eojtObIit6A01E5KDr87+K\nyB847/LsndlK6V24e1lw4fYldLl7+5JruA7X9G9W/UbTuk7z48rlQgjI68dp1yxkIkLH5rez4Pvs\nn3aAb+0zXbG6sXIfxS1KqfQnkitFZHtWKyilzgOPiUhhoKJrO8eUUvadNOFbLsm63L19yTXcW9f0\n6a/15J46lSlRrCAHlr7C2E++Y/qSDUx+pRub5g52unu/Oift843urMjxU+c5dPxsjuL1pX2mK1Y3\nVsrMPwcmKaXWuV7XAx5VSmmdf9SUmevDlJmbMnM3tpWZA/WAR0TkiOt1OWC328Y/J7b9BoPBt7CS\nKFprj8JgMORqrAyP5orbtQ0Gw41Dw5xRBoPh34ZJFAaDwSMmURgMBo94HB69USSm2D88qmsyYT9N\nkx/r2jUpDvsnvfX30/Obo2vouXizV7XonvlhlO2auvotQOH81jqvOaIwGAweMYnCYDB4xCQKg8Hg\nEZMoDAaDR0yiMBgMHjGJwmAweMRKrUeuZu2aaN6YMI5URyodIjvT60nvfCyuXLlC78d6kpSUhMPh\noHnLVjzdr3+ujBWcjuHR0asICgrmy8VLbYjybx5o05zAwIL4+fnh5+fHjDkLvdbUFa83bTtpSHva\nNKhK7Ll4wh/7KG350x3vom/Hu0hxpBL1636GT/qeoCIFmD2mC3Wq3cTMqG288M7ybMcaE3OCkcOG\ncOb0aSRPHiI7daF7z0eyrXM1OvaXG59OFG7n4clTPiMsLIzuXTvR9N5mVKpcOceabvfpwMCCJCcn\n0+vRHjRs1Jhat9+R62IFp2N4t+49GTFsiFc6mTF56nSKFS9um56OeL1t2xlR25i0aANTh3VIW9b4\nzvK0a1SNuo9/TFKygxCXa1ZiUgpjpq2keoVQalTMmYOU24381uo1iI+/RPeukdS7uwGVKnnXF8D+\n/eVGy6mHiPQXkX+6nNqMDudhHe7TumIFfU7kusiNDudrtx/m7IWEDMv6tK/L/2b9/Le7t8s163Ji\nMr/8doTEpJzPqumtG/mNQNc1irHAehFZIyLPiEiIjo3och7W4T6t2yVZB4LQr28venaL5KuF8290\nOJmio20rlw2mYa1yRE/qzYr3HqNOtexPHmQFu9zIQe/+0pUo/gDK4EwYdYDfRSRKRB512eNdkwzm\nuhZmOtLlPOx2n476YRW7du7gwP59XmvqdknWwbTps5k17yve+/ATFsybzZbNG290SNdER9s63b0L\n0LjvVIZ9/D0zR3tvsXg1drqRg979pStRKKVUqlJqhVKqF1Aa+AinCc4fWaz0t7muhYtRup2H7XSf\nvh5u2XYT4oovKDiYps1asGvnbzc4omujo22Px15gcfRuADbtPk5qqqJE0UCvNNNjtxs56N1fuhJF\nhnSulEpWSi1RSj2E00rPFnQ4D+twn9YVq04SLl8mPj4+7fn6X9dSyUazVjvR0bbfrNlD09rOKW0q\nlwl2unufv+xhLWvocCPXvb90jXp0zewNpVRCZu9lFx3Owzrcp3XFCvqcyM+cPcPgF54DwJGSwn33\nt6NBw3u81s2NDufTX4nknjvLU6JoIAcWDmTsZyuZvnwrk19uz6bPnyEpxUHv8YvTPr9n3vMULpiP\nAH8/HmhUjXYvzmDP4VjL2/PWjfxa6NpfbkyZuQ2YMnNTZu7GlJkbDIb/LCZRGAwGj5hEYTAYPGIS\nhcFg8IhJFAaDwSMmURgMBo/k2uFRHZMUX7qS80KerMjrp2cMTzRN/euvKV4d5NE0Pqqr31cfvMx2\nzY3j9M3qGVLI3wyPGgwGezCJwmAweMQkCoPB4BGTKAwGg0dMojAYDB4xicJgMHjEp8117XR0Hj96\nBL+sWU3xoCBmzP8agJ++/45PP/mQw3/+wZQv5lKtes0c6x8+9CfDXxqY9vr48WP0efo5HrLBffni\nhQuMGzOSgwf2IyKMePU1at1+p1eaOtzIdTmc63L29tYte+JDtWhWI4wzl65w34RoAIY+eCstaoaR\n5EjlyOnLDJ69jQsJKeT1E8Z3rcVtZYuiFIz+ahfrDpzxuA3d/daNTx9RPBjRkY8mTbVF6/4HInjr\n/ckZllWsXJnxb77L7bXDvda/uXwFZs5fxMz5i5g+ZyH58+enabPmXusCvDVxPPUbNGLB4uXMmr+I\nChUqea3pdiOf9+XXzFmwiF/X/syO7dtynSbY2w/S43bL/mrJcr6YNZd5c2dx8OABy+sv3HCMRyet\nz7Ds572xtJqwmjZvRPPnqUs808LpvN3tbqefU+s3oun50TqGR9xqqcRed791o8uFO0BEHhGRFq7X\n3UXkAxHpJyJ57dqOnY7Od9QO/4dW+QqVKFe+gi366dm4fh1lypSjVOmbvNa6dOkSW7dson2HTgDk\nzRtA4SJFvNbV4Uauy+FclxO5t27ZGw6e5fzl5AzL1uw9neYvsfVwHCWLFQCgSsnCrN13GoAzl5K4\nkJBCrbLFPG7jevVbXUcUnwFtgQEiMgPoDKwH6gL2p34f4/vvltOqzf22aP117CjFiwcx5pVh9Oza\nkddGjyAhwR7LNh1u5Do0rwd2umW76VyvLKt2nwJg9/ELtKwZhl8eoUxQAW4rU5RSxfPbti1v0ZUo\nblNKdQU6AK2ATkqpGcDjQKYnzxlcuKd6duH2RZKTk1izeiXNWt5ni16Kw8HePb8T2aUbM+d9RYH8\ngUz/dIot2jrcyHVo6sZut2yAfi0r40hVLN50HID5648Scz6Rb15sxKiONdh86BwOR+4pr9B1MTOP\niAQABYFAoChwFsgHZHrqoZT6BPgE9NR65AZ++XkNt1SrTnBwCVv0QsPCCA0No+Ztzl+6Zi1b8YVN\nicJNejfyylWq5lpNHehwy46sW4bmNcLo/uGvacscqYqxi35Pe/3l8w34Mzbelu3Zga4jimnAHmAb\nMBxYICJTgI3AXE3b9AlWRC2nVWt7TjsASpQIIbRkKQ4f+hNwXv+oUNH7qel0uJHrcjjXhQ637CbV\nQujbohK9p2wkMflv79L8efNQIMAPgEa3lCDFoThw8pIt27QDbdWjIlIaQCn1l4gUA1oAR5RSG6ys\nb+WIIr2jc1BwsEdH56yqR0cNG8S2TRuJi4sjKDiYXk/1o3CRorzz5njizp2lUOEiVKl6C29/+M9f\na6vVo4kJCTzQuhmLlq6gUOFM50FKw2r16L49u3ltzEhSkpMpfVNZXhkzjiJFMr+4Z6V6dN/evf9w\nI+/zdD9L8dipaaV6NLv9AKxVj27dspknHu1BlSpVkTzO31RPbtnpq0ffe+RO6lcOpnihAE5fvML/\nfbuPZ1pUJsA/D3HxSc5tHI5j+PzfKBNUgOl966GUIuZ8IkPm7OD4OadhfVbVo970W7BePWrKzG3A\nlJnrw5SZmzJzg8HgI5hEYTAYPGIShcFg8IhJFAaDwSMmURgMBo+YRGEwGDzynxoeTUm1f3JegLya\nJui9lKhnODdfXt/5fdDVtrq4kmx/H6vy7ELbNd2cmtbFDI8aDAZ7MInCYDB4xCQKg8HgEZMoDAaD\nR0yiMBgMHjHmupngcDh4+KHOhIaG8s4Hk2zRXLsmmjcmjCPVkUqHyM70erJPjnTGjx7BWpeh6kyX\noeqF83GMHDqImL+OU7L0TYyd8FaWFaRW0NEGunTtatvrpZtTQ+R3Hq9Ly1qlOH3xCk1e+Q6AIRE1\naXNHaVKV4vTFKzz36QZOxiXS775biKzv9OL088tD1VKFufX5JWmVq9nBp48odJmqAsyZNYMKNnol\nOBwOxo8bw0eTprJoyTKili/l4AHrRq3puf+BCN6+ylB1xudTCa9bj3mLvyW8bj1mfu59u9jdBrp0\n7Wzb66ELOTdEnrv2T7r9X3SGZR9G7aHpqytoNvp7Vmw/waAHnD6fH363l2ajv6fZ6O8Z9+UOftkb\nm6MkAT6eKHSZqp6MiWFt9GoiOnayTXPnbzsoW/ZmypQtS96AAFrf35ZVK3/Mkda1DFXXrF5Jm3YR\nALRpF0H0qp+8ildHG+jStbNtr4euN4bI6/ad/seXPf39NoH5/K5ZQt/hrnIs2nA0xzFrO/UQkUo4\nPTPLAinAfmCOUuq8rm3axVsTX6f/wEHEx9tnRXbq5ElKliqZ9jo0LIzfduywTf/cmTOUCAkBoERI\nCHFnz3qlp6MNdOnqaltduukNkffv20u16tV58aVhFCgQmGPNoR1q0qVBeS4kJNNx4qoM7xUI8KPZ\nbSUZOntrjvV12fX3ByYB+XE6bxfAmTB+FZGmOrZpF2tWryQoKCjNpt0u1DVuNLXDql4HutrA19pW\nl64OQ+TXF+3kzsFL+XLdYXo1z2iF2Or20mzYfybHpx2g79TjSaC1Uuo1nBZ41ZVSw4HWwP9ltlJu\ncOHevm0r0atW8kDr5gx/6UU2bljPyKEvea0bFlaSmBMxaa9PnTxJaGio17puigcHczo2FoDTsbEU\nCwrKsZauNvC1ttWley1D5L27f/ewljW+Wn+EtnXKZFjW4a6yLNpwxCtdndco3Kc1+YDCAEqpI3hw\n4VZKhSulwnv1tufqcnZ5dsBAlv+wim+ifmTcxLeoe1c9xr4+0WvdGjVv48iRQxw7dpTkpCSili+j\nyb3NbIjYSaPG9/Lt0sUAfLt0Mfc0uTfHWrrawNfaVpeu3YbIFUL/nkLgvttLc+DEhbTXhQvk5e5b\nQojaejznAaPvGsVUYKOIrAMaA28AiEgITtt+W0hvqtqqeWNLpqo3Cn9/f4YOf4Wn+/QmNdVBRIdI\nKleukiOtUcMGsdVlqBrRphm9nurHw4/1ZuTLA1n69VeElSzFa2+8bfN/kHuxs22vhy7A4CHDGTls\ncAZDZCtM6lOfhreEEFQoH9vebMfEr3fRolYpKpUsjEpVHD1zmcEzNqd9/v7aN7Fq10kuJzm8ilen\nC3cN4FZgp1JqT3bXN9WjpnoUTPUo5I7qUW2jHkqpXcAuXfoGg+H64Vvp2mAw3BBMojAYDB4xicJg\nMHjEJAqDweARkygMBoNHTKIwGAyeUUr5/APo81/X9aVYfU3Xl2LVpftvOaLQdb+3L+n6Uqy+putL\nsWrR/bckCoPBoBGTKAwGg0f+LYlCV026L+n6Uqy+putLsWrRzbVTChoMhtzDv+WIwmAwaMTnE4WI\ntBaRvSJyQERetknzUxE5JSI77dBzaZYVkZUisltEdonIAJt084vIBhHZ7tIdbYeuS9tPRLaKiG1z\nIYjIIRH5TUS2icgmG3WLichCEdnjauO7bdC8xRWn+3FBRJ63Kd4XXPtrp4jMEZH8NmgOcOntsivO\nNHSM416vB+AHHAQqAgHAdpy2e97qNgZq4/TSsCvWUkBt1/PCwD6bYhWgkOt5XmA9UN+mmAcCs4Gl\nNrbDIaCEhr4wHejteh4AFNPQ12KAm23Qugn4Eyjgej0feMxLzZrATiAQp33ED0AVu/5/Xz+iuAs4\noJT6QymVBMwF2nsrqpSKxkYnLpfmCaXUFtfzi8BunB3GW12llLrkepnX9fD6wpOIlAHa4nQry9WI\nSBGcyX0agFIqSSkVZ/NmmgMHlVKHbdLzBwqIiD/OL/dfXurdCqxTSl1WSqUAq3G64NuCryeKm4D0\nkxUcw4Yvn25EpDxwJ85ffzv0/ERkG3AK+F4pZYfuO8BLgN2WTQpYISKbRcSuG4MqArHAZ65Tpaki\nUtAmbTfdgDl2CCmljgP/A44AJ4DzSqkVXsruBBqLSLCIBAL343S+twVfTxTXsvHK1cM4IlII+BJ4\nXil1wdPnraCUciil7gDKAHeJSE0vY2wHnFJKbfb44ezTUClVG2gD9BORxjZo+uM8VfxYKXUnEA/Y\ncr0KQEQCgAeBBTbpFcd55FsBKA0UFJGe3mgqpXbj9Kb9HojCeRpum5eiryeKY2TMmmXw/hBOGyKS\nF2eSmKWU+spufdfh9iqc0yJ4Q0PgQRE5hPN0rpmIzPRSEwCl1F+uv6eARThPH73lGHAs3ZHUQpyJ\nwy7aAFuUUidt0msB/KmUilVKJQNfAQ28FVVKTVNK1VZKNcZ56rzfW003vp4oNgJVRKSCK+t3A5bc\n4JiuiThnjpkG7FZK2WaRLSIhIlLM9bwAzk6YbTPj9CilhiqlyiilyuNs05+UUl794rniKygihd3P\ngVY4D5m9QikVAxwVkVtci5oD9kyU4eQhbDrtcHEEqC8iga5+0RznNSuvEJFQ199yQEdsjNmnZzNX\nSqWIyLPAdzivSn+qnKa+XiEic4CmQAkROQaMUkpN81K2IfAw8JvregLAMKXUci91SwHTRcQPZ+Kf\nr5Syd2p3+wgDFrlm2/IHZiulomzSfg6Y5frB+AN43A5R1/l+S+ApO/QAlFLrRWQhsAXn6cFW7Lmb\n8ksRCQaSgX5KqXM2aALmzkyDwWABXz/1MBgM1wGTKAwGg0dMojAYDB4xicJgMHjEJAqDweARkyj+\nQ7gqLJ/RqP+YiHzg4TOvisigbOpe8vwpg05MovhvUQy4ZqJw3YdhMFwTkyj+W0wAKrm8Fd4UkaYu\nj4zZOG8EK5/eg0NEBonIq67nlUQkylXMtUZEqmW1IRF5QETWu4q0fhCRsHRv3y4iP4nIfhF5Mt06\ng0Vko4jssNNXw+A9Pn1npiHbvAzUdBWQISJNcdZa1FRK/emqas2MT4C+Sqn9IlIP+AholsXnf8bp\ni6FEpDfOStQXXe/VAuoDBYGtIrIMp59CFVc8AiwRkcaukn/DDcYkCsMGpdSfWX3AVfHaAFjguv0a\nIJ8H3TLAPBEphdNIJv02vlZKJQAJIrISZ3JohLP2Y6vrM4VwJg6TKHIBJlEY4tM9TyHj6ajbni0P\nEOc+ErHI+8DbSqklriOXV9O9d3XdgMJ5FPG6UmpyNrZhuE6YaxT/LS7itOHLjJNAqMv8JB/QDsDl\nm/GniHQGZyWsiNzuYVtFgeOu549e9V57cXp9BuMsvtuIs7DvCdfRCyJyk7sa0nDjMUcU/yGUUmdE\nZK3rguW3wLKr3k8WkTE4nbf+JGO5eg/gYxEZgdNuby5Oc5TMeBXnqcpxYB1OkxY3G1zbLgeMdXlU\n/CUitwK/uk5vLgE9cbp2GW4wpnrUYDB4xJx6GAwGj5hEYTAYPGIShcFg8IhJFAaDwSMmURgMBo+Y\nRGEwGDxiEoXBYPCISRQGg8Ej/w943H8zT44gUgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.model_selection import cross_val_predict\n", "from sklearn import metrics\n", "\n", "classifier = RandomForestClassifier(n_estimators=100)\n", "classifier = DecisionTreeClassifier(max_depth=None)\n", "y_pred = cross_val_predict(classifier, X, y, cv=cv_generator)\n", "print(metrics.classification_report(y_pred, y))\n", "\n", "from sklearn.metrics import confusion_matrix\n", "mat = confusion_matrix(y, y_pred)\n", "\n", "import seaborn as sns\n", "sns.heatmap(mat.T, square=True, annot=True, fmt='d', cbar=False, cmap=\"Blues\")\n", "plt.xlabel('true label')\n", "plt.ylabel('predicted label')\n" ] } ], "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.5.5" } }, "nbformat": 4, "nbformat_minor": 1 }