{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "import matplotlib\n", "#matplotlib.use('Agg')\n", "path_data = '../../../../data/'\n", "\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "import numpy as np\n", "import pandas as pd\n", "import math\n", "import scipy.stats as stats\n", "plt.style.use('fivethirtyeight')\n", "\n", "import warnings\n", "warnings.simplefilter(action=\"ignore\", category=FutureWarning)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "\n", "def standard_units(x):\n", " return (x - np.mean(x))/np.std(x)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "remove_input" ] }, "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", "\n", " attributes = training.drop(columns=['Class'])\n", " #print(attributes)\n", " def distance_from_point(row):\n", " return distance(point, np.array(row))\n", " \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", " #training = training.copy()\n", " training['Distance'] = all_distances(training, point)\n", "\n", " return training\n", "\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", "\n", " sorted_by_distance = with_dists.sort_values(by=['Distance'])\n", "\n", " topk = sorted_by_distance.take(np.arange(k))\n", "\n", " return topk\n", "\n", "#----\n", "\n", "def majority(topkclasses):\n", " \"\"\"1 if the majority of the \"Class\" column is 1s, and 0 otherwise.\"\"\"\n", " #print(topkclasses)\n", " \n", " ones = len(topkclasses[topkclasses['Class'] == 1])\n", " zeros = len(topkclasses[topkclasses['Class'] == 0])\n", "\n", " if ones > zeros:\n", " return 1\n", " else:\n", " return 0\n", " \n", "#----\n", "# training = ckd_combined.drop(columns=['White Blood Cell Count', 'Color'])\n", "# p = test_grid\n", "# k = 1\n", "# function 'closest' working with funtion 'show_closest'\n", "\n", "def classify(training, p, k):\n", " \"\"\"Classify an example with attributes p using k-nearest neighbor classification with the given training table.\"\"\"\n", " closestk = closest(training, p, k) #returns topk which contains 'Class' column, single column\n", " #print('closestk', closestk)\n", "\n", " topkclasses = closestk['Class']\n", "\n", " return majority(closestk)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Nearest Neighbors ###\n", "In this section we'll develop the *nearest neighbor* method of classification. Just focus on the ideas for now and don't worry if some of the code is mysterious. Later in the chapter we'll see how to organize our ideas into code that performs the classification." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Chronic kidney disease\n", "\n", "Let's work through an example. We're going to work with a data set that was collected to help doctors diagnose chronic kidney disease (CKD). Each row in the data set represents a single patient who was treated in the past and whose diagnosis is known. For each patient, we have a bunch of measurements from a blood test. We'd like to find which measurements are most useful for diagnosing CKD, and develop a way to classify future patients as \"has CKD\" or \"doesn't have CKD\" based on their blood test results." ] }, { "cell_type": "code", "execution_count": 4, "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", " \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", " \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", "
AgeBlood PressureSpecific GravityAlbuminSugarRed Blood CellsPus CellPus Cell clumpsBacteriaGlucose...Packed Cell VolumeWhite Blood Cell CountRed Blood Cell CountHypertensionDiabetes MellitusCoronary Artery DiseaseAppetitePedal EdemaAnemiaClass
048701.00540normalabnormalpresentnotpresent117...3267003.9yesnonopooryesyes1
153901.02020abnormalabnormalpresentnotpresent70...29121003.7yesyesnopoornoyes1
263701.01030abnormalabnormalpresentnotpresent380...3245003.8yesyesnopooryesno1
368801.01032normalabnormalpresentpresent157...16110002.6yesyesyespooryesno1
461801.01520abnormalabnormalnotpresentnotpresent173...2492003.2yesyesyespooryesyes1
..................................................................
15355801.02000normalnormalnotpresentnotpresent140...4767004.9nononogoodnono0
15442701.02500normalnormalnotpresentnotpresent75...5478006.2nononogoodnono0
15512801.02000normalnormalnotpresentnotpresent100...4966005.4nononogoodnono0
15617601.02500normalnormalnotpresentnotpresent114...5172005.9nononogoodnono0
15758801.02500normalnormalnotpresentnotpresent131...5368006.1nononogoodnono0
\n", "

158 rows × 25 columns

\n", "
" ], "text/plain": [ " Age Blood Pressure Specific Gravity Albumin Sugar Red Blood Cells \\\n", "0 48 70 1.005 4 0 normal \n", "1 53 90 1.020 2 0 abnormal \n", "2 63 70 1.010 3 0 abnormal \n", "3 68 80 1.010 3 2 normal \n", "4 61 80 1.015 2 0 abnormal \n", ".. ... ... ... ... ... ... \n", "153 55 80 1.020 0 0 normal \n", "154 42 70 1.025 0 0 normal \n", "155 12 80 1.020 0 0 normal \n", "156 17 60 1.025 0 0 normal \n", "157 58 80 1.025 0 0 normal \n", "\n", " Pus Cell Pus Cell clumps Bacteria Glucose ... Packed Cell Volume \\\n", "0 abnormal present notpresent 117 ... 32 \n", "1 abnormal present notpresent 70 ... 29 \n", "2 abnormal present notpresent 380 ... 32 \n", "3 abnormal present present 157 ... 16 \n", "4 abnormal notpresent notpresent 173 ... 24 \n", ".. ... ... ... ... ... ... \n", "153 normal notpresent notpresent 140 ... 47 \n", "154 normal notpresent notpresent 75 ... 54 \n", "155 normal notpresent notpresent 100 ... 49 \n", "156 normal notpresent notpresent 114 ... 51 \n", "157 normal notpresent notpresent 131 ... 53 \n", "\n", " White Blood Cell Count Red Blood Cell Count Hypertension \\\n", "0 6700 3.9 yes \n", "1 12100 3.7 yes \n", "2 4500 3.8 yes \n", "3 11000 2.6 yes \n", "4 9200 3.2 yes \n", ".. ... ... ... \n", "153 6700 4.9 no \n", "154 7800 6.2 no \n", "155 6600 5.4 no \n", "156 7200 5.9 no \n", "157 6800 6.1 no \n", "\n", " Diabetes Mellitus Coronary Artery Disease Appetite Pedal Edema Anemia \\\n", "0 no no poor yes yes \n", "1 yes no poor no yes \n", "2 yes no poor yes no \n", "3 yes yes poor yes no \n", "4 yes yes poor yes yes \n", ".. ... ... ... ... ... \n", "153 no no good no no \n", "154 no no good no no \n", "155 no no good no no \n", "156 no no good no no \n", "157 no no good no no \n", "\n", " Class \n", "0 1 \n", "1 1 \n", "2 1 \n", "3 1 \n", "4 1 \n", ".. ... \n", "153 0 \n", "154 0 \n", "155 0 \n", "156 0 \n", "157 0 \n", "\n", "[158 rows x 25 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ckd = pd.read_csv(path_data + 'ckd.csv')\n", "ckd.rename(columns={'Blood Glucose Random':'Glucose'}, inplace=True)\n", "ckd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some of the variables are categorical (words like \"abnormal\"), and some quantitative. The quantitative variables all have different scales. We're going to want to make comparisons and estimate distances, often by eye, so let's select just a few of the variables and work in standard units. Then we won't have to worry about the scale of each of the different variables." ] }, { "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", "
HemoglobinGlucoseWhite Blood Cell CountClass
0-0.865744-0.221549-0.5697681
1-1.457446-0.9475971.1626841
2-1.0049683.841231-1.2755821
3-2.8148790.3963640.8097771
4-2.0839540.6435290.2322931
...............
1530.7005260.133751-0.5697680
1540.978974-0.870358-0.2168610
1550.735332-0.484162-0.6018500
1560.178436-0.267893-0.4093560
1570.735332-0.005280-0.5376860
\n", "

158 rows × 4 columns

\n", "
" ], "text/plain": [ " Hemoglobin Glucose White Blood Cell Count Class\n", "0 -0.865744 -0.221549 -0.569768 1\n", "1 -1.457446 -0.947597 1.162684 1\n", "2 -1.004968 3.841231 -1.275582 1\n", "3 -2.814879 0.396364 0.809777 1\n", "4 -2.083954 0.643529 0.232293 1\n", ".. ... ... ... ...\n", "153 0.700526 0.133751 -0.569768 0\n", "154 0.978974 -0.870358 -0.216861 0\n", "155 0.735332 -0.484162 -0.601850 0\n", "156 0.178436 -0.267893 -0.409356 0\n", "157 0.735332 -0.005280 -0.537686 0\n", "\n", "[158 rows x 4 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ckd_su = 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", "ckd_su" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at two columns in particular: the hemoglobin level (in the patient's blood), and the blood glucose level (at a random time in the day; without fasting specially for the blood test). \n", "\n", "We'll draw a scatter plot to visualize the relation between the two variables. Blue dots are patients with CKD; gold dots are patients without CKD. What kind of medical test results seem to indicate CKD? \n", "\n", "Previously, to create a df containing the required columns we have used the `join` function, in this example we will use the `merge` function.\n", "\n", "[pandas.merge](https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html#database-style-dataframe-or-named-series-joining-merging)" ] }, { "cell_type": "code", "execution_count": 6, "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": 6, "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", "ckd_combined = pd.merge(ckd_su, color_table, on='Class')\n", "\n", "ckd_combined" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfMAAAGTCAYAAAA8+/sRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABKoUlEQVR4nO3deVxU5f4H8M8MyC4OKgqyiYT7mtjuWokWKWZohpWZuKTdyjSzcMm4pbZ6Naurmd4u/W5qpmjZYi7hmri03JuGgRgKigsgO8yc3x/EyDDnzMYMZw7zeb9evl5y1u+cyO88z/k+z6MqLCwUQERERIqlljsAIiIiahwmcyIiIoVjMiciIlI4JnMiIiKFYzInIiJSOCZzIiIihWMyJyIiUjgmcxeWmZkpdwiKxOdmPT4z2/C52cYVnxuTORERkcIxmRMRESkckzkREZHCMZkTEREpnLvcAcihpqYGpaWlcochOy8vLxQVFckdhuI05rn5+vrC3d0l/7cjIgdyuX9VampqcP36dWg0GqhUKrnDkZWnpye8vLzkDkNxbH1ugiCgsLAQLVu2ZEInIrtyuW720tJSJnKShUqlgkajYa8QEdmdyyVzAEzkJBv+7hGRI7hkMiciImpOmMyJiIgUjlU4RKQIOTnFSEnJQF5eGYKDfZCcHIOICH+5wyJyCmyZu5jU1FSEhITIHQYAYOXKlejVq1ejr5Oeng6NRoMrV66I7s/JyYFGo8GJEyckr2HJMSSfnJxixMfvxKZNf2D//jxs2vQH4uN3IienWO7QiJwCk7nCXLp0CfPmzUPfvn3Rrl07dOvWDQ899BC+/fZbuUMjcpiUlAxkZxsm7uzs2pY6EbGbXVFycnIwYsQI+Pn5YdGiRejZsyd0Oh327duH2bNn49dff22SOKqqquDh4dEk9zKnqqpK7hCoCeTllYluz88X307katgyt1FOTjGSknYjLm4HkpJ2N0l335w5cyAIAvbs2YMxY8YgOjoaXbp0wdSpU7F//34AwJ9//onExESEhoYiNDQUEydOxPnz501e9+OPP0a/fv0QGBiIfv36YcOGDQb7NRoN1qxZg4kTJ6JDhw5YsmSJTfGvWLECnTt3RkhICKZNm4aSkhKD/cePH8eYMWPQqVMnhIWFYcSIEfjxxx+tjqWyshKJiYkYNGgQCgoK9NvPnDmDESNGoH379hgwYAB2794tGatY131dV/zJkyf1206dOoVx48YhNDQUN910E5588klcvHjR2kdDZgQH+4huDwoS307kapjMbSDH+7tr165h165dSEpKgp+fn9F+jUYDQRCQmJiIgoICpKWlYfv27cjPz0diYiIEQRC97vbt2zF37lzMmDEDhw4dwvTp0/H8889j586dBsctW7YMw4cPx8GDBzFlyhQAQEhIiMk/Dz30kP78L774AikpKZg/fz727duH6OhorF692uAe169fx/jx47Fz5058//336NWrFxISEozehYvFUqe4uBhjx47FtWvXsGPHDgQGBur3LVq0CNOmTUN6ejqGDBmCRx55BBcuXLDg6YvLz8/Hfffdh27duuH777/H1q1bUVJSggkTJkCn09l8XTKWnByDyEjDYrfISH8kJ8fIFBGRc2E3uw1Mvb9bs2aYQ+6ZlZUFQRDQuXNnyWP27t2LX3/9FSdOnEBERAQAYO3atejXrx/27duHIUOGGJ2zatUqjB8/HlOnTgUA3HTTTTh58iRWrFiBkSNH6o8bM2YMHnvsMYNz09PTTcZcf8rT999/HxMmTMATTzwBoLaXIT09HVlZWfpjBg8ebHD+8uXLkZaWhl27dmH8+PGSsfz5558AgMuXL2Pq1KkIDg7G+vXrjaZcnTx5MsaMGQOg9gvB7t27sW7dOiQnJ5v8HFI++ugj9OzZE6+88op+24cffoiOHTvixIkT6N+/v03XJWMREf7YunUkUlIykJ9fhqAgVrMT1cdkbgM53t9JtazrO336NIKDg/WJHAA6duyI4OBgnDp1SjSZnz59GomJiQbbbr/9dqOWeb9+/YzO7dSpk4XR197n0UcfNdg2YMAAg2ReUFCAv//970hPT0dBQQG0Wi3Ky8uRm5trNhYAePDBB9G7d2988sknonOfDxgwQP93tVqN/v3749SpUxZ/hoZ++uknHDx4UHR0QHZ2NpO5nUVE+DvsyzKR0jGZ20CO93dRUVFQqVT4/fffJY8RBEFyulBT04iK7Wu4zdfX1+gYc0Pcbr/9dmzevNnkMfXNmDEDly5dwmuvvYbw8HB4enpi1KhRRkVuYrEAQGxsLL744gv897//RZ8+fSy+rxi1uvYNVP0vUTU1NQbH6HQ6DB8+HCkpKUbn1+/eJyJyNCZzGyQnxyAjo8Cgq93R7+8CAgJw9913Y82aNZg2bZrRe/PCwkJ07doVFy5cQE5Ojr51fvbsWeTl5aFr166i1+3SpQsOHz5s0Go+dOiQ5PH1WdPN3qVLF2RkZBjcJyPDcFjR4cOHsXTpUsTGxgKoHYZnTTHZyy+/jICAAMTHx2Pbtm3o3bu3wf6MjAx9V74gCDh+/DhGjx4teq22bdsCqH0vXvf3X375xeCYPn364IsvvkBYWBhatGhhcZxERPbGZG4Dud7fvfnmm4iNjcXQoUPx8ssvo0ePHhAEAenp6XjnnXfwyy+/oGfPnpg6dSqWLVsGQRDwwgsvoE+fPhg0aJDoNZ9++mlMmjQJffv2xbBhw7Br1y5s2rQJn3zyidl4rOlmnz59OqZPn46bb74Zd911F7Zt24Zjx45Bo9Hoj4mKisLGjRsRExODsrIyLFy40OohcAsWLIAgCPqEXn9SmnXr1uGmm25C9+7dsXbtWvz555+YPHmy5GcLDQ3F0qVLsXjxYpw7dw5vvPGGwTFTpkzBhg0b8MQTT+DZZ59F27ZtcfbsWX2xX8uWLa2KnYjIVkzmNpLj/V3Hjh2xb98+vPXWW1i0aBHy8vLQunVr9OzZE++88w5UKhVSU1Mxb948xMXFAagtKlu+fLlkN3tcXByWL1+OlStXYv78+QgLC8Nbb71lUPxmDw8++CDOnj2LV199FeXl5Rg5ciSeeuopfPrpp/pjVq1ahWeffRZDhgxBUFAQXnzxRclZ3UxZuHAhBEHA6NGjsW3bNvj7137JWrRoEd577z389NNPCAsLw7///W/JVwUtWrTARx99hOeffx533XUXevXqhYULFxoU4gUHB+Obb77BK6+8grFjx6KyshKhoaEYOnQoPD09rY6biMhWqsLCQvOVVc1IUVERWrVqJXcYTqGiosKo4pvMa+xzc8XfwczMTERHR8sdhuLwudnGFZ8bx5kTEREpHJM5ERGRwjGZExERKRyTORERkcIxmRMRESkckzkREZHCMZkTEREpHJM5ERGRwjGZExERKRyTuYtJTU01u9qZM9NoNNi2bZvk/itXrkCj0ZhdBIaIqDlhMleYS5cuYd68eejbty/atWuHbt264aGHHsK3334rd2hERCQTLrSiIDk5ORgxYgT8/PywaNEi9OzZEzqdDvv27cPs2bPx66+/NkkcVVVVVq9mRkREjsOWuY1UNTnwvpYE38tx8L6WBFVNjsPvOWfOHAiCgD179mDMmDGIjo5Gly5dMHXqVOzfvx8A8OeffyIxMRGhoaEIDQ3FxIkTcf78eZPX/fjjj9GvXz8EBgaiX79+2LBhg8F+jUaDNWvWYOLEiejQoQOWLFliU/xvv/02oqOjERISgmnTpmHp0qUGS5TqdDosX74cPXr0QLt27XDHHXfgyy+/NHnN48ePY/DgwWjfvj0GDhxotEY6EZErUEwyf/3116HRaAz+dO7cWZZYVDU58L0aD4+KTXCv3g+Pik3wvRrv0IR+7do17Nq1C0lJSfDz8zPar9FoIAgCEhMTUVBQgLS0NGzfvh35+flITEyEIIgvjrd9+3bMnTsXM2bMwKFDhzB9+nQ8//zz2Llzp8Fxy5Ytw/Dhw3Hw4EFMmTIFABASEmLyz0MPPaQ///PPP8eyZcuwYMEC7Nu3D126dMHq1asN7vH+++9j5cqVWLx4MQ4ePIj7778fjz76KH7++WfR2EtLSzFu3Dh07NgRe/bsweLFi7FgwQKrnisRUXOgqG726Oho7NixQ/+zm5ubLHF4XU+BmzbbYJubNhte11NQHrDGIffMysqCIAgmv8Ds3bsXv/76K06cOIGIiAgAwNq1a9GvXz/s27cPQ4YMMTpn1apVGD9+PKZOnQoAuOmmm3Dy5EmsWLHCYE3zMWPG4LHHHjM411yRWf1lQj/44AM88sgj+mvMnj0b6enpOHPmjEEss2bNQkJCAgDg5ZdfxsGDB7Fq1Sr885//NLr+pk2bUFVVhffeew9+fn7o3r07nn/+eUybNs1kXEREzY2ikrm7uzvat28vdxhQa/Mktuc77J5SLev6Tp8+jeDgYH0iB4COHTsiODgYp06dEk3mp0+fRmJiosG222+/3ahl3q9fP6NzO3XqZGH0wO+//270ZaB///76ZF5cXIy8vDzcdtttRrFIFfedPn0aPXr0MOipuOWWWyyOiYiouVBUMj979iy6deuGFi1aICYmBgsXLkTHjh2bPA6dWzBQLbY9yGH3jIqKgkqlwu+//y55jCAIUKlUovuktkvta7jN19fX6BhzQ9xuv/12bN682aIYTJE6z5IvOERErkAxyTwmJgarV69GdHQ0Ll++jDfeeAPDhw/H4cOH0bp1a9FzMjMzjbZ5eXnB09OzUbFUecxFQNVRuOvO6rfVqDuiyGMudBUVjbq2FG9vbwwZMgT//Oc/MWnSJKPkWlRUhE6dOuHChQv4/fffER4eDqC2Aj4vLw+dOnVCRUUFqqurIQgCKv6KMzo6GgcOHNB3bQPA/v370blzZ/0xQG0Fe0WDz7Zr1y6TMXt5eenPuemmm/Djjz8avEfPyMjQx+Lh4YGgoCDs378ft956q/6YAwcOIDo6WjSWqKgo/N///R+uXLmifx4HDx6UjNeeGnPt4uJiXLp0yY7RKIPY/49kHp+bbZrbc4uOjja5XzHJ/N577zX4OSYmBn379sWnn36KWbNmiZ4j9uGLiooM3uXapjPKPLfB63oK1Np86NyCUNEyGR7uEeZPbYR33nkHsbGxGDFiBF5++WX06NEDgiAgPT0d77zzDn755Rf07NkTTz/9NJYtWwZBEPDCCy+gT58+uOeee6BSqdCiRQuoVCp9on3mmWcwadIk9O/fH8OGDcOuXbuwZcsWfPLJJwbPycPDw+i5devWzeLYn3rqKcycORMDBgzAHXfcgR07duD48ePQaDT66/7tb3/D66+/ji5duqBv37747LPPcOTIEezdu1c0lgkTJmDp0qWYM2cOXnjhBeTn5+Mf//iHZLz2UlFR0ahr+/v7IywszI4ROb/MzEyz/xiRMT4327jic1NMMm/Iz88PXbt2RVZWliz3F9wjHFbsJqVjx47Yt28f3nrrLSxatAh5eXlo3bo1evbsiXfeeQcqlQqpqamYN28e4uLiAACDBw/G8uXLJbuq4+LisHz5cqxcuRLz589HWFgY3nrrLYPiN3sYO3Yszp49i1deeQXl5eWIi4vD5MmT8dVXX+mPmT59OkpKSrBo0SJcunQJ0dHR+Ne//oXevXuLXtPPzw+fffYZZs+ejcGDByM6OhqLFy/GhAkT7Bo7EZGzUxUWFiryxWNFRQX69OmDyZMnY968eRafV1RUhFatWjkwMuVobAuzsRITE1FTU4PPPvtMthhs0djn5oq/g67YUrIHPjfbuOJzU0zLPDk5GSNGjEBoaKj+nXlZWRlbYQpRVlaGjz76CPfccw/c3d2RlpaGr776Cv/617/kDo2ISPEUk8wvXLiAKVOm4MqVK2jbti1iYmLw3Xff6Qu9yLmpVCrs2rULb7/9NioqKtCpUyd8+OGHeOCBB+QOjYhI8RSTzNetWyd3CNQI3t7eJlc7IyIi2ylmOlciIiISx2RORESkcC6ZzDlzGMmFv3tE5Agul8x9fX1RWFjIf1SpyQmCgMLCQtGpcYmIGkMxBXD24u7ujpYtW6K4uFjuUGRXXFwMf39/ucNQnMY8t5YtW8Ld3eX+tyMiB3PJf1Xc3d1dbtIOMZcuXXK5aUXtgc+NiJyNy3WzExERNTdM5kRERArHZE5ERKRwTOZEREQKx2RORESkcEzmRERECsdkTkREpHAuOc6ciMhSOTnFSEnJQF5eGYKDfZCcHIOICE62RM6FyZyISEJOTjHi43ciO/vGjJEZGQXYunUkEzo5FXazExFJSEnJMEjkAJCdXdtSJ3ImTOZERBLy8spEt+fni28nkguTORGRhOBgH9HtQUHi24nkwmRORCQhOTkGkZGG78YjI/2RnBwjU0RE4lgAR0QkISLCH1u3jkRKSgby88sQFMRqdnJOTOZERCZERPhjzZphcodBZBK72YmIiBSOyZyIiEjhmMyJiIgUjsmciIhI4ZjMiYiIFI7JnIiISOGYzImIiBSOyZyIiEjhmMyJiIgUjsmciIhI4ZjMiYiIFI7JnIiISOGYzImIiBSOyZyIiEjhmMyJiIgUjsmciIhI4ZjMiYiIFE6xyfytt96CRqPB3Llz5Q6FiIhIVopM5kePHsWGDRvQo0cPuUMhIiKSneKSeVFREZKSkrBy5UpoNBq5wyEiIpKd4pL5s88+i9GjR2Pw4MFyh0JEROQU3OUOwBobNmxAVlYWPvzwQ4uOz8zMdHBEysdnZBs+N+vxmdmGz802ze25RUdHm9yvmGSemZmJJUuWYOfOnfDw8LDoHHMf3tVlZmbyGdmAz816fGa24XOzjSs+N8Uk8x9//BFXrlzB7bffrt+m1Wpx8OBBrFu3DhcuXICnp6eMERIREclDMcn8/vvvR79+/Qy2zZw5E1FRUZg9e7bFrXUiIqLmRjHJXKPRGFWv+/j4ICAgAN27d5cnKCIiIiegmGRORMqTk1OMlJQMZGVdRqdOfyI5OQYREf5yh0XU7Cg6mX/55Zdyh0BEEnJyihEfvxPZ2cUAgGPHipCRUYCtW0cyoRPZmeLGmRORMqSkZOgTeZ3s7NqWOhHZF5M5ETlEXl6Z6Pb8fPHtRGQ7JnMicojgYB/R7UFB4tuJyHZM5kTkEMnJMYiMNHw3Hhnpj+TkGJkiImq+mMyJyCEiIvyxdetIJCREoX9/DRISolj8RuQgiq5mJyLnFhHhjzVrhrnk9JpETYktcyIiIoVjMiciIlI4JnMiIiKFYzInIiJSOCZzIiIihWMyJyIiUjgmcyIiIoVjMiciIlI4JnMiIiKFYzInIiJSOCZzIiIihWMyJyIiUjgmcyIiIoVjMiciIlI4JnMiIiKFYzInIiJSOCZzIiIihWMyJyIiUjgmcyIiIoVjMiciIlI4JnMiIiKFYzInIiJSOCZzIiIihWMyJyIiUjgmcyIiIoVjMiciIlI4JnMiIiKFYzInIiJSOCZzIiIihWMyJyIiUjgmcyIiIoVjMiciIlI4xSTzNWvW4I477kBYWBjCwsJw77334ptvvpE7LCIiItkpJpl36NABr7zyCvbt24c9e/Zg0KBBSExMxK+//ip3aERERLJylzsAS91///0GPy9YsAAfffQRjh49ip49e8oUFRERkfwUk8zr02q12Lp1K0pLS3HLLbfIHQ4REZGsVIWFhYLcQVjqv//9L4YPH46Kigr4+vpizZo1iI2NlTw+MzOzCaMjIiJyjOjoaJP7FZXMq6qqkJubi6KiIqSlpWHDhg3YsWMHunfvLndoipSZmWn2F4SM8blZj8/MNnxutnHF56aobnYPDw906tQJANCvXz8cP34cq1evxqpVq2SOjIiISD6KqWYXo9PpUFVVJXcYREREsrK5Za7ValFUVAR/f3+4uzu+gb948WIMHz4cISEhKCkpwebNm7F//35s3LjR4fcmIiJyZla3zI8fP474+Hh06NAB0dHROHDgAADgypUrGDduHPbt22f3IAHg4sWLmDp1KgYMGIDRo0fj+PHj2Lx5M+69916H3I+IiEgprGpS//jjjxg1ahTat2+Phx9+GP/617/0+9q0aYOSkhJ88sknGDx4sN0Dff/99+1+TSIioubAqpb5q6++iqioKBw5cgQLFy402j9w4EBkZGTYLTgiIiIyz6pkfvz4cUycOBFeXl5QqVRG+0NCQnDx4kW7BUdERETmWZXM1Wo11GrpUy5evAhvb+9GB0VERESWsyqZ9+3bF19//bXovqqqKmzatInTqxIRETUxq5L57Nmz8cMPP2DWrFn45ZdfAAD5+fnYtWsXRo0ahezsbDz//PMOCZSIiIjEWVXNPnToUHz44YeYO3cuPv30UwDAjBkzIAgCWrVqhbVr12LAgAEOCZSIiIjEWT3by0MPPYT77rsPe/bswR9//AGdTofIyEjcfffd8PPzc0SMREREZIJNU7f5+PgYrS9ORK4hJ6cYKSkZyMsrQ3CwD5KTYxAR4S93WEQuzapk/ttvvyEzMxOjRo3Sb/vhhx/w7rvvorCwEGPHjsXMmTPtHiQROYecnGLEx+9EdnaxfltGRgG2bh3JhE4kI6sK4BYvXozU1FT9z7m5uXjkkUfw008/oaysDAsWLNC/Syei5iclJcMgkQNAdnZtS52I5GNVMv/5559xxx136H/euHEjdDod0tPTcfjwYcTGxmLt2rV2D5KInENeXpno9vx88e1E1DSsSuZXr15FmzZt9D9/9913GDhwIDp06AAAiI2NxZkzZ+wbIRE5jeBgH9HtQUHi24moaViVzAMDA3Hu3DkAQGFhITIyMjB06FD9/srKSvtGR0ROJTk5BpGRhu/GIyP9kZwcI1NERATYMM78n//8J/z9/bF//34AwH333afff+rUKYSEhNg3QiIyIGc1eUSEP7ZuHYmUlAzk55chKIjV7ETOwKpkvnDhQpw5cwYLFixAixYtsHjxYoSHhwMAKioqsHXrVowbN84hgRKRc1STR0T4Y82aYU1yLyKyjFXJPDAwEDt37kRxcTG8vLzg4eGh3ycIAtLS0hAaGmr3IImolqlqciZYItdl06Qx/v7GLQBvb2/06tWr0QERkTRWkxORGKuTeXFxMVauXIlvv/1WXwwXHh6O2NhYzJo1SzTRE5F9sJqciMRYVc2en5+PQYMG4c0330R5eTnuvPNO3HHHHSgvL8cbb7yBwYMHIz8/31GxEskiJ6cYSUm7ERe3A0lJu3H+fLlssbCanIjEWNUyX7x4MS5evIjU1FSDKnYA2LlzJyZPnowlS5Zg9erVdg2SSC5iBWeHDp3Hl192lKWCm9XkRCTGqmT+/fffY+rUqUaJHABGjhyJpKQkTudKzYpYwVluboWsBWesJieihqzqZr9+/brJavXQ0FCUlJQ0OigiZ8GCMyJSAquSeVRUFNLS0qDT6Yz26XQ6bN++HVFRUXYLjkhuLDgjIiWwKplPmzYN+/fvx5gxY/DNN98gKysLWVlZ+Prrr/Hggw/iwIEDmD59uqNiJWpyYgVnoaFeLDgjIqdi1Tvzxx57DFeuXMGyZcuQnp6u3y4IAjw9PbFw4UI8+uijdg+SSC5iBWeJiW1ZcEai5Jxql1yb1ePMn3vuOTz++OPYu3evwTjzIUOGoHXr1nYPkEhuDQvOMjMzZYyGnJUzTLVLrsumGeBat26NBx980N6xEBEpFqfaJTlZ9c78q6++wty5cyX3z507F19//XWjgyIiUhqOfCA5WZXMV65cibIy6V/MiooKrFixotFBEREpDUc+kJysSub/+9//0LdvX8n9ffr0walTpxobExGR4nCqXZKTVe/Ma2pqUF4uPS91eXk5KisrGx0UkVKxmtl1capdkpNVybx79+5IS0vDrFmzoFYbNup1Oh3S0tLQtWtXuwZIpBSsZiZOtUtysaqbffr06Th27BgmTJiAkydPorKyEpWVlTh58iQeeeQRHDt2DNOmTXNUrEROzVQ1MxGRI1nVMh87diyys7Px+uuv47vvvgMAqFQqCIIAlUqFefPmYfz48Q4JlMjZsZqZiORi9TjzOXPm4KGHHsL27dtx9uxZCIKAyMhIPPDAA+jYsaMDQiRSBlYzE5FcbJo0pmPHjnj66aftHQuRoiUnxyAjo8Cgq53VzETUFGxK5kRkjNXMzQdHJZDSWJXMAwICoFKpzB539epVmwMiUjJWMysfRyWQElmVzF944QWjZK7VapGTk4OdO3fipptuQmxsrF0DrPP2229j+/btOHPmDDw8PBATE4NFixahe/fuDrkfEbkmzrFOSmRVMp8/f77kvgsXLuCee+5B586dGx2UmP379+PJJ5/EzTffDEEQ8NprryE+Ph5HjhxBQECAQ+5JRK6HoxJIiez2zrxDhw544oknsHz5coesqLZlyxaDnz/88EOEh4fj8OHDGDlypN3vR0SuiaMSSImsmjTGHI1Gg+zsbHteUlJJSQl0Oh00Gk2T3I+IXAPnWCclUhUWFgr2uNDly5cRHx+PyspKHD161B6XNGnSpEn4448/sHfvXri5uYkek5mZ6fA4iKj5OX++HB98kI2CgioEBnpg+vRIhIR4yx0WubDo6GiT+63qZn/ggQdEtxcVFeH3339HdXU11q1bZ80lbfLSSy/h8OHD+PrrryUTOWD+w7u6zMxMl3hG9h5m5CrPzZ6U9syio4EhQ3rLHYbinpuzcMXnZlUy1+l0RtXsKpUKERERGDp0KB577DFERUXZNcCG5s+fjy1btmD79u2ccY7M4jAjInIFViXzL7/80lFxWGTevHnYsmULduzY4bCqeWpeOMzIsazp9eBELESOo5gZ4ObMmYPP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\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", "\n", "fig, ax = plt.subplots(figsize=(7,6))\n", "\n", "ax.scatter(glucose_color_darkblue['Hemoglobin'], \n", " glucose_color_darkblue['Glucose'], \n", " label='Color=darkblue', \n", " color='darkblue')\n", "\n", "ax.scatter(glucose_color_gold['Hemoglobin'], \n", " glucose_color_gold['Glucose'], \n", " label='Color=gold', \n", " color='gold')\n", "\n", "x_label = 'Hemoglobin'\n", "\n", "y_label = 'Glucose'\n", "\n", "y_vals = ax.get_yticks()\n", "\n", "plt.ylabel(y_label)\n", "\n", "ax.legend(loc='upper left')\n", "\n", "plt.xlabel(x_label)\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose Alice is a new patient who is not in the data set. If I tell you Alice's hemoglobin level and blood glucose level, could you predict whether she has CKD? It sure looks like it! You can see a very clear pattern here: points in the lower-right tend to represent people who don't have CKD, and the rest tend to be folks with CKD. To a human, the pattern is obvious. But how can we program a computer to automatically detect patterns such as this one?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A Nearest Neighbor Classifier ###\n", "\n", "There are lots of kinds of patterns one might look for, and lots of algorithms for classification. But I'm going to tell you about one that turns out to be surprisingly effective. It is called *nearest neighbor classification*. Here's the idea. If we have Alice's hemoglobin and glucose numbers, we can put her somewhere on this scatterplot; the hemoglobin is her x-coordinate, and the glucose is her y-coordinate. Now, to predict whether she has CKD or not, we find the nearest point in the scatterplot and check whether it is blue or gold; we predict that Alice should receive the same diagnosis as that patient.\n", "\n", "In other words, to classify Alice as CKD or not, we find the patient in the training set who is \"nearest\" to Alice, and then use that patient's diagnosis as our prediction for Alice. The intuition is that if two points are near each other in the scatterplot, then the corresponding measurements are pretty similar, so we might expect them to receive the same diagnosis (more likely than not). We don't know Alice's diagnosis, but we do know the diagnosis of all the patients in the training set, so we find the patient in the training set who is most similar to Alice, and use that patient's diagnosis to predict Alice's diagnosis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the graph below, the red dot represents Alice. It is joined with a black line to the point that is nearest to it – its *nearest neighbor* in the training set. The figure is drawn by a function called `show_closest`. It takes an array that represents the $x$ and $y$ coordinates of Alice's point. Vary those to see how the closest point changes! Note especially when the closest point is blue and when it is gold." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Workings" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "def show_closest(point):\n", " \"\"\"point = array([x,y]) \n", " gives the coordinates of a new point\n", " shown in red\"\"\"\n", " \n", " HemoG1 = ckd_combined.copy()\n", " HemoG1 = HemoG1.drop(columns=['White Blood Cell Count', 'Color'])\n", " \n", " t = closest(HemoG1, point, 1)\n", " x_closest = t.iloc[0,0]\n", " y_closest = t.iloc[0,1]\n", "\n", " fig, ax = plt.subplots(figsize=(7,6))\n", " ax.scatter(glucose_color_darkblue['Hemoglobin'], \n", " glucose_color_darkblue['Glucose'], \n", " label='Color=darkblue', \n", " color='darkblue')\n", " ax.scatter(glucose_color_gold['Hemoglobin'], \n", " glucose_color_gold['Glucose'], \n", " label='Color=gold', \n", " color='gold')\n", " x_label = 'Hemoglobin'\n", " y_label = 'Glucose'\n", " y_vals = ax.get_yticks()\n", " plt.ylabel(y_label)\n", " ax.legend(loc='upper left')\n", " plt.xlabel(x_label)\n", " \n", " ax.scatter(point.item(0), point.item(1), color='red', s=30)\n", " ax.plot(np.array([point.item(0), x_closest]), np.array([point.item(1), y_closest]), color='k', lw=2)\n", " \n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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p9ckqklsmRMREckckzkREZHMMZkTERHJHJM5ERGRzDGZExERyRyTORERkcwxmRMREckckzkREZHMMZkTERHJHJM5ERGRzDGZExERyRyTORERkcwxmRMREckckzkREZHMMZkTERHJHJM5ERGRzDGZExERyRyTORERkcwxmRMREckckzkREZHMMZkTERHJHJM5ERGRzDGZExERyRyTORERkcwxmRMREckckzkREZHMMZkTERHJHJM5ERGRzDGZExERyRyTORERkcwxmRMREckckzkREZHMySaZr1y5Eg888ACaNm2Kpk2b4pFHHsHOnTulDouIiEhysknmTZo0weuvv479+/dj79696NatGxISEvD7779LHRoREZGkVFIHYKvHHnvM6OdZs2bh008/xdGjR9GuXTuJoiIiIpKebJJ5RTqdDps3b0ZRURHuvfdeqcMhIiKSlCIvL0+QOghb/fHHH+jTpw80Gg18fX2xcuVK9O3b1+zx6enpNRgdERFR9YiOjra4X1bJvLS0FBcvXkR+fj62bt2KtWvXYvv27WjTpo3UoclSenq61V8QMsXnZj8+M8fwuTnGHZ+brLrZPT090bx5cwBAp06dcPz4cSxfvhxLly6VODIiIiLpyKaaXYxer0dpaanUYRAREUnK4Za5TqdDfn4+/P39oVJVfwN/7ty56NOnD0JDQ1FYWIiNGzfiwIEDWL9+fbXfm4iIyJXZ3TI/fvw44uLi0KRJE0RHR+PgwYMAgGvXrmHo0KHYv3+/04MEgJycHIwbNw5dunTBoEGDcPz4cWzcuBGPPPJItdyPiIhILuxqUh85cgQDBw5E48aNMXz4cPz73/827GvQoAEKCwvx+eefo3v37k4P9KOPPnL6NYmIiGoDu1rmb7zxBqKiovDzzz9j9uzZJvu7du2KtLQ0pwVHRERE1tmVzI8fP46RI0fC29sbCoXCZH9oaChycnKcFhwRERFZZ1cyVyqVUCrNn5KTkwMfH58qB0VERES2syuZd+zYEd99953ovtLSUmzYsIHTqxIREdUwu5L5lClT8OOPP2Ly5Mn47bffAADZ2dnYvXs3Bg4ciIyMDLz88svVEigRERGJs6uavWfPnlixYgWmTZuGdevWAQAmTpwIQRAQEBCAVatWoUuXLtUSKBEREYmze7aXJ554Ao8++ij27t2Lv/76C3q9HpGRkejd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+jTy8/PRtGlTBAYGShyda5g0aRLGjx+Pzp0747777sPq1auRnZ2NZ555RurQXFZhYSHOnTsHANDr9bh48SJ+/fVXBAYGomnTphJHV/04NM3NXbx4ES+++CJOnjyJ/Px8NGrUCA888ACmTZuGFi1aSB2ey0pNTcWAAQNE923btg1du3at4Yjk46233sLChQtNti9btsythhJZs2rVKixevBg5OTlo3bo15s+fjwcffFDqsFyWuf8nR4wYgY8++kiCiGoWkzkREZHMsZqdiIhI5pjMiYiIZI7JnIiISOaYzImIiGSOyZyIiEjmmMyJiIhkjsmciGpEZmYm1Go1UlJS7D43NTUVarUaX331ldVj33rrLajVagciJJIvJnMiCaWkpECtVuPo0aOi+1966SUmJiKyismciGqVadOmITs7W+owiGoU52YnolpFpVJxTXlyO2yZE8nM3r17ERsbi7CwMDRp0gSxsbH4+eefjY4pf2+cnp6OiRMnIiIiApGRkZgzZw70ej1yc3MxevRohIeHIyoqCgsWLDC5T0lJCebOnYv27dujUaNGuPvuu5GcnIxbt24ZHScIAt555x20bdsWISEh6NOnD44cOYLHHnsMjz32mNXP87///Q/Dhw9HeHg4QkJC8Mgjj+D7778XPVan02H+/Plo1aoVQkJCEBcXh/T0dNHPXlH79u0xZMgQHDt2DP369UNwcDDatm2L5cuXW42PSA6YzIlcQEFBAa5du2byR6PRGB23ceNGDBkyBB4eHpg5cyZmzpyJ69evY+DAgUhLSzO57pgxY6DRaDB79mzcf//9WLx4MRYvXozBgwfDz88Pc+bMQbt27bBgwQJs377dcJ4gCHjqqafwwQcf4MEHH8T8+fNx77334p133sGYMWOM7vHGG28gOTkZrVq1wrx583DPPfdg6NChuHz5stXPffbsWfTr1w9paWl47rnn8Nprr6GwsBDDhg3Dtm3bTI7/4IMPsHXrVkyePBmTJk3CsWPHMGDAAFy/ft3qvTIzMzF8+HDcd999ePPNN9GsWTO89tpr2LNnj9VziVwd+6KIXMCQIUOsHlNUVISpU6di2LBhRqtAPfPMM/jXv/6FefPmYevWrUbndOjQAUuXLgVQltg7deqEefPmYerUqZg5cyYAICEhAa1atcLnn3+O2NhYAMDOnTuxe/duTJ06FUlJSQCAsWPHIigoCB999BH27duHHj16IDc3F0uWLEGfPn3w5ZdfQqFQAADatGmDF154AU2aNLH4mebNm4fi4mLs3r3bsErf008/jQceeAAzZszAY489BqXyTpsjNzcXR48eNbS8u3btikGDBmHp0qWYPXu2xXudPXsWmzdvRo8ePQAAI0eORLt27bB27Vr06tXL4rlEro4tcyIXsHDhQmzevNnkT8U15ffu3Yu8vDwMHTrUqPVeUlKCHj164PDhw7h9+7bRdUeNGmX4u0KhQOfOnSEIAkaOHGnY7u3tjXbt2uH8+fOGbTt37oRCocDkyZONrvd///d/hv0AsG/fPty+fRtjx441JHIAePLJJxEQEGDxM+t0Ovzwww/o16+f0XK7/v7+GDNmDC5evIg//vjD6Jzhw4cbdaF3794drVu3xq5duyzeCwCioqIMiRwAvLy8EBMTY/S5ieSKLXMiF3DPPfegS5cuJtu3bNli+Ptff/0FABg8eLDZ6+Tn56Nhw4aGn8PCwoz2+/v7m91e8d3zhQsX0LhxY5N3z8HBwQgICMCFCxcAAH///TeAskRZkUqlQkREhNk4AeDq1asoKioySuTlWrZsaYijffv2hu2V71O+LTU11eK9AKBp06Ym29RqtckXBiI5YjInkgm9Xg8AWL58udnu6/JkXc7Dw0P0OLHtgiDYFIezj7Pn3Iqtf3vvY+5ZVCVOIlfBZE4kE5GRkQCAhg0bGnUXV4fw8HDs2bMHeXl5Rq3znJwcFBQUIDw8HMCd1u5ff/1l1GrWarW4cOEC2rVrZ/YeDRs2hK+vL86cOWOyr7yXoPw+5c6ePWty7Llz50Rb3UTuhO/MiWSid+/eCAgIwDvvvGMyPAwo67Z2lr59+0IQBJOhWx9++KFhPwD06NEDKpUKq1atMmrhrlu3Dvn5+Rbv4eHhgd69e2Pnzp1GSfrmzZv47LPPEBYWhrZt2xqd89///hd5eXmGn/fv348///wTjzzyiEOfk6i2YMucSCbq1auHxYsX49lnn8VDDz2E+Ph4NG7cGJcuXUJqaip8fX2xceNGp9yrb9++ePjhh7Fo0SJcvHgR99xzD44cOYL169fj0UcfNfQMBAUFYfLkyfjggw/wxBNPoF+/fjh37hz++9//IjIyUrRbvKJZs2Zh37596N+/P8aOHQtfX1+sW7cOFy9exJo1a4wq2cvv169fP4wcORL5+fn4+OOP0ahRI5NCPSJ3w2ROJCNxcXEICQnBe++9h+XLl6OkpASNGzdGTEyMUeV6VSkUCnz++edYsGABvvrqK2zYsAHBwcGYOnUqpk2bZnTs7NmzUbduXaxZswYHDx7E3XffjfXr12PatGnw9va2eJ/o6Gh89913eP3117Fs2TKUlpaiffv2+O9//4s+ffqYHP/iiy8iPT0dS5cuRV5eHu677z4sWrQIDRo0cNpnJ5IjRV5eHqs/iMipdDod7rrrLgwYMMDQNU9E1YfvzImoSkpKSky2paSk4MaNG+jWrZsEERG5H3azE1GVbNq0CWvXrkXfvn0RGBiIEydOICUlBe3atcPAgQOlDo/ILTCZE1GVtG3bFnXr1sXy5csNk9aMGjUKs2bNgqenp9ThEbkFvjMnIiKSOb4zJyIikjkmcyIiIpljMiciIpI5JnMiIiKZYzInIiKSuf8HLi6NnT0wt/sAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# In this example, Alice's Hemoglobin attribute is 0 and her Glucose is 1.5.\n", "alice = np.array([0, 1.5])\n", "show_closest(alice)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thus our *nearest neighbor classifier* works like this:\n", "- Find the point in the training set that is nearest to the new point.\n", "- If that nearest point is a \"CKD\" point, classify the new point as \"CKD\". If the nearest point is a \"not CKD\" point, classify the new point as \"not CKD\".\n", "\n", "The scatterplot suggests that this nearest neighbor classifier should be pretty accurate. Points in the lower-right will tend to receive a \"no CKD\" diagnosis, as their nearest neighbor will be a gold point. The rest of the points will tend to receive a \"CKD\" diagnosis, as their nearest neighbor will be a blue point. So the nearest neighbor strategy seems to capture our intuition pretty well, for this example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Decision boundary ###\n", "\n", "Sometimes a helpful way to visualize a classifier is to map out the kinds of attributes where the classifier would predict 'CKD', and the kinds where it would predict 'not CKD'. We end up with some boundary between the two, where points on one side of the boundary will be classified 'CKD' and points on the other side will be classified 'not CKD'. This boundary is called the *decision boundary*. Each different classifier will have a different decision boundary; the decision boundary is just a way to visualize what criteria the classifier is using to classify points.\n", "\n", "For example, suppose the coordinates of Alice's point are (0, 1.5). Notice that the nearest neighbor is blue. Now try reducing the height (the $y$-coordinate) of the point. You'll see that at around $y = 0.95$ the nearest neighbor turns from blue to gold." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "alice = np.array([0, 0.97])\n", "show_closest(alice)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are hundreds of new unclassified points, all in red." ] }, { "cell_type": "code", "execution_count": 11, "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", "
HemoglobinGlucose
0-2.0-2.0
1-2.0-1.9
2-2.0-1.8
3-2.0-1.7
4-2.0-1.6
.........
16762.01.6
16772.01.7
16782.01.8
16792.01.9
16802.02.0
\n", "

1681 rows × 2 columns

\n", "
" ], "text/plain": [ " Hemoglobin Glucose\n", "0 -2.0 -2.0\n", "1 -2.0 -1.9\n", "2 -2.0 -1.8\n", "3 -2.0 -1.7\n", "4 -2.0 -1.6\n", "... ... ...\n", "1676 2.0 1.6\n", "1677 2.0 1.7\n", "1678 2.0 1.8\n", "1679 2.0 1.9\n", "1680 2.0 2.0\n", "\n", "[1681 rows x 2 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "x_array = np.array([])\n", "y_array = np.array([])\n", "for x in np.arange(-2, 2.1, 0.1):\n", " for y in np.arange(-2, 2.1, 0.1):\n", " x_array = np.append(x_array, x)\n", " y_array = np.append(y_array, y)\n", " \n", "test_grid = pd.DataFrame(\n", " {'Hemoglobin':x_array,\n", " 'Glucose':y_array}\n", ")\n", "\n", "test_grid" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "test_grid.plot.scatter('Hemoglobin', 'Glucose', color='red', figsize=(6,6), alpha=0.4, s=30)\n", "\n", "plt.scatter(ckd_combined['Hemoglobin'], ckd_combined['Glucose'], c=ckd_combined['Color'], edgecolor='k')\n", "\n", "plt.xlim(-2, 2)\n", "plt.ylim(-2, 2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each of the red points has a nearest neighbor in the training set (the same blue and gold points as before). For some red points you can easily tell whether the nearest neighbor is blue or gold. For others, it's a little more tricky to make the decision by eye. Those are the points near the decision boundary.\n", "\n", "But the computer can easily determine the nearest neighbor of each point. So let's get it to apply our nearest neighbor classifier to each of the red points: \n", "\n", "For each red point, it must find the closest point in the training set; it must then change the color of the red point to become the color of the nearest neighbor. \n", "\n", "The resulting graph shows which points will get classified as 'CKD' (all the blue ones), and which as 'not CKD' (all the gold ones)." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "#ckd_combined" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "tags": [ "remove_input" ] }, "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", " #print(attributes)\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", " #training = training.copy()\n", " training['Distance'] = all_distances(training, point)\n", "\n", " return training\n", "\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", "\n", " sorted_by_distance = with_dists.sort_values(by=['Distance'])\n", "\n", " topk = sorted_by_distance.take(np.arange(k))\n", "\n", " return topk\n", "\n", "#----\n", "\n", "def majority(topkclasses):\n", " \"\"\"1 if the majority of the \"Class\" column is 1s, and 0 otherwise.\"\"\"\n", " #print(topkclasses)\n", " \n", " ones = len(topkclasses[topkclasses['Class'] == '1'])\n", " zeros = len(topkclasses[topkclasses['Class'] == '0'])\n", "\n", " if ones > zeros:\n", " return 1\n", " else:\n", " return 0\n", " \n", "#----\n", "# training = ckd_combined.drop(columns=['White Blood Cell Count', 'Color'])\n", "# p = test_grid\n", "# k = 1\n", "# function 'closest' working with funtion 'show_closest'\n", "\n", "def classify(training, p, k):\n", " \"\"\"Classify an example with attributes p using k-nearest neighbor classification with the given training table.\"\"\"\n", " closestk = closest(training, p, k) #returns topk which contains 'Class' column, single column\n", " #print('closestk', closestk)\n", "\n", " topkclasses = closestk['Class']\n", "\n", " return majority(closestk)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.1093657103592256" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def distance(point1, point2):\n", " \"\"\"The distance between two arrays of numbers.\"\"\"\n", " return np.sqrt(np.sum((point1 - point2)**2))\n", "\n", "ckd_drop = ckd_combined.drop(columns=['Class', 'White Blood Cell Count', 'Color'])\n", "\n", "distance(ckd_drop.iloc[0], test_grid.iloc[0])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 2.109366\n", "1 1.184025\n", "2 5.925375\n", "3 2.531124\n", "4 2.644862\n", " ... \n", "153 3.441763\n", "154 3.185965\n", "155 3.127268\n", "156 2.783124\n", "157 3.385402\n", "Length: 158, dtype: float64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#training = cdk_combined\n", "#point = test_grid.iloc[0]\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", "\n", " attributes = training.drop(columns=['Class'])\n", " #print(attributes)\n", " def distance_from_point(row):\n", " return distance(point, np.array(row))\n", " return attributes.apply(distance_from_point, axis=1)\n", "\n", "all_distances(ckd_combined.drop(columns=['White Blood Cell Count', 'Color']), test_grid.iloc[0])" ] }, { "cell_type": "code", "execution_count": 17, "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", "
HemoglobinGlucoseClassDistance
0-0.865744-0.22154912.109366
1-1.457446-0.94759711.184025
2-1.0049683.84123115.925375
3-2.8148790.39636412.531124
4-2.0839540.64352912.644862
...............
1530.7005260.13375103.441763
1540.978974-0.87035803.185965
1550.735332-0.48416203.127268
1560.178436-0.26789302.783124
1570.735332-0.00528003.385402
\n", "

158 rows × 4 columns

\n", "
" ], "text/plain": [ " Hemoglobin Glucose Class Distance\n", "0 -0.865744 -0.221549 1 2.109366\n", "1 -1.457446 -0.947597 1 1.184025\n", "2 -1.004968 3.841231 1 5.925375\n", "3 -2.814879 0.396364 1 2.531124\n", "4 -2.083954 0.643529 1 2.644862\n", ".. ... ... ... ...\n", "153 0.700526 0.133751 0 3.441763\n", "154 0.978974 -0.870358 0 3.185965\n", "155 0.735332 -0.484162 0 3.127268\n", "156 0.178436 -0.267893 0 2.783124\n", "157 0.735332 -0.005280 0 3.385402\n", "\n", "[158 rows x 4 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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", "\n", " return training1\n", "\n", "table_with_distances(ckd_combined.drop(columns=['White Blood Cell Count', 'Color']), test_grid.iloc[0])" ] }, { "cell_type": "code", "execution_count": 18, "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", "
HemoglobinGlucoseClassDistance
12-2.29279-0.8549111.181929
\n", "
" ], "text/plain": [ " Hemoglobin Glucose Class Distance\n", "12 -2.29279 -0.85491 1 1.181929" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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", "\n", " sorted_by_distance = with_dists.sort_values(by=['Distance'])\n", "\n", " topk = sorted_by_distance.take(np.arange(k))\n", "\n", " return topk\n", "\n", "try0 = closest(ckd_combined.drop(columns=['White Blood Cell Count', 'Color']), test_grid.iloc[0], 1)\n", "try0" ] }, { "cell_type": "code", "execution_count": 23, "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", "
HemoglobinGlucoseClassDistance
12-2.29279-0.85491011.181929
12-2.29279-0.85491011.085328
12-2.29279-0.85491010.989404
12-2.29279-0.85491010.894372
12-2.29279-0.85491010.800552
...............
140.839751.21509911.222428
140.839751.21509911.257501
140.839751.21509911.299342
140.839751.21509911.347320
140.839751.21509911.400803
\n", "

1681 rows × 4 columns

\n", "
" ], "text/plain": [ " Hemoglobin Glucose Class Distance\n", "12 -2.29279 -0.854910 1 1.181929\n", "12 -2.29279 -0.854910 1 1.085328\n", "12 -2.29279 -0.854910 1 0.989404\n", "12 -2.29279 -0.854910 1 0.894372\n", "12 -2.29279 -0.854910 1 0.800552\n", ".. ... ... ... ...\n", "14 0.83975 1.215099 1 1.222428\n", "14 0.83975 1.215099 1 1.257501\n", "14 0.83975 1.215099 1 1.299342\n", "14 0.83975 1.215099 1 1.347320\n", "14 0.83975 1.215099 1 1.400803\n", "\n", "[1681 rows x 4 columns]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#empty = np.array([])\n", "\n", "def classifying(trainer, test, k):\n", " ckd_new = pd.DataFrame(columns=['Hemoglobin', 'Glucose', 'Class', 'Distance'])\n", "\n", " for i in range(len(test)):\n", " ckd_new = ckd_new.append(closest(trainer, test.iloc[i], k))\n", "\n", " ckd_new.reset_index(drop=True)\n", " ckd_new['Class'] = ckd_new['Class'].astype(int)\n", " \n", " return ckd_new\n", " \n", "classifying(ckd_combined.drop(columns=['White Blood Cell Count', 'Color']), test_grid, 1)\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "\n", "\n", "def classify_grid(training, test, k):\n", " #print(training, test, k)\n", " #c = np.array([])\n", " ckd_new1 = pd.DataFrame(columns=['Hemoglobin', 'Glucose', 'Class', 'Distance'])\n", " empty = np.array([])\n", " for i in range(len(test)):\n", " # Run the classifier on the ith patient in the test set\n", " \n", " ckd_new2 = closest(training, np.array([test.iloc[i]]), k)\n", " #topkclasses = ckd_new2['Class']\n", "\n", " ones = len(ckd_new2[ckd_new2['Class'] == '1'])\n", " zeros = len(ckd_new2[ckd_new2['Class'] == '0'])\n", " \n", " if ones > zeros:\n", " #return 1\n", " empty = np.append(empty, 1)\n", " else:\n", " #return 0\n", " empty = np.append(empty, 0)\n", " \n", " return empty\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "data": { "text/plain": [ "array([1., 1., 1., ..., 1., 1., 1.])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "ckd_new = classify_grid(ckd_combined.drop(columns=['White Blood Cell Count', 'Color']), test_grid, 1)\n", "\n", "ckd_new" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "743" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "row_occurrences = np.count_nonzero(ckd_new == 0)\n", "row_occurrences" ] }, { "cell_type": "code", "execution_count": 34, "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", "
HemoglobinGlucoseClass
0-2.0-2.01.0
1-2.0-1.91.0
2-2.0-1.81.0
3-2.0-1.71.0
4-2.0-1.61.0
............
16762.01.61.0
16772.01.71.0
16782.01.81.0
16792.01.91.0
16802.02.01.0
\n", "

1681 rows × 3 columns

\n", "
" ], "text/plain": [ " Hemoglobin Glucose Class\n", "0 -2.0 -2.0 1.0\n", "1 -2.0 -1.9 1.0\n", "2 -2.0 -1.8 1.0\n", "3 -2.0 -1.7 1.0\n", "4 -2.0 -1.6 1.0\n", "... ... ... ...\n", "1676 2.0 1.6 1.0\n", "1677 2.0 1.7 1.0\n", "1678 2.0 1.8 1.0\n", "1679 2.0 1.9 1.0\n", "1680 2.0 2.0 1.0\n", "\n", "[1681 rows x 3 columns]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_grid['Class'] = ckd_new\n", "test_grid" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "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", "ckd_combined = pd.merge(ckd_su, color_table, on='Class')\n", "\n", "ckd_combined" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "\n", "#test_grid = test_grid.with_column('Class', c).join('Class', color_table)\n", "test_grid.scatter('Hemoglobin', 'Glucose', group='Color', alpha=0.4, s=30)\n", "\n", "plt.scatter(ckd.column('Hemoglobin'), ckd.column('Glucose'), c=ckd.column('Color'), edgecolor='k')\n", "\n", "plt.xlim(-2, 2)\n", "plt.ylim(-2, 2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The decision boundary is where the classifier switches from turning the red points blue to turning them gold." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### k-Nearest Neighbors ###\n", "\n", "However, the separation between the two classes won't always be quite so clean. For instance, suppose that instead of hemoglobin levels we were to look at white blood cell count. Look at what happens:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ckd.scatter('White Blood Cell Count', 'Glucose', group='Color')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, non-CKD individuals are all clustered in the lower-left. Most of the patients with CKD are above or to the right of that cluster... but not all. There are some patients with CKD who are in the lower left of the above figure (as indicated by the handful of blue dots scattered among the gold cluster). What this means is that you can't tell for certain whether someone has CKD from just these two blood test measurements.\n", "\n", "If we are given Alice's glucose level and white blood cell count, can we predict whether she has CKD? Yes, we can make a prediction, but we shouldn't expect it to be 100% accurate. Intuitively, it seems like there's a natural strategy for predicting: plot where Alice lands in the scatter plot; if she is in the lower-left, predict that she doesn't have CKD, otherwise predict she has CKD. \n", "\n", "This isn't perfect -- our predictions will sometimes be wrong. (Take a minute and think it through: for which patients will it make a mistake?) As the scatterplot above indicates, sometimes people with CKD have glucose and white blood cell levels that look identical to those of someone without CKD, so any classifier is inevitably going to make the wrong prediction for them.\n", "\n", "Can we automate this on a computer? Well, the nearest neighbor classifier would be a reasonable choice here too. Take a minute and think it through: how will its predictions compare to those from the intuitive strategy above? When will they differ?\n", "\n", "Its predictions will be pretty similar to our intuitive strategy, but occasionally it will make a different prediction. In particular, if Alice's blood test results happen to put her right near one of the blue dots in the lower-left, the intuitive strategy would predict 'not CKD', whereas the nearest neighbor classifier will predict 'CKD'.\n", "\n", "There is a simple generalization of the nearest neighbor classifier that fixes this anomaly. It is called the *k-nearest neighbor classifier*. To predict Alice's diagnosis, rather than looking at just the one neighbor closest to her, we can look at the 3 points that are closest to her, and use the diagnosis for each of those 3 points to predict Alice's diagnosis. In particular, we'll use the majority value among those 3 diagnoses as our prediction for Alice's diagnosis. Of course, there's nothing special about the number 3: we could use 4, or 5, or more. (It's often convenient to pick an odd number, so that we don't have to deal with ties.) In general, we pick a number $k$, and our predicted diagnosis for Alice is based on the $k$ patients in the training set who are closest to Alice. Intuitively, these are the $k$ patients whose blood test results were most similar to Alice, so it seems reasonable to use their diagnoses to predict Alice's diagnosis.\n", "\n", "The $k$-nearest neighbor classifier will now behave just like our intuitive strategy above." ] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 1 }