{ "metadata": { "name": "5 - k Nearest Neighbors" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "k Nearest Neighbors\n", "=====================\n", "\n", "Circles\n", "-------\n", "We create a dataset consisting of a small circle surrounded by a larger circle.\n", "\n", "First, we will try to fit is using logistic regression, than we will use $k$ Nearest Neighbors.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.datasets import make_circles\n", "X, y = make_circles(noise=.1, factor=.5)\n", "print \"X.shape:\", X.shape\n", "print \"unique labels: \", np.unique(y)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "X.shape: (100, 2)\n", "unique labels: [0 1]\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's plot the data again." ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.prism() # this sets a nice color map\n", "plt.scatter(X[:, 0], X[:, 1], c=y)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 3, "text": [ "" ] }, { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take the first 50 examples for training and the rest for testing." ] }, { "cell_type": "code", "collapsed": false, "input": [ "X_train = X[:50]\n", "y_train = y[:50]\n", "X_test = X[50:]\n", "y_test = y[50:]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Import logistic regression and fit the model." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.linear_model import LogisticRegression\n", "logreg = LogisticRegression()\n", "logreg.fit(X_train, y_train)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 5, "text": [ "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001)" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Evaluate the logistic regression as we did before by ploting the decision surface and predictions on the test data.\n", "We plot the training data as circles, colored with their true labels.\n", "The test data is colored with their prediction and plotted as triangles." ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.prism()\n", "from utility import plot_decision_boundary\n", "y_pred_test = logreg.predict(X_test)\n", "plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred_test, marker='^')\n", "plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train)\n", "plot_decision_boundary(logreg, X)\n", "plt.xlim(-1.5, 1.5)\n", "plt.ylim(-1.5, 1.5)\n", "print \"Accuracy of logistic regression on test set:\", logreg.score(X_test, y_test)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy of logistic regression on test set: 0.5\n" ] }, { "output_type": "display_data", "png": "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\ngg==\n" } ], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "That doesn't look as good as before. Notice that all test points on the right of the line are red and all on the left are green. (as expected)\n", "\n", "Now let us look at how K Nearest Neighbors works here. Let us import the classifier and create an object." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.neighbors import KNeighborsClassifier\n", "knn = KNeighborsClassifier(n_neighbors=5) # we specify that this knn should always use 5 neighbors\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "knn.fit(X_train, y_train)\n", "y_pred_test = knn.predict(X_test)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.prism() # gives us a nice color map\n", "plt.xlim(-1.5, 1.5)\n", "plt.ylim(-1.5, 1.5)\n", "plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred_test, marker='^')\n", "plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train)\n", "print \"Accuracy of KNN test set:\", knn.score(X_test, y_test)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Accuracy of KNN test set: 0.88\n" ] }, { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This looks much better, which is also reflected by the test set score. You can try to change $k$ to make the prediction better.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "MNIST\n", "-----\n", "We'll now have a look at MNIST again." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.datasets import fetch_mldata\n", "from sklearn.utils import shuffle\n", "mnist = fetch_mldata(\"MNIST original\")\n", "X_digits, y_digits = mnist.data, mnist.target\n", "X_digits, y_digits = shuffle(X_digits, y_digits)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This time we use all classes, but only a small training set (because KNN usually takes a while).\n", "To do model selection, we also create a valdation set to adjust $k$." ] }, { "cell_type": "code", "collapsed": false, "input": [ "X_digits_train = X_digits[:1000]\n", "y_digits_train = y_digits[:1000]\n", "X_digits_valid = X_digits[1000:2000]\n", "y_digits_valid = y_digits[1000:2000]\n", "X_digits_test = X_digits[2000:3000]\n", "y_digits_test = y_digits[2000:3000]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let us fit the model. That actually just remembers the dataset. Then we will evaluate on the validation set.\n", "\n", "This time we choose $k=20$.\n", "You can find a good value later.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "knn_digits = KNeighborsClassifier(n_neighbors=20)\n", "knn_digits.fit(X_digits_train, y_digits_train)\n", "print \"KNN validation accuracy on MNIST digits: \", knn_digits.score(X_digits_valid, y_digits_valid)\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "KNN validation accuracy on MNIST digits: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.838\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "After you found a good value of $k$, you can evaluate again on the test set (only do this once to have a meaningful result!)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print \"KNN test accuracy on MNIST digits: \", knn_digits.score(X_digits_test, y_digits_test)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "KNN test accuracy on MNIST digits: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.857\n" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get a better understanding of the classifier, let us take a closer look at some mistake that are done with $k=3$." ] }, { "cell_type": "code", "collapsed": false, "input": [ "knn_digits = KNeighborsClassifier(n_neighbors=3)\n", "knn_digits.fit(X_digits_train, y_digits_train)\n", "y_digits_valid_pred = knn_digits.predict(X_digits_valid)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get the neighbors of the validation data from the training data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "neighbors = knn_digits._tree.query(X_digits_valid, k=3)[1]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Not let's look at them. Let's start with an image where it worked. First plot the validation image itself, then three neighbors." ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.rc(\"image\", cmap=\"binary\") # this sets a black on white colormap\n", "# plot X_digits_valid[0]\n", "plt.subplot(1, 4, 1)\n", "plt.imshow(X_digits_valid[0].reshape(28, 28))\n", "plt.title(\"Query\")\n", "# plot three nearest neighbors from the training set\n", "for i in [0, 1, 2]:\n", " plt.subplot(1, 4, 2 + i)\n", " plt.title(\"%dth neighbor\" % i)\n", " plt.imshow(X_digits_train[neighbors[0, i]].reshape(28, 28)) \n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n/pp9dvLkSTQ2NgIAiouLJxiduVyZX716NbZu3co0dDgc8Pl8aGtrSzpPoVCgsbEx6RmM/4FMRmJd\nu7q6EAgE2N/Hjh3DihUr0NjYCKFQiHPnzrFjR44cwY033sj+Hv8sZ8tkmnHaXuJytCWEYNOmTbDZ\nbHj33XeTrsXpe4lU9S0Iwy2Xy/GLX/wCzzzzDLZv347R0VG8++67WLduHe69917cdNNNuOWWW/Dp\np5+iq6sLR44cSZrYV6lUWLlyJX7605+ir68PsVgMp06dwpEjRwBM3cN68MEH8cYbb+D999/Pmj/p\ndIjFYtx3333YunUrurq68PLLL+PLL7/EQw89BOBS78Rms2FkZISVmU3vcTLIpek0AMDGjRvx2muv\n4c9//jPC4TBcLhd27tw5abm1a9fi+eefR19fH3bt2oXPPvts2h9i4n2ASz2zbdu2wWq14pe//CWA\nSz2fkpISrFu3Dtu2bcPQ0BD+9Kc/4eOPP8Zdd911Wd8TuLSKHwwGEY1GEYvFEAqF2GI0p+3l8+ij\nj+Ls2bP44IMPIBQKk45x+s6OgjDcAPDII4/gN7/5DT755BMsWLAAGzZsQENDA95++22UlJRg5cqV\neOCBB3DLLbfgBz/4AR577LEksV999VVUV1fjnnvugU6nw/e+9z025cDj8SZ9MDfccAOKiopw3XXX\nTfAxzRUvvfQSTCYTVqxYgddffx3vvPMO8z9VKBT4x3/8R9x4443QaDRsZX78d5uuEU52Lv1s4cKF\n+N3vfof//u//hslkQnNzMz755JNJy27btg0rVqzA9ddfj3//939He3s7FApFSvfh8XhYvnw5+Hw+\nWlpacPjw4SQvoBdeeAEtLS246aab8J//+Z/YuXMn02CqZ5kK/+///T9IJBI899xzeOuttyAWi/Hz\nn/8cAKft+OvMlr6+Prz22ms4ceIEDAYD5HI55HI53nnnHQCcvuOvMxM8crmvtRzx5ptv4ic/+QkO\nHjyIefPmZew+t9xyC+6///6UfXs5Jufb3/42VqxYgS1btuS6KlccnLaZJR/1LZge93geeughPP/8\n8zh06FDG7rF//36cP38e999/f8bucaVy7tw5fP311wiFQvj973+PTz/9FLfeemuuq3VFwGmbWQpC\n35R8TyZh7969pLGxkSxYsIC89NJL6V4mb3nwwQdJVVVVkttPtrgStD18+DBZsGABkUql5I477iDv\n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\noKmpCXfeeSc++OCDlO/X2dkJAOjs7ERbW9uMZfR6PXg8HpRKJR577DH8z//8z4RzIpEIvvWtb2Hj\nxo1Yv359SvearEwq90oVTtv80xZIT990tAVm/s75qC2tA9d250bfjBhupVIJ4NIKcm9vLz799FM2\nNJgKv9/PhgpWqxWffPIJ1qxZk9L9li1bhh07diAQCGDHjh0pNYaZMpmRKTIjTnevqcqkmjUtFTht\n80tbIH1909EWmP4756u2ANd251TftJY0U2DPnj2ksbGRzJ8/n/zqV7+a8fyLFy+SlpYW0tLSQlav\nXk1++9vfTnred77zHVJeXk4EAgExmUxkx44dxO12kzvvvJNUVlaS9evXE4/HM2kZPp9PTCYT+e1v\nf0s2btxImpubyXXXXUd+9KMfTVi1/vzzzwmPxyMtLS2ktbWVtLa2ko8++mjae01WZteuXTPea7Zw\n2uaPtoSkpm862iaWS1XffNaWEK7tzpW+XMg7BwcHR4GRV4uTHBwcHBwzwxluDg4OjgKDM9wcHBwc\nBQZnuDk4ODgKDM5wc3BwcBQYnOHm4ODgKDA4w83BwcFRYPx/TkdOTuQ282kAAAAASUVORK5CYII=\n" } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Find out where we went wrong on the validation set, so we can have a look." ] }, { "cell_type": "code", "collapsed": false, "input": [ "wrong = np.where(y_digits_valid_pred != y_digits_valid)[0] # the != part gives a mask, the \"where\" gives us the indices\n", "print \"Wrong prediction on the following images: \", wrong\n", "\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Wrong prediction on the following images: [ 8 13 20 30 37 38 44 48 63 88 92 101 104 105 109 126 137 140\n", " 148 154 166 173 174 176 189 204 206 216 221 222 226 229 239 240 262 268\n", " 277 291 294 309 311 313 314 333 334 341 344 357 364 365 371 377 392 395\n", " 417 430 431 434 439 461 480 484 487 494 502 507 519 520 521 523 547 551\n", " 562 564 577 578 590 599 604 622 631 639 643 659 669 673 683 692 696 710\n", " 712 716 729 741 742 751 754 759 765 781 783 788 796 809 814 829 841 854\n", " 867 897 903 911 917 918 927 957 958 972 973 976 986 987 995]\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now take one of these and visualize the 3 closest neighbors.\n", "That will hopefully give us some insights into why there was an error." ] }, { "cell_type": "code", "collapsed": false, "input": [ "index = wrong[0]\n", "\n", "plt.rc(\"image\", cmap=\"binary\") # this sets a black on white colormap\n", "# plot X_digits_valid[index]\n", "plt.subplot(1, 4, 1)\n", "plt.imshow(X_digits_valid[index].reshape(28, 28))\n", "plt.title(\"Query\")\n", "# plot three nearest neighbors from the training set\n", "for i in [0, 1, 2]:\n", " plt.subplot(1, 4, 2 + i)\n", " plt.title(\"%dth neighbor\" % i)\n", " plt.imshow(X_digits_train[neighbors[index, i]].reshape(28, 28))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\nYII=\n" } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Playing with the notebook\n", "=========================\n", "1. Find a good $k$ for the simple circle dataset.\n", "2. Find a good $k$ for the MNIST dataset using the validation set, then test once on the test set. How do the results on the validation set and test set differ?\n", "3. How does the performance of KNN change when you change the size of the training set? (If you make it larger than 5000, you might have to wait a bit). Why does it change like this?" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }