GeronBook/Ch5/Exercises.ipynb

658 lines
105 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"import os\n",
"\n",
"from sklearn.svm import SVC\n",
"from sklearn import datasets\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.svm import SVC\n",
"from sklearn import datasets\n",
"\n",
"iris = datasets.load_iris()\n",
"X = iris[\"data\"][:, (2, 3)] # petal length, petal width\n",
"y = iris[\"target\"]\n",
"\n",
"setosa_or_versicolor = (y == 0) | (y == 1)\n",
"X = X[setosa_or_versicolor]\n",
"y = y[setosa_or_versicolor]"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [],
"source": [
"# Plot the data\n",
"\n",
"def plot_setosa_versicolor(X = X, y = y):\n",
" plt.plot(X[:,0][y==0], X[:,1][y==0], 'bo', label='iris setosa')\n",
" plt.plot(X[:,0][y==1], X[:,1][y==1], 'r^', label='iris verticolor')\n",
"\n",
" plt.xlabel('petal length', fontsize=15)\n",
" plt.ylabel('petal width', fontsize=15)\n",
" plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAELCAYAAAAlTtoUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deZQV9Z338feXBoYlGCPgBkrrPJqRtYUGxQVFoiGKgysuaMJEQwA540yeiWGSieKSeWLMM2ayaXABF0YneVzGxGggKEEUIy02CogMKq0dSGgbRVEYBL7PH1UXbl/uUn3X6u7P65w6fat+tXxv9Tn97V/9qr5l7o6IiEgUnSodgIiItB1KGiIiEpmShoiIRKakISIikSlpiIhIZJ0rHUCp9enTx6urqysdhohIm/Hyyy+/5+5907W1+6RRXV1NXV1dpcMQEWkzzKwhU5suT4mISGRKGiIiEpmShoiIRNbuxzTS+fTTT2lsbGTHjh2VDkWAbt260b9/f7p06VLpUEQkhw6ZNBobG+nVqxfV1dWYWaXD6dDcnebmZhobGznqqKMqHY6I5NAhL0/t2LGD3r17K2HEgJnRu3dv9fqkY9q0CU47Df7850pHElmHTBqAEkaM6HchHdbNN8PSpcHPNqLDJg0RkYratAnmzoU9e4KfbaS3oaRRISeddFJebYVYvHgxL7zwQkn2LSKtdPPNQcIA2L27zfQ2lDQimD8fqquhU6fg5/z5he8z3R/v3bt3Z2wrBiUNkZhI9DJ27gzmd+5sM70NJY0c5s+HqVOhoQHcg59TpxaeOD7zmc8AwR/ysWPHcvnllzNkyJAWbZs2bWLMmDHU1NQwePBgnnvuuf32M2vWLAYOHMjQoUP5p3/6JwCampq48MILGTlyJCNHjuT5559nw4YN3Hnnndx+++3U1NTw3HPP0dDQwLhx4xg6dCjjxo3jnXfeAeBXv/oVgwcPZtiwYYwZMwaADRs2cOqppzJ8+HCGDx+u5CNSiOReRkJb6W24e9km4F5gM7AqQ/s3gfpwWgXsBg4K2zYAr4VtdVGPOWLECE+1Zs2a/ZZlMmCAe5AuWk4DBkTeRVo9e/Z0d/dnn33We/To4W+99dZ+bT/84Q/9lltucXf3Xbt2+YcffthiH83NzX7sscf6nj173N39/fffd3f3yy67zJ977jl3d29oaPC/+Zu/cXf3G264wW+77ba920+YMMHnzZvn7u733HOPT5w40d3dBw8e7I2NjS32+fHHH/v27dvd3X3dunWe7rwWojW/E5E2r6Ym/R+WmppKR+bu7tn+xpb7OY15wE+B+9M1uvttwG0AZnYu8I/uviVplbHu/l6pg0wW/vMdeXk+Ro0alfYZhZEjR/LVr36VTz/9lPPOO4+ampoW7QcccADdunXj6quv5pxzzmHChAkA/P73v2fNmjV71/vwww/56KOP9tv/smXLePTRRwG48sorue666wA4+eSTmTJlCpMmTeKCCy4AggciZ86cSX19PVVVVaxbt644X16kI3rllUpHkLeyXp5y9yXAlpwrBi4DHiphOJEceWTrluejZ8+eaZePGTOGJUuW0K9fP6688kruv79lru3cuTMvvfQSF154IY8//jjjx48HYM+ePSxbtoz6+nrq6+v505/+RK9evXLGkbj19c477+SWW27h3XffpaamhubmZm6//XYOOeQQVq5cSV1dHTsT12JFpEOJ5ZiGmfUAxgOPJC12YIGZvWxmU3NsP9XM6sysrqmpqaBYvvc96NGj5bIePYLlpdbQ0MDBBx/M1772Na666ipWrFjRon3btm1s3bqVs88+mx/96EfU19cDcNZZZ/HTn/5073qJ5b169WrR4zjppJN4+OGHAZg/fz6nnHIKAG+++SYnnHACN910E3369OHdd99l69atHHbYYXTq1IkHHnhg76C9iHQwma5blWoCqskwppG0ziXAr1OWHR7+PBhYCYyJcrxCxzTc3R98MBjDMAt+PvhgqzZPK3lM45xzzknbNm/ePB80aJDX1NT4Kaec0mLcw91948aNPnLkSB8yZIgPHjx47/hEU1OTT5o0yYcMGeLHHXecf/3rX3d39zfeeMOHDBniw4YN8yVLlvjbb7/tY8eO9SFDhvgZZ5zhDQ0N7u5+/vnn++DBg33QoEH+93//975nzx5ft26dDxkyxE844QSfNWvW3hiLRWMaIvFBljENC9rLx8yqgd+4++As6zwG/Mrd/yND+2xgm7v/MNfxamtrPfUlTK+//jrHHXdcK6KWUtPvRCQ+zOxld69N1xa7y1Nm9lngNOC/kpb1NLNeic/AWQR3V4mIdEwVqltV1qRhZg8By4DPm1mjmV1lZtPMbFrSaucDC9z946RlhwBL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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_setosa_versicolor()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**EXERCISE 8**\n",
"\n",
"Train LinearSVC on linearly seperable data, then train SVC and SGCClassifier and compare"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [],
"source": [
"def plot_decision_boundary(pipeline, X=X, y=y):\n",
" # Get params for our decision boundary\n",
" transfX = pipeline['scaler'].fit_transform(X)\n",
"\n",
" Xmin = transfX.min()\n",
" Xmax = transfX.max()\n",
"\n",
" b = pipeline['clf'].intercept_\n",
" w0 = pipeline['clf'].coef_[0][0]\n",
" w1 = pipeline['clf'].coef_[0][1]\n",
"\n",
" # get our input values to build line\n",
" x0 = np.linspace(Xmin, Xmax, 200)\n",
"\n",
" # Setup boundary\n",
" # b + w0x + w1y = 0 ==> y = -w0/w1 * x - b/w1\n",
" boundary = -(w0/w1) * x0 - b/w1\n",
" margin = 1/w1\n",
" top_gutter = boundary + margin\n",
" bot_gutter = boundary - margin\n",
"\n",
" # Plot our boundary and gutters\n",
" plt.plot(x0, boundary, 'k-')\n",
" plt.plot(x0, top_gutter, 'r--')\n",
" plt.plot(x0, bot_gutter, 'b--')"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Preprocess the data\n",
"\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.svm import LinearSVC\n",
"\n",
"Linear_SVM_clf = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('clf', LinearSVC()) \n",
"])\n",
"\n",
"Linear_SVM_clf.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_setosa_versicolor(X = transfX)\n",
"plot_decision_boundary(Linear_SVM_clf)"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pipeline(memory=None,\n",
" steps=[('scaler',\n",
" StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
" ('clf',\n",
" SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None,\n",
" coef0=0.0, decision_function_shape='ovr', degree=3,\n",
" gamma='scale', kernel='linear', max_iter=-1,\n",
" probability=False, random_state=None, shrinking=True,\n",
" tol=0.001, verbose=False))],\n",
" verbose=False)"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.svm import SVC\n",
"\n",
"SVC_clf = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('clf', SVC(kernel='linear')) \n",
"])\n",
"\n",
"SVC_clf.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAELCAYAAAA2mZrgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dd3xU1fLAvye00DtCqE9sdKQJgnQREUVEQRSkJyDYlYc/fZaHPgs+8SkqCb2oiCKIYkFAEBSEKEUF6YQSpIQuLcnO74+TRsgmm2Q3d3cz38/nfHbvPfeeO3c32blzZs6MEREURVEUBSDEaQEURVEU/0GVgqIoipKCKgVFURQlBVUKiqIoSgqqFBRFUZQUCjotQG6pUKGC1KpVy2kxFEVRAopffvnlqIhUTL8/4JVCrVq1iI6OdloMRVGUgMIYE5PRfp0+UhRFUVJQpaAoiqKkoEpBURRFSUGVgqIoipKCKgVFURQlBVUKiqIoSgqqFBRFUZQU8rdSWLUKjh1zWgpFURS/If8qhfh4uOsuqFoVHngAfvwRtLaEoij5nPyrFAoVgsWLYdAgWLAA2rSBBg3sPkVRlHyKXykFY0x1Y8z3xpgtxpg/jDGP+PSCjRvDe+9BbCxMngzFikFoqO3btQtWr1brQVGUfIVfKQUgAXhCROoALYGRxpi6Pr9qiRIwZAisXQs33WT3vfMO3HgjNGoEEybAiRM+F0NRFMVp/EopiMhBEfk16f1pYAtQNU+FMMa+jh0LUVFQpAg89BCEhdlXRVGUIMavlEJajDG1gOuBnzPoCzfGRBtjoo8cOeIbAUqUgGHDYN06+OUX6N/f+iHATinNng0nT/rm2oqiKA5hxA/nzI0xJYAVwMsi8llmxzZr1kzyPHX2xo3WH1G0KNx7L0REQIsWqVaGoiiKn2OM+UVEmqXf73eWgjGmEDAP+CArheAYjRpBdDT06wdz50LLlnD99bBtm9OSKYqi5Aq/UgrGGANMAbaIyJtOy5MpTZtan0NsLEycCGXLQvXqtm/xYuu09kMrTFEUJTP8SikArYH+QEdjzIak1s1poTKlVCk7ffT993Y6CeDpp+GGG6BJE3j/fTh1ylkZFUVxz8GD0K4d/PWX05L4BX6lFERklYgYEWkoIo2T2ldOy5Vtvv/eKgOABx+EKlXgf/9zViZFUTJm7Fib8mbsWKcl8Qv8SikEDaVKwfDh8Ouv8PPP0Lcv/OMfti82FiIj4fRpZ2VUFMVaCdOmgctlX9VaUKXgU4yxUUmTJ8Mdd9h9CxZYhVGlCoSH23BXRVGcYexYqxAAEhPVWkCVQt4zYgSsWQO9e9u1Ds2aWf9DfLzTkilK/iLZSrh40W5fvKjWAqoU8h5jrBKYOtX+UU6YYFNrJC+Me+stO+2kKIpvSWslJKPWAgWdFiBfU7o0jByZun3sGDz7LPz9t7UgwsOtP6JECedkVJRgZfXqVCshmYsX4aefnJHHT1BLwZ8oVw7277fJ+M6ft0qhShVN560ovmD9eruWKH1bv96z84M0lFWVgr9RpgyMGgWbNtnCP3ffbVdLA3zzjXVanznjrIyKogRtKKtf5j7KDo7kPnKKAQNg5kwoWdKm2IiIsCk3FEXJWw4ehCuvtBZ90aK2/krlyk5LlS0CJveRkgnTp9snk549bZRE48YwcKDTUilK/iOIQ1lVKQQSxkDr1jBjBhw4YFdJ33ab7Tt9Gh55xE47KYriO4I8lFWVQqBSrhw8/DDcc4/dXrfOrpRu1AhatbJ/pGfPOiujogQjQR7KqkohWOjY0VoP48fb0qGDB9tqcYcOOS2ZoniXnEb9eCtayJNQ1gCOTFKlEEyULw+PPgqbN8OKFXY66YorbN/LL1ufhFoPSqCT06gfb0ULeRLKGsCRSRp9lB9ITLSL4TZssCGv/fvbyKV69ZyWTFGyR06jfvIyWihAIpM0+ig/U6CATZ2xYgV062Z9D/Xrw9tvOy2ZomSPnEb95GW0UIBHJqmlkB85etSud7jjDrjqKlv/YcECaz3Ureu0dIqSMWmfwJPx5Ek8p+flpYwOoJaCkkqFCvD441YhAGzcaIsC1atnk/PNmgXnzjkro6KkJ6dRP3kZLRQEkUmqFBTrnD5wAMaNs9FKDzxgM7kGuBWp+AHejMLJadRPbhLfJfvhPF3/EwRJ9lQpKJaKFeHJJ2HrVli2DJ57zi6Wi4+Hu+6ytR/SmsSK4gnejMJJjvoJSfrZCgnxLOon+bwRI+w5Dz7oeeK7fv3g5Em4777syZjTJHv+gIgEdGvatKkoPmTHDpGrrrJ/2uXKiTz6qMiWLU5LpQQCsbEioaH2b6doUZGDB3M/5nvvXfpzGxXl2fVyIsv69Zdea+PG3MvvRwDRksFvqloKSubUrm2th6VLoXNnePddqFMH1q51WjLF3/FFFM6oUZduDx/u2fVyIku/fpdue2otBDgafaRkj8OH4ZNPUk3xl16C48dt7Ydrr3VaOsVf8EUUzvvv26mf9ERFQffu7q8nkn1ZNmxITVmflo0boWHDnMnvZ2j0keIdKlWy1eKS53X377frHa67Dtq3h48+ggsXHBVR8QN8EYWT3kpIZvjwzK+XE1nSWwnJ5ANrQZWCkjsmToR9++CVV2DvXvtP88gjTkulOI0vonDS/7Cn3Z/Z9XIiy86d2dsfRKhSUHJP5cowZgzs2GFLhz70kN2/fj106ABz5qj1ECh4K4Q0t1E4GYWCZjRe2nFFIDYW2ra195G8P7lv/XpbF33jxktlyeiez53L+Dr5YP2OKgXFe4SEwM03p+ZUOnwYYmKgb1+oVg1Gj4bt252VUckcf0nklt1Q0GQyk9/dmP5yz35CvnU0T548mVWrVhEREUHLli0xxvhAOgWXC5YssfmWPv8cihe3C+RCQ52WTEmPvyRyS+/k9dS5m5n87sb0l3t2gIBxNBtjphpjDhtjfvfldY4cOcK8efO48cYbadSoERMmTODEiRO+vGT+JCQEunSBefOs72HOHKsQRGwNiNGj7bST4jz+ksgtp6Ggmcnvbkx/uWd/IqPFC042oC3QBPjdk+Nzs3jt1KlTEhkZKU2aNBFAihYtKoMGDZLVq1eLy+XK8biKB5w6JXLnnSIFCtjZ2k6dRD7+WOTCBacly5+kXdyV3Ly14Cw7pF8w5unCsczkdzfmkiX+cc8OgZvFa44rgQyFglp5oRTSEh0dLcOGDZPixYsLIA0bNpR3331XTpw44ZXxFTccOCAydqxIjRr2z/HDD+1+Vcp5y4gRIoULX/oDWbiwyIMP5q0c9epl/ANer17m52Umv7sxy5b1j3t2iKBSCkA4EA1E16hRw6sf1MmTJ2XixIly/fXXCyDFihWTwYMHy88//6zWgy9JSBD56iuRc+fs9uuvi3TuLPLJJyIXLzormz8TGyvStm3un24bN874h7Nx49RjFi+2lt3SpZefv369SOnSlz/Ru9vvri/9k3tyCw3N/J4zk9/dmMZkfc9BTFAphbTNV7mPXC6XrF27VoYOHZpiPTRq1Ejee+89OXnypE+uqaRh4sRU6+GKK0TGjBHZudNpqfyPESNEQkLy5um2bFlJecJOT/LTePonenf7s+rL7L5y2qdcgiqFXHDy5El57733pFGjRinWw5AhQ2Tt2rVqPfiShASRRYtE7rjD/qN37Zral5jonFz+gi8Szrlj8eJLn6bTWgvuEsdlllAus76cJrbLy88jCFCl4AVcLpf8/PPPMmTIEClWrJgAcv3118v777+v1oOv2bdP5I8/7PuYGJGwMJGnnxbZtctZuZwk7Ty6r+fCk62EtPPxyaSfs09+8ne3P6u+zO4rp33KZQSMUgA+Ag4C8cB+YEhmxzuVOvvEiRPy7rvvSsOGDQWQ4sWLy9ChQ2XdunWOyJOv2LJF5PbbrfVgjEiXLiLz5uUv30NeRgultxLSWgvuIns+/jjj/Rs3Zh5hlNl95bRPyZCAUQrZbU7XU3C5XLJmzRoZNGiQFC1aVABp0qSJTJw4UU6dOuWobEHP3r0izz8vUrWqdYDGxtr9+UE55GW0UHorIa214C6yJ71saS2CzCKMMruvnPYpGaJKIQ84fvy4TJgwQRo0aCCAlChRQsLDwyU6Otpp0YKb+HiRn39O3e7Uyfof5s+3fcGIJ9FCOSGjyB53UTrGuI/scddCQzOPMMrsvnLal9m95WNUKeQhLpdLVq9eLQMHDkyxHpo2bSpRUVFy+vRpp8ULblyuVOsBRKpUEXn2WeuHULLG25E9OY0G8kUUkUYmXYIqBYc4fvy4vPPOO1K/fv0U6yEiIkJ+/fVXp0ULbuLjRT7/XOS22+wT7Ztv2v0XLgSv9ZBbvB3Zk9NoIF9EEWlk0mWoUnAYl8slP/74owwYMEBCQ0MFkGbNmsmkSZPUevA1MTEiySvTp061kUv/+pdaD+nxdmRPTqOBfBFFpJFJl6FKwY84duyY/O9//5O6desKICVLlpThw4fL+vXrnRYt+FmxQuTWW631YIxIt27Wosjv6028HdmT02ggX0QRaWRShqhS8ENcLpesWrVK+vfvL0WKFBFAWrRoIZMnT5YzZ844LV5ws3u3yDPPiFSuLHL99alKIb+uN/F2ZE9Oo4F8EUWkkUkZ4k4p+F3q7PyEMYbWrVszc+ZMYmNjeeuttzh9+jRDhw4lLCyMkSNHsnHjRqfFDE5q1YKXXrIlROfPB2NsAZZq1eD22+HLL20q5fyCt8tZ5rQcpy/KePpizGAmI00RSC2QLYWMcLlcsnLlSunXr1+K9XDDDTfI1KlT1XrwNXFxqdZDcuRSzZoiv/3mtGTeJbPQTA3bzDeglkJgYIyhTZs2zJo1i9jYWMaPH8/JkycZPHgwYWFhjBo1it9++81pMYOTcuVSrYd586BgQVtO9OWXbf+xY8FhPWRWflJLU+Z78m05zkBCRFi5ciVRUVF8+umnXLhwgZYtWxIREUHv3r0pVqyY0yIGHxmVaXzsMfjxRxg6FIYMgapVnZYy+2RWfjIfl6bMjwRMOU7lcowxtG3bltmzZ3PgwAH++9//cvz4cQYNGkRYWBgPPfQQv//u0+ql+Y+MyjTeey9cdx08/zzUqAE9esCyZc7KmV0yKz+ppSkVUJ9CoOJyuWT58uXSt29fKVy4sABy4403yvTp0+Xs2bNOixfYZBXCuGOHre9QqZJ9FbFpvg8ccE5mT9CEckoa8IZPwRhzjTGmozGmW/rmG5WluMMYQ7t27fjwww85cOAAb7zxBkePHmXgwIGEhYXxyCOP8McffzgtZmCS9ok5mbRPzrVrwyuvwL598PTTdt+331rroWdP+OYb//Q9ZHZfWd2zkn/ISFOkb0Bd4DcgEXBl0BI9GccXLb9aChnhcrnk+++/l3vvvVcKFSokgLRu3VpmzJih1kN2yEmyuZgYkX/+U6RiRXtszZoiL70kkvZzz6w0ZWbk5LzslqzMbUI5jVoKOMjN4jVgJbAV6AFcDdRM3zwZxxdNlULGHD58WMaNGydXX321AFK2bFl55JFH5I/kQjWKb7hwwdYS6NTJKoaEBLt/+3aRunXtv1xWRejTk1nZSnfkdUI5TTYXcORWKZwBuntybF43VQqZ43K5ZNmyZdKnT58U66FNmzYya9YstR58TXI9jQsXRMqVu/QJ3NOn/szKVrojrxPKabK5gMSdUvDUp7ATCM3lTJXiAMYYOnTowJw5c9i/fz+vv/46f/31F/3796dq1ao89thjbNmyxWkxg5OSJe2rMZA+bLhNG1i/Pusx+vW7dPu++7I+xxdRRBq1lH/ISFOkb0Bn4FfgSk+Oz8umlkL2SUxMlCVLlkjv3r1TrIe2bdvK7Nmz5dy5c06LF3y4Kz85aZLtj40V+esvz8/LzFrI64RyGrUUsJDd6SNgHbA2TTsEXAS2pdu/FljrbhxfN1UKuePQoUPy6quvypVXXimAlCtXTh577DHZsmWL06IFD+7KT9ata/sfflikYEGRu+8W+e47kcTEzM/LzLeQ1wnlNNlcwOJOKbhd0WyMmQ54vNxZRAZl307JPflhRXNe4HK5WLZsGZGRkSxYsICEhATatWtHeHg4vXr1okiRIk6LGLgULWpXCacnNBTOnYNt2yAqCqZPh7g4G/L68MPwz39mfl5GXH89bNhw+f7GjT2brsrumOD96yl5grsVzZrmQrmMQ4cOMW3aNCZNmsSuXbsoX748AwcOZNiwYVx77bVOixe8nD8Pn31mFUTt2jBlit3/00/QsiWEaAICxXvkSikYY6YCY0VkdwZ9NYHnRWSwVyTNJqoUfIfL5WLp0qVERkby+eefk5CQQPv27YmIiKBnz55qPfiShASbkC86Gpo3t0oiPBwGDoRKlZyWTgkCcpv7aCBQ0U1fBWBADuVS/JiQkBBuvvlmPv30U/bt28d//vMfYmJi6Nu3L9WqVeOpp55i+/btTosZnBQsaF/r14fZsyEszE4nVasGffpAbKyz8ilBS3bsUXcmRX3giBdkUfyYypUr8/TTT7Njxw6+/fZb2rZty/jx47nmmmvo2LEjH3/8MRfTFzJRck9oKNx/P/zwA/zxB4wcCevWQZkytv+XX+CI/vsp3iMzR/MjwCNJmzWBv4AL6Q4LBa4ApovIEF8JmRk6feQcBw8eZOrUqUyaNImYmBgqVqzIwIEDCQ8P56qrrnJavODF5bL+BRGoVw927oS77rLTS+3b23URipIF2fYpGGNuBroABngc+BA4mO6wi8CfwFwRSa8w8gRVCs6TmJjId999R1RUFAsXLiQxMZGOHTsSERHBnXfeSeHChZ0WMXjZvNk6pmfMgBMn4Jpr4D//gV69nJZM8XNy62h+HpgsIgd8IVxuUKXgX8TGxqZYD3v37qVSpUoMGjSIYcOGUbt2bafFC17OnYNPP4XISHjoIet3OHzYKo127dR6UC4jYEJSjTFdgf8BBbCK6NXMjlel4J8kJiayePFiIiMj+fLLL0lMTKRz586Eh4fTo0cPtR58iYhVAq++alN7X3utnVp64AGoUMFp6RQ/ISfTR9kqKSUiHXMoW9prFsCumL4Z2I9dVd1XRDa7Oyc3SmH0aKhVy/rxSpfO0RCKBxw4cCDFeti3bx+VKlVi8ODBDBs2jCuvvNJp8YKXs2fhk0+s9bB6NRQubC2I6dN1zYOSo5DUuHTtGuAmoBg2a2oxoA02lfZRL8nZAtghIrtE5CIwB5uu2+vEx8P339tgjrAwW3Z33Tr7kKV4l6pVq/Kvf/2L3bt3s2jRIlq2bMnrr79O7dq16dKlC/PmzSM+Pt5pMYOPYsVgwAC7+G3TJmstJDupAebNg2PHnJVR8T8yyn2RvgFDgE1AjXT7ayTtH+bJOB5c527slFHydn9gQgbHhQPRQHSNGjVynPvD5RJZu1ZkyBCRYsVs2pZ3383xcEo22Ldvn7z44otSvXp1AeSKK66Qp59+Wnbt2uW0aPmDAwdEjBEpUkSkXz+RH36w/xBKvoFc1lPYBdzppq8nsNuTcTy4zj0ZKIV3MjvHWwnxTpwQee89kf377fbChSLDhomsW+eV4RU3JCQkyBdffCG33367hISEiDFGunTpIvPmzZOLFy86LV5ws3GjyMiRIqVKpSbo0z/4fIM7peDpxGJlwF1OgyKAt9bd7weqp9muBuTJ0s3SpWHECKha1W7v2gUffGAzDDRtaqP+Tp/OC0nyFwUKFKB79+4sXLiQPXv28Nxzz/HHH3/Qq1cvatSowTPPPMOePXucFjM4adgQJkywq6OnToWyZaF60r/fTz/BqlU6n5ofyUhTpG/AV8AeoFm6/c2BGOArT8bx4DoFsVbJP4DCwEagXmbn+DJ19okTdjqpYUP7INWkic8upaQhPj5eFi5cKLfddluK9dC1a1f57LPP1HrIK269NdV6eOstkWPHnJZI8TLkcvqoGrbITiL2yX1D0msisB6o5sk4Hl6rGzYCaSfwTFbH50U9BZdLZPVqka+/tttnz4p07CgSGZlacVHxDTExMfLcc89JWFiYAFKlShV59tlnZc+ePU6LFtycOSMyebJI8+b2ZyI0VOT5552WSvEi7pRCttYpGGO6JVkHlbFpL9aJyFc5MlG8hBPrFLZuhbvvht9/hxIlbEhrRIRNO6/4hoSEBL766isiIyP5+uuvAejatSvh4eF0796dgskJ5BTvs369nT9t2tSG6Z05Y8Na+/VLzcGkBBwBs3gtuzi1eE0E1qyxIeAff2xT4W/YAI0a5bko+Y6YmBimTJnClClTiI2NJSwsjCFDhjB06FBq1KjhtHjBz7x59qmoaFG77iE83NZ70FXTAUVOFq8VE5Gzye+zukDysXmNP6xoPn4cFi60C0aNgSefhL//ttZDcnEqxfskJCTw5ZdfEhUVxTfffAPArbfeSkREBN26dVPrwZf8+qu1Hj74wFoODRrYTK5qOQQMOVEKiUArEVlrjHGRRWlOESngFUmziT8ohfSMGmWLZp0/Dy1aWOXQpw8UL+60ZMHLnj17UqyHgwcPUrVq1RTroXr16lkPoOSM06dhzhy7YnrqVLtvyhSbvfWGG9R68GNyohQGAF+KSJwxZiBZK4UZ3hA0u/ijUgBrPcyaZaeXNm+GRx6Bt97y/PwPPoBnnoG9e6FGDXj5Zeu7UDInPj6eL7/8ksjISBYvXowxhm7duhEeHs6tt96q1oOvuXjRFgI6csSGvIaHW9+D5pHxO9wpBa9EDDnZ8iL6KDe4XCKrVons3Gm3f/hB5IYbRKZMsQEeGTF7duoK6+RWrJjdr3jOrl275P/+7/+kcuXKAki1atXk+eefl3379jktWnBz6pTIxIki11+f+sc7Z47TUinpIJchqWOxSepKeHJ8XjZ/Vwrp+eYbkeuus598qVJ2QenGjZceU7PmpQohudWs6YTEgc/Fixdl3rx50qVLFwEkJCREbr/9dvnyyy8lISHBafGCm+homxpgyxa7vXq1TR1w8qSzcim5C0k1xvwG1AVc2AVlK5PaKhE57B1jJmf46/RRZojYxaKRkTYFfqlScOAAFCpk+woUyHghqTE2n5mSc3bt2sXkyZOZOnUqhw4donr16gwdOpTBgwdTrVo1p8ULfp56Ct54wybr69vXOtyaNVPfgwPkOiTVGFMWmyU1uTXB1jzYDqwUkWHeE9dzAlEppCUuzpbebdvW/uA3awY7dmScUqNmTdCMD94hPj6ehQsXEhkZyXfffUdISAjdu3cnIiKCW265hQIFHImbCH5EIDraPhF99JFN792tGyxa5LRk+Q6vrlMwxhQGOgOjgbaAiEYf5ZoTJ2zk0ty5NrV3WooVsxGA6mz2Pjt37kyxHg4fPkyNGjUYOnQoQ4YMISwszGnxgpdTp2xERUiItRgSEuCf/7QWRLPL/Z+Kd8mVoxkoBdwK/Ac7bXQOOAIsAJ4AWngyji9aoPkUPOHoUZH77hMpWND6EipWtE7m5Onv2bOtf8EY+6oOaO9w4cIFmTt3rnTu3FkAKVCggPTo0UO++uor9T3kBRs2pEZYNGlindWaR8ZnkEtHcwLwN/AhEEEWSerysgWjUkjG5RJZsUIkPt5uP/OMyDXXiBQuLBqZ5GO2b98uo0ePlooVKwogNWvWlLFjx8qBAwecFi24SZ+FsnhxkT/+cFqqoMSdUvDU0bwa60M4BfyQZC2sADaIJwP4kGCaPsqKyZNteu+EhMv71N/gGy5evMiCBQuIiopi6dKlFChQgNtvv52IiAi6dOlCiJa19A0isHatnUsdN85OMb33no3G6NvXJh1TcoU3HM1FgZZYH8JNSe8TgJ+AFSLymvfE9Zz8pBTAfZCGMXYFdeHCeStPfmL79u1MmjSJadOmcfToUWrVqsWwYcMYNGgQVapUcVq84KdTJ1i2TLNQegmvLl7D+hh6AMuxYaqJORnHGy2Yp48ywt0ahrAwkXLlRB59VGTzZqelDG7Onz8vc+bMkQ4dOgggBQsWlLvuuku+/fZbSUxMdFq84MXlEvnpJ5EBA2wqb7BzqkqOIDeV14wxlY0x9xhj3jbGrAfigHlAWeBdoK8XFJfiAS+/bCOR0lKsGDz6KHTuDO++C3XrQrt2NrDjwgVn5AxmihQpQp8+fVi2bBlbt27l0Ucf5YcffuCWW27hqquu4pVXXuGvv/5yWszgwxho1cqm7Y6Nhbffhh49bN/vv9u51fXrHRUxKMhIU6RvWGvgPHaq6DXgNqCMJ+f6uvmLpZCTiKBOnS592u/UybPxRowQKVDAnlOggN1O5tAhkddeE6ld2z5MJRfM+vtvjVryJefPn5cPP/xQ2rdvn2I99OrVSxYvXqzWQ14wc2aq9dC8uS0Q5C6PjCIi7i0FT5VCByDUk2PzuvmDUshJrqL0CiGtYshsPE+vlZh4adDGlVeKhIRkT0YlZ/z555/yxBNPSPny5QWQK6+8Ul555RX566+/nBYtuImLE/nf/2wJ0eQ51eTQPeUy3CkFLbLjBWrVgpiYy/dnFhGU2ar+mjXdjwfZv1ZiIlSoYBfHZec8JXecP3+ezz77jKioKFasWEHBggW58847iYiIoGPHjhq55CtE4KefYNs2GDTIbg8caOdUNYd9Clp5zYeEhGQ/V1FmSsEY9+NBzvIiZSbj33/b/iJF3J+v5I4///yTqKgoZsyYwbFjx6hdu3ZK5FKlSpWcFi+4OXrU5pHZssUmGuvf30YuNWjgtGSO4k4p6KOKF3BXATKnlSEzGy+n18rsvEmTbAr8p56C7ds9l1PxnOuuu44333yTAwcOMHv2bMLCwhgzZgzVqlWjT58+LF26FJdmO/QNFSrYBGM//AB33GEX/DRsCF984bRk/klGc0qB1NSn4JlvILPzfvxRpFev1LQaHTuKfPyxjQBUfMfmzZvl0UcflbJlywogV111lbz++uty6NAhp0ULbo4eFXnrLZGzZ+32+++LjBolsmmTs3LlMeTG0ezPzR+UgkjeRh/lNIooq/NiY0VeflmkVi2Rtm1T9+tvlG85e/aszJo1S9q0aSOAFCpUSPr06SPLli0Tl2pm3zNmTGrumFatRKZPT1UYQYwqBR/jLkw0pz/8meHr0NLERJHkQJm//rL/L8nWw4UL3r2Wcim///67PIrEiTkAACAASURBVPLII1KmTBkB5Oqrr5Zx48bJkSNHnBYtuDlyROS//xW59lr7j9qjh9MS+ZxsKwVgHbDW0+ZuHF83f1AKI0Zc+sOfdpVxTqaIMiOvS3UeOyby0kupK6krVhQZPVrk4EHfXE+xnD17VmbMmCGtW7cWQAoXLiz33nuvfP/992o9+BKXS2T5clshTkRk/36Rm24SmTEj6KwHd0rBbfSRMWY64HFokogMyr5HI/f4Q/RRwYI27DM7ZBZ2mlmIaE7CX71BYiIsXmxro3z1lY32q1ULDh6E8uU155Iv+f3334mKimLmzJmcPHmSa665hvDwcAYMGECFChWcFi+4Wb3ahrNu2wZlysADD0B4ONSr57RkuUZDUn1ITioJZhZ2mtPQ0rwKXjl2DMqVs++7d7eFtAYNgmHD4Mor80aG/MjZs2f55JNPiIyMZPXq1RQuXJi7776b8PBw2rZti9GSlr5BBFassE9E8+bZf7TYWAjwUGK/D0lNyq30hzHGZYwJqLJLOanc6IvQ0rwiWSGArRTXsiW8/jrUrg233GItCsX7FCtWjAEDBvDTTz+xadMmwsPDWbRoEe3bt6dOnTq8+eabxMXFOS1m8GEMtG9vy4ceOAAff5yqEO69Fx57zK6BCBI8VgrGmFrGmGeNMTONMXPTNy/I8jtwF7ZeQ0ARHp7xfneVHDt1cp/Y7uWXM79WTs/zFV27woIFsHcvvPii/d9INtwuXIBdu5yRK9hp0KAB77zzDrGxsUybNo2yZcvyxBNPULVqVfr168fKlSsJ9FkAv6RiRejVy75PSLAKIzkLZdu2Ngvl+fPOyphbMnI0pG9AU+AMsAVIBNYDu7CJ8vYCyzwZx8NrLQeaeXp8ThzNOY3eySwRXZkylzp/y5Sx+zNyNCdTqNCl+wsVSu1L76QOC/NMDl/cd3ZISEj1x82ZY6/VpYvIvHkiFy96/3pKKhs3bpSRI0dKqVKlBJA6derI+PHjJS4uzmnRgpu0WShB5M037X4/DwgglwnxlgEzgAJJiqBJ0v4bgRigqyfjeHgtnyqFnEbvuIswGjEiNf+Wp61QIZGiRTPuK1rUfdRSWFjgRC2J2MCNF14QqVbNXq9yZZH/+z+Rc+d8d01F5MyZMzJlyhS54YYbBJAiRYpIv379ZOXKlRq55EsSE0WWLLGL40Rs5tZ27UQ++MAv/+hzqxSOAbcAJkkp3JimbzC2LKcn4yzBThOlbz3SHJOlUgDCgWggukaNGtn6INwVqalZM/Pzkp/M0zd3+33Vcip/Ts/zBvHxIgsXitx2m0i9eqkPUBs3ahJLX7NhwwYZMWKElCxZUgCpW7euvPXWW3IsOae64js+/NCmJwaR8uVFHn9c5M8/nZYqhdwqhTigQ9L7v4C+afpuBv72ZBwPr+VTS8GYjH8cjcnqA/SPllP5c3qetzl/3r6eOSNSqpRIlSoizz4rsmdP3sqR3zhz5oxMnjxZWrRoIYCEhoZK//79ZdWqVWo9+JLERJHvvhO5+26bR6ZRo0v7HMSdUvDU0bwZqJ30fjXwmDHmamNMTWA0sNPDcRwnp9E77iKMchJ5lBsCOWoJUjOxFikCs2ZBkybWSf6Pf0C3bvDrr3krT36hePHiDBkyhJ9//pn169czcOBAFixYQJs2bWjQoAFvv/02x48fd1rM4CMkxJZE/OQT2LcPpkyx+0+dsuF6Tz1l10D4ExlpivQN6A88m/S+DrAP63BOBE4BXTwZJ4tr9AT2AxeAQ8C3npynPgX/9Sl4SkyMyL/+Ze9v3Tq7b/dutR58zenTp2XSpEnSrFmzFOthwIAB8uOPP6r14GtiYi7NQtmhg8hHH6Wa0nkA3sx9BJTAThvdAVTKyRjeat6OPsppGcz0iqFu3eQP/vKWTPpKaCEhqX2ZRR/5a86k3JLWvzBokJWzWzeRzz9X34Ov+eWXXyQiIkJKlCghgNSvX1/eeecdOX78uNOiBTdps1CCdbSJ5MkffK6UAvAAUN5NXzngAU/G8UXzZu4jbz9NZ2ZdZNanWEvh2WetzwFEqlYVeeMNp6UKfk6dOiVRUVHStGlTAaRo0aIycOBAWb16tVoPviQxUWTVqtTtfv1skjQfZqHMrVJIBFq46WsKJHoyji+aN5WCtyN0MotYyqxPSSU+XmT+fJFbbxV59FG7z+US+eYbuyZC8R3R0dESHh6eYj00aNBAJkyYICdOnHBatOBn3LjLs1Bu3+7VS+RWKbgyUQpdgOOejOOL5k2l4O0InZxGGCkZk/yg+v339nOqVs2ug9i3z1Gxgp5Tp07JxIkT5frrr0+xHgYNGiRr1qxR68GXJCSIfP21yJ132qfFp56y+xMTvWI9uFMKmWVJ7QH0SNocCCwCjqQ7LBS4CdgiIl08c217F28mxPN2BlJ32VOTI5bc9SUkZP9a+Yn4eFtJMSrK5lkyBm67zW5Xruy0dMFNdHQ0kZGRfPTRR/z99980atSI8PBw7r//fkqXLu20eMFLbKz9cbjiCvj2W5ut9Zln4OGHczxkThLiVQIaJDWwIakN0rWawGIgIseS+RHezivkLidSeHjmfUrmFCoEd90F33wDO3fCmDE291Jyor4ffoD9+52VMVhp1qwZkyZNIjY2lvfffx9jDCNHjiQsLIwhQ4awdu1a3D1oKrkgLMwqBLC56lu18l1a5IzMh/QN+B6o48mxed28XWTH2xE6mUUs5TSHkXI5ybMYLpf93kJCRO64Q2TRIvU9+BKXyyVr166VIUOGSLFixQSQxo0by3vvvScnT550WjwlE8ju9JE7jE3aXgU4LCKOT3T4Qz0Fxb/YuRMmT4apU+HwYbtA74034J57nJYsuDl58iQffvghkZGRbNy4keLFi9O3b1/Cw8Np1qyZ1nvwM3JdT8EY080Y8zNwHrt4rWHS/knGmH5ek1RRcknt2vDKK3YB6SefwLXXQokStm/vXvj66+xXylOypnTp0owYMYL169fz888/06dPHz788ENatGhB06ZNiYyM5PTp006LqWSBR0rBGPMAsBD4E5uMLq3K3wYM8b5oipI7CheGu++2zuhbb7X7pkyx6TRq17a+ooMHnZUxGDHG0KJFC6ZMmUJsbCwTJkwgISGB4cOHU6VKFcLDw/nll1+cFlNxg6eWwjPAOBEZAMxO1/cHUNerUimKj3jmGZg7F666Cp59FqpXh759bTCw4n1Kly7NyJEj2bhxI6tXr6Z3797Mnj2bZs2a0bRpU6KiotR68DM8VQo1ge/c9J0HSnlHHEXxLYULW9/CkiU2D9kTT0CFCql1tqdNU+vBFxhjaNmyJVOnTiU2NpZ33nmHixcvEhERQVhYGBEREfyq2RD9Ak+Vwj7gejd9zYAd3hFHUfKOq6+G116Dd96x27t3w+DB1jHdq5cNB/dV1F9+pkyZMowaNYpNmzbx008/0atXL2bOnEnTpk1p3rw5kyZN4syZM06LmW/xVClMAZ5PcigXTdpnjDGdsKmzJ/lCOEXJS/7xD9i6FR591K516NrVTjPpA6xvMMbQqlUrpk+fTmxsLG+//Tbnzp0jPDycsLCwFKe1krd4FJKaFIY6ARiOzYNUEIjHlueMFJGRvhQyMzQkVfEFFy7A/PkwYwbMmQOlS8N3SROonTrZNPmK9xERVq9eTWRkJHPnzuX8+fM0b96ciIgI+vTpQ4nkMDIl17gLSc3WOgVjzFVAJ6A8tkTnMhFxtEKEKgUlr+jcGZYutZFLw4bBwIGpi0wV73Ps2DFmz55NZGQkmzdvpmTJkvTr14+IiAgaNWrktHgBj1eUgj+iSkHJK86ft9ZDZCSsWGHTbTz9NLz4otOSBTciwo8//khUVBRz587lwoULtGjRIsV6KF68uNMiBiTeWLxW2BgTboyZbIxZlPQ6zBhT2LuiKop/Ehpqw1eXL4ctW+Chh6BePdsXF2ed1ocPOypiUGKMoU2bNsycOZPY2FjGjx/P6dOnGTJkCGFhYYwcOZJNmzY5LWbQ4KlPoQ7wDRAG/AIcxibMawL8BXQVkc0+lNMtaiko/sBHH8F991nroWdPm9iwQwf1PfgKEWHVqlVERkby6aefcuHCBVq2bEl4eDh9+vShWPrMlspl5Gr6yBizEigNdBeRvWn218Cm1D4uIm29KK/HqFJQ/IUtW2z67hkz4PhxuOYa+OWX1BQbim+Ii4tj5syZREZGsnXrVkqXLk3//v0JDw+nQYMGWQ+QT8mtUjgH9BWRBRn09QQ+FJGil5/pe1QpKP7G+fMwb54NZf3vf+2+8eOhcWNo3z51oZziXUSElStXplgPFy9epFWrVoSHh9O7d2+1HtKRW5/CHmxBnYwIBfa66VOUfEdoKNx/f6pCOHvWJujr2NEm53vjDTiSvlyVkmuMMbRt25YPPviAAwcO8N///pe4uDgGDRpE1apVefjhh/n999+dFtPv8VQpjAFeMsbckHanMaYl8G/gn94WTFGChWLFbEW/mTOhUiV46imoVs1mcFV8Q4UKFXj88cf5888/Wb58ObfeeiuRkZE0aNCA1q1bM3PmTM6dO+e0mH6Jp9NH67D5j8pjnczJjuZKQBzWkkhBRFp4W1B36PSREmj88Yf1PTzxhE2psXQpbNgAAwbYPEyKbzh69CgzZswgKiqKbdu2UaZMGR544AEiIiKoWzf/5fTMrU9hWnYuJiKDsnN8blCloAQ6Tz5pp5qSU32Hh0Pbtup78BUiwvLly4mKimLevHnEx8fTpk0bwsPDufvuuyla1BH3aJ6ji9cUxY/57TeYNMlOMZ08aWs+LFrktFTBz5EjR5g+fTpRUVHs2LGDsmXLplgPderUcVo8n6JKQVECgLNnra+hcGG7UO78eXj4YejfH9q0UevBV7hcLpYvX05kZCTz588nPj6em266KcV6CA11F2cTuKhSUJQAJDra5lw6eRLq1LFTSw88AOXKOS1Z8HL48OEU62Hnzp2UK1cuxXq47rrrnBbPa+Q6zYWvMcaMM8b8aYzZZIyZb4wp47RMiuI0zZrBgQMwdSqUKgWPPQZhYbBDK5j4jEqVKjF69Gi2bdvGkiVL6NSpExMmTKBOnTq0a9eODz/8kPPnzzstps/wG0vBGNMFm3U1wRjzGoCIZBnqqpaCkp/YuBEWLIDnnrNTSa++CkWLWuuhbFmnpQteDh06lGI97Nq1i/LlyzNgwADCw8O59tprnRYvRwTU9FHSKum7ReT+rI5VpaDkV0SgSxdbWjQ01JYZjYiAG29U34OvcLlcLFu2jMjISBYsWEBCQgLt2rUjIiKCu+66iyJFijgtosf4/fRROgYDX7vrTMrWGm2MiT6iS0OVfIoxtvDP+vUwaJC1INq00VTeviQkJITOnTvzySefsG/fPv7zn/+wd+9e7rvvPqpWrcqTTz7Jtm2OlpjJNXlqKRhjlgCVM+h6RkQ+TzrmGWzd57vEA+HUUlAUy5kz8PHH0KoV1K0La9bAxInWOd2qlVoPvsLlcrFkyRKioqL4/PPPSUhIoH379kRERNCzZ0+/tR4CYvrIGDMAW/Kzk4ic9eQcVQqKkjEzZ8LIkVZZ1K9vlUP//lBGQzh8xsGDB5k2bRqTJk1iz549VKhQgUGDBjFs2DCuvvpqp8W7BL9XCsaYrsCbQDsR8XhOSJWCorjnzBlb6yEqyoa3Vqtm8zBpnQff4nK5+O6774iMjGThwoUkJibSsWNHwsPD6dmzJ4ULO1+bLBCUwg6gCDaXEsAaERme1XmqFBTFM379FXbtsqk0XC5bDKhLF+jXD0qXdlq64OXgwYNMnTqVSZMmERMTQ8WKFVOsh6uuusoxufxeKeQUVQqKkn0OHoTu3a2iKFoU7r3XRi61aKG+B1+RmJiYYj188cUXJCYm0qlTJyIiIujRo0eeWw+BFn2kKIoPqVLFVoWLjraWwty50LIlLF7stGTBS4ECBejatSvz588nJiaGsWPHsn37dnr37k316tUZM2YMO3fudFpMtRQURYHTp61ieOABW2f69ddh2zbrnG7eXK0HX5GYmMi3335LVFQUX3zxBS6Xi86dO6dYD4UKFfLZtdVSUBTFLSVLwpAhViEAnDoFc+bADTdAkybw/vt2n+JdChQoQLdu3ViwYAF79+7lxRdfZOvWrdxzzz1Ur16dp59+ml27duWpTKoUFEW5jJdegthYeO89u3L6wQet1aD4jqpVq/Lcc8+xe/duvvzyS1q0aMHrr79O7dq1ueWWW1JqP/ganT5SFCVTRGDdOptKo2FD2L7dOqbDw+G++6yVofiG/fv3M2XKFCZPnsz+/fupXLkygwcPZujQofzjH//I1dg6faQoSo4wxkYlNWxot48cgcREGD7cOqzDw63TWvE+1apV4/nnn2f37t188cUXNGvWjFdffZXatWvTtWtX1q9f7/VrqlJQFCVb3Hijzbe0Zg307g2zZ0Pr1nDihO0P8MkHv6RgwYJ0796dL774gj179vDcc8/x+++/E+KDVYg6faQoSq44eRJ+/tkuhAP7euWV1oJo0sRZ2YKZxMREChQokOPzdfpIURSfULp0qkK4eBGqVrV5l5o2teGskybZdBuKd8mNQsgMVQqKoniNwoVh2jQbufT223DunLUYPvjA9rtczsqnZI0qBUVRvE6ZMvDQQ/Dbb/DjjzZKCex6hxYtYMoUtR78FVUKiqL4DGOsYzo5bLViRTh7FoYOtbWmH3zQlhhV/AdVCoqi5Bm9e1vrYdUqm6V12jRb8yGZhATnZFMsqhQURclTjLEhrDNmwIED1hENdv1DWBiMGgWbNjkrY35GlYKiKI5RrhzUqWPfnzsHt9wCkydDo0a2hOi0aXa6Sck7VCkoiuIX1KgBs2ZZ62H8eLsYbvBg+Osv23/+vLPy5ReCcvFafHw8+/fv57z+FfkNoaGhVKtWzaepgJXgQsROIzVqZLd79LBTTOHh1jdRrJiz8gU67havFXRCGF+zf/9+SpYsSa1atTCaCN5xRIS4uDj279+f6yReSv7BmFSFANCpk83aOmgQPPYY9O9v8y/VreucjMFIUE4fnT9/nvLly6tC8BOMMZQvX14tNyVXPPwwbNkCK1ZAt24QGQnz5tm++Hjrk1ByT1AqBUAVgp+h34fiDYyBtm3tCukDB2ykEsDnn9vIpUcegT/+cFbGQCdolYKiKMFNhQpQtqx9f+WV0LWrXTFdvz60aWOd1omJzsoYiKhSwD511KoFISH2NTlPS2648cYbc9SXG5YvX85PP/3kk7EVxZ9p0gQ++shaD+PGweHDMHas/Z8GOHrUWfkCiXyvFD74wEYzxMTYaIeYmEsTeOWUjH6cE5MeW3z1w61KQcnvVKwITz4JW7fC99/b6aZz5+Caa+y00+zZGtqaFfleKTzzzOWLY86etftzQ4kSJQD7Q92hQwfuu+8+GjRocEnfwYMHadu2LY0bN6Z+/fqsXLnysnHGjBlD3bp1adiwIU8++SQAR44coVevXjRv3pzmzZvz448/smfPHiZOnMj48eNp3LgxK1euJCYmhk6dOtGwYUM6derE3r17Afjkk0+oX78+jRo1om3btgDs2bOHm266iSZNmtCkSRNVLkpAY4xN4Q12Cunpp+HgQRuxVLUqPP64fQBUMkBEAro1bdpU0rN58+bL9rnDGBFrI1zajPF4iAwpXry4iIh8//33UqxYMdm1a9dlfW+88Ya89NJLIiKSkJAgp06dumSMuLg4ueaaa8TlcomIyPHjx0VEpG/fvrJy5UoREYmJiZHrrrtORESef/55GTduXMr53bt3l+nTp4uIyJQpU6RHjx4iIlK/fn3Zv3//JWP+/fffcu7cORER2bZtm2T0ueaW7HwviuJtEhNFli4V6d1bpFAhkTVr7P4jR0SS/vTzFUC0ZPCbGpTrFLJDjRoZPzHUqOG9a7Ro0SLD+PzmzZszePBg4uPjufPOO2ncuPEl/aVKlSI0NJShQ4dy22230b17dwCWLFnC5s2bU447deoUp0+fvmz81atX89lnnwHQv39/Ro8eDUDr1q0ZOHAgvXv35q677gLsgr9Ro0axYcMGChQowLZt27xz84riJ4SEQMeOth09CuXL2/1PPw2ffQYDBtip4+uuc1ZOp8n300cvv3z5yshixex+b1G8ePEM97dt25YffviBqlWr0r9/f2bOnHlJf8GCBVm7di29evViwYIFdO3aFQCXy8Xq1avZsGEDGzZs4MCBA5RMzk2cCclhoRMnTuSll15i3759NG7cmLi4OMaPH88VV1zBxo0biY6O5uLFi7m8a0XxXypUsFNMAPffbxXFO+/YPEzt28P8+Y6K5yh+oxSMMWONMZuMMRuMMYuNMWF5cd3774eoKKhZ0/6R1Kxpt++/3/fXjomJoVKlSgwbNowhQ4bw66+/XtJ/5swZTp48Sbdu3XjrrbfYsGEDAF26dGHChAkpxyXvL1my5CUWw4033sicOXMA+OCDD2jTpg0AO3fu5IYbbuDf//43FSpUYN++fZw8eZIqVaoQEhLCrFmzUpziihLstG8Pn3wC+/bBK6/A3r2wdKntE4GdOx0VL+/JaE7JiQaUSvP+YWCiJ+fl1qfgK9L6FG677bYM+6ZPny716tWTxo0bS5s2bS7xO4iIxMbGSvPmzaVBgwZSv379FP/AkSNHpHfv3tKgQQOpU6eOREREiIjI1q1bpUGDBtKoUSP54YcfZPfu3dKhQwdp0KCBdOzYUWJiYkREpGfPnlK/fn2pV6+ePPzww+JyuWTbtm3SoEEDueGGG2TMmDEpMnoTf/heFCUrEhNFTp+271essD7GDh1EPvpI5Px5Z2XzJrjxKfhlQjxjzNNADREZkdWxGSXE27JlC3WS8/EqfoN+L0qgceSITeU9aRLs3m2nnQYOhGefhdKlnZYud7hLiOc300cAxpiXjTH7gPuB5zI5LtwYE22MiT5y5EjeCagoSr6iYkXriN6xA779NjXFRmio7f/zTwg291ueKgVjzBJjzO8ZtB4AIvKMiFQHPgBGuRtHRKJEpJmINKtYsWJeia8oSj4lJAS6dLEJ+HbuhCJFwOWyqTWqVYPRo63iCAbyVCmISGcRqZ9B+zzdoR8CvfJSNkVRFE8oWjT1/cSJtrTom2/C1VdD586QwRrUgMJvpo+MMVen2bwD+NMpWRRFUbIiJMRaCvPn24ilsWNh+3ZbMQ7g0KHAjFzyG6UAvJo0lbQJ6AI84rRAiqIonhAWZp3Pu3bZWg9g1z1cdRXcfDN8+qmt+RAI+M2KZhHR6SJFUQKaAgVS348YYX0PkyfDPffAFVdARAS8+KJz8nmCP1kKznLwILRrl1olPJc4kTo7I6ZPn05sbGzK9tChQy9JkZGdcUaNcuv7VxQlHVWrwr/+Za2HRYvghhvs9FIy33/vn9aDKoVkxo6FVavsqxdwInV2RtdLrxQmT55M3TwoapuQkODzayhKIFCggJ1S+vxzm7obbChrx45QvTr83//ZNRD+gioFsFbCtGk2xmzaNK9YC95Inf3111/Tu3fvlO3ly5dz++23A7B48WJatWpFkyZNuOeeezhz5gwAtWrV4t///jdt2rTho48+Ijo6mvvvv5/GjRtz7tw52rdvT/Jiv2+++YYmTZrQqFEjOnXqBMCxY8e48847adiwIS1btmTTpk2X3Zu7lNwDBw7k8ccfp0OHDvzzn//M9WeoKMFGctGfq6+GL76AFi3gtdegdm245RY/CWvNaJlzIDWvpLkYMUKkcGG7nr1wYZEHH8ze+RngjdTZ8fHxUr16dTlz5oyIiAwfPlxmzZolR44ckZtuuill/6uvviovvviiiIjUrFlTXnvttZQx2rVrJ+vWrbts+/Dhw1KtWrUUueLi4kREZNSoUfLCCy+IiMjSpUulUaNGIiIybdo0GTlypIi4T8k9YMAAue222yQhISHDz0TTXCjK5ezdK/L88yJXXy1y7Jjdt26dyO7dvr0ubtJcqKWQbCUkL0u8eNFr1kIymaXOnjZtGi+88AK//fbbZZlOCxYsSNeuXfniiy9ISEhg0aJF9OjRgzVr1rB582Zat25N48aNmTFjBjFp8n/36dMnS5nWrFlD27ZtU+QqV64cAKtWraJ///4AdOzYkbi4OE6ePHnJuatXr+a+++4DbEruVatWpfTdc889FEjrbVMUJVOqV4cXXrDV4pJrTo8aZetO33orLFgAeTkbq0ph7Fg7bZSWxESv+RYg56mzwf7Az507l2XLltG8eXNKliyJiHDzzTenpM7evHkzU6ZMyfJ6aRGRlFTa6fenJ6Pj3PV7cm1FUS4n7b/Z3LnWSf3bb9Czp63vMnly3sihSmH16suTl1y8CHngDM4qdTZA+/bt+fXXX5k0aVKKBdCyZUt+/PFHdiRNQJ49e9ZtUZz06bSTadWqFStWrGB3kofr2LFjgFVUHyQVqF6+fDkVKlSgVKlSl5zrLiW3oijeoUYNG7q6Z491UDdpkhruevy43ecr68Fv1ik4xvr1jl16+fLljBs3jkKFClGiRIkMLYUCBQrQvXt3pk+fzowZMwCoWLEi06dPp2/fvly4cAGAl156iWuuueay8wcOHMjw4cMpWrQoq1evTtlfsWJFoqKiuOuuu3C5XFSqVInvvvuOF154gUGDBtGwYUOKFSuWcs20vP322wwePJhx48ZRsWJFpk2b5q2PRFGUNBQsCHfcYVsyH39s10D07w8Z/GTkGr9MnZ0dNHV24KDfi6LknoQEu+7hiiugZcucj+MudbZaCoqiKAFEwYLQo4fvxlefgqIoipJC0CqFQJ8WCzb0+1CUwCAolUJoaChxcXH6Q+QniAhxcXGEJperUhTFbwlKn0K1atXYv38/WqrTfwgNDaVatWpOi6EoShYEpVIoVKhQhiuIFUVRlMwJyukjRVEUJWeoUlAURVFSUKWgKIqipBDwK5qNMUeAmCwP9B8qAEedFiKX6D34B8Fwq+WaigAAB/9JREFUDxAc9xGI91BTRCqm3xnwSiHQMMZEZ7S0PJDQe/APguEeIDjuIxjuIRmdPlIURVFSUKWgKIqipKBKIe+JcloAL6D34B8Ewz1AcNxHMNwDoD4FRVEUJQ1qKSiKoigpqFJQFEVRUlCl4GOMMfcYY/4wxriMMW5D1owxXY0xW40xO4wxY/JSxqwwxpQzxnxnjNme9FrWzXF7jDG/GWM2GGOiMzomr8nqczWWt5P6NxljmjghZ2Z4cA/tjTEnkz73DcaY55yQMzOMMVONMYeNMb+76Q+E7yGre/D778EjRESbDxtQB7gWWA40c3NMAWAncCVQGNgI1HVa9jTyvQ6MSXo/BnjNzXF7gApOy5udzxXoBnwNGKAl8LPTcufgHtoDXzotaxb30RZoAvzupt+vvwcP78HvvwdPmloKPkZEtojI1iwOawHsEJFdInIRmAP4sOBetukBzEh6PwO400FZsoMnn2sPYKZY1gBljDFV8lrQTPD3vw2PEJEfgGOZHOLv34Mn9xAUqFLwD6oC+9Js70/a5y9cISIHAZJeK7k5ToDFxphfjDHheSadezz5XP39s/dUvlbGmI3GmK+NMfXyRjSv4u/fg6cE+vcQnPUU8hpjzBKgcgZdz4jI554MkcG+PI0VzuwesjFMaxGJNcZUAr4zxvyZ9HTlFJ58ro5/9lngiXy/YvPYnDHGdAMWAFf7XDLv4u/fgycEw/egSsEbiEjnXA6xH6ieZrsaEJvLMbNFZvdgjDlkjKkiIgeTTPrDbsaITXo9bIyZj536cFIpePK5Ov7ZZ0GW8onIqTTvvzLGvGeMqSAigZSgzd+/hywJku9Bp4/8hHXA1caYfxhjCgP3AgsdliktC4EBSe8HAJdZP8aY4saYksnvgS5AhlEaeYgnn+tC4IGk6JeWwMnkqTI/Ict7MMZUNsaYpPctsP/XcXkuae7w9+8hS4Lke1BLwdcYY3oC7wAVgUXGmA0icosxJgyYLCLdRCTBGDMK+BYbbTJVRP5wUOz0vArMNcYMAfYC9wCkvQfgCmB+0v9EQeBDEfnGIXkBcPe5GmOGJ/VPBL7CRr7sAM4Cg5ySNyM8vIe7gRHGmATgHHCvJIXD+AvGmI+w0TkVjDH7geeBQhAY3wN4dA9+/z14gqa5UBRFUVLQ6SNFURQlBVUKiqIoSgqqFBRFUZQUVCkoiqIoKahSUBRFUVJQpaDkS4wx4caYHOVwMsZMzyoLrCfH+BpjzGhjTPsM9ktSmKuiXIYqBSW/Ek7gJPbLKaOxcfWK4jGqFBRFUZQUVCkoAUPylIwx5k5jzJ/GmPPGmFXGmLrpjgsxxoxJKthywRizzRgzIE3/cqApMCBpKkWMMQOT+h5IGvOYMea4MeZ7k0lxpGzKX8MYMydp7LPGmG+NMdem6a+VJEtvY0xkUsGW/caYF40xIenGusfYokfnkmS8Pt197AHKA8+nucf2aYYoYIz5jzHmiLGFY941xhTxxn0qgY0qBSXQqAm8CYwF7gNKA98aY0LTHPMO8CwQBdwGzAemGmO6J/U/CPyJTa3QKqktSuqrBczEpvK4D5uo7QdjzJW5EdoYUw5YhS24NBzoDRQHlhhjiqY7/HXgDDZtwmzguaT3yWM1w9ZV+BXoic0b9HG6MXoCJ4Epae7x1zT9TwBhQD9gHBABPJKbe1SCBKer/GjT5mkDpmPTKd+YZl9NIAEYnrR9FeACBqQ7dyawLs12NDA9i+uFYPM4/Qk8l06OaA9kjU6zPRabHK1cmn1lsT/cI5O2ayXd38x0Y20A5qTZ/gSbbNCk2Tc66dyBafYdBV7IQDYBfki3bwGwxunvWJvzTS0FJdA4LCI/JW+ISAzwCzZNN0AnrFKYb4wpmNyApUBjY0yBzAY3xtQxxsw3xhwCEoF47NP9NbmUuzPwHXAqjUynk2RPPz21ON32Zmwq6WSaA1+ISNrEZdnNqpvVNZR8imZJVQKNjGo5HAaSSzdWwGYTPenm/CrYKaHLSEr9vRg4BDwOxADngclAaEbnZIMK2NrDfTLoW5pu+0S67Yvprl8ZOJLumPTbWZHVNZR8iioFJdDIqBRoJSA51fgx7HRSa6zFkJ4MCwQl0Qr7tHyziPyZvNMYUzpnol7CMezT/NgM+k5nc6y/sKnY05J+W1FyhCoFJdCoZIy5MXkKyRhTA2gCTEvqX4a1FEqLyHeZjJPRk3Gyw/dC8g5jzI3Yuf5fcin3Uqxz+Q8ROZfLsdYBtxtj/i/NFNIdGRynT/9KtlGloAQaR4FZxph/YQuZ/Bv79D8dQES2GmMmAnOMMa9jHcqhQD3gGhEZmjTOn8AtxphbsA7g3cAabNTPpKRzqwEvAAe8IPeb2EifZcaYd5LGvAJoB6wSkY+yMdZrwM/Ye5wG1AGGJfWltY7+BG4zxnyDva+tIpJdq0TJZ6ijWQk0YoCnsD/Wc4BTwC0icj7NMSOx0zQPYMNOp2NDU9PWi34J2ALMJenJW0QOYUNRK2NLjj6KDR/dkVuhxdbpbYn9oR6P9V28jg2p3ZTNsaKBvti1FguAXsCIpO5TaQ59CvgbG267Lul4RckUrbymBAzGmOlAfRHxymKyYMIY0w+YBVwpIrudlkcJXHT6SFECEGPM+9gQ1+NYn8qzwCJVCEpuUaWgKIFJeeC9pNc47Irm0Y5KpAQFOn2kKIqipKCOZkVRFCUFVQqKoihKCqoUFEVRlBRUKSiKoigpqFJQFEVRUvh/g+2ZqDxXIRIAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_setosa_versicolor(X = transfX)\n",
"plot_decision_boundary(SVC_clf)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pipeline(memory=None,\n",
" steps=[('scaler',\n",
" StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
" ('clf',\n",
" SGDClassifier(alpha=0.0001, average=False, class_weight=None,\n",
" early_stopping=False, epsilon=0.1, eta0=0.001,\n",
" fit_intercept=True, l1_ratio=0.15,\n",
" learning_rate='constant', loss='hinge',\n",
" max_iter=1000, n_iter_no_change=5, n_jobs=None,\n",
" penalty='l2', power_t=0.5, random_state=42,\n",
" shuffle=True, tol=0.001, validation_fraction=0.1,\n",
" verbose=0, warm_start=False))],\n",
" verbose=False)"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import SGDClassifier\n",
"\n",
"sgd_clf = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('clf', SGDClassifier(loss=\"hinge\", learning_rate=\"constant\", eta0=0.001,\n",
" max_iter=1000, tol=1e-3, random_state=42)) \n",
"])\n",
"\n",
"sgd_clf.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_setosa_versicolor(X = transfX)\n",
"plot_decision_boundary(sgd_clf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**EXERCISE 10**\n",
"\n",
"Train SVR on California Housing Dataset"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.datasets import fetch_california_housing\n",
"\n",
"housing = fetch_california_housing()\n",
"X = housing[\"data\"]\n",
"y = housing[\"target\"]"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(20640, 8)"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.shape"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pipeline(memory=None,\n",
" steps=[('scaler',\n",
" StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
" ('model',\n",
" SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1,\n",
" gamma='scale', kernel='rbf', max_iter=-1, shrinking=True,\n",
" tol=0.001, verbose=False))],\n",
" verbose=False)"
]
},
"execution_count": 133,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.svm import SVR\n",
"\n",
"SVR_model = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('model', SVR())\n",
"])\n",
"\n",
"SVR_model.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.7275639524733043"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"SVR_model.score(X_test, y_test)"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.3570026426754465\n",
"0.5974969813107398\n"
]
}
],
"source": [
"from sklearn.metrics import mean_squared_error\n",
"y_pred = SVR_model.predict(X_test)\n",
"mse = mean_squared_error(y_pred, y_test)\n",
"rmse = np.sqrt(mse)\n",
"print(mse)\n",
"print(rmse)"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 3 folds for each of 10 candidates, totalling 30 fits\n",
"[CV] model__C=8.732501769442347, model__gamma=0.014138684138012492 ...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[CV] model__C=8.732501769442347, model__gamma=0.014138684138012492, total= 10.9s\n",
"[CV] model__C=8.732501769442347, model__gamma=0.014138684138012492 ...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=1)]: Done 1 out of 1 | elapsed: 10.8s remaining: 0.0s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[CV] model__C=8.732501769442347, model__gamma=0.014138684138012492, total= 10.7s\n",
"[CV] model__C=8.732501769442347, model__gamma=0.014138684138012492 ...\n",
"[CV] model__C=8.732501769442347, model__gamma=0.014138684138012492, total= 10.9s\n",
"[CV] model__C=10.6073996426796, model__gamma=0.0010782720368618492 ...\n",
"[CV] model__C=10.6073996426796, model__gamma=0.0010782720368618492, total= 10.1s\n",
"[CV] model__C=10.6073996426796, model__gamma=0.0010782720368618492 ...\n",
"[CV] model__C=10.6073996426796, model__gamma=0.0010782720368618492, total= 10.1s\n",
"[CV] model__C=10.6073996426796, model__gamma=0.0010782720368618492 ...\n",
"[CV] model__C=10.6073996426796, model__gamma=0.0010782720368618492, total= 10.0s\n",
"[CV] model__C=5.173843032530275, model__gamma=0.03912018707260784 ....\n",
"[CV] model__C=5.173843032530275, model__gamma=0.03912018707260784, total= 11.1s\n",
"[CV] model__C=5.173843032530275, model__gamma=0.03912018707260784 ....\n",
"[CV] model__C=5.173843032530275, model__gamma=0.03912018707260784, total= 11.1s\n",
"[CV] model__C=5.173843032530275, model__gamma=0.03912018707260784 ....\n",
"[CV] model__C=5.173843032530275, model__gamma=0.03912018707260784, total= 11.2s\n",
"[CV] model__C=8.757343573995623, model__gamma=0.026503976649874594 ...\n",
"[CV] model__C=8.757343573995623, model__gamma=0.026503976649874594, total= 11.2s\n",
"[CV] model__C=8.757343573995623, model__gamma=0.026503976649874594 ...\n",
"[CV] model__C=8.757343573995623, model__gamma=0.026503976649874594, total= 11.6s\n",
"[CV] model__C=8.757343573995623, model__gamma=0.026503976649874594 ...\n",
"[CV] model__C=8.757343573995623, model__gamma=0.026503976649874594, total= 11.8s\n",
"[CV] model__C=3.993757431556655, model__gamma=0.0037627657376435165 ..\n",
"[CV] model__C=3.993757431556655, model__gamma=0.0037627657376435165, total= 9.9s\n",
"[CV] model__C=3.993757431556655, model__gamma=0.0037627657376435165 ..\n",
"[CV] model__C=3.993757431556655, model__gamma=0.0037627657376435165, total= 10.1s\n",
"[CV] model__C=3.993757431556655, model__gamma=0.0037627657376435165 ..\n",
"[CV] model__C=3.993757431556655, model__gamma=0.0037627657376435165, total= 7.3s\n",
"[CV] model__C=5.908725733130206, model__gamma=0.04722302780443009 ....\n",
"[CV] model__C=5.908725733130206, model__gamma=0.04722302780443009, total= 6.4s\n",
"[CV] model__C=5.908725733130206, model__gamma=0.04722302780443009 ....\n",
"[CV] model__C=5.908725733130206, model__gamma=0.04722302780443009, total= 8.2s\n",
"[CV] model__C=5.908725733130206, model__gamma=0.04722302780443009 ....\n",
"[CV] model__C=5.908725733130206, model__gamma=0.04722302780443009, total= 11.8s\n",
"[CV] model__C=6.339380352838232, model__gamma=0.004194342545426101 ...\n",
"[CV] model__C=6.339380352838232, model__gamma=0.004194342545426101, total= 10.3s\n",
"[CV] model__C=6.339380352838232, model__gamma=0.004194342545426101 ...\n",
"[CV] model__C=6.339380352838232, model__gamma=0.004194342545426101, total= 5.7s\n",
"[CV] model__C=6.339380352838232, model__gamma=0.004194342545426101 ...\n",
"[CV] model__C=6.339380352838232, model__gamma=0.004194342545426101, total= 9.1s\n",
"[CV] model__C=9.323582401718916, model__gamma=0.011028101996364465 ...\n",
"[CV] model__C=9.323582401718916, model__gamma=0.011028101996364465, total= 10.7s\n",
"[CV] model__C=9.323582401718916, model__gamma=0.011028101996364465 ...\n",
"[CV] model__C=9.323582401718916, model__gamma=0.011028101996364465, total= 11.0s\n",
"[CV] model__C=9.323582401718916, model__gamma=0.011028101996364465 ...\n",
"[CV] model__C=9.323582401718916, model__gamma=0.011028101996364465, total= 11.6s\n",
"[CV] model__C=7.485779608851653, model__gamma=0.03852395227919697 ....\n",
"[CV] model__C=7.485779608851653, model__gamma=0.03852395227919697, total= 11.9s\n",
"[CV] model__C=7.485779608851653, model__gamma=0.03852395227919697 ....\n",
"[CV] model__C=7.485779608851653, model__gamma=0.03852395227919697, total= 6.6s\n",
"[CV] model__C=7.485779608851653, model__gamma=0.03852395227919697 ....\n",
"[CV] model__C=7.485779608851653, model__gamma=0.03852395227919697, total= 11.9s\n",
"[CV] model__C=5.32139202170268, model__gamma=0.00373396867904038 .....\n",
"[CV] model__C=5.32139202170268, model__gamma=0.00373396867904038, total= 10.0s\n",
"[CV] model__C=5.32139202170268, model__gamma=0.00373396867904038 .....\n",
"[CV] model__C=5.32139202170268, model__gamma=0.00373396867904038, total= 10.0s\n",
"[CV] model__C=5.32139202170268, model__gamma=0.00373396867904038 .....\n",
"[CV] model__C=5.32139202170268, model__gamma=0.00373396867904038, total= 10.0s\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=1)]: Done 30 out of 30 | elapsed: 5.1min finished\n"
]
},
{
"data": {
"text/plain": [
"RandomizedSearchCV(cv=3, error_score=nan,\n",
" estimator=Pipeline(memory=None,\n",
" steps=[('scaler',\n",
" StandardScaler(copy=True,\n",
" with_mean=True,\n",
" with_std=True)),\n",
" ('model',\n",
" SVR(C=1.0, cache_size=200,\n",
" coef0=0.0, degree=3,\n",
" epsilon=0.1, gamma='scale',\n",
" kernel='rbf', max_iter=-1,\n",
" shrinking=True, tol=0.001,\n",
" verbose=False))],\n",
" verbose=False),\n",
" iid='deprecated', n_iter=10, n_jobs=None,\n",
" param_distributions={'model__C': <scipy.stats._distn_infrastructure.rv_frozen object at 0x0000022EDAD77B88>,\n",
" 'model__gamma': <scipy.stats._distn_infrastructure.rv_frozen object at 0x0000022EDAD778C8>},\n",
" pre_dispatch='2*n_jobs', random_state=None, refit=True,\n",
" return_train_score=False, scoring=None, verbose=2)"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import RandomizedSearchCV\n",
"from scipy.stats import reciprocal, uniform\n",
"\n",
"SVR_model = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('model', SVR())\n",
"])\n",
"\n",
"param_dists = {\n",
" 'model__gamma': reciprocal(0.001, 0.1),\n",
" 'model__C': uniform(1,10)\n",
"}\n",
"\n",
"rnd_search_cv = RandomizedSearchCV(SVR_model, param_dists, verbose=2, cv=3)\n",
"rnd_search_cv.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pipeline(memory=None,\n",
" steps=[('scaler',\n",
" StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
" ('model',\n",
" SVR(C=5.908725733130206, cache_size=200, coef0=0.0, degree=3,\n",
" epsilon=0.1, gamma=0.04722302780443009, kernel='rbf',\n",
" max_iter=-1, shrinking=True, tol=0.001, verbose=False))],\n",
" verbose=False)"
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rnd_search_cv.best_estimator_"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.37646952041010656\n",
"0.6135711209062129\n"
]
}
],
"source": [
"y_pred = rnd_search_cv.predict(X_test)\n",
"mse = mean_squared_error(y_pred, y_test)\n",
"rmse = np.sqrt(mse)\n",
"print(mse)\n",
"print(rmse)\n",
"\n",
"# Note that our original model performed better thanks to its gamma = 'auto' default option\n",
"# To improce performance, further tuning of gamma would be required"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}