{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "path_data = '../../../../data/'\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import math\n", "import scipy.stats as stats\n", "\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "plt.style.use('fivethirtyeight')\n", "\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "def standard_units(x):\n", " return (x - np.mean(x))/np.std(x)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def distance(point1, point2):\n", " \"\"\"The distance between two arrays of numbers.\"\"\"\n", " return np.sqrt(np.sum((point1 - point2)**2))\n", "\n", "def all_distances(training, point):\n", " \"\"\"The distance between p (an array of numbers) and the numbers in row i of attribute_table.\"\"\"\n", " attributes = training.drop(columns=['Class'])\n", " def distance_from_point(row):\n", " return distance(point, np.array(row))\n", " return attributes.apply(distance_from_point, axis=1)\n", "\n", "def table_with_distances(training, point):\n", " \"\"\"A copy of the training table with the distance from each row to array p.\"\"\"\n", " training1 = training.copy()\n", " training1['Distance'] = all_distances(training1, point)\n", " return training1\n", "\n", "def closest(training, point, k):\n", " \"\"\"A table containing the k closest rows in the training table to array p.\"\"\"\n", " with_dists = table_with_distances(training, point)\n", " sorted_by_distance = with_dists.sort_values(by=['Distance'])\n", " topk = sorted_by_distance.take(np.arange(k))\n", " return topk" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def classify_grid(training, test, k):\n", " ckd_new1 = pd.DataFrame(columns=['Hemoglobin', 'Glucose', 'Class', 'Distance'])\n", " empty = np.array([])\n", " for i in range(len(test)):\n", " ckd_new2 = closest(training, np.array([test.iloc[i]]), k)\n", " ones = len(ckd_new2[ckd_new2['Class'] == '1'])\n", " zeros = len(ckd_new2[ckd_new2['Class'] == '0'])\n", " if ones > zeros:\n", " empty = np.append(empty, 1)\n", " else:\n", " empty = np.append(empty, 0)\n", " \n", " return empty" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HemoglobinGlucoseWhite Blood Cell CountClassColor
0-0.865744-0.221549-0.5697681darkblue
1-1.457446-0.9475971.1626841darkblue
2-1.0049683.841231-1.2755821darkblue
3-2.8148790.3963640.8097771darkblue
4-2.0839540.6435290.2322931darkblue
..................
1530.7005260.133751-0.5697680gold
1540.978974-0.870358-0.2168610gold
1550.735332-0.484162-0.6018500gold
1560.178436-0.267893-0.4093560gold
1570.735332-0.005280-0.5376860gold
\n", "

158 rows × 5 columns

\n", "
" ], "text/plain": [ " Hemoglobin Glucose White Blood Cell Count Class Color\n", "0 -0.865744 -0.221549 -0.569768 1 darkblue\n", "1 -1.457446 -0.947597 1.162684 1 darkblue\n", "2 -1.004968 3.841231 -1.275582 1 darkblue\n", "3 -2.814879 0.396364 0.809777 1 darkblue\n", "4 -2.083954 0.643529 0.232293 1 darkblue\n", ".. ... ... ... ... ...\n", "153 0.700526 0.133751 -0.569768 0 gold\n", "154 0.978974 -0.870358 -0.216861 0 gold\n", "155 0.735332 -0.484162 -0.601850 0 gold\n", "156 0.178436 -0.267893 -0.409356 0 gold\n", "157 0.735332 -0.005280 -0.537686 0 gold\n", "\n", "[158 rows x 5 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# HIDDEN \n", "ckd = pd.read_csv(path_data + 'ckd.csv')\n", "ckd.rename(columns={'Blood Glucose Random':'Glucose'}, inplace=True)\n", "\n", "\n", "ckd_Standard_Unit = pd.DataFrame({'Hemoglobin':standard_units(ckd['Hemoglobin']), \n", " 'Glucose':standard_units(ckd['Glucose']), \n", " 'White Blood Cell Count':standard_units(ckd['White Blood Cell Count']), \n", " 'Class':ckd['Class'].astype(str)})\n", "\n", "color_table = pd.DataFrame(\n", " {'Class':np.array([1, 0]),\n", " 'Color':np.array(['darkblue', 'gold'])}, index=np.array([1,0]))\n", " \n", "color_table['Class'] = color_table['Class'].astype(str)\n", "\n", "ckd_combined = pd.merge(ckd_Standard_Unit, color_table, on='Class')\n", "\n", "ckd_combined" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training and Testing ###\n", "How good is our nearest neighbor classifier? To answer this we'll need to find out how frequently our classifications are correct. If a patient has chronic kidney disease, how likely is our classifier to pick that up?\n", "\n", "If the patient is in our training set, we can find out immediately. We already know what class the patient is in. So we can just compare our prediction and the patient's true class.\n", "\n", "But the point of the classifier is to make predictions for *new* patients not in our training set. We don't know what class these patients are in but we can make a prediction based on our classifier. How to find out whether the prediction is correct?\n", "\n", "One way is to wait for further medical tests on the patient and then check whether or not our prediction agrees with the test results. With that approach, by the time we can say how likely our prediction is to be accurate, it is no longer useful for helping the patient.\n", "\n", "Instead, we will try our classifier on some patients whose true classes are known. Then, we will compute the proportion of the time our classifier was correct. This proportion will serve as an estimate of the proportion of all new patients whose class our classifier will accurately predict. This is called *testing*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Overly Optimistic \"Testing\" ###\n", "The training set offers a very tempting set of patients on whom to test out our classifier, because we know the class of each patient in the training set.\n", "\n", "But let's be careful ... there will be pitfalls ahead if we take this path. An example will show us why.\n", "\n", "Suppose we use a 1-nearest neighbor classifier to predict whether a patient has chronic kidney disease, based on glucose and white blood cell count." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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0JOu5Eal8kFCQjTi41OQkZEPf392CSAiIiKqKSasVqZS+WDjxgFSh0FERERUa7AkgIiIiIhkjQkrEREREckaE1YiIiIikjUmrEREREQka0xYiYiIiEjWmLASERERkawxYSUiIiIiWWPCSkRERESyxoSViIiIiGSNCSsRERERyRoTViIiIiKSNSasRERERCRrTFiJiIiISNaYsBIRERGRrDFhJSIiIiJZY8JKRERERLLGhJWIiIiIZI0JKxERERHJGhNWIiIiIpI1JqxEREREJGtMWImIiIhI1piwEhEREZGsMWElIiIiIlljwkpEREREssaElYiIiIhkjQkrEREREckaE1YiIiIikjUmrEREREQka0xYiYiIiEjWmLASERERkawxYSUiIiIiWWPCSkRERESy5jAJ68aNG9GzZ08EBwcjODgYTz75JA4ePCh1WERERERkYw6TsDZr1gyLFy/GsWPHcOTIEfTp0wdxcXH49ddfpQ6NiIiIiGzIReoAzDVo0CC9nxcsWIBPPvkEZ86cQfv27SWKioiIiIhszWES1opKS0uRkJCAvLw8PProo1KHQ0REREQ2pMjOzhakDsJcv/32GwYOHIjCwkJ4eXlh48aNiIqKMnh8amqqHaMjIiKyjYiICKlDIJKUQyWsxcXFuH79Ou7du4fExERs3boV+/btQ9u2baUOzapSU1Nr7X+c+GyOic/mmPhsjqk2PxtRdTlUSYCbmxuaN28OAOjcuTPOnj2LdevWYe3atRJHRkRERES24jBdAsRotVoUFxdLHQYRERER2VC1R1hLS0tx7949+Pj4wMXF9gO1ixYtwsCBAxEYGIjc3Fzs2rULx48fx44dO2x+byIiIiKSjsUjrGfPnkVsbCyaNWuGiIgInDhxAgCQlZWF0aNH49ixY1YPEgBu3ryJKVOmoGvXrhg6dCjOnj2LXbt24cknn7TJ/YiIiIhIHiwaGv3hhx8wZMgQNG3aFM888ww+++wz3T5fX1/k5ubi888/R9++fa0e6EcffWT1axIRERGR/Fk0wvr2228jPDwcp0+fxltvvVVlf+/evZGSkmK14IiIiIiILEpYz549i/Hjx8PDwwMKhaLK/sDAQNy8edNqwRERERERWZSwOjk5wcnJ8Ck3b95EvXr1ahwUEREREVE5ixLWTp064ZtvvhHdV1xcjJ07d3KpVCIiIiKy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fyErK0t3XHp6Onbu3Ilu3brpEq6BAwfi/PnzOHnypO64/Px8bNmyxay4hwwZgvbt2+O9996r0h8XAIqKijB//nwAZT12+/Tpgy1btuD69etVjrVGOYClMVnyWTVv3hwA9NpXlZSU4NNPP612rIb+rBER1XYcYaVawdnZGZGRkTh69CicnJwQGRmpt79bt2548803AUB0wlVNlLfHevvttzFixAi4ubmhT58+8PPzw5o1a/DCCy+gV69eGDVqFJo2bYobN24gKSkJXl5eosvGVnb58mV8+eWXAMpaXKWkpGD79u1o3ry50Znivr6+mDt3LhYvXoyhQ4di8ODBuHHjBjZs2ICQkBDMnDlTd+w777yD2NhYPPHEE3j++echCAI++eQTPHjwAG+//bbuuFdeeQU7duzAM888gylTpqBRo0b417/+pUukTHFxccEXX3yB2NhYxMTEYMiQIejZsyfc3d1x6dIl7N69G7du3cI777wDAHjvvfcQFRWFxx57DM8//zzCw8ORlZWF8+fP4/Dhw7h27ZpZ97VmTOZ+VgMGDEBISAj++te/IjU1FR4eHti1a1eNlgP29vZGREQEdu/ejRYtWqBRo0ZQqVRV/rwTEdU2TFip1ujRoweOHj2KNm3aVHnlX3FU1dojrF27doVarcaWLVswY8YMaLVa7N27F35+foiNjUVAQADee+89rFu3DgUFBbo16svbF5ny/fff4/vvvwdQlpj7+/vj2Wef1bVXMubVV1+Fr68vPv74YyxYsADe3t4YOnQoFi5cqPea+rHHHsOePXvw7rvvYsWKFVAoFIiMjMSnn36q62ULAE2aNMH+/fsxZ84crF27FvXr18eYMWMwYMAAXT9aU0JDQ/H9999j/fr1SExMxLfffouSkhIEBwdj0KBBeo3wW7RogaNHj2LFihXYuXMnbt++DV9fX7Rq1UovOawpS2Iy97NycXHBtm3bMHv2bCxbtgyNGjXC+PHj0atXL72SFUt9+OGHmDdvHtRqNYqKijB27FgmrERU6ymys7Or/+s+EREREZGNsYaViIiIiGSNCSsRERERyRoTViIiIiKSNSasRERERCRrTFiJiIiISNaYsBIRERGRrDFhJSIiIiJZY8JKRERERLLGhJWIiIiIZO3/Af6pYak+LHrWAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "glucose_color_darkblue = ckd_combined[ckd_combined['Color'] == 'darkblue']\n", "glucose_color_gold = ckd_combined[ckd_combined['Color'] == 'gold']\n", "\n", "fig, ax = plt.subplots(figsize=(7,6))\n", "\n", "ax.scatter(glucose_color_darkblue['White Blood Cell Count'], \n", " glucose_color_darkblue['Glucose'], \n", " label='Color=darkblue', \n", " color='darkblue')\n", "\n", "ax.scatter(glucose_color_gold['White Blood Cell Count'], \n", " glucose_color_gold['Glucose'], \n", " label='Color=gold', \n", " color='gold')\n", "\n", "x_label = 'White Blood Cell Count'\n", "\n", "y_label = 'Glucose'\n", "\n", "y_vals = ax.get_yticks()\n", "\n", "plt.ylabel(y_label)\n", "\n", "ax.legend(bbox_to_anchor=(1.04,1), loc=\"upper left\")\n", "\n", "plt.xlabel(x_label)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Earlier, we said that we expect to get some classifications wrong, because there's some intermingling of blue and gold points in the lower-left.\n", "\n", "But what about the points in the training set, that is, the points already on the scatter? Will we ever mis-classify them?\n", "\n", "The answer is no. Remember that 1-nearest neighbor classification looks for the point *in the training set* that is nearest to the point being classified. Well, if the point being classified is already in the training set, then its nearest neighbor in the training set is itself! And therefore it will be classified as its own color, which will be correct because each point in the training set is already correctly colored.\n", "\n", "In other words, **if we use our training set to \"test\" our 1-nearest neighbor classifier, the classifier will pass the test 100% of the time.**\n", "\n", "Mission accomplished. What a great classifier! \n", "\n", "No, not so much. A new point in the lower-left might easily be mis-classified, as we noted earlier. \"100% accuracy\" was a nice dream while it lasted.\n", "\n", "The lesson of this example is *not* to use the training set to test a classifier that is based on it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generating a Test Set ###\n", "In earlier chapters, we saw that random sampling could be used to estimate the proportion of individuals in a population that met some criterion. Unfortunately, we have just seen that the training set is not like a random sample from the population of all patients, in one important respect: Our classifier guesses correctly for a higher proportion of individuals in the training set than it does for individuals in the population.\n", "\n", "When we computed confidence intervals for numerical parameters, we wanted to have many new random samples from a population, but we only had access to a single sample. We solved that problem by taking bootstrap resamples from our sample.\n", "\n", "We will use an analogous idea to test our classifier. We will *create two samples out of the original training set*, use one of the samples as our training set, and *the other one for testing*. \n", "\n", "So we will have three groups of individuals:\n", "- a training set on which we can do any amount of exploration to build our classifier;\n", "- a separate testing set on which to try out our classifier and see what fraction of times it classifies correctly;\n", "- the underlying population of individuals for whom we don't know the true classes; the hope is that our classifier will succeed about as well for these individuals as it did for our testing set." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How to generate the training and testing sets? You've guessed it – we'll select at random.\n", "\n", "There are 158 individuals in `ckd`. Let's use a random half of them for training and the other half for testing. To do this, we'll shuffle all the rows, take the first 79 as the training set, and the remaining 79 for testing." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "shuffled_ckd = ckd_combined.sample(len(ckd_combined), replace=False)\n", "\n", "shuffled_ckd\n", "\n", "training = shuffled_ckd.take(np.arange(79))\n", "\n", "testing = shuffled_ckd.take(np.arange(79, 158))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's construct our classifier based on the points in the training sample:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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jRw5UjfccIP+/ve/W9z69KabbjL93cPDQ926ddPhw4cr/AzX+v7777V3716Lqy6kpKQQWAEAgOOkpeVabE9Pt9xuC+Hh4TIYDPr5559LPcdoNJa6k1JZOyxZOnZtm6+vb4lzylseq2fPntq4cWOZ51xt+vTpOn36tF544QU1b95ctWvX1rBhw0pMrLJUiyRFRUXp448/1k8//aTOnTtX+L6WeHhcGU169S8KBQUFZucUFRVp4MCBio2NLfH6q4ciWIPACgAAbCIoqK7F9iZNLLfbQv369XXbbbdp1apVmjp1aolxrJmZmWrbtq1+++03paammnpZjx8/rrS0NLVt29biddu0aaPExESz3s99+/aVev7VrBkS0KZNGyUlJZndJykpyez8xMREvfjii4qKipJ0ZQkvayYwzZ07V/Xr11d0dLQ++eQT3XDDDWbHk5KSTMMOjEajDhw4oOHDh1u81vXXXy/pyjjV4r//8MMPZud07txZH3/8sUJCQlSrVq0K11kWAisAALCJmJhIJSWdMRsW0KKFv2JiIu1632XLlikqKkq33nqr5s6dqw4dOshoNCohIUGvvPKKfvjhB3Xs2FFTpkzR4sWLZTQa9eSTT6pz587q27evxWs++uijeuCBB9SlSxcNGDBAX3zxhTZs2KC///3v5dZjzZCAadOmadq0abrxxhvVu3dvffLJJ/r2228VEBBgOic8PFzr169XZGSkcnNz9cwzz1i9fNa8efNkNBpNofXqjQnWrFmjVq1aqX379lq9erVOnDihBx98sNRnCw4O1osvvqhnn31W//vf/7R06VKzcyZNmqS1a9dq4sSJeuyxx3T99dfr+PHjpglm9erVs6p2iVUCAACAjYSG+isubpBGjw5Xnz5BGj063K4TroqFhYWZJk/Nnz9ft9xyi4YNG6atW7fqlVdekcFg0Lp169SwYUMNGTJEQ4cOVaNGjbRu3bpShwQMGTJES5Ys0YoVK9S9e3e9+eabeumll8wmXNnCyJEj9dRTT+m5555T37599Z///EcPP/yw2TnLly9XTk6O+vfvrwcffFATJkxQ8+bNrb7XM888o/vvv1/Dhw836xWdP3++Xn/9dfXu3Vv//ve/9f7775c6rKFWrVp6++23dfz4cfXu3VuLFi3SM888Y3ZOUFCQtm3bJg8PD911113q0aOHZs6cKW9vb9WuXdvquiXJkJmZWf5oZTiN5ORkRUREOLoMu+DZXJO7Ppu7PpfEs8GyCxcu6LrrrnN0GajByvoZpIcVAAAATo3ACgAAAKdGYAUAAIBTI7ACAADAqRFYAQAA4NQIrAAAAHBqBFYAAAA4NQIrAAAAnBqBFQAAAE6NwAoAAGq8devWlbodqSsICAjQJ598UurxjIwMBQQEKCEhoRqrsh0CKwAAcHmnT5/W7Nmz1aVLFzVq1Ejt2rXTqFGjtH37dkeXBhvwcnQBAAAAVZGamqo77rhDfn5+mj9/vjp27KiioiLt3r1bjz/+uH788cdqqSM/P1/e3t7Vcq+ahh5WAADg0mbOnCmj0aidO3dqxIgRioiIUJs2bTRlyhTt2bNHknTixAmNHz9ewcHBCg4O1oQJE/Trr7+Wed133nlHXbt2VWBgoLp27aq1a9eaHQ8ICNCqVas0YcIENW3aVAsXLqxU/S+//LIiIiLUrFkzTZ06VS+++KI6depkOl5UVKQlS5aoQ4cOatSokXr16qVPP/20zGseOHBA/fr1U+PGjdWnTx8lJSVVqjZnQWAFAAA2YyhIVZ3zk+V7dojqnJ8sQ0GqXe93/vx5ffHFF5o8ebL8/PxKHA8ICJDRaNT48eN15swZxcfHa/PmzUpPT9f48eNlNBotXnfz5s2aNWuWpk+frn379mnatGl64okntHXrVrPzFi9erIEDB2rv3r2aNGmSJKlZs2Zl/hk1apTp9R999JEWL16sefPmaffu3WrTpo1WrFhhdo833nhDr732mp599lnt3btXgwcP1r333qtDhw5ZrD0nJ0djxoxRWFiYdu7cqWeffVbz5s2z6n11NgwJAAAANmEoSJXvuWh5FqZcafhd8vw9STkN4mT0CrXLPY8dOyaj0ajWrVuXes6uXbv0448/6uDBgwoNvVLH6tWr1bVrV+3evVv9+/cv8Zrly5dr7NixmjJliiSpVatW+u677/Tqq69q0KBBpvNGjBih++67z+y15U1s8vHxMf39zTff1D333GO6xuOPP66EhAQdPXrUrJZHHnlEo0ePliTNnTtXe/fu1fLly/XWW2+VuP6GDRuUn5+v119/XX5+fmrfvr2eeOIJTZ06tcy6nJnL9LAuWrRIAQEBZn/K+uEEAADVy+di7B9h9f94FqbI52Ks3e5ZWg/p1Y4cOaKgoCBTWJWksLAwBQUF6fDhw6W+pnv37mZtPXv2LHF+165dS7y2ZcuWZf5p2rSp6dyff/5ZN954o9nru3XrZvp7VlaW0tLS1KNHj3Jrubr2Dh06mPU433zzzRbPdRUu1cMaERGhLVu2mL729PR0YDUAAOBqHoVppbSn2+2e4eHhMhgM+vnnn0s9x2g0ymAwWDxWWntpx65t8/X1LXFOectj9ezZUxs3bqxQDWUp7XUVCfGuxqUCq5eXlxo3buzoMgAAgAVFnkHS75bam9jtnvXr19dtt92mVatWaerUqSXGsWZmZqpt27b67bfflJqaauplPX78uNLS0tS2bVuL123Tpo0SExN17733mtr27dtX6vlXs2ZIQOvWrXXgwAFNmDDB1HbgwAHT3/39/RUUFKTExET169fPrJY2bdpYvH7btm31j3/8Qzk5OaZAvX///nLrdmYuFViPHz+udu3aqVatWoqMjNQzzzyjsLAwR5cFAAAk5dWLkefvSWbDAgo9WyivXoxd77ts2TJFRUXp1ltv1dy5c9WhQwcZjUYlJCTolVde0Q8//KCOHTtqypQpWrx4sYxGo5588kl17txZffv2tXjNRx99VA888IC6dOmiAQMG6IsvvtCGDRv097//vdx6WrZsWeHap02bphkzZqhr167q1auXtmzZoqSkJAUEBJjVsmjRIoWHh6tLly768MMPtW/fPu3atcviNUeNGqXnnntOjzzyiJ588kmlp6frpZdeqnBNzshlAmtkZKRWrFihiIgInT17VkuXLtXAgQOVmJioBg0aWHxNcnJyNVdZPdz1uSSezVW567O563NJPJuriYiIcHQJFWL0ClVOgzj5XIyVR2G6ijybKK9ejN0mXBULCwvT7t279dJLL2n+/PlKS0tTgwYN1LFjR73yyisyGAxat26dZs+erSFDhkiS+vXrpyVLlpT6sfqQIUO0ZMkSvfbaa5ozZ45CQkL00ksvmU24soW77rpLx48f14IFC3Tp0iUNGTJEDz74oD777DPTOdOmTVN2drbmz5+v06dPKyIiQu+9955uuOEGi9f08/PThx9+qMcff1z9+vVTRESEnn32WY0bN86mtVcnQ2ZmpksOdMjOzlaXLl302GOP6ZFHHnF0OdUmOTnZZf7DZS2ezTW567O563NJPBssu3Dhgq677jpHlwFJ48ePV0FBgT788ENHl1KtyvoZdJke1mv5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ERFasGCBioqKJF352WvTpo0kafHixaaftenTp1f1LQAAp0dghcvr0aOHioqK9M0335jaEhMT1b17d910002SVOKYj4+Punbtanad1NRU3X333erevbuef/55hYWF6emnn9aOHTtKvffQoUM1cuRISdILL7yglStXauXKlaZgsXHjRt11113y9PTU3LlzNXfuXJ07d07Dhg2zGAYtycvLU0ZGhjIyMnTixAl9/PHHeu+99zRkyBDVq1evzNe+8sor+vOf/6yAgAAtXLhQ48aN0yeffKKoqCizEP/VV19p+PDhOnHihGbOnKm//vWvOnr0qAYPHmxW55kzZzR48GDt379fM2bM0GOPPabdu3frmWeeqdCzbN26VZJ09913V+j8I0eO6LbbbtP333+vGTNmaNGiRQoJCdEjjzxS4peJyrK2poq+V9bKysrS8OHD1aJFC8XGxuqmm27SK6+8ovfee0+SdP3112vp0qWSpCFDhph+1iZOnFjpewKAq2BIAFxecU9pYmKiBg4cKEn6+uuv9de//lX+/v5q27ZtiWNdu3ZV7dq1za5z9OhRxcXFqX///pKkCRMmqGPHjlq7dq0GDBhg8d4dO3ZUp06dtGnTJg0ePFihoaGmYzk5OZo5c6bGjh2rN954w9Q+ceJE9ejRQwsXLlR8fHy5z/ePf/xD//jHP8zaBg4cqLfeeqvM12VkZOjFF19U7969FRcXZ+qN7dGjh8aPH6/ly5crJiZGkjR37lz5+vrqiy++0PXXXy9JGjdunG6++WbFxMTo888/lyT9v//3/3T69Gl99tln6tWrlyTpgQcesNgzacmRI0fk7++vkJCQCp3/1FNPqXHjxtq5c6fq1q0rSXrooYc0ceJELVq0SPfff798fX0rdC1b1VTR98pap06d0t/+9jfdd999kqQHH3xQvXv31tq1a/XAAw/I19dXw4YN06xZs9ShQwezYSIA4O7oYYXLCw8PV+PGjU1jVX/55RedPn3aNEa1R48eJY4Vh61rr1McViWpdu3aioyM1PHjxytV186dO5WZmakxY8aYekgzMjJ06dIl9e/fX/v27avQR+lRUVGKi4tTXFycPvjgAz3xxBNKSEjQlClTylzlYNeuXbp8+bIefvhhs6EDgwcPVkREhLZt2ybpSlD67rvvNG7cOFMAk6SmTZtq1KhR+vrrr029sdu2bVPnzp3N3r+6devqgQceqNB7cvHixXJ7hYtlZmZq165dio6O1qVLl8zew9tvv10XL17UwYMHK3QtW9VkzXtlLR8fH9PkumK33HJLpX/+AMCd0MMKt9C9e3dt375d+fn5SkxMVN26ddWpUyfTsQ8++MB0TJLFCVeWetgCAgL0008/Vaqm4qWQRowYUeo5Fy5cMAs+ljRt2tQsSN95551q0KCB5s6dq88//1yDBg2y+Lr//e9/kqTWrVuXONa6dWvt2bOn3PPatGkjo9GoEydOKCAgQCdOnNDQoUNLnNeqVasyn6FYvXr1KhzAfvnlFxmNRi1evNg0M/5aZ8+erdC1bFWTNe+VtZo2bSpPT0+ztoCAAJ0/f97qawGAuyGwwi306NFD8fHxOnjwoBITE9WtWzdTr2L37t2Vl5dnOubh4aGbb765xDWuDQvFKrtWa/FkmRUrVqhp06YWz/H396/Utfv27StJ2rt3b6mBtSwVfSZL51laCqyi12vTpo0OHTqkkydPKjg4uMxzi9+/hx9+2DSc41rt27ev0H1tVVNZrn0PSlsyrfi5rlXazx8AgMAKN1H8EXViYqISExMVHR1tOhYWFqYmTZqYjnXo0EHXXXedze5dWjBp0aKFpCuTZa7uIbWFgoICSVfGyZamefPmkqSff/65RA9ocnKy6fjV510rOTlZBoPB1PscEhJi8byKLqw/aNAgbdiwQf/85z81c+bMMs8NCwuTdGUlBFu/f5WtyZr3qriXNTMz06zHtSo7b1m7bjAAuAvGsMItdOrUSX5+fvr000+VnJxc4iP/7t27l3qsqoonA107dvG2227Tddddp2XLluny5cslXleVj7O3b98u6cqkr9L0799ftWvX1ptvvqnCwkJT+9atW5WcnKyoqChJV5bI6tKli/75z38qIyPDdF5aWpo2bNig7t27mwLXwIED9f3332vv3r2m83Jzc/Xuu+9WqO5hw4apY8eOevnll0usjytJly9f1ty5cyVdWWO3b9++evfdd3Xy5MkS59piOIC1NVnzXrVs2VKSzJavKigo0DvvvFPpWkv7WQMAd0cPK9yCp6enIiMjtWvXLnl4eCgyMtLsePfu3fX0009LksUJV1VRvDzWc889p7vuukve3t7q27evAgMD9eqrr+qhhx5S7969NXr0aDVu3Fi//vqrEhIS5Ovra3Hb2Gv98ssv+vDDDyVdWeIqKSlJH3zwgVq2bFnmTPGGDRvqqaee0oIFCzR8+HANHTpUv/76q9566y01b95cjzzyiOnc559/XtHR0br99tt1//33y2g06u2339bvv/+u5557znTeY489pvXr1+vuu+/WlClT1KBBA/3zn/80BanyeHl56f3331d0dLSGDBmiYcOGqVevXqpdu7aOHj2qTZs26fTp03r++eclSS+//LKioqJ0yy236P7771d4eLgyMjL0/fffa8eOHTpx4kSF7mvLmir6Xg0YMEDNmzfXn//8ZyUnJ8vHx0cbN26s0nbAfn5+ioiI0KZNm9SqVSs1aNBAoaGhJX7eAcDdEFjhNnr27Kldu3apXbt2JT7yv7pX1dY9rDfddJNiYmL07rvvasaMGSoqKtLmzZsVGBio6OhoBQUF6eWXX9aKFSt06dIl0x71xcsXlefLL7/Ul19+KelKMG/SpInuvfde0/JKZfnrX/+qhg0b6s0339S8efPk5+en4cOHa/78+WYfU99yyy365JNP9MILL2jJkiUyGAyKjIzUO++8Y1rLVpIaNWqkTz/9VLNnz9by5ctVr149jR07VgMGDDCtR1uesLAwffnll1q5cqXi4+O1fft2FRQUKCQkRIMHDzZbCL9Vq1batWuXlixZog0bNujs2bNq2LCh2rRpYxYOq8qamir6Xnl5eWndunWaNWuWXnzxRTVo0EATJkxQ7969zYasWOv111/XnDlzFBMTo8uXL2vcuHEEVgBuz5CZmVn5X/cBAAAAO2MMKwAAAJwagRUAAABOjcAKAAAAp0ZgBQAAgFMjsAIAAMCpEVgBAADg1AisAAAAcGoEVgAAADg1AisAAACcGoEVAAAATu3/A7tUOKwFGE5XAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "training_darkblue = training[training['Color'] == 'darkblue']\n", "training_gold = training[training['Color'] == 'gold']\n", "\n", "fig, ax = plt.subplots(figsize=(7,6))\n", "\n", "ax.scatter(training_darkblue['White Blood Cell Count'], \n", " training_darkblue['Glucose'], \n", " label='Color=darkblue', \n", " color='darkblue')\n", "\n", "ax.scatter(training_gold['White Blood Cell Count'], \n", " training_gold['Glucose'], \n", " label='Color=gold', \n", " color='gold')\n", "\n", "x_label = 'White Blood Cell Count'\n", "\n", "y_label = 'Glucose'\n", "\n", "y_vals = ax.get_yticks()\n", "\n", "plt.ylabel(y_label)\n", "\n", "ax.legend(bbox_to_anchor=(1.04,1), loc=\"upper left\")\n", "\n", "plt.xlabel(x_label)\n", "\n", "plt.xlim(-2, 6)\n", "plt.ylim(-2, 6);\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We get the following classification regions and decision boundary:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "x_array = np.array([])\n", "y_array = np.array([])\n", "for x in np.arange(-2, 6.1, 0.25):\n", " for y in np.arange(-2, 6.1, 0.25):\n", " x_array = np.append(x_array, x)\n", " y_array = np.append(y_array, y)\n", " \n", "test_grid = pd.DataFrame(\n", " {'Glucose':x_array,\n", " 'White Blood Cell Count':y_array}\n", ")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1089" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(test_grid)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "data": { "text/plain": [ "array([0., 0., 0., 0., 0.])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c_training = classify_grid(training.drop(columns=['Hemoglobin', 'Color']), test_grid, 1)\n", "c_training[0:5]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1089" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(c_training)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GlucoseWhite Blood Cell CountClass
0-2.0-2.000
1-2.0-1.750
2-2.0-1.500
3-2.0-1.250
4-2.0-1.000
\n", "
" ], "text/plain": [ " Glucose White Blood Cell Count Class\n", "0 -2.0 -2.00 0\n", "1 -2.0 -1.75 0\n", "2 -2.0 -1.50 0\n", "3 -2.0 -1.25 0\n", "4 -2.0 -1.00 0" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_grid['Class'] = c_training.astype(int)\n", "test_grid['Class'] = test_grid['Class'].astype(str)\n", "test_grid.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Join" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GlucoseWhite Blood Cell CountClassColor
0-2.0-2.000gold
1-2.0-1.750gold
2-2.0-1.500gold
3-2.0-1.250gold
4-2.0-1.000gold
...............
10846.05.001darkblue
10856.05.251darkblue
10866.05.501darkblue
10876.05.751darkblue
10886.06.001darkblue
\n", "

1089 rows × 4 columns

\n", "
" ], "text/plain": [ " Glucose White Blood Cell Count Class Color\n", "0 -2.0 -2.00 0 gold\n", "1 -2.0 -1.75 0 gold\n", "2 -2.0 -1.50 0 gold\n", "3 -2.0 -1.25 0 gold\n", "4 -2.0 -1.00 0 gold\n", "... ... ... ... ...\n", "1084 6.0 5.00 1 darkblue\n", "1085 6.0 5.25 1 darkblue\n", "1086 6.0 5.50 1 darkblue\n", "1087 6.0 5.75 1 darkblue\n", "1088 6.0 6.00 1 darkblue\n", "\n", "[1089 rows x 4 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "color_table = pd.DataFrame(\n", " {'Class':np.array([1, 0]),\n", " 'Color':np.array(['darkblue', 'gold'])}, index=np.array([1,0]))\n", " \n", "color_table['Class'] = color_table['Class'].astype(str)\n", "\n", "test_grid_combined = pd.merge(test_grid, color_table, on='Class')\n", "\n", "test_grid_combined" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "training_darkblue = test_grid_combined[test_grid_combined['Color'] == 'darkblue']\n", "training_gold = test_grid_combined[test_grid_combined['Color'] == 'gold']\n", "\n", "fig, ax = plt.subplots(figsize=(7,6))\n", "\n", "ax.scatter(training_darkblue['White Blood Cell Count'], \n", " training_darkblue['Glucose'], \n", " label='Color=darkblue', \n", " alpha=0.4, \n", " color='darkblue', \n", " s=30)\n", "\n", "ax.scatter(training_gold['White Blood Cell Count'], \n", " training_gold['Glucose'], \n", " label='Color=gold', \n", " alpha=0.4, \n", " s=30, \n", " color='gold')\n", "\n", "x_label = 'White Blood Cell Count'\n", "\n", "y_label = 'Glucose'\n", "\n", "y_vals = ax.get_yticks()\n", "\n", "plt.ylabel(y_label)\n", "\n", "ax.legend(bbox_to_anchor=(1.04,1), loc=\"upper left\")\n", "\n", "plt.xlabel(x_label)\n", "\n", "plt.xlim(-2, 6)\n", "plt.ylim(-2, 6);\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Place the *test* data on this graph and you can see at once that while the classifier got almost all the points right, there are some mistakes. For example, some blue points of the test set fall in the gold region of the classifier." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "training_darkblue = test_grid_combined[test_grid_combined['Color'] == 'darkblue']\n", "training_gold = test_grid_combined[test_grid_combined['Color'] == 'gold']\n", "\n", "testing_darkblue = testing[testing['Color'] == 'darkblue']\n", "testing_gold = testing[testing['Color'] == 'gold']\n", "\n", "fig, ax = plt.subplots(figsize=(7,6))\n", "\n", "ax.scatter(training_darkblue['White Blood Cell Count'], \n", " training_darkblue['Glucose'], \n", " alpha=0.4, \n", " color='darkblue', \n", " s=30)\n", "\n", "ax.scatter(training_gold['White Blood Cell Count'], \n", " training_gold['Glucose'], \n", " alpha=0.4, \n", " s=30, \n", " color='gold')\n", "\n", "ax.scatter(testing_darkblue['White Blood Cell Count'], \n", " testing_darkblue['Glucose'], \n", " color='darkblue', label='Color=darkblue', ec='darkblue', s=30)\n", "\n", "ax.scatter(testing_gold['White Blood Cell Count'], \n", " testing_gold['Glucose'], \n", " color='gold', label='Color=gold', ec='darkblue', s=30)\n", "\n", "x_label = 'White Blood Cell Count'\n", "\n", "y_label = 'Glucose'\n", "\n", "y_vals = ax.get_yticks()\n", "\n", "plt.ylabel(y_label)\n", "\n", "ax.legend(bbox_to_anchor=(1.04,1), loc=\"upper left\")\n", "\n", "plt.xlabel(x_label)\n", "\n", "plt.xlim(-2, 6)\n", "plt.ylim(-2, 6);\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some errors notwithstanding, it looks like the classifier does fairly well on the test set. Assuming that the original sample was drawn randomly from the underlying population, the hope is that the classifier will perform with similar accuracy on the overall population, since the test set was chosen randomly from the original sample." ] } ], "metadata": { "anaconda-cloud": {}, "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.6.12" } }, "nbformat": 4, "nbformat_minor": 1 }