Model Selection and validation

profileraja
ModelSelectionAndValidation_1.ipynb

{ "nbformat": 4, "nbformat_minor": 5, "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.6" }, "colab": { "name": "ModelSelectionAndValidation (1).ipynb", "provenance": [] } }, "cells": [ { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 907 }, "id": "79ac7e6e", "outputId": "1508f570-ddb4-4d5a-868a-585899772bc0" }, "source": [ "# Model Selection And Validation with SVM for Machine Learning\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "import matplotlib as mpl\n", "\n", "from sklearn.datasets import load_digits\n", "\n", "import numpy as np\n", "\n", "import random\n", "\n", "\n", "digits = load_digits()\n", "\n", "X,y = digits.data, digits.target\n", "\n", "\n", "%matplotlib inline\n", "\n", "random_examples = [random.randint(0,len(digits.images))\n", "\n", "for i in range(10)]\n", "\n", "for n,number in enumerate(random_examples):\n", " plt.subplot(2, 5, n+1)\n", " plt.imshow(digits.images[number],cmap='binary',interpolation='none', extent=[0,8,0,8])\n", " plt.grid()\n", " plt.show()" ], "id": "79ac7e6e", "execution_count": 1, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAD6UlEQVR4nO2cv0tcWRTHv9/MMiBBHJgYiyRowEVIEwVJtYUpsmyqtJtC0MYqhWWw0v/AJs0UURvZLrBFSDbNkMYiBpT8IFmCPEhsglOIhWQxni0cYRLm3nkzvO9zRs6n0Xln7rzDh3udc9+9V5oZnGy5cNYJnEdcqgCXKsClCnCpAlyqgF8UH1oqlWx0dLTtdltbW9F4X19fMFYoFIKxcrmM4+PjprH+/v7oPYvFYtPrSZJgb2+PzWISqUNDQ9jc3Gy7XalUisbHx8c7ajs9PY2Dg4Omsampqeg9R0ZGml6fnJwMtvHhL8ClCnCpAlyqAJcqQPLtH6NarQZj+/v70baxkitWGdRqNayvr7edDwCsrq5G483wnirApQpwqQJcqgCXKsClCsi9pIqVRcPDwx23jT1QqVarLUunLPGeKsClCnCpAlL9TSWZADgA8B3AkZmFn9A6bX1R3TazPVkm5wgf/gLSSjUA/5B8TXJOmdB5IO3w/83MdkleBvCC5Acze9n4hrrsOQAYHBwM1oWxenJhYSGaxMbGRjAWWvUEgMPDw1zr1FRSzWy3/vMryScAbgF4+dN7KgAqADA2NmahVcqZmZngfZIkieaxvLwcjIVWPYGTSUOrVdMsaTn8SV4k2X/6O4DfAbxVJ9bLpOmpQwCekDx9/7qZPZNm1eO0lGpmOwBu5pDLucFLKgEuVUDuj/5i39Jra2vRthMTE8FY7LFhpVIJVhaxfDrFe6oAlyrApQpwqQJcqgCXKiD3kmp+fl7yuUtLS8FYrVYLbjRbXFzMPBfvqQJcqgCXKsClCnCpAlyqgNxLqtjCX6tyK7a+NTAwEIyVy+Vo26zxnirApQpwqQJcqgCXKsClCnCpAnKvU2O02u+0vb0djK2srARjxWJRsmoawnuqAJcqIJVUkn+Q/EjyE8mH6qR6nTRbKQsAHgG4C+AGgPskb6gT62XS9NRbAD6Z2Y6Z/QfgLwD3tGn1NmmkXgHwueH1l/o1J0BmJVXjnn8A30jmutt6dnY2Fr4EIOvjSsEdcWmk7gK41vD6av3aDzTu+Se52U0H2PLOJ83wfwXgV5LXSRYB/Angb21avU2a7elHJB8AeA6gAOCxmb2TZ9bDpD3y8xTA0zY+t9JZOjJyzYf+39Ozx6epAjKV2m3TWZIJyTckt0i2/w9dO71vVsO/Pp39F8AdnEwQXgG4b2bvM7lBZzklACbzPlKfZU/16WydLKV243T2TI7Ud9WTfwEtj9QryLKnpprO5knjkXoAp0fq5WQptaums2d5pD6z4d+F09kzO1LvMyoBPqMS4FIFuFQBLlWASxXgUgW4VAEuVcD//9gbceKUPKcAAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAADzklEQVR4nO2cPUhVYRjH/3+NlhTukF2wMgVDaGmRpgYbippca9OlqcFBpFF3QZeWC4ZTtIUN0ccirhoIfVASecBcwkERBKV4GrrCLc577vF4/ud+8PwW9T73nvfh5/ve877vfZ9LM4OTLx2NTqAdcakCXKoAlyrApQpwqQLOKC5aKpVscHAwNnZwcBB83dbWVuY2j46OgrG+vj50dMT3n+7u7kztRVGEnZ0dxsUkUsvlMtbW1mJj6+vrwddNTExkbjOKomBsbm4OXV1dsbGRkZFM7Q0PDwdjPvwFuFQBLlWASxXgUgVI7v5J9Pf3B2O7u7uJr52fn8/cbta7fBa8pwpwqQJcqgCXKsClCnCpAgqfUiVtqNSbUiVRKpUk182C91QBLlWASxWQ6j2VZARgH8BvAL/MLLxD65zoRnXLzHZkmbQRPvwFpJVqAN6SfE/yoTKhdiDt8L9pZtskLwB4R/KLma3UPqEq+yEA9PT0YHl5OfZCe3t7wUampqYSk9jY2AjGDg8Pg7He3l4sLi7GxpK2IrOSSqqZbVd//iT5AsANACv/PacCoAIAQ0NDFtq/XFpaCrZTqVQS80ia4Cd9mjo9PR38J4dkn4a6w5/kOZLdx78DuAPgY+6ZtBFpemoZwAuSx89/ZmavpVm1OHWlmtl3ANcLyKVt8CmVAJcqoPCtv9HR0Uyx07CwsBDc/qt39x8bGztxe95TBbhUAS5VgEsV4FIFuFQBhU+pGkG5XA4efQ9ttJwG76kCXKoAlyrApQpwqQJcqoCmmlLV2zFKOref9AHe/v5+sAJRgfdUAS5VgEsV4FIFuFQBLlWASxVQ+Dw16cxTvdrT8fHxTG3Ozs5iZmYmNra5uZnpmkl4TxXgUgWkkkryLsmvJL+RfKxOqtVJc5SyE8ATAPcAXAPwgOQ1dWKtTJqeegPANzP7bmZHAJ4D0JzPaRPSSL0IoPZbuH5UH3MC5Dalqj3zD+CQZNOctp6cnDwPILZcaWBgIOtlr4QCaaRuA7hc8/el6mP/UHvmn+RaMxWwFZ1PmuG/CuAqyQGSZwHcB/BSm1Zrk+Z4+i+SjwC8AdAJ4KmZfZJn1sKkLfl5BeDVCa6bXLtTPIXmQ//29PzxZaqAXKU223KWZETyA8l1koV9nJrb8K8uZzcA3MbfBcIqgAdm9jmXBrLlFAEYLrqkPs+e6svZKnlKbcblbENK6pvqhIqAuiX1CvLsqamWs0VSW1IP4LikXk6eUptqOdvIkvrchn8TLmcbVlLvKyoBvqIS4FIFuFQBLlWASxXgUgW4VAEuVcAfYiYhj11+beYAAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAD+ElEQVR4nO2cvUtkVxjGnyezjMUSmSJqkZUYMAgLEoRlqxSmSNhtzJQ7hWi1VYQpLNLpn6BFGotgFdKtKCz5aGTbdUHY3ZAsyzISLQzxC0FYWXlTZIRJuOfMnct9xjvm/TU69733ntcf5zjnnHvOpZnByZf3rjqB64hLFeBSBbhUAS5VgEsVcENx00qlYqOjox1fd3Z2Fo0fHx8HY6enp8FYf38/9vf3E2MXFxfRMsfHxxOP7+7u4vDwkEkxidShoSFsbW11fN329nY0vra2Foxtbm4GY9VqFYuLi4mxk5OTaJnr6+uJx6empoLXePMX4FIFuFQBLlWASxUg+fbPSr1ej8YbjUYwNjk5GYyVy2WMjIx0fE8AwevK5XLwGq+pAlyqAJcqwKUKcKkCXKqAQnWpYhMm7YjNYG1sbATjS0tLmcsM4TVVgEsV4FIFpPqfSrIB4BTABYB3ZnZHmVSv08kX1edm9pcsk2uEN38BaaUagJ9JPiP5UJnQdSBt8//MzPZIDgL4heRvZvak9YSm7IcAMDAwEH0QF+L8/DwaPzg4CMaOjo6CscHBQczNzSXG+vr6omVm+TtSSTWzvebPP0k+AnAXwJP/nLMCYAUAxsbGLDa/GaLd3Obq6mowFhs4TE9PY35+PjG2sLAQLbNWq0XjSbRt/iRvknz/8ncAXwJ40XFJ/yPS1NQhAI9IXp7/vZn9KM2qx2kr1czeAPi0C7lcG7xLJcClCijU1F+7abjl5eVM963X65iZmUmMTUxMZLpnDK+pAlyqAJcqwKUKcKkCXKqAQnWpQkvIL6lUKsFYbDZpeHg42F2L3TMrXlMFuFQBLlWASxXgUgW4VAGF6lK1697EnlHNzs4GY6VSSdJ1CuE1VYBLFeBSBbhUAS5VgEsV4FIFFKqf2m4t1c7OTjCmeCqaFa+pAlyqgFRSSd4j+TvJ1yS/USfV66RZSlkC8C2A+wBuA6iRvK1OrJdJU1PvAnhtZm/M7BzADwC+0qbV26SR+iGAP1o+7zaPOQFy61K1rvkH8JZkV1dbV6vVWPgDAHlvV/ooFEgjdQ/AcMvnW81j/6J1zT/JrSJtYOt2Pmma/1MAn5D8mGQZwAMAye9qcwCkW57+juTXAH4CUALwnZm9lGfWw6Td8vMYwOMO7ruSLR0ZXc2H/vb0/PFhqoBcpRZtOEuyQfI5yW2Snb/QNWu5eTX/5nD2FYAv8M8A4SmAmpn9mksB2XJqALjT7S31edZUH842yVNqEYezV7KlvlAz/wLabqlXkGdNTTWc7SatW+oBXG6pl5On1EINZ69yS31uzb+Aw9kr21LvIyoBPqIS4FIFuFQBLlWASxXgUgW4VAEuVcDfd3AmYCnz6l4AAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAADzElEQVR4nO2cvWsUaxTGn8eVC4krbJE4hYoIkYBNUiy3MpAtFK1MF63SmcYipWX+gAtJY5PiQhqx28SA+NEktq6Q4AdGRAY0RSRFwDQR5dzCFSLMzM5M5tnM5p5fk+ycnXdOfrzvzJyZ9w3NDE6xnDjqBI4jLlWASxXgUgW4VAEuVcBJRaO1Ws2GhoYy77e7u5sY397ezpXPwMAA9vf3I2NBECTuW6lUIreHYYidnR1GxSRSgyBAq9XKvN/y8nJifG5uLlc+09PT2NzcjIzNzMwk7lur1SK31+v12H18+AtwqQJcqgCXKsClCpBc/fPSbDYT42tra7nanZiYwPz8fGRsdnY2V5tJeE8V4FIFuFQBLlWASxXgUgWU6paq01OqvARB0PHBSZF4TxXgUgW4VAGpzqkkQwDfAPwE8MPM4p/QOpkuVA0z25Flcozw4S8grVQD8IzkK5J3lAkdB9IO/ytmtkXyDIDnJN+b2YuDX2jLvgMAg4ODWF1djWxob28v9iBjY2OJSXSKx9Hf3x/7oi4uz8PArLP+SM4C2DOzf+K+Mzw8bHFvL5P+iEajkSmXtKysrKBarUbGxsfHc7VZr9fRarUiX1F3HP4kT5E8/ft3ANcAvMmVyf+ENMM/ANAk+fv7D8zsiTSrHqejVDP7BGCkC7kcG/yWSoBLFdD1R39xc5MOy9TUVGysWq3mvsrnwXuqAJcqwKUKcKkCXKoAlyqg67dUo6OjsbGRkeTCbWNjIza2uLgYG5ucnMT6+nrmfPLiPVWASxXgUgW4VAEuVYBLFVCqCWoq+vr6JLdOcXhPFeBSBbhUAS5VgEsV4FIFuFQBpbpPXVpaSownrSMNw7DYZA6B91QBLlVAKqkkr5PcJPmR5D11Ur1OmqmUFQD3AdwAcBnAbZKX1Yn1Mml66t8APprZJzP7DuAhgJvatHqbNFLPAvh84POX9jYnhsJuqQ7O+QewT7I0s60bjcYAgKKXK12IC6SRugXg/IHP59rb/sDMFgAsAADJVpkWsHU7nzTD/yWASyQvkvwLwC0Aj7Rp9TZppqf/IHkXwFMAFQD/mtlbeWY9TKpzqpk9BvA4Q7sL+dKR0dV8Mq+jcjrjZaqAQqWWrZwlGZJ8TXKdZPZ/6Jr3uEUN/3Y5+wHAVfwqEF4CuG1m7wo5QL6cQgD1bi+pL7KnejnbpkipZSxnj2RJfame/AvouKReQZE9NVU5203MbKv98yuAJn6douQUKbVU5exRLqkvbPiXsJw9siX1XlEJ8IpKgEsV4FIFuFQBLlWASxXgUgW4VAH/AU+HBSpejOCKAAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAD00lEQVR4nO2cPUwUQRiG31fMNcbkCpBCDZhgSGikuFiZEAuNVlJqBw2VBaUl9FfQ0FxhqIwFiYHC+NMQW84E4k/EXMwlSoGB5Ig0EshnwZlgsrO3d+6798P3NNztt8x+92Rmd2Z2Z2lmcNLlXLsT6EVcqgCXKsClCnCpAlyqgPOKQvP5vI2MjCiKDrK3txeMHR4eYmdnJzI2NjYWW24ul4vcXq1Wsbu7y6iYROrg4CDK5bKi6CBLS0vBWK1Ww9zcXGRsdXU1ttzh4eHI7YVCIfg/3vwFuFQBLlWASxXgUgVIrv4qVlZWgrHp6elgrFgsYn9/X5FSJF5TBbhUAS5VgEsV4FIFuFQBHdWlWltbi41PTk4GYxMTEy0dMzRh8j94TRXgUgW4VAGJzqkkqwB+ATgGcGRm4Rlap6kL1W0z25Vl0kN48xeQVKoBeEPyPckZZUK9QNLmf8vMtkleAvCW5Bcze3d6h7rsGQAYGBgI9jkPDg6CB6lUKrFJLC8vB2PHx8fBGEksLi5Gxhr1jVuBzT71R3IOwIGZFUP7jI6O2tbWVmQs7kfEde4BYGFhIRir1WrBWC6XQ6lUioxtbGzEHjNEoVBAuVyOvEXdsPmTvEDy4t/PAO4C+NhSJmeEJM1/EMALkn/3f2Zmr6RZdTkNpZrZNwA3MsilZ/AulQCXKiDzqb+4K3gjZmdng7G4u6XFYhGbm5tNlwm0lq/XVAEuVYBLFeBSBbhUAS5VQOZdqri7l43ubObz+WCs0YTK0NBQZGxqair2mK3gNVWASxXgUgW4VAEuVYBLFdBVs1RxxM029ff3B7tO4+PjqefiNVWASxXgUgW4VAEuVYBLFeBSBXTUQor/IW5aMGu8pgpwqQISSSV5j+QWyQrJJ+qkup0kj1L2AVgEcB/AGIBHJOPfO3TGSVJTbwKomNk3MzsE8BzAA21a3U0SqZcBfD/1/Ud9mxMgtS7V6Wf+Afwm2UlPW/cDiFyuND8/32qZ0bdnkUzqNoCrp75fqW/7BzMrASgBAMlyJy1gyzqfJM1/HcB1ktdI5gA8BBD/LrczTpLH049IPgbwGkAfgKdm9kmeWReT6JxqZi8BvGyi3Oj1Ne0j03yaXkflNMaHqQJSldppw1mSVZIfSG6QzOyFrqk1//pw9iuAOzgZIKwDeGRmn1M5QGs5VQEUsl5Sn2ZN9eFsnTSlduJwti1L6ntm5j9AwyX1CtKsqYmGs1liZtv1vz8BvMDJKUpOmlI7ajjbziX1qTX/DhzOtm1JvY+oBPiISoBLFeBSBbhUAS5VgEsV4FIFuFQBfwDsXRavKjGlBwAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAD/klEQVR4nO2cwUscVxzHv99EChqKe6gRScsqWIRcqrD0VNAeIs1JvTU3veRiQU/So39ADnroxUPwFOIp0kNo0ov2mi0oSUOUEAZaBcsKSnKpRH49ZAMG9s3MDvNdZ5ff56K7v903Pz++N/Pem/eGZgYnX65cdgKdiEsV4FIFuFQBLlWASxXQpSi0VCrZ8PBw7uUeHx8HY4eHh8FYuVxGV1fjP7WnpydTLlEUoVarsVFMIrW/vx/VajX3ctfX14Ox5eXlYGx1dRUDAwMNY6Ojo5lyqVQqwZg3fwEuVYBLFeBSBbhUAZKrf1aiKIqNz83NBWNTU1PBWHd3d+arfBa8pgpwqQJcqgCXKsClCnCpAgrVpVpcXIyN9/b2BmMrKyvBWFJXLW+8pgpwqQJcqoBU51SSEYC3AM4BvDez8Ayt09SF6nszq8ky6SC8+QtIK9UAPCX5J8m7yoQ6gbTN/zszOyB5HcDvJF+Z2R8XP1CXfRcA+vr6sLW11bCg8/Pz4EEmJiZik5icnAzG9vf3g7Gzs7NgPgrY7Ko/kssA3pnZvdBnRkZGbG9vr2Hs5OQkWPbg4GDssePim5ubwVgURYn/sGapVCqoVqsNb1EnNn+S10h+/vF3AJMAXuSaYYeRpvn3A3hE8uPnH5jZb9Ks2pxEqWb2BsA3LcilY/AulQCXKqDlU39x03Cnp6ex393d3Q3GhoaGgrGNjY3g1GDSdGMWvKYKcKkCXKoAlyrApQpwqQJa3qWKm1BJolwuB2Ozs7PBWK1Wi13aHkeWLpfXVAEuVYBLFeBSBbhUAS5VQMu7VHH3isbHx2O/u729HYyNjY0FY0dHRyiVSg1jOzs7scfMgtdUAS5VgEsV4FIFuFQBLlWASxVQqI0USYvI4p4+sbCwEIwtLS0FpxxnZmbSpNYUXlMFuFQBqaSS/IHkHsnXJH9WJ9XupFlKeRXALwBuA7gJ4A7Jm+rE2pk0NfVbAK/N7I2ZnQF4CCD8xAInldQbAP6+8Pqf+ntOgNy6VBfX/AP4j2RhVlvPz89/AaDhdqXp6emsxQZv7aaRegDgqwuvv6y/9wlmtgZgDQBIVou0ga3V+aRp/s8AfE1yiORnAH4E8Ks2rfYmzfL09yR/AvAEwFUA983sL3lmbUyqc6qZPQbwuIly17KlI6Ol+TS9j8pJxoepAnKVWrThLMmI5HOSOyTzf6Br6Lh5Nf/6cHYfwC18GCA8A3DHzF7mcoBsOUUAKq3eUp9nTfXhbJ08pRZxOHspW+oLNfMvIHFLvYI8a2qq4WwrMbOD+s9/ATzCh1OUnDylFmo4e5lb6nNr/gUczl7alnofUQnwEZUAlyrApQpwqQJcqgCXKsClCnCpAv4HUr8fu6Ci5Z4AAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAD5ElEQVR4nO2cv08UWxTHv18xEDAkmyBuoQRMeJCYECk2VhZQKEpjq1TQWL2C8pXvD4CEbGJDYUJj7EgsjD8aYuuaQFQihpglSmMoINK4kZxXuCa89/bOzkzmO+zi+TSwe3bunP3k3tlzZ+YOzQxOtpw56QROIy5VgEsV4FIFuFQBLlXAWUWjhULBhoeHE2+3ubkZGT86OgrGent7g7G+vj50dXU1jHV2dsZL7j9Uq1Xs7e2xUUwitVgsolKpJN5ufHw8Mr6/vx+MTUxMBGMzMzMYGRlpGBsaGoqT2v8olUrBmA9/AS5VgEsV4FIFuFQBkl//tMzPz0fG5+bmgrGVlZVgbGxsDFNTUw1jirN03lMFuFQBLlWASxXgUgW4VAEtVVLNzs5GxqNKqrSsra1FxqNO1ITwnirApQpwqQJiHVNJVgF8A3AE4IeZhc/QOol+qCbNbE+WySnCh7+AuFINwAuSb0jeVyZ0Gog7/K+b2S7JCwBekvxgZq+Of6Au+z4A9Pf3N63/GnF4eBgZX1hYSNwmAAwMDKBcLjeM1Wq1yG3TfA8mPZ9I8m8Ah2YW/Iajo6O2tbWVOJlmX2BycjJxmwBQLpexuLiYap+hq62lUgmVSqXhJeqmw5/kOZK9v/4HcBPAu2bb/c7EGf5FAKskf33+kZk9k2bV5jSVamafAFzNIZdTg5dUAlyqgJY69ZemfIlDsVgMXqlNey9VFN5TBbhUAS5VgEsV4FIFuFQBuZdU6+vrwdjS0pJknz09PU1vfc8S76kCXKoAlyrApQpwqQJcqoDcS6qos0IHBwep2x0cHAzGuru7vaRqd1yqAJcqwKUKcKkCXKoAlyog9zq1UCgEY1G1JgDs7OykardWq6FarTaMKepX76kCXKqAWFJJ3iK5RXKb5F/qpNqdOLdSdgB4AOA2gCsA7pG8ok6snYnTU68B2DazT2ZWA/AYwB1tWu1NHKkXAXw+9vpL/T0nQGYl1fF7/gF8J5nr3dYbGxvB2PT09HkAWS9XCtZ/caTuAhg49vpS/b1/YWbLAJYBgGSllRaw5Z1PnOH/GsAfJC+T7ARwF8ATbVrtTZzb03+Q/BPAcwAdAB6a2Xt5Zm1MrGOqmT0F8DRBu8vp0pGRaz6J11E5zfFpqoBMpbbadJZkleRbkuskkz/QNe1+sxr+9ensRwA38HOC8BrAPTOLfnyvkPpzCkp5L6nPsqf6dLZOllJbcTp7IkvqW2odlYCmS+oVZNlTY01n88TMdut/vwJYxc9DlJwspbbUdPYkl9RnNvxbcDp7YkvqfUYlwGdUAlyqAJcqwKUKcKkCXKoAlyrApQr4B0PLDoSmOqrLAAAAAElFTkSuQmCC\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAEDElEQVR4nO2cz0tUURTHv18n2uTgLLJZVKhgCIEoJK1a2KKolS5zpStXBQqzaKl/wbhpoYvQjYSbsEX0Y6G0bQKhH1RIPDBHCBWllZGcFo0w2dzbe493njPT+WxG3/fduccv9zr33HfPUERgJEvLSQfQjJipCpipCpipCpipCpipCpzSeNNcLifd3d2R25XLZa++tbXl1DKZjFPr6upCS0vt8ZPNZsMFd4wgCLC9vc1amoqp+XwepVIpcrupqSmvPj097dRaW1udWrFYdOqDg4NhQvuLgYEBp2bTXwEzVQEzVQEzVQEzVQGVT38fY2NjTm1hYcHbdmhoyKkFQeDUyuUyFhcXa2qrq6vePuNgI1UBM1UBM1UBM1UBM1UBM1WB1JdUvqVPsVj0tp2YmHBq/f39Ti2bzcbeOImDjVQFzFQFzFQFQv1PJRkA+A7gEMBPEXHv0BqRPqiui8i2WiRNhE1/BcKaKgBekHxDclwzoGaAYQ6okTwvIpskzwF4CeCeiLw6ds84gHEAaG9vv7K0tBQ5mMPDQ6++s7Pj1DY2NpxaR0cHdnd3a2r5fN7bZ1tbW83rhUIBpVIp/tNUEdmsvH4j+RjAVQCvjt0zB2AOAHp6eiTOYntvb8+rz8/PO7VCoeDUZmdnnfupk5OT3j7j/B3/nP4kz5DMHv0M4CaAd5F7+o8IM1LzAB6TPLp/UUSeqUbV4PzTVBH5AqAvhViaBltSKWCmKpD61t/y8rJTGx0d9bbd39+P1efBwYFzy3FlZcXb1vcE14WNVAXMVAXMVAXMVAXMVAXMVAVSX1L19bmTM9/TUgCYmZlxasPDw06tt7fX+xQ3aWykKmCmKmCmKmCmKmCmKmCmKpD6kqqzs9Op5XI5b1vfLpWvWjDN5RRgI1UFM1UBM1UBM1UBM1UBM1UBM1WB1NepPtbW1ry6b9vQt/61dWoTYKYqEMpUkrdIfiK5TvK+dlCNTpijlBkADwDcBnAZwAjJy9qBNTJhRupVAOsi8kVEfgB4BCD6WZj/iDCmngdQffb7a+Wa4SCxJVX1mX8AByRTPW1dOZTs4iyApMuVOlxCGFM3AVys+v1C5dofVJ/5J1mqpwK2tOMJM/1fA7hEsovkaQB3ADzRDauxCXM8/SfJuwCeA8gAeCgi79Uja2DClvw8BfA0wvvOxQtHjVTjCVWcZkTD0lQFEjW13tJZkgHJtyTXSEb/Qte4/SY1/Svp7GcAN/A7QXgNYEREPiTSQbyYAgADaZfUJzlSLZ2tkKSp9ZjOnkhJfV3t/CtwrbqknuTH4yX1GiQ5UkOls2lSXVIP4KikXp0kTa2rdPYkS+oTm/51mM6eWEm9ZVQKWEalgJmqgJmqgJmqgJmqgJmqgJmqgJmqwC/ARCjDgBPWJgAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAD70lEQVR4nO2cP0wcRxTGv8+OIkEU3RXBCJEIIp2FoAlSkKsUuLDlVLRxSUOVVFyRDuiROIo0FBEVimiMXFhJ3IBbzsKSkyiJLHNS+CMhCqRUsXx6LnxIF7Qz3lvvd9wd79fA7budefpplp3ZnQfNDE6+XLvsBHoRlyrApQpwqQJcqgCXKuADRaPFYtFKpVLL59Xr9Wj86OgoGDs5OQnGhoaGcHx8nBgbHx+P9tnf3594vFar4fT0lEkxidTBwUFUq9WWzzs7O4vGFxcXg7HV1dVgbH5+HuVyOTG2sbER7XNycjLx+NTUVPAcv/wFuFQBLlWASxXgUgVI7v5ZCd1p08QXFhYy9bm1tfVeOSXhI1WASxXgUgW4VAEuVYBLFdBRU6r19fVofHp6OlO7lUoFhUIhMTY6OpqpzRg+UgW4VAEuVUCqv6kkawD+BVAH8NrMwk9onZZuVLfN7FSWSQ/hl7+AtFINwK8kn5KcUybUCzDNBjWSw2Z2SPIGgMcAvjOzJxe+MwdgDgAGBga+3NzcVOQbJPY21cxwcHCQGJuYmIi229fXl3i8XC6jWq1mf5tqZoeNnyckHwC4BeDJhe+sAVgDgLGxMcs6Uc9KpVIJxur1evBt6t7eXrRdyfNUkh+R/Pj8dwB3AfzWck9XiDQjdRDAA5Ln398ws5+lWXU575RqZi8BfNGGXHoGn1IJcKkCuurRXyy+s7MTjC0vL2fuMzarCOEjVYBLFeBSBbhUAS5VgEsV0PYpVWwL+uzsbPTckZGRTH2WSqXgRrSZmZlMbcbwkSrApQpwqQJcqgCXKsClCmj7lKpYLAZj+/v70XNjT5SWlpaCsUKhkHlzWxZ8pApwqQJcqgCXKsClCnCpAlyqgI56m/quoobt7e1gbGVlJd9k3gMfqQJcqoBUUkneI/kXyRckv1cn1e2k2Up5HcAPAL4GMAHgPsn4TtkrTpqRegvACzN7aWavAPwEIP8XOz1EGqnDAP5p+nzQOOYEyG1K1bznH8B/JNu62zq2QQ3AJwDyLlcKvtpNI/UQwGdNnz9tHPsfzXv+SVY7qYCt3fmkufx3Adwk+TnJDwF8A+ChNq3uJs329NckvwXwC4DrAH40s9/lmXUxaUt+HgF41EK7a9nSkdHWfFIVpzmt4ctUAblK7bTlLMkayeckn5Fs/R+6Zu03r8u/sZz9G8AdvF0g7AK4b2Z/5NJBtpxqAKbaXVKf50j15WyDPKV24nL2UkrqO+rJv4CvmkvqSf55saReQZ4jNdVytp00l9QDOC+pl5On1I5azl5mSX1ul38HLmcvraTeV1QCfEUlwKUKcKkCXKoAlyrApQpwqQJcqoA3O7YguY4E3+cAAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFUAAABZCAYAAABPN2ghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAEJElEQVR4nO2cv0tkVxiG3zcTIhICA2osNkGDBsEmgrJVRC0SEhCiXbYQrKwScMAipf+BgqSxCNqEYLOaYtlNGtl2RxDygyTIMpJoISMoVgkrX4odYTLcc+fOzX2vM+73NDr3m3POx8O5M+ece87QzOBky2u3ncBdxKUKcKkCXKoAlyrApQp4XVFpsVi04eHhlssdHR3Fxi8vL4Oxnp6eYKy3txfd3d2RsUKhkCy5BiqVCqrVKqNiEqn9/f0ol8stl5ubm4uN7+3tBWOzs7PB2MLCAsbHxyNjxWIxWXINTExMBGN++wtwqQJcqgCXKsClCpB8+8dxcXERjO3v78eWHRgYCMZ2d3eDscnJSWxsbLRcLi3eUwW4VAEuVYBLFeBSBbhUAbkPqba2toKxZosbh4eHqWIHBwfBxZi4cgAwNjYWG4/Ce6oAlyrApQpI9JlKsgLgCsA1gBdmFl6hdVr6opoxs6oskzuE3/4Ckko1AD+QPCC5pEzoLsAkG9RI3jOzE5JvA/gRwJdm9rThPUsAlgCgr69vfGdnJ7Kus7OzYDvVavyny+joaNNcozg/P8fV1VVk7Pr6Orbs0NBQ5PWVlRWUy+X0T1PN7KT294zkQwD3ATxteM8mgE0AGBkZsenp6ci61tfXg+3ETQyA5gP1uHpDa7Vx67tAuvXWprc/yTdJvnXzP4CPAfzcckuvEEl6aj+AhyRv3v+tmT2WZtXhNJVqZs8BfJBDLncGH1IJcKkCcl/6q1QqwVjafU3N6OrqwuDgYGSs2RPcNHhPFeBSBbhUAS5VgEsV4FIF5D6kmpmZCcYUm8WAl/v6Q8O1ZgsqafCeKsClCnCpAlyqAJcqwKUKyH1INTU1FYwdHx/Hll1cXAzG5ufng7HT01Osrq5GxpaXl2PbTIP3VAEuVYBLFeBSBbhUAS5VgEsVkPs4Ne6J6draWmzZUqkUjG1vb6eqNzR+/T94TxXgUgUkkkryE5K/kzwi+ZU6qU4nyVbKAoCvAXwKYBTAA5Lpdt++IiTpqfcBHJnZczP7B8B3AD7TptXZJJF6D8Cfda//ql1zAmQ2pKrf8w/gb5Jts9u6VCr1Aog8UFDbzJyG4G+PJJF6AuDdutfv1K79h/o9/yTL7XSALe98ktz+zwC8T/I9km8A+BzA99q0Opsk29NfkPwCwBMABQDfmNkv8sw6mKRHfh4BeNRCvZvp0pGRaz6JDqc5reHTVAGZSm236SzJCsmfSB6SbP0HXdO2m9XtX5vO/gHgI7ycIDwD8MDMfs2kgXQ5VQBM5H2kPsue6tPZGllKbcfp7K0cqc995T9nPqw/Uk/yt8Yj9Qqy7KmJprN5Un+kHsDNkXo5WUptq+nsbR6pz+z2b8Pp7K0dqfcZlQCfUQlwqQJcqgCXKsClCnCpAlyqAJcq4F9KKDDiUpIuPAAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "07486c3d", "outputId": "b57e5074-3938-4332-ee35-f17e0b77c4cf" }, "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "from sklearn.model_selection import cross_val_score\n", "\n", "from sklearn.preprocessing import MinMaxScaler\n", "\n", "# we keep 30% random examples for test\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X,\n", "\n", "y, test_size=0.3, random_state=101)\n", "\n", "# we scale the data in the range [-1,1]\n", "\n", "scaling = MinMaxScaler(feature_range=(-1, 1)).fit(X_train)\n", "\n", "X_train = scaling.transform(X_train)\n", "X_test = scaling.transform(X_test)\n", "\n", "\n", "from sklearn.svm import SVC\n", "\n", "svm = SVC()\n", "\n", "cv_performance = cross_val_score(svm, X_train, y_train,\n", "\n", "cv=10)\n", "\n", "test_performance = svm.fit(X_train, y_train).score(X_test,\n", "\n", "y_test)\n", "\n", "print ('Cross-validation accuracy score: %0.3f,'' test accuracy score: %0.3f' % (np.mean(cv_performance),test_performance))\n" ], "id": "07486c3d", "execution_count": 2, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Cross-validation accuracy score: 0.986, test accuracy score: 0.987\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "53072a1d", "outputId": "ae65ef55-18c7-47b2-c20a-62ec639d3bea" }, "source": [ "import numpy as np\n", "from sklearn.model_selection import GridSearchCV\n", "from sklearn import svm\n", "\n", "learning_algo = SVC(kernel='linear', random_state=101)\n", "\n", "search_space = [{'kernel': ['linear'],\n", "\n", "'C': np.logspace(-3, 3, 7)},\n", "\n", "{'kernel': ['rbf'],\n", "\n", "'C':np.logspace(-3, 3, 7),\n", " 'gamma': np.logspace(-3, 2, 6)}]\n", "\n", "gridsearch = GridSearchCV(learning_algo,\n", "\n", "param_grid=search_space,\n", "\n", "refit=True, cv=10)\n", "\n", "gridsearch.fit(X_train,y_train)\n", "\n", "print ('Best parameter: %s'\n", "\n", "% str(gridsearch.best_params_))\n", "\n", "cv_performance = gridsearch.best_score_\n", "\n", "test_performance = gridsearch.score(X_test, y_test)\n", "print ('Cross-validation accuracy score: %0.3f,'' test accuracy score: %0.3f'% (cv_performance,test_performance))\n", "\n", "\n" ], "id": "53072a1d", "execution_count": 3, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Best parameter: {'C': 10.0, 'gamma': 0.1, 'kernel': 'rbf'}\n", "Cross-validation accuracy score: 0.988, test accuracy score: 0.987\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 752 }, "id": "75b7e9b1", "outputId": "d272ed63-2bc8-4568-e255-2cb2798f5175" }, "source": [ "prediction = gridsearch.predict(X_test)\n", "\n", "wrong_prediction = (prediction!=y_test)\n", "\n", "test_digits = scaling.inverse_transform(X_test)\n", "\n", "for n,(number,yp,yt) in enumerate(zip(scaling.inverse_transform(X_test)[wrong_prediction],prediction[wrong_prediction],y_test[wrong_prediction])):\n", " plt.subplot(2, 5, n+1)\n", " plt.imshow(number.reshape((8,8)),cmap='binary',interpolation='none',extent=[0,8,0,8])\n", " plt.title('pred:'+str(yp)+\"!=\"+str(yt))\n", " plt.grid()\n", " plt.show()" ], "id": "75b7e9b1", "execution_count": 4, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "334968e9", "outputId": "580e5d2f-36e4-4be2-ac78-7429998ee93b" }, "source": [ "# Model Selection And Validation with K-NN for Machine Learning\n", "from sklearn import datasets\n", "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "#digit dataset from sklearn\n", "digits = datasets.load_digits()\n", "\n", "#create the KNeighborsClassifier\n", "clf = KNeighborsClassifier(n_neighbors=6)\n", "\n", "#set training set\n", "x, y = digits.data[:-1], digits.target[:-1]\n", "\n", "#train model\n", "clf.fit(x, y)\n", "\n", "#predict\n", "y_pred = clf.predict([digits.data[-1]])\n", "y_true = digits.target[-1]\n", "\n", "print(y_pred)\n", "print(y_true)" ], "id": "334968e9", "execution_count": 5, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[8]\n", "8\n" ] } ] }, { "cell_type": "code", "metadata": { "id": "f6e5938b" }, "source": [ "#Parameter tuning with GridSearchCV \n", "\n", "\n", "# K-Nearest Neighbors\n", "\n", "estimator_KNN = KNeighborsClassifier(algorithm='auto')\n", "parameters_KNN = {\n", " 'n_neighbors': (1,10, 1),\n", " 'leaf_size': (20,40,1),\n", " 'p': (1,2),\n", " 'weights': ('uniform', 'distance'),\n", " 'metric': ('minkowski', 'chebyshev')\n", "}\n", " \n", "# with GridSearch\n", "grid_search_KNN = GridSearchCV(\n", " estimator=estimator_KNN,\n", " param_grid=parameters_KNN,\n", " scoring = 'accuracy',\n", " n_jobs = -1,\n", " cv = 5\n", ")\n" ], "id": "f6e5938b", "execution_count": 6, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "1956f749", "outputId": "73a5cb6e-62ce-4126-9136-192c26792926" }, "source": [ "KNN_1=grid_search_KNN.fit(X_train, y_train)\n", "y_pred_KNN1 =KNN_1.predict(X_test)\n", "KNN_2=grid_search_KNN.fit(X_train, y_train)\n", "y_pred_KNN2 =KNN_2.predict(X_test)\n", "KNN_3=grid_search_KNN.fit(X_train, y_train)\n", "y_pred_KNN3 =KNN_3.predict(X_test)\n", "\n", "#Parameter setting that gave the best results on the hold out data.\n", "print(grid_search_KNN.best_params_ ) \n", "#Mean cross-validated score of the best_estimator\n", "print('Best Score - KNN:', grid_search_KNN.best_score_ )\n" ], "id": "1956f749", "execution_count": 7, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "{'leaf_size': 20, 'metric': 'minkowski', 'n_neighbors': 1, 'p': 2, 'weights': 'uniform'}\n", "Best Score - KNN: 0.9840890406627458\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "d29e64e4", "outputId": "67f19de7-6991-42d5-9015-0ab5b0af7fe3" }, "source": [ "KNeighborsClassifier(algorithm='ball_tree', leaf_size=1, metric='minkowski',\n", " metric_params=None, n_jobs=None, n_neighbors=150, p=2,\n", " weights='distance')" ], "id": "d29e64e4", "execution_count": 8, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "KNeighborsClassifier(algorithm='ball_tree', leaf_size=1, metric='minkowski',\n", " metric_params=None, n_jobs=None, n_neighbors=150, p=2,\n", " weights='distance')" ] }, "metadata": {}, "execution_count": 8 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 340 }, "id": "9f2aca19", "outputId": "33dd0cf2-3421-4a6b-ee67-554fb01c54eb" }, "source": [ "import sklearn.metrics as metrics\n", "\n", "print('Accuracy Score - KNN - Default:', metrics.accuracy_score(y_test, y_pred)) " ], "id": "9f2aca19", "execution_count": 9, "outputs": [ { "output_type": "error", "ename": "ValueError", "evalue": "ignored", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-9-802c37079129>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mmetrics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Accuracy Score - KNN - Default:'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmetrics\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maccuracy_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/sklearn/metrics/_classification.py\u001b[0m in \u001b[0;36maccuracy_score\u001b[0;34m(y_true, y_pred, normalize, sample_weight)\u001b[0m\n\u001b[1;32m 183\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 184\u001b[0m \u001b[0;31m# Compute accuracy for each possible representation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 185\u001b[0;31m \u001b[0my_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_true\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_check_targets\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_true\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 186\u001b[0m \u001b[0mcheck_consistent_length\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_true\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msample_weight\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0my_type\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstartswith\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'multilabel'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/sklearn/metrics/_classification.py\u001b[0m in \u001b[0;36m_check_targets\u001b[0;34m(y_true, y_pred)\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0my_pred\u001b[0m \u001b[0;34m:\u001b[0m \u001b[0marray\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mindicator\u001b[0m \u001b[0mmatrix\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 79\u001b[0m \"\"\"\n\u001b[0;32m---> 80\u001b[0;31m \u001b[0mcheck_consistent_length\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_true\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 81\u001b[0m \u001b[0mtype_true\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtype_of_target\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_true\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[0mtype_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtype_of_target\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/sklearn/utils/validation.py\u001b[0m in \u001b[0;36mcheck_consistent_length\u001b[0;34m(*arrays)\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0muniques\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 211\u001b[0m raise ValueError(\"Found input variables with inconsistent numbers of\"\n\u001b[0;32m--> 212\u001b[0;31m \" samples: %r\" % [int(l) for l in lengths])\n\u001b[0m\u001b[1;32m 213\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: Found input variables with inconsistent numbers of samples: [540, 1]" ] } ] }, { "cell_type": "code", "metadata": { "id": "a7d6fbfd", "outputId": "ed80b0f3-f519-4148-d500-19c82e2427f3" }, "source": [ "from sklearn.metrics import confusion_matrix, accuracy_score\n", "from sklearn import model_selection\n", "from sklearn import neighbors\n", "\n", "# load sample dataset of digits\n", "digits = datasets.load_digits()\n", "\n", "# prepare datasets from training and for validation\n", "X_train, X_test, y_train, y_test = model_selection.train_test_split(digits.data, digits.target, test_size=0.4, random_state=0)\n", "\n", "# runs the kNN classifier for even number of neighbors from 1 to 10\n", "for n in range(1, 10, 2):\n", " clf = neighbors.KNeighborsClassifier(n)\n", "\n", " # instance based learning\n", " clf.fit(X_train, y_train)\n", "\n", " # our 'ground truth'\n", " y_true = y_test\n", "\n", " # predict\n", " y_pred = clf.predict(X_test)\n", "\n", " # learning metrics\n", " cm = confusion_matrix(y_true, y_pred)\n", " acc = accuracy_score(y_true, y_pred)\n", "\n", " print (\"Neighbors: %d\" % n)\n", " print (\"Confusion Matrix\")\n", " print (cm)\n", "\n", " print (\"Accuracy score: %f\" % accuracy_score(y_true, y_pred))\n", " print" ], "id": "a7d6fbfd", "execution_count": null, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Neighbors: 1\n", "Confusion Matrix\n", "[[60 0 0 0 0 0 0 0 0 0]\n", " [ 0 73 0 0 0 0 0 0 0 0]\n", " [ 0 0 71 0 0 0 0 0 0 0]\n", " [ 0 0 0 70 0 0 0 0 0 0]\n", " [ 0 0 0 0 63 0 0 0 0 0]\n", " [ 0 0 0 0 0 87 1 0 0 1]\n", " [ 0 0 0 0 0 0 76 0 0 0]\n", " [ 0 0 0 0 0 0 0 65 0 0]\n", " [ 0 2 0 1 0 0 0 0 74 1]\n", " [ 0 0 0 2 0 1 0 0 0 71]]\n", "Accuracy score: 0.987483\n", "Neighbors: 3\n", "Confusion Matrix\n", "[[60 0 0 0 0 0 0 0 0 0]\n", " [ 0 73 0 0 0 0 0 0 0 0]\n", " [ 0 0 71 0 0 0 0 0 0 0]\n", " [ 0 0 1 69 0 0 0 0 0 0]\n", " [ 0 0 0 0 62 0 0 1 0 0]\n", " [ 0 1 0 0 0 86 1 0 0 1]\n", " [ 0 0 0 0 0 0 76 0 0 0]\n", " [ 0 0 0 0 0 0 0 65 0 0]\n", " [ 0 2 0 2 0 0 0 0 73 1]\n", " [ 0 0 0 1 0 0 0 0 0 73]]\n", "Accuracy score: 0.984701\n", "Neighbors: 5\n", "Confusion Matrix\n", "[[60 0 0 0 0 0 0 0 0 0]\n", " [ 0 73 0 0 0 0 0 0 0 0]\n", " [ 0 1 69 0 0 0 0 1 0 0]\n", " [ 0 0 1 69 0 0 0 0 0 0]\n", " [ 0 0 0 0 62 0 0 1 0 0]\n", " [ 0 0 0 0 0 87 1 0 0 1]\n", " [ 0 0 0 0 0 0 76 0 0 0]\n", " [ 0 0 0 0 0 0 0 65 0 0]\n", " [ 0 5 0 2 0 0 0 0 70 1]\n", " [ 0 0 0 1 0 1 0 0 0 72]]\n", "Accuracy score: 0.977747\n", "Neighbors: 7\n", "Confusion Matrix\n", "[[60 0 0 0 0 0 0 0 0 0]\n", " [ 0 73 0 0 0 0 0 0 0 0]\n", " [ 0 1 69 0 0 0 0 1 0 0]\n", " [ 0 0 0 70 0 0 0 0 0 0]\n", " [ 0 0 0 0 61 0 0 2 0 0]\n", " [ 0 0 0 0 1 86 1 0 0 1]\n", " [ 0 0 0 0 0 0 76 0 0 0]\n", " [ 0 0 0 0 0 0 0 65 0 0]\n", " [ 0 5 0 2 0 0 0 0 70 1]\n", " [ 0 0 0 0 0 1 0 0 0 73]]\n", "Accuracy score: 0.977747\n", "Neighbors: 9\n", "Confusion Matrix\n", "[[60 0 0 0 0 0 0 0 0 0]\n", " [ 0 72 0 0 0 0 1 0 0 0]\n", " [ 0 1 69 0 0 0 0 1 0 0]\n", " [ 0 0 0 70 0 0 0 0 0 0]\n", " [ 0 0 0 0 61 0 0 2 0 0]\n", " [ 0 0 0 0 1 86 1 0 0 1]\n", " [ 0 0 0 0 0 0 76 0 0 0]\n", " [ 0 0 0 0 0 0 0 65 0 0]\n", " [ 0 5 0 2 0 0 0 1 69 1]\n", " [ 0 0 0 1 0 1 0 0 0 72]]\n", "Accuracy score: 0.973574\n" ] } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 425 }, "id": "c2875d43", "outputId": "d17303bb-921a-4e8a-cc39-195fbbb08d25" }, "source": [ "# Model Selection And Validation with Decision Trees for Machine Learning\n", "\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "import matplotlib as mpl\n", "\n", "from sklearn.datasets import load_digits\n", "\n", "import numpy as np\n", "\n", "import random\n", "\n", "\n", "digits = load_digits()\n", "\n", "X,y = digits.data, digits.target\n", "\n", "features = digits.feature_names\n", "\n", "%matplotlib inline\n" ], "id": "c2875d43", "execution_count": 10, "outputs": [ { "output_type": "error", "ename": "AttributeError", "evalue": "ignored", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/sklearn/utils/__init__.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 114\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 115\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 'feature_names'", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-10-ecb9a9077725>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdigits\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdigits\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtarget\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0mfeatures\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdigits\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfeature_names\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'matplotlib inline'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/sklearn/utils/__init__.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 116\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 117\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 118\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__setstate__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mAttributeError\u001b[0m: feature_names" ] } ] }, { "cell_type": "code", "metadata": { "id": "099b4fa5" }, "source": [ "from sklearn import tree\n", "for depth in range(1,10):\n", " tree_classifier = tree.DecisionTreeClassifier(max_depth=depth, random_state=0)\n", " if tree_classifier.fit(X,y).tree_.max_depth < depth:\n", " break\n", " score = np.mean(cross_val_score(tree_classifier, X, y,scoring='accuracy', cv=crossvalidation, n_jobs=1))\n", " print('Depth: %i Accuracy: %.3f') % (depth,score)" ], "id": "099b4fa5", "execution_count": 11, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "346a7de6" }, "source": [ "# Model Selection And Validation with logistic regresion for Machine Learning\n", "\n", "import numpy as np\n", "from sklearn import datasets\n", "from sklearn import metrics\n", "from sklearn.model_selection import KFold, cross_val_score\n", "from sklearn.pipeline import make_pipeline\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.preprocessing import StandardScaler\n", "\n", "# Load the digits dataset\n", "digits = datasets.load_digits()\n", "\n", "# Create the features matrix\n", "X = digits.data\n", "\n", "# Create the target vector\n", "y = digits.target\n", "\n", "# Create standardizer\n", "standardizer = StandardScaler()\n", "\n", "# Create logistic regression\n", "logit = LogisticRegression()\n", "\n", "# Create a pipeline that standardizes, then runs logistic regression\n", "pipeline = make_pipeline(standardizer, logit)" ], "id": "346a7de6", "execution_count": 12, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "0e45e3c2" }, "source": [ "# Create k-Fold cross-validation\n", "kf = KFold(n_splits=10, shuffle=True, random_state=1)\n", "\n", "# Do k-fold cross-validation\n", "cv_results = cross_val_score(pipeline, # Pipeline\n", " X, \n", " y, \n", " cv=kf, # Cross-validation technique\n", " scoring=\"accuracy\", \n", " n_jobs=-1)" ], "id": "0e45e3c2", "execution_count": 13, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "90cb7515" }, "source": [ "from sklearn.datasets import load_digits\n", "digits = load_digits()\n", "\n", "from sklearn.model_selection import train_test_split\n", "x_train, x_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.25, random_state=0)" ], "id": "90cb7515", "execution_count": 14, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9c0350d4", "outputId": "a4420428-88e5-4770-a6bd-be9c18f0e50c" }, "source": [ "from sklearn.linear_model import LogisticRegression\n", "# all parameters not specified are set to their defaults\n", "logisticRegr = LogisticRegression()\n", "\n", "logisticRegr.fit(x_train, y_train)\n", "\n", "logisticRegr.predict(x_test[0:10])\n", "\n", "predictions = logisticRegr.predict(x_test)\n", "\n", "# Use score method to get accuracy of model\n", "score = logisticRegr.score(x_test, y_test)\n", "print(\"Accuracy:\",score)" ], "id": "9c0350d4", "execution_count": 15, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Accuracy: 0.9511111111111111\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.7/dist-packages/sklearn/linear_model/_logistic.py:940: ConvergenceWarning: lbfgs failed to converge (status=1):\n", "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", "\n", "Increase the number of iterations (max_iter) or scale the data as shown in:\n", " https://scikit-learn.org/stable/modules/preprocessing.html\n", "Please also refer to the documentation for alternative solver options:\n", " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", " extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n" ] } ] }, { "cell_type": "code", "metadata": { "id": "9cb23d7d" }, "source": [ "" ], "id": "9cb23d7d", "execution_count": null, "outputs": [] } ] }