{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "from sklearn.datasets import load_breast_cancer\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.model_selection import train_test_split\n", "\n", "import matplotlib.pyplot as plt\n", "import mglearn\n", "\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "cancer = load_breast_cancer()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "# Knowledge Gathering \n", "\n", "#print(cancer.DESCR)\n", "#cancer.data\n", "#cancer.data.shape\n", "#print(cancer.feature_names)\n", "#print(cancer.target_names)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "deletable": true, "editable": true }, "source": [ "
\n", "# Process Outline (for many ML projects)\n", "#### 1. Get the data (pre-process it)\n", "#### 2. Pick an algorithm (classifier)\n", "#### 3. Train the algorithm. Verify accuracy. Optimize.\n", "#### 4. Predict " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "# Looking into the raw dataset (not pre-processed like the one that comes with scikit-learn)\n", "\n", "import pandas as pd\n", "raw_data=pd.read_csv('breast-cancer-wisconsin-data.csv', delimiter=',')\n", "#raw_data.tail(10)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nuXr1qs7NzdVaa719+3bdsWNHgyOqmfL+DYEEXY1cbJVaMUopT2Av0A74QGu9q5w2Y4AxADfccIM1\nTitEtUybNo2UlBS2bNlCo0aNKm07ZswY2rRpQ79+/VBKkZ+fj4eH696KGjhwIIl79zD7vfdZHDuV\ni5kZ+Pk35uHoKCYu3EPbtm2NDrHWTp06xbBhwygoKKBu3brMmzfP6JDsxqr12JVS/sBqYJzW+lBF\n7aQeu7CX/fv3ExERwfjx45kzZ06135eUlERoaCgAly9fpn79+rYK0SYOHz7MLbeUPz9dOIfy/g0N\nqceutc4EvgcGWPO4QtTG1atXiYiIQClVo6QOEBISYl6I4uPjY/5aCGdgjVkxTQt76iil6gN9gV8t\nPa4QlirqZde2FkezZs3MJQiuu+468/xlIRydNXrsQcD3SqmfgT3ARq31N1Y4rhC1FhVlmqL322+/\nmVf51Ub9+vXJz88HIDQ0lPj4eKvEJ4QtWZzYtdY/a607aa3DtNahWus3rRGYELW1bt06li5dykcf\nfcRNN91k8fE8PDzQWtOxY0f69+/Pxx9/bIUoHU9qaioD7r6TP/74w+hQhIVc93a/cEtnz55l0KBB\ndO3alSeffNKqx05MTGTUqFE89dRTTJw40arHdgQzp73F7h0/MXPaWxYfS8r2Vmzu3Lm0a9cOpVS5\nRcmsQRK7cBlaa5o3bw7Arl1lZtxaxfz583n77beZM2eO05aNLU9qaioLFsxn88h6LFjwhcW9dinb\nW7EePXqwadMmWrdubbNzSGIXLuPPf/4zYKqgZ8st4V566SVWrVrF5s2b8ff3x5pTho0yc9pbjArz\npFOQJ4908LS41y5le8sv2wvQqVMngoODLbq+VarOKiZrP2TlqbC22bNna0B/++23djvn7t27NaAB\nfe3aNbudtzqqu/JUa61///13HeBXX/8+yVfr1xvq3yf56sYN6+vU1NRan//48eM6JCTE/Pfvv/9e\n+/j46GPHjpmfS09P11prffnyZR0SEqLPnTuntda6devWOi0tTR8/flx7enrq/fv3a621Hjp0qF60\naJHWWutRo0bplStXmtvHxMRorbX+4IMP9OjRo7XWWo8dO1ZPmzZNa611XFycBnRaWlqJOM+ePatb\ntmxpjqsopi+++EKPHTtWa611RkaGLigo0FprPW/ePD1p0iSttdZ/+ctf9I8//qi11vrixYs6NzdX\n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\nSGIXQggX8/8BT14HKeKebjUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# KNN Classifier Overview\n", "\n", "mglearn.plots.plot_knn_classification(n_neighbors=3)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", " metric_params=None, n_jobs=1, n_neighbors=5, p=2,\n", " weights='uniform')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.datasets import load_breast_cancer\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.model_selection import train_test_split\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "cancer = load_breast_cancer()\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=42)\n", "\n", "knn = KNeighborsClassifier()\n", "knn.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy of KNN n-5, on the training set: 0.946\n", "Accuracy of KNN n-5, on the test set: 0.930\n" ] } ], "source": [ "print('Accuracy of KNN n-5, on the training set: {:.3f}'.format(knn.score(X_train, y_train)))\n", "print('Accuracy of KNN n-5, on the test set: {:.3f}'.format(knn.score(X_test, y_test)))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEKCAYAAADjDHn2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VVXWx/HvSiOU0BJ6kCYthiSEACIiIBZURAEL2MCO\n3ZnBGeZVUbGXGRU7KiDqgIKI2EGKigUIoUkoUiXUUAIJEEhZ7x/nJoQQSIB7c26S9XmePN576rpX\nzS/n7H32FlXFGGOMOZEAtwswxhjj/ywsjDHGFMvCwhhjTLEsLIwxxhTLwsIYY0yxLCyMMcYUy8LC\nGGNMsSwsjDHGFMvCwhhjTLGC3C7AWyIiIrRp06Zul2GMMWXKwoULd6pqneK2Kzdh0bRpUxITE90u\nwxhjyhQR2ViS7ew2lDHGmGJZWBhjjCmWhYUxxphilZs2C2NKU1ZWFikpKWRmZrpdijElEhoaSmRk\nJMHBwae0v4WFMacgJSWFsLAwmjZtioi4XY4xJ6Sq7Nq1i5SUFJo1a3ZKx/DZbSgRGSMiO0Tkj+Os\nFxEZJSJrRGSpiMQXWDdYRP70/Az2VY3GnKrMzEzCw8MtKEyZICKEh4ef1pWwL9ssxgG9T7D+EqCl\n5+cO4C0AEakNPAZ0BjoBj4lILR/WacwpsaAwZcnp/vfqs7BQ1Z+A3SfY5ApgvDp+B2qKSAPgYmCG\nqu5W1T3ADE4cOqflcHYuz36zgpQ9B3x1CmOMKfPc7A3VCNhU4H2KZ9nxlh9DRO4QkUQRSUxNTT2l\nIrbuPcj/5v3FHeMXcuBw9ikdwxi3TJ06FRFh5cqVbpfiVaNGjaJt27Zcf/31Ry1fvHgx33zzTf77\nxx9/nJdeeumUz/PKK69w4MDJ/6E4YsQIfvjhhxNuM23aNJ577rlTLe2UFf6OvKVMd51V1dGqmqCq\nCXXqFPu0epGahFdl1KD2rNi2j4cmLUVVvVylMb4zYcIEzj33XCZMmODT8+Tk5Pj0+IW9+eabfPPN\nN3z88cdHLff2L8IThcWJPvPIkSO54IILTnjsvn37Mnz48NOq71SUx7DYDDQu8D7Ss+x4y32mZ5u6\n/PPiNny9bCtvzlnry1MZ4zUZGRnMnTuX999/n4kTJx617vnnn6ddu3bExsbm/8Jas2YNF1xwAbGx\nscTHx7N27VrmzJlDnz598ve79957GTduHOAMoTNy5EjOPfdcJk2axLvvvkvHjh2JjY1lwIAB+b9k\nt2/fTr9+/YiNjSU2NpZff/2VESNG8Morr+Qf9+GHH+bVV1895jP897//JTo6mujo6Pzthw4dyrp1\n6+jbty8vv/xy/raHDx9mxIgRfPLJJ8TFxfHJJ58AkJycTI8ePWjevDmjRo3K3/6jjz6iU6dOxMXF\nceeddx7zy3/UqFFs2bKFnj170rNnTwCqVavGiBEj6Ny5M7/99hsjR46kY8eOREdHc8cdd+T/MTlk\nyBAmT56c/z099thjxMfH065du/yrvHHjxnHvvffmb3///fdzzjnn0Lx58/x9c3NzufvuuznrrLPo\n06cPl156af66wrVGRUURExPDwIEDAdi/fz+33HILnTp1on379nzxxRfH/Y68wc2us9OAe0VkIk5j\n9l5V3Soi3wPPFGjUvgj4t6+LGdq9OSu37eOl6atoXS+MC6Lq+fqUppx44svlJG/Z59VjRjWszmOX\nn3XCbb744gt69+5Nq1atCA8PZ+HChXTo0IFvv/2WL774gnnz5lGlShV273aaDq+//nqGDx9Ov379\nyMzMJDc3l02bNp3wHKGhocydOxeAXbt2cfvttwPwyCOP8P7773Pfffdx//330717dz7//HNycnLI\nyMigYcOG9O/fnwcffJDc3FwmTpzI/Pnzjzr2woULGTt2LPPmzUNV6dy5M927d+ftt9/mu+++Y/bs\n2URERORvHxISwsiRI0lMTOT1118HnNtQK1euZPbs2aSnp9O6dWvuuusu1qxZwyeffMIvv/xCcHAw\nd999Nx9//DE33XRT/vHuv/9+/vvf/x51nv379xMdHc3IkSOdfw9RUYwYMQKAG2+8ka+++orLL7/8\nmO8pIiKCpKQk3nzzTV566SXee++9Y7bZunUrc+fOZeXKlfTt25errrqKKVOmsGHDBpYtW8aOHTto\n27Ytt9xyyzH7Pvfcc6xfv55KlSqRlpYGwNNPP83555/PmDFjSEtLo1OnTlxwwQXHfEfe4suusxOA\n34DWIpIiIreKyFARGerZ5BtgHbAGeBe4G0BVdwNPAgs8PyM9y3xKRHh+QAzRDWvw4CeL+XN7uq9P\nacxpmTBhQv5fmQMHDsy/FfXDDz9w8803U6VKFQBq165Neno6mzdvpl+/foATAnnrT+Taa6/Nf/3H\nH3/QrVs32rVrx8cff8zy5csBmDVrFnfddRcAgYGB1KhRg6ZNmxIeHs6iRYuYPn067du3Jzw8/Khj\nz507l379+lG1alWqVatG//79+fnnn0/6e7jsssuoVKkSERER1K1bl+3btzNz5kwWLlxIx44diYuL\nY+bMmaxbt67YYwUGBjJgwID897Nnz6Zz5860a9eOWbNm5X/mwvr37w9Ahw4d2LBhQ5HbXHnllQQE\nBBAVFcX27dsB5zu4+uqrCQgIoH79+vlXOIXFxMRw/fXX89FHHxEU5PyNP336dJ577jni4uLo0aMH\nmZmZ/PXXX8V+xlPlsysLVR1UzHoF7jnOujHAGF/UdSKhwYGMvqkDl7/2C7eNT+SLe7pSs0pIaZdh\nypjirgB8Yffu3cyaNYtly5YhIuTk5CAivPjiiyd1nKCgIHJzc/PfF+6HX7Vq1fzXQ4YMYerUqcTG\nxjJu3DjmzJlzwmPfdtttjBs3jm3bthX517K3VKpUKf91YGAg2dnZqCqDBw/m2WefPaljhYaGEhgY\nCDjfxd13301iYiKNGzfm8ccfP+5zCnk15J2/uDpPtm3066+/5qeffmLatGk8+eSTLF++HFXls88+\no3Xr1kdtO2/evJM6dkmV6QZuX2hQozLv3BjPlrSD3DdhEdk5ucXvZEwpmzx5MjfeeCMbN25kw4YN\nbNq0iWbNmvHzzz9z4YUXMnbs2Pw2hd27dxMWFkZkZCRTp04F4NChQxw4cIAmTZqQnJzMoUOHSEtL\nY+bMmcc9Z3p6Og0aNCArK+uohudevXrx1ltvAU6j8N69ewHo168f3333HQsWLODiiy8+5njdunVj\n6tSpHDhwgP379/P555/TrVu3E37usLAw0tOLv+rv1asXkydPZseOHfnfwcaNx47EfaLj5QVDREQE\nGRkZRbYlnK6uXbvy2WefkZuby/bt24sM4LzbhT179uSFF14gLS2NjIwMLr74Yl577bX84Fm0aFGx\nn+l0WFgUoUOT2jx1ZTQ//7mTZ78tX10STfkwYcKE/FtKeQYMGMCECRPo3bs3ffv2JSEhgbi4uPyu\npR9++CGjRo0iJiaGc845h23bttG4cWOuueYaYmJiuPHGG2nfvv1xz/nkk0/SuXNnLrzwQtq0aZO/\n/NVXX2X27Nm0a9eODh06kJycDDhtDD179uSaa67J/2u9oPj4eIYMGUKnTp3o3Lkzt9122wnPD9Cz\nZ0+Sk5OLbbyNioriqaee4qKLLiImJoYLL7yQrVu3HrPdHXfcQe/evYu8/VOzZk1uv/122rVrx5VX\nXknHjh1PWNupGDBgAJGRkURHRzN06FA6d+5MjRo1jtomJyeHG264gXbt2tG+fXv+9re/UbNmTR59\n9FGysrKIiYnhrLPO4tFHHwVK/h2dLCkvXUUTEhLU25MfPT5tOeN+3cBLV8dyVYdIrx7blG0rVqyg\nbdu2bpfh13Jzc4mPj2fSpEm0bNnS7XL8VkZGBtWqVWPXrl106tSJX375hfr16/vkXEX9dysiC1U1\nobh9bSDBE3j4sras3p7O/01ZRvM6VYk/w0YdMaYkkpOT6dOnD/369bOgKEafPn1IS0vj8OHDPPro\noz4LitNlYXECwYEBvHFdPH3fmMvQDxfy5X3nUq96qNtlGeP3oqKiStT7yFBsRwF/YW0WxahVNYR3\nb0og41A2d3y4kMys0n2S1Rhj/IGFRQm0qV+d/14Tx5JNafzflGU2JIgxpsKxsCih3tH1+dsFrZiy\naDPvz13vdjnGGFOqLCxOwn3nn8kl0fV55psV/Lj61Ea5NcaYssjC4iQEBAgvXR1Lq3ph3Pe/JNbv\n3O92SaaCsyHK3RmiHJzvPu+ZktOxYcMG/ve//532cXzNwuIkVa0UxLs3JRAYINz2wQL2ZWa5XZKp\nwGyI8tNjYVFyFhanoHHtKrx5fQc27jrAgxMXk5NrDd6m9NkQ5d4fonz69Ol06dKF+Ph4rr76ajIy\nMgAYPnx4/hDhw4YN49dff2XatGk89NBDxMXFsXbt0VMbTJo0iejoaGJjYznvvPMAJ3AfeughOnbs\nSExMDO+8807+sX/++Wfi4uKO+rx+R1XLxU+HDh20tI3/db02+ddX+vy3K0r93MZdycnJR9588y/V\nMZd69+ebfxVbw0cffaS33HKLqqp26dJFExMTnXK++Ua7dOmi+/fvV1XVXbt2qapqp06ddMqUKaqq\nevDgQd2/f7/Onj1bL7vssvxj3nPPPTp27FhVVW3SpIk+//zz+et27tyZ//rhhx/WUaNGqarqNddc\noy+//LKqqmZnZ2taWpquX79e27dvr6qqOTk52rx586P2V1VNTEzU6OhozcjI0PT0dI2KitKkpKT8\nc6emph7zmceOHav33HNP/vvHHntMu3TpopmZmZqamqq1a9fWw4cPa3Jysvbp00cPHz6sqqp33XWX\nfvDBB8ccr+B5UlNTtVu3bpqRkaGqqs8995w+8cQTunPnTm3VqpXm5uaqquqePXtUVXXw4ME6adKk\n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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Resplit the data, with a different randomization (inspired by Muller & Guido ML book - https://www.amazon.com/dp/1449369413/)\n", "X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=66)\n", "\n", "# Create two lists for training and test accuracies\n", "training_accuracy = []\n", "test_accuracy = []\n", "\n", "# Define a range of 1 to 10 (included) neighbors to be tested\n", "neighbors_settings = range(1,11)\n", "\n", "# Loop with the KNN through the different number of neighbors to determine the most appropriate (best)\n", "for n_neighbors in neighbors_settings:\n", " clf = KNeighborsClassifier(n_neighbors=n_neighbors)\n", " clf.fit(X_train, y_train)\n", " training_accuracy.append(clf.score(X_train, y_train))\n", " test_accuracy.append(clf.score(X_test, y_test))\n", "\n", "# Visualize results - to help with deciding which n_neigbors yields the best results (n_neighbors=6, in this case)\n", "plt.plot(neighbors_settings, training_accuracy, label='Accuracy of the training set')\n", "plt.plot(neighbors_settings, test_accuracy, label='Accuracy of the test set')\n", "plt.ylabel('Accuracy')\n", "plt.xlabel('Number of Neighbors')\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "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.5.0" } }, "nbformat": 4, "nbformat_minor": 2 }