{ "cells": [ { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEKCAYAAAAMzhLIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3xUZfb48c+ZVBK6IL2JKL0ZKSIggkhTWEGaUgUUZXVVFNtr3XVd2ypfddcCArafLlYQXRSsICi9dykSgvRe0mbm/P6YSYgxJJOQyZ1Jzvv1GjP3zp07h2tyzzzPc+95RFUxxhhjzsfldADGGGNCmyUKY4wxubJEYYwxJleWKIwxxuTKEoUxxphcWaIwxhiTq6AlChGZISIHRWTDeV4XEXlZRLaLyDoRaR2sWIwxxhRcMFsUbwE9cnm9J9DA/xgHvBbEWIwxxhRQ0BKFqi4EjuaySV/gHfVZApQXkWrBiscYY0zBRDr42TWAPVmWk/zr9mXfUETG4Wt1EB8ff0XDhg2LJEBjTPjTbE80+3/V99PjVdweb5Z1SrpHcYnvddWMn0qa20uES/AqpKR7iIpw+fd37kMUSPd48SpEugTNfMn/2QrJ6R6iI1woZH62ZI25ELhPHMSbega8nsOqWrkg+3AyUUgO63I8Pqo6FZgKkJCQoCtWrAhmXMaYLFLSPbi9iifLw6vKmVQ3aR4v6W7lyJlURASvKqqKKnjVd1LN+KmAN8vyb8dTKB0bSZrby5Z9J6lYOprUdC/rko5Tq2Icbq/izfKZqxKPUb9y6cxYUt0eth04TbVysediU8XjUU6lugvt3+/NYV20/2cEEHUB+y6fy2siEOVykebxclF8NDGRLiIihCiXi6RjyVQpF8PlVcpSo3wsbq9Sr1I80ZEuRARBiRAhwuXi60/f5dSxI3wwZfLugsbpZKJIAmplWa4J/OZQLMaEpZR0D78dT+ZEcjonU9wcO5PG3uPJxES6SPf4TqZb95/i4jIxpHm8rE48Tp2L4vB4M07avhOsqu8b9fJfj3JJ5Xi2HThNmdhITqUU3gk3P1YlHs9x/Yrdx/6wbt+JlFz35RJwieASATm3LPh/CogIJ5LTqVcpnsOnUmlRqzwRLiEqQth1+Aytalcg0iW4XEKkS0j3ePF4lToXxQO+Y1e1bCwiEOHyfZbLJUSIkJLuoUJ8FDGREbhEiHAJES78J3SIj4mkVFQEUREuoiKE0rGRRLlcuFw5fZfO2969exk/fjyDBg1iyC23MPDKRwD4YMrkAu0PnE0Uc4AJIjITaAucUNU/dDsZEw7S3F6On03jyJk03B7F7fX6T8Lg9no5cjqNqAhX5rfejG/Ke48nEx3pYvO+kxw6lUrpmEi8Ch6vF7dXWb/3BFXLxgLg9irbD54mOsJFTKSrwN+at+w/levr2w6cBvhdkohwCXHREb6TnP8kqKocPp1Gk+pliY508cuB01xRpwKS5UQsIriEzHXnTta+13cfPUurWuWJjnRx+HQqjauVJcJ/Iq5arpT/W/G5k6vbo1xUOoaoiHPr46IiiYly4RLJPJn71kcU+GQbjlSVadOmMXHiRNLT0+ndu3eh7TtoiUJE/gtcA1QSkSTgcfytNFV9HZgL9AK2A2eBUcGKxZgMKekeTqW4Sfd4OZmSTprb63/u5mSybznpWDIer/LbiWTKxkaR7vFy8FQqJ86mUy7Ot3w21cORM6nsOHSGSJfg9gavCvPxs+m/W07zeEnz/L5DJMIlXFG7AieS06laLpbkdA+tapUnKsKFCKS6vdS5KI4ol4vkdA9Vy8VmnoR/9y1YhOhIoWJ8DOVLRVEqOoIYf3eGCV07duxg7NixfP/993Tp0oU33niD+vXrF9r+g5YoVHVIHq8rcFewPt+UDMlpHg6fTuXAyRSS0z3sOZrMsbNpbNp3krKxkSzddZTypaLO25VRGLImiWrlYtl3IoUWNctldlNkdDdsP+j7xp3RJZHxjXjfiWRa1CxPSrqXauViqX1RnP8bs4tIl6/fv2J8NFERvuWoCBdlS0URE+kiOqLgXRSm+Fi/fj0rV65k6tSpjBkzptATu5NdT8Zkcvu/tZ9KcfPbiWT2HD2LS3z9wzsOnWb/CV8iOHwqlXKlokh1ezlyJq3An1etXCwuEfYeT6ZVbd837yOnU6lRIY4ysZG4RKhaNoboSBdVysYS6XKR7vFSPi6KsrFRREW4KB8XRYX4aMqXiiIuOsK+dZsitWHDBlatWsXw4cPp168fO3fu5KKLLgrKZ1miMEGR7vFy6FQqSceSSU73sP9EMuke5WyamwXbDrH94Gkql4lh+8HTpKTndF3J+Z1J8/xhXd2L4jiRnE6jamVJc3upUaEUpWMiSahbAUGoUaEUVcvGUqN8KfsGbsJaWloaTz31FE899RRVqlRh4MCBxMbGBi1JgCUKkw+qyskUN4lHznI2zc2+EymsTTrO7iNn+eXgKfYeSyY/XfUHTqbmuL5pjbIcP5tO5TIxtKhZnuQ0D9XLl6JBldLUrFCKi0rHEO2/QqRcqSj7Jm9KjKVLl3LbbbexceNGbr31Vv7v//6P2NjYoH+uJQqTac/Rsyz/9Sgb9p4kKkJYm3SclHQvR86ksudocr73FxUheLxKqagI2tevxKFTKTSpUY7q5WIpHxfNJZXiuah0DLFRvu6d2KiIIPyrjCke9u7dS8eOHalSpQpffPFFoV7VlBdLFCVASrqH06m+a+zPpHnYvO8kHq+y4tejrN5znCplYln2a27VVv4oOtJFm7oVEYEqZWNpWr0sdSvFU7NCKaqWK0W89dkbUyi2bdvGZZddRo0aNfjggw/o2rUrZcuWLdIYLFEUI2luL78cPMXPO44wZ+1vrEs6EdD7dh85m/k8JtLF9U2qUjo2kksqxeNVpVq5UtSsUIpLKpWmXNyF3IdqjAnU8ePHefDBB5k2bRo//PADnTp14k9/+pMjsViiCCOqyi8HT7P7yFk2/naCDXtPsvvIGeJiIlm7J+/LPyuXieHomTRa1ipPhbgoalWMI83t5bIqZWhf/yIuqRRPZIRNUWKM0+bMmcP48ePZv38/DzzwAFdeeaWj8ViiCGF7jp7lnZ9/ZeuB02zceyLgy0Evr1KGaxpWpmJcNJ0vr0yDi8sQYVf6GBMWxowZw/Tp02nWrBmfffYZCQkJTodkiSJUnEl18+mqJD5YsYd9x1M4m+YhOf2Pl4GC7y7adpdUJCYyggZVSnNF7QrUqFCKBheXITrSWgTGhBv1l5YVERISEqhTpw6TJk0iOjo6j3cWDUsUDlFVNv52khmLdvHd1oN/KNOQoWWt8lwUH821jS7mqvqVqFcpvogjNcYE0549e7jjjjsYPHgww4YN44477nA6pD+wRFGEDp1K5eFP1/PN5gM5vl42NpKaFeLodFll+rWqTr1K8cRE2iWjxhRHXq+XKVOmMGnSJDwej2MD1YGwRBFkJ86mM3N5IrNW782xame3RlVoVK0MozvUo0J8aDQzjTHB9csvvzBmzBgWLlxIt27dmDp1KvXq1XM6rPOyRBEk+04kM+3HXUxftOt36y+Kj6ZvyxoMbVuLSy8u41B0xhgnbdq0iXXr1jFjxgxGjhwZ8vccWaIoZNsPnuLpuVv4dsvB360fcEVNRrSvS9MaZUP+l8IYU/jWrl3LmjVrGDFiBH379mXnzp1UqFDB6bACYomiELg9Xt5c/Cv/nLv5d+vjoyN4eUgrOl1WOXNOXWNMyZKamsqTTz7JM888Q7Vq1Rg0aBCxsbFhkyTAEsUFSXN7+WjlHh6dteF36+teFMfE6y+nd7Nq1nowpgT7+eefue2229i8eTPDhw9n8uTJRVLEr7BZoiiAdI+XiR+t5bM1v5/iu0eTqjzauxG1KsY5FJkxJlTs3buXzp07U7VqVebOnUvPnj2dDqnALFHkw4nkdB7xX96a6j43h8KoDnV54PrLiYu2w2lMSbd582YaNWpEjRo1+PDDD+natStlyoT3hSt2ZguAqvLMV1uYsmDn79ZP6tGQOzpfYt1LxhiOHTvG/fffz5tvvsnChQvp2LEj/fr1czqsQmGJIg+qysSP1vHJqqTMdeM6XcKkHg2tfpIxBoBZs2Zx5513cujQIR5++GHHi/gVNksUufhp+2Emfbouc9Ke65tU4aXBrWyCHWNMptGjR/Pmm2/SsmVL/ve//9G6dWunQyp0lijOY+ayRB6ZtT5zas+XBrekb8sazgZljAkJWYv4tWvXjgYNGjBx4kSioornfC2WKHLw9NzNTFnoG4+4vEoZPh7fnjKxxfMXwBiTP7t37+b2229n6NChDB8+nHHjxjkdUtDZXWBZHDmdSs+XfsxMEmM71uOrv3S0JGGMwev18sorr9C0aVMWLVpEenrOFZ+LI2tR+G3ed5KeL/2YuTz+mvpM6tHQwYiMMaFi69atjBkzhkWLFtG9e3emTJlC3bp1nQ6ryFiiAPYeT85MElXLxvJo70bc0KK6w1EZY0LF1q1b2bhxI2+99RbDhw8vcZfEl/hEkXjkLIOn/py5POfPHbi4TPjdYm+MKVyrV69mzZo1jBo1ihtvvJGdO3dSvnx5p8NyRIkeozhwMoWbp/zEbydSKFcqip8eutaShDElXEpKCo888ghXXnklf/vb30hJSQEosUkCSnCi2Hcimauf/Y4DJ1OJiXTxyfj2VC9fyumwjDEOWrx4MS1btuTpp59m+PDhrFmzJiyL+BW2Etn1dPRMGsOmLyPd47sW+st7OnJJ5dIOR2WMcdLevXvp0qULNWrUYN68eXTv3t3pkEJGiWxRDH1jCdsPnibCJcy/t5MlCWNKsE2bNgFQo0YNPvnkE9avX29JIpsSlSjS3F7ueHdl5tzVs+/swGVVwruqozGmYI4ePcrIkSNp0qQJCxcuBOCGG26gdGn74phdiep6GvnmMn7acQSAv3RrQLOa5RyOyBjjhE8++YS77rqLI0eO8Oijj9KmTRunQwppJSZRvPPzr5lJ4uGeDbm9c31nAzLGOGLkyJG8/fbbtG7dmq+++oqWLVs6HVLIKxGJYvvB0/zzf775rP92Q2NGdqjncETGmKKUtYjfVVddRaNGjbj//vuJjCwRp8ALFtQxChHpISJbRWS7iDyUw+u1ReR7EVktIutEpFcw4pj0yTpS3V66NapiScKYEmbXrl10796dd955B4Bx48YxadIkSxL5ELREISIRwCtAT6AxMEREGmfb7DHgQ1VtBQwGXi3sOLbuP8XK3ccAeLiX1W4ypqTweDy8/PLLNG3alCVLlmS2Kkz+BbNF0QbYrqo7VTUNmAn0zbaNAmX9z8sBvxV2EH/9bAMAHRtUor5dBmtMibB582Y6duzIPffcQ+fOndm4cSMjR450OqywFcy2Vw1gT5blJKBttm3+BswXkT8D8UC3nHYkIuOAcQC1a9cOOID/rdvH0l1HAXj6pmYBv88YE962b9/O1q1beffdd7nllltKXBG/whbMFkVO/2eyt/2GAG+pak2gF/CuiPwhJlWdqqoJqppQuXLlgAO46/1VAIzqUJeaFeICfp8xJvysXLmSGTNmAL77IXbt2sWtt95qSaIQBDNRJAG1sizX5I9dS7cBHwKo6s9ALFCpMD78nZ9/zXx+T9cGhbFLY0wISk5O5qGHHqJt27b84x//yCziV7Zs2TzeaQIVzESxHGggIvVEJBrfYPWcbNskAl0BRKQRvkRxqDA+fM4aX07q2bQq5eOiC2OXxpgQs3DhQlq0aMGzzz7LyJEjWb16tRXxC4KgjVGoqltEJgDzgAhghqpuFJEngBWqOge4H3hDRO7F1y01Ugvh0oSzaW7WJh0H4N7rLrvQ3RljQtDevXvp2rUrtWrV4ptvvqFr165Oh1RsBfVCYlWdC8zNtu6vWZ5vAjoU9ud+uX4/6R6laY2yVsvJmGJm/fr1NGvWjBo1ajBr1iy6dOlCfHy802EVa8WyKOAP23y9V39qVdPhSIwxheXw4cMMGzaM5s2bZxbx69OnjyWJIlDsbk1Mc3v5etN+ADo1KJRxcWOMg1SVjz76iAkTJnDs2DEef/xx2rbNfqW9CaZilygWbjtESrqXGuVL0cC6nYwJeyNGjODdd98lISGBb7/9lmbN7J6oolbsEsWi7YcBuLFldYcjMcYUVNYifp07d6Z58+b85S9/sfpMDilWYxQerzJvY0a3U+A35hljQsfOnTvp1q0bb731FgC33XYbEydOtCThoGKVKJbsPMK+EylULhNDm3oVnQ7HGJMPHo+HF198kWbNmrF8+XJcrmJ1egprxSpFz1i0C4BeTasS4bLb9o0JF5s2bWL06NEsXbqU3r178/rrr1Ozpl21GCqKVaJYm3QCgB5NqzkciTEmP3bt2sWOHTt4//33GTx4sNVnCjHFJlHsPnKGw6dTAbiybgWHozHG5GX58uWsWbOGsWPH0rt3b3bu3EmZMnalYigqNp2AX286AECVsjFERhSbf5Yxxc7Zs2eZOHEi7dq14+mnn84s4mdJInQVmzPqjkOnAejXsobDkRhjzueHH36gefPmvPDCC4wdO9aK+IWJYtP1NHO5b46kaxte7HAkxpicJCUlcd1111GnTh2+++47unTp4nRIJkDFokWRku4h0n+VU+PqVoPemFCydu1aAGrWrMlnn33GunXrLEmEmWKRKNbvPUG6R6lfOZ4ysVFOh2OMAQ4dOsTQoUNp2bIlCxYsAKBXr17Exdlsk+GmWHQ9bdjruyz2ijp2tZMxTlNVZs6cyd13382JEyf4+9//Tvv27Z0Oy1yAgBKFf4a62qq6PcjxFMg6//0Tl1e1bidjnDZs2DDee+892rZty/Tp02nSpInTIZkLlGfXk4j0BtYDX/uXW4rIrGAHlh9r9/hms2tRs5zDkRhTMnm93sxCfl26dGHy5MksXrzYkkQxEcgYxRNAW+A4gKquAS4NZlD5se9EMjsPnyE60kUzSxTGFLnt27fTtWtX3nzzTcBXxO/ee+8lIiLC4chMYQkkUaSr6vFs6y54XuvC8uM2X1nxq+pfREyk/WIaU1TcbjfPP/88zZo1Y/Xq1URHRzsdkgmSQMYoNovIQMAlIvWAe4AlwQ0rcMt/PQpAh/o2m50xRWXDhg2MGjWKFStW0LdvX1599VWqV7c5YIqrQFoUE4ArAC/wKZCCL1mEhC37TwHQsnZ5hyMxpuRITExk9+7dzJw5k1mzZlmSKOYCaVFcr6qTgEkZK0TkJnxJw1Gqynr/pbF1Ktq12cYE09KlS1m7di3jxo2jV69e7Ny5k9KlSzsdlikCgbQoHsth3aOFHUhBHDubnvm8cpkYByMxpvg6c+YM9913H+3bt+e5554jNdVXpdmSRMlx3haFiFwP9ABqiMjkLC+VxdcN5biMQoDRES6rX29MEHz33XeMHTuWnTt3Mn78eJ555hliYuxLWUmTW9fTQWADvjGJjVnWnwIeCmZQgdp7LBmA6uWt+qQxhS0pKYnrr7+eevXqsWDBAjp16uR0SMYh500UqroaWC0i76lqShHGFLDViccAuL5pVYcjMab4WL16Na1ataJmzZp8/vnndO7cmVKlSjkdlnFQIGMUNURkpoisE5FtGY+gRxaAjMmKalWwgWxjLtSBAwcYNGgQrVu3zizi16NHD0sSJqBE8RbwJiBAT+BDYGYQYwpYfIyvQVSptN3oY0xBqSr/7//9Pxo3bszs2bN58sknueqqq5wOy4SQQBJFnKrOA1DVHar6GBASxeR/OegbzLZigMYU3NChQxk2bBiXX345a9as4dFHHyUqysr1m3MCuY8iVXyXFO0QkTuAvYDj08idSXVnPrfBbGPyx+v1IiKICN27d6d9+/bcddddVp/J5CiQFsW9QGngbqADMBYYHcygApExB0WjamWtxpMx+bBt2za6dOnCjBkzABg1ahR33323JQlzXnm2KFR1qf/pKWAYgIjUDGZQgdh99CwAl1Wxm36MCYTb7Wby5Mk8/vjjxMbG2iC1CViuLQoRuVJE+olIJf9yExF5hxAoCnjolO/u0Mql7eYfY/Kybt062rVrx6RJk+jZsyebNm1i6NChTodlwsR5E4WIPA28B9wCfCUijwLfA2uBy4omvPPLuCu7ol3xZEyekpKS2LNnDx999BGffPIJ1apVczokE0Zy63rqC7RQ1WQRqQj85l/eGujORaQH8BIQAUxT1Wdy2GYg8Dd8c1ysVdWAvuYcPZPmez9WusOYnPz000+sW7eOO+64I7OIX3x8vNNhmTCUW9dTiqomA6jqUWBLPpNEBPAKvnsvGgNDRKRxtm0aAA8DHVS1CfCXQPef5C/fUbWcdT0Zk9Xp06e55557uPrqq3nhhRcyi/hZkjAFlVuL4hIRySglLkDdLMuo6k157LsNsF1VdwKIyEx8rZRNWbYZC7yiqsf8+zwYaOBx0b4rNKqUsUtjjckwf/58xo0bR2JiInfddRdPPfWUFfEzFyy3RNE/2/J/8rnvGsCeLMtJ+ObezuoyABFZjK976m+q+lX2HYnIOGAcQO3atQH47bivRVGvsn1LMgZgz5499O7dm/r167Nw4UKuvvpqp0MyxURuRQG/vcB95zR4kH2u7UigAXANUBP4UUSaZp+jW1WnAlMBEhIS1O3xcvi0b4zCrnoyJd3KlSu54oorqFWrFnPnzqVjx47ExlpL2xSeQG64K6gkoFaW5Zr4BsSzb/OZqqar6i5gK77EkauMCYvKx0URGRHMf4IxoWv//v3cfPPNJCQkZBbxu+666yxJmEIXzLPscqCBiNQTkWhgMDAn2zaz8deN8t+rcRmwM68dJx3z3Wxn4xOmJFJV3n77bRo3bsznn3/OU089ZUX8TFAFUusJABGJUdXUQLdXVbeITADm4Rt/mKGqG0XkCWCFqs7xv9ZdRDYBHuABVT2S175PpfjqPB0+HXA4xhQbgwcP5sMPP6RDhw5MmzaNhg0bOh2SKebyTBQi0gaYDpQDaotIC2CMqv45r/eq6lxgbrZ1f83yXIH7/I+AZSSItpdUzM/bjAlbWYv49erVi44dO3LnnXficlnXqwm+QH7LXgb6AEcAVHUtDpcZzxijqGQD2aYE2LJlC506dWL69OkAjBgxggkTJliSMEUmkN80l6ruzrbOE4xgAnX8rO+Kp4rxVr7DFF/p6ek89dRTtGjRgk2bNlG6tBXANM4IZIxij7/7Sf13W/8ZcHQq1IwxitIxAQ+xGBNW1qxZw6hRo1izZg0DBgzg3//+N1Wr2tzwxhmBnGnH4+t+qg0cAL7xr3PMuiTfbRZx0ZYoTPG0f/9+9u/fzyeffMJNN+VVBMGY4ArkTOtW1cFBjyQf3F7ffXsezX7/njHha9GiRaxbt44777yTHj16sGPHDuLi4pwOy5iAxiiWi8hcERkhImWCHlEA0j2+BFG9nN1HYcLfqVOnmDBhAh07duTFF1/MLOJnScKEijwTharWB54ErgDWi8hsEXG0hbHTPxdFlbKWKEx4mzdvHk2bNuXVV1/lnnvuYdWqVVbEz4ScgK6vU9WfVPVuoDVwEt+ERo4pE+vrMYu3wWwTxvbs2UOfPn2Ii4tj0aJFvPjii3ZlkwlJeSYKESktIreIyOfAMuAQ4Gi9AP8QRWbCMCZcqCrLli0DoFatWnz55ZesXr3aSnCYkBZIi2ID0A54TlUvVdX7VXVpkOPK1dk03+WxGXNSGBMO9u3bR//+/Wnbtm1mEb9u3bpZET8T8gL5Sn6JqnqDHkmAFEhJ9yICsZGWKEzoU1Xeeust7rvvPlJSUnj22Wfp0KGD02EZE7DzJgoReUFV7wc+EZE/XIcawAx3QaH+S2JLRUXgctl82Sb0DRw4kI8//piOHTsybdo0LrvsMqdDMiZfcmtRfOD/md+Z7YIqY3wiNspaEyZ0eTweRASXy8UNN9zAtddey+233271mUxYOu9vraou8z9tpKrfZn0AjYomvD/y+jPF0TNpToVgTK42b95Mx44dM4v4DR8+nPHjx1uSMGErkN/c0Tmsu62wAwlURoui7kV2M5IJLenp6Tz55JO0bNmSrVu3Uq5cOadDMqZQ5DZGMQjfrHT1ROTTLC+VAY7n/K7g8/rHKMqWinIqBGP+YPXq1YwcOZJ169YxaNAgXn75ZS6++GKnwzKmUOQ2RrEM3xwUNYFXsqw/BawOZlC5yUgUdmmsCSUHDhzg8OHDzJ49m759+zodjjGF6ryJQlV3AbvwVYsNGVmvejLGSQsXLmT9+vXcdddd9OjRg+3bt1OqVCmnwzKm0J13jEJEFvh/HhORo1kex0TkaNGF+Htp/oKAMXYPhXHIyZMnufPOO+ncuTMvv/xyZhE/SxKmuMptMDtjutNKQOUsj4xlR2QEvP9kilMhmBJs7ty5NGnShClTpnDfffdZET9TIuR2eWzG3di1gAhV9QDtgduB+CKILUepHl9YLWraFSWmaO3Zs4e+fftSrlw5fvrpJ1544QXi4x37UzCmyARyeexsfNOg1gfewXcPxftBjSoXGfdiZ0yHakwwqSpLliwBfEX85s+fz6pVq2jbtq3DkRlTdAJJFF5VTQduAl5U1T8DNYIb1vll1BKpWcH6g01w/fbbb/Tr14/27dtnFvHr0qUL0dHRDkdmTNEKJFG4ReRmYBjwhX+dYzcxJKd5ALuPwgSPqjJt2jQaN27M/Pnzef75562InynRAqkeOxq4E1+Z8Z0iUg/4b3DDOr/ICF/nU6o7ZArammJmwIABfPrpp3Tu3Jlp06Zx6aWXOh2SMY7KM1Go6gYRuRu4VEQaAttV9Z/BD+188fh+1rESHqYQZS3i169fP7p3787YsWOtPpMxBDbDXUdgOzAdmAFsExHH2uEZd2bbXBSmsGzYsIEOHTpkFvEbNmyYVXo1JotA/hL+D+ilqh1U9SqgN/BScMM6P6+/x8lKeJgLlZaWxt///ndat27Njh07qFChgtMhGROSAhmjiFbVTRkLqrpZRBy77EP91z1FR9q3PVNwK1euZOTIkWzYsIGhQ4fy4osvUrmyY/eRGhPSAkkUq0RkCvCuf/kWHCwKmDFGYYnCXIgjR45w/PhxPv/8c/r06eN0OMaEtEASxR3A3cCD+O53W7uTWDkAABczSURBVAj8O5hB5SY53UN5ICrCEoXJn++//57169dz99130717d3755RdiY2OdDsuYkJfr2VZEmgE9gFmqeqOq3qCq/1JVxwotZSQISxQmUCdOnOD222/n2muv5bXXXsss4mdJwpjA5FY99hF85TtuAb4WkZxmuityGWXGS8cE0hgyJd3nn39O48aNmTZtGhMnTmTlypVWxM+YfMrtbHsL0FxVz4hIZWAuvstjHZVRwiMqQnLdzpg9e/bQv39/GjZsyOzZs7nyyiudDsmYsJRb/02qqp4BUNVDeWxbZGww2+RGVfnpp5+Ac0X8VqxYYUnCmAuQ29n2EhH51P+YBdTPsvxpLu/LJCI9RGSriGwXkYdy2W6AiKiIJOS1z4yuJxujMNklJSVx44030qFDh8wiftdcc40V8TPmAuXW9dQ/2/J/8rNjEYnAN9f2dUASsFxE5mS9J8O/XRl8V1UtDWS/CohAjLUojJ/X6+WNN97ggQcewO12M3nyZK6++mqnwzKm2MhtzuxvL3DfbfDVhdoJICIzgb7Apmzb/QN4DpgY6I6jI1yI2BiF8enfvz+zZ8/m2muv5Y033uCSSy5xOiRjipVgfi2vAezJspxEtnksRKQVUEtVvyAXIjJORFaIyAqw1oQBt9uN11/PpX///rzxxht88803liSMCYJgnnFz+sqvmS+KuPDVkbo/rx2p6lRVTVDVBIBoKwhYoq1bt4727dvzxhtvAHDrrbcyZswYa2UaEyQBJwoRye/F50n45tvOUBP4LctyGaAp8IOI/Aq0A+YEMqBtLYqSKTU1lccff5wrrriC3bt3W20mY4pIIGXG24jIeuAX/3ILEQmkhMdyoIGI1PMXERwMzMl4UVVPqGolVa2rqnWBJcCNqroirx1H2j0UJc7y5ctp3bo1TzzxBEOGDGHz5s3cdNNNTodlTIkQyO3NLwN98N2ljaquFZEueb1JVd0iMgGYB0QAM1R1o4g8AaxQ1Tm57yGXoF2WKEqaY8eOcfr0aebOnUvPnj2dDseYEiWQROFS1d3Z+n89gexcVefiu6M767q/nmfbawLZJ0CkTShTInz33XesX7+ee+65h+7du7Nt2zYrv2GMAwI54+4RkTaAikiEiPwF2BbkuHJlXU/F2/Hjxxk7dixdu3ZlypQpmUX8LEkY44xAEsV44D6gNnAA36Dz+GAGlRfreiq+PvvsMxo3bsyMGTN48MEHrYifMSEgz64nVT2IbyA6ZMTY5bHFUmJiIjfffDONGjVizpw5JCTkeQGcMaYI5JkoROQNstz/kEFVxwUlogBERVqLorhQVRYtWkTHjh2pXbs233zzDe3atbP6TMaEkEC6nr4BvvU/FgMXA6nBDCovVhCweEhMTKR379506tQps4hfp06dLEkYE2IC6Xr6IOuyiLwLfB20iAJgVz2FN6/Xy+uvv86kSZNQVV5++WUr4mdMCCvINHH1gDqFHUh+RFvXU1i76aab+Oyzz7juuuuYOnUqdevWdTokY0wuAhmjOMa5MQoXcBQ479wSRWHHwTNOfrwpALfbjcvlwuVyMWjQIPr27cvIkSOtPpMxYSDXRCG+v+IWwF7/Kq9mzBzkoMbVyzodgsmHtWvXMnr0aMaOHcsdd9zBkCFDnA7JGJMPuXb2+5PCLFX1+B+OJwnwTVxkQl9KSgqPPfYYCQkJJCUlUbVqVadDMsYUQCBjFMtEpLWqrgp6NAGKsEwR8pYtW8aIESPYsmULI0aMYPLkyVSsWNHpsIwxBXDeRCEikarqBq4GxorIDuAMvnkmVFVbF1GMf+CyRBHyTp48SXJyMl999RXXX3+90+EYYy5Abi2KZUBroF8RxRIwuzo2NM2fP5+NGzdy77330q1bN7Zu3WrlN4wpBnI75QqAqu7I6VFE8eXIWhSh5dixY4waNYrrr7+e6dOnWxE/Y4qZ3FoUlUXkvvO9qKqTgxBPQCxRhI5PP/2Uu+66i0OHDvHwww/z17/+1RKEMcVMbokiAihNznNfOyrCqseGhMTERAYPHkzTpk2ZO3curVq1cjokY0wQ5JYo9qnqE0UWST5Yg8I5qsrChQvp3LkztWvX5rvvvqNt27ZERUU5HZoxJkjyHKMIRXZ5rDN2795Nz549ueaaazKL+F199dWWJIwp5nJLFF2LLIp8SnV7nQ6hRPF6vfznP/+hSZMmLFq0iH//+9907NjR6bCMMUXkvF1Pqnq0KAPJjzOpbqdDKFH69evH559/zvXXX8+UKVOoU8fRmpDGmCJWkOqxjqtevpTTIRR76enpRERE4HK5GDJkCAMGDGDYsGFWxM+YEigsb12zi56Ca9WqVbRp04bXX38dgCFDhjB8+HBLEsaUUOGZKCxTBEVycjIPP/wwbdq0Yf/+/dSqVcvpkIwxISAsu57sqqfCt2TJEkaMGMG2bdsYPXo0zz//PBUqVHA6LGNMCAjLRGEtisJ35swZ0tPT+frrr+nWrZvT4RhjQkh4JgprURSKr776io0bN3L//ffTtWtXtmzZQnR0tNNhGWNCTHiOUVieuCBHjhxhxIgR9OzZk7fffpu0tDQASxLGmByFZaKwWk8Fo6p8/PHHNG7cmPfff5/HHnuM5cuXW4IwxuQqLLue7DLNgklMTGTo0KE0b96c+fPn06JFC6dDMsaEgbBsUXi8VsIjUKrKd999B0CdOnX44YcfWLJkiSUJY0zAwjJRpKRbogjErl276N69O127ds0s4nfVVVcRGRmWDUljjEPCMlFcXMYmxsmNx+PhpZdeomnTpixdupTXXnvNivgZYwosLL9a2n0Uuevbty//+9//6NWrF6+//rrdYW2MuSBhmSgiLVH8QdYifsOGDWPIkCEMHTrUBv6NMRcsqF1PItJDRLaKyHYReSiH1+8TkU0isk5EvhWRgOpX2+Wxv7dixQoSEhJ47bXXABg0aBC33HKLJQljTKEIWqIQkQjgFaAn0BgYIiKNs222GkhQ1ebAx8BzgezbEoVPcnIykyZNom3bthw6dMjmiTDGBEUwWxRtgO2qulNV04CZQN+sG6jq96p61r+4BKgZyI6t6wl+/vlnWrRowXPPPcfo0aPZtGkTffr0cTosY0wxFMwxihrAnizLSUDbXLa/DfgypxdEZBwwDiC66qWcTvUUVoxhKzk5Ga/XyzfffEPXriE7a60xphgIZqLI6Wu/5rihyK1AAtA5p9dVdSowFSCmWgMtXyqqsGIMK3PnzmXjxo088MADXHvttWzevJmoqJJ5LIwxRSeYXU9JQNbrMmsCv2XfSES6AY8CN6pqaiA7LmljFIcPH+bWW2+ld+/evPfee5lF/CxJGGOKQjATxXKggYjUE5FoYDAwJ+sGItIKmIIvSRwMdMcl5WIeVWXmzJk0atSIDz/8kMcff5xly5ZZET9jTJEKWteTqrpFZAIwD4gAZqjqRhF5AlihqnOAfwGlgY/8l3ImquqNee27pFz2mZiYyIgRI2jRogXTp0+nWbNmTodkjCmBgnrDnarOBeZmW/fXLM8LNJVace55UlW+/fZbunXrRp06dViwYAFXXnklERERTodmjCmhwrLWk+Q4Th7+duzYQdeuXbnuuusyi/i1a9fOkoQxxlFhmSiKW4vC4/EwefJkmjVrxsqVK5kyZYoV8TPGhIywrPVU3BoUN9xwA19++SV9+vThtddeo2bNgO47NMaYIhGWicJVDAaz09LSiIyMxOVyMXLkSIYNG8bgwYNLzEC9MSZ8hGXXU7ifSpctW8YVV1zBq6++CsDAgQMZMmSIJQljTEgKy0QRrvNRnD17lvvvv5/27dtz7Ngx6tev73RIxhiTp7DsegrHNLFo0SJGjBjBzp07uf3223n22WcpV66c02EZY0yewjNRhGEXTcbEQt9//z3XXHON0+EYY0zAwjRROB1BYD7//HM2b97Mgw8+SJcuXdi0aRORkWF5yI0xJVh4jlGEeKY4dOgQQ4cO5cYbb+S///1vZhE/SxLGmHAUlokiVNOEqvL+++/TqFEjPv74Y5544gmWLl1qRfyMMWEtLL/ihmqLIjExkVGjRtGqVSumT59OkyZNnA7JGGMuWHi2KEIoT3i9XubNmwdAnTp1+PHHH1m8eLElCWNMsRGWicLtzXGivCL3yy+/cO2119KjRw8WLlwIQJs2bayInzGmWAnLRBEb5WzYbrebf/3rXzRv3pw1a9Ywffp0K+JnjCm2wnKMwuky43369GHevHn07duXV199lerVqzsajzHGBFN4JgoH8kRqaipRUVG4XC7GjBnD6NGjufnmm8Py5j9jjMmPsOx6KupT85IlS2jdujWvvPIKAAMGDGDgwIGWJIwxJUJ4JooiOj+fOXOGe++9l6uuuopTp07RoEGDovlgY4wJIWHZ9VQUbYoff/yRESNGsGvXLu68806efvppypYtG/TPNcaYUBOWiaIoWhRut5uoqCgWLFhAp06dgv+BxhgTosIyUQTrzuzZs2ezefNmHn74Ybp06cLGjRutPpMxpsQLzzGKQt7fgQMHGDhwIH/605/4+OOPrYifMcZkEZ6JopAyhary7rvv0rhxYz777DP++c9/smTJEiviZ4wxWYTlV+bCuuEuMTGRMWPGkJCQwPTp02nYsGGh7NcYY4qTEtei8Hq9fPnll4CviN/ixYtZuHChJQljjDmPsEwUBbVt2zauueYaevXqxYIFCwBISEiwIn7GGJOLsEwU+W1RuN1unn32WZo3b8769et588037ZJXY4wJUHiOUeQzU/Tu3Zv58+dz00038corr1C1atUgRWaMMcWPqIbG3A6BiqnWQH/dso5q5Urlul1KSgpRUVFERETwySefANC/f/+iCNEYY0KOiKxU1YSCvDc8u57yuOpp8eLFtGzZMrOIX//+/S1JGGNMAYVnojhPnjh9+jR33303HTt2JCUlhUaNGhVtYMYYUwyF5xhFDusWLFjAiBEjSExMZMKECTz11FOULl26yGMzxpjiJiwTxfl6nuLi4vjxxx/p0KFD0cZjjDHFWFgmiowxik8//ZQtW7bwyCOP0LlzZ9avX2/3RBhjTCEL6hiFiPQQka0isl1EHsrh9RgR+cD/+lIRqRvIfg8e3M+AAQPo378/s2bNyiziZ0nCGGMKX9AShYhEAK8APYHGwBARaZxts9uAY6p6KfB/wLN57ddz9iQdElryxRdf8PTTT/PTTz9ZET9jjAmiYLYo2gDbVXWnqqYBM4G+2bbpC7ztf/4x0FXyuJvOc/IQjRo1Ye3atTz00ENERUUVeuDGGGPOCeYYRQ1gT5blJKDt+bZRVbeInAAuAg5n3UhExgHj/IupS35evMGK+AFQiWzHqgSzY3GOHYtz7Ficc3lB3xjMRJFTyyD7beCBbIOqTgWmAojIioLeXVjc2LE4x47FOXYszrFjcY6IrCjoe4PZ9ZQE1MqyXBP47XzbiEgkUA44GsSYjDHG5FMwE8VyoIGI1BORaGAwMCfbNnOAEf7nA4DvNNyKTxljTDEXtK4n/5jDBGAeEAHMUNWNIvIEsEJV5wDTgXdFZDu+lsTgAHY9NVgxhyE7FufYsTjHjsU5dizOKfCxCLvqscYYY4pWWBYFNMYYU3QsURhjjMlVyCaKYJX/CEcBHIv7RGSTiKwTkW9FpI4TcRaFvI5Flu0GiIiKSLG9NDKQYyEiA/2/GxtF5P2ijrGoBPA3UltEvheR1f6/k15OxBlsIjJDRA6KyIbzvC4i8rL/OK0TkdYB7VhVQ+6Bb/B7B3AJEA2sBRpn2+ZO4HX/88HAB07H7eCx6ALE+Z+PL8nHwr9dGWAhsARIcDpuB38vGgCrgQr+5YudjtvBYzEVGO9/3hj41em4g3QsOgGtgQ3neb0X8CW+e9jaAUsD2W+otiiCUv4jTOV5LFT1e1U9619cgu+eleIokN8LgH8AzwEpRRlcEQvkWIwFXlHVYwCqerCIYywqgRwLBcr6n5fjj/d0FQuqupDc70XrC7yjPkuA8iJSLa/9hmqiyKn8R43zbaOqbiCj/EdxE8ixyOo2fN8YiqM8j4WItAJqqeoXRRmYAwL5vbgMuExEFovIEhHpUWTRFa1AjsXfgFtFJAmYC/y5aEILOfk9nwChOx9FoZX/KAYC/neKyK1AAtA5qBE5J9djISIufFWIRxZVQA4K5PciEl/30zX4Wpk/ikhTVT0e5NiKWiDHYgjwlqq+ICLt8d2/1VRVvcEPL6QU6LwZqi0KK/9xTiDHAhHpBjwK3KiqqUUUW1HL61iUAZoCP4jIr/j6YOcU0wHtQP9GPlPVdFXdBWzFlziKm0COxW3AhwCq+jMQi69gYEkT0Pkku1BNFFb+45w8j4W/u2UKviRRXPuhIY9joaonVLWSqtZV1br4xmtuVNUCF0MLYYH8jczGd6EDIlIJX1fUziKNsmgEciwSga4AItIIX6I4VKRRhoY5wHD/1U/tgBOqui+vN4Vk15MGr/xH2AnwWPwLKA185B/PT1TVGx0LOkgCPBYlQoDHYh7QXUQ2AR7gAVU94lzUwRHgsbgfeENE7sXX1TKyOH6xFJH/4utqrOQfj3kciAJQ1dfxjc/0ArYDZ4FRAe23GB4rY4wxhShUu56MMcaECEsUxhhjcmWJwhhjTK4sURhjjMmVJQpjjDG5skRhQo6IeERkTZZH3Vy2rXu+Spn5/Mwf/NVH1/pLXlxegH3cISLD/c9Hikj1LK9NE5HGhRznchFpGcB7/iIicRf62abkskRhQlGyqrbM8vi1iD73FlVtga/Y5L/y+2ZVfV1V3/EvjgSqZ3ltjKpuKpQoz8X5KoHF+RfAEoUpMEsUJiz4Ww4/isgq/+OqHLZpIiLL/K2QdSLSwL/+1izrp4hIRB4ftxC41P/erv45DNb7a/3H+Nc/I+fmAHnev+5vIjJRRAbgq7n1nv8zS/lbAgkiMl5EnssS80gR+XcB4/yZLAXdROQ1EVkhvrkn/u5fdze+hPW9iHzvX9ddRH72H8ePRKR0Hp9jSjhLFCYUlcrS7TTLv+4gcJ2qtgYGAS/n8L47gJdUtSW+E3WSv1zDIKCDf70HuCWPz78BWC8iscBbwCBVbYavksF4EakI/AlooqrNgSezvllVPwZW4Pvm31JVk7O8/DFwU5blQcAHBYyzB74yHRkeVdUEoDnQWUSaq+rL+Gr5dFHVLv5SHo8B3fzHcgVwXx6fY0q4kCzhYUq8ZP/JMqso4D/+PnkPvrpF2f0MPCoiNYFPVfUXEekKXAEs95c3KYUv6eTkPRFJBn7FV4b6cmCXqm7zv/42cBfwH3xzXUwTkf8BAZc0V9VDIrLTX2fnF/9nLPbvNz9xxuMrV5F1hrKBIjIO3991NXwT9KzL9t52/vWL/Z8Tje+4GXNelihMuLgXOAC0wNcS/sOkRKr6vogsBXoD80RkDL6yym+r6sMBfMYtWQsIikiO85v4awu1wVdkbjAwAbg2H/+WD4CBwBZglqqq+M7aAceJbxa3Z4BXgJtEpB4wEbhSVY+JyFv4Ct9lJ8DXqjokH/GaEs66nky4KAfs888fMAzft+nfEZFLgJ3+7pY5+LpgvgUGiMjF/m0qSuBzim8B6orIpf7lYcACf59+OVWdi2+gOKcrj07hK3uek0+BfvjmSPjAvy5fcapqOr4upHb+bquywBnghIhUAXqeJ5YlQIeMf5OIxIlITq0zYzJZojDh4lVghIgswdftdCaHbQYBG0RkDdAQ35SPm/CdUOeLyDrga3zdMnlS1RR81TU/EpH1gBd4Hd9J9wv//hbga+1k9xbwesZgdrb9HgM2AXVUdZl/Xb7j9I99vABMVNW1+ObH3gjMwNedlWEq8KWIfK+qh/BdkfVf/+cswXesjDkvqx5rjDEmV9aiMMYYkytLFMYYY3JlicIYY0yuLFEYY4zJlSUKY4wxubJEYYwxJleWKIwxxuTq/wOQSb1vlTQQ2AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.datasets import fetch_openml\n", "from sklearn.linear_model import SGDClassifier\n", "from sklearn.metrics import roc_curve\n", "from sklearn.metrics import roc_auc_score\n", "from sklearn.model_selection import cross_val_predict\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "mnist = fetch_openml('mnist_784', version=1, cache=True)\n", "mnist.target = mnist.target.astype(np.int8) # fetch_openml() returns targets as strings\n", "\n", "X, y = mnist[\"data\"], mnist[\"target\"]\n", "X_train, y_train = X[:60000], y[:60000]\n", "y_train_5 = (y_train == 5)\n", "\n", "sgd_clf = SGDClassifier(max_iter=5, tol=-np.infty, random_state=42)\n", "y_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3, method=\"decision_function\")\n", "\n", "fpr, tpr, thresholds = roc_curve(y_train_5, y_scores)\n", "def plot_roc_curve(fpr, tpr, label=None):\n", " plt.plot(fpr, tpr, linewidth=2, label=label)\n", " plt.plot([0, 1], [0, 1], \"k--\")\n", " plt.axis([0, 1, 0, 1])\n", " plt.xlabel(\"False Positive Rate\")\n", " plt.ylabel(\"True Positive Rate\")\n", "\n", "plot_roc_curve(fpr, tpr)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9536789698168869" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "roc_auc_score(y_train_5, y_scores)" ] } ], "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 }