{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "import matplotlib\n", "#matplotlib.use('Agg')\n", "path_data = '../../../../data/'\n", "from datascience import *\n", "%matplotlib inline\n", "import matplotlib.pyplot as plots\n", "from mpl_toolkits.mplot3d import Axes3D\n", "import numpy as np\n", "import math\n", "import scipy.stats as stats\n", "plots.style.use('fivethirtyeight')" ] }, { "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": "markdown", "metadata": { "collapsed": true }, "source": [ "### Rows of Tables ###\n", "Now that we have a qualitative understanding of nearest neighbor classification, it's time to implement our classifier.\n", "\n", "Until this chapter, we have worked mostly with single columns of tables. But now we have to see whether one *individual* is \"close\" to another. Data for individuals are contained in *rows* of tables.\n", "\n", "So let's start by taking a closer look at rows." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the original table `ckd` containing data on patients who were tested for chronic kidney disease." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "ckd = Table.read_table(path_data + 'ckd.csv').relabeled('Blood Glucose Random', 'Glucose')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data corresponding to the first patient is in row 0 of the table, consistent with Python's indexing system. The Table method `row` accesses the row by taking the index of the row as its argument:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Row(Age=48, Blood Pressure=70, Specific Gravity=1.005, Albumin=4, Sugar=0, Red Blood Cells='normal', Pus Cell='abnormal', Pus Cell clumps='present', Bacteria='notpresent', Glucose=117, Blood Urea=56, Serum Creatinine=3.8, Sodium=111, Potassium=2.5, Hemoglobin=11.2, Packed Cell Volume=32, White Blood Cell Count=6700, Red Blood Cell Count=3.9, Hypertension='yes', Diabetes Mellitus='no', Coronary Artery Disease='no', Appetite='poor', Pedal Edema='yes', Anemia='yes', Class=1)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ckd.row(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rows have their very own data type: they are *row objects*. Notice how the display shows not only the values in the row but also the labels of the corresponding columns.\n", "\n", "Rows are in general **not arrays**, as their elements can be of different types. For example, some of the elements of the row above are strings (like `'abnormal'`) and some are numerical. So the row can't be converted into an array.\n", "\n", "However, rows share some characteristics with arrays. You can use `item` to access a particular element of a row. For example, to access the Albumin level of Patient 0, we can look at the labels in the printout of the row above to find that it's item 3:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ckd.row(0).item(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Converting Rows to Arrays (When Possible) ###\n", "Rows whose elements are all numerical (or all strings) can be converted to arrays. Converting a row to an array gives us access to arithmetic operations and other nice NumPy functions, so it is often useful.\n", "\n", "Recall that in the previous section we tried to classify the patients as 'CKD' or 'not CKD', based on two attributes `Hemoglobin` and `Glucose`, both measured in standard units. " ] }, { "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", "
Class Hemoglobin Glucose Color
0 0.456884 0.133751 gold
0 1.153 -0.947597 gold
0 0.770138 -0.762223 gold
0 0.596108 -0.190654 gold
0 -0.239236 -0.49961 gold
0 -0.0304002 -0.159758 gold
0 0.282854 -0.00527964 gold
0 0.108824 -0.623193 gold
0 0.0740178 -0.515058 gold
0 0.83975 -0.422371 gold
\n", "

... (148 rows omitted)

" ], "text/plain": [ "Class | Hemoglobin | Glucose | Color\n", "0 | 0.456884 | 0.133751 | gold\n", "0 | 1.153 | -0.947597 | gold\n", "0 | 0.770138 | -0.762223 | gold\n", "0 | 0.596108 | -0.190654 | gold\n", "0 | -0.239236 | -0.49961 | gold\n", "0 | -0.0304002 | -0.159758 | gold\n", "0 | 0.282854 | -0.00527964 | gold\n", "0 | 0.108824 | -0.623193 | gold\n", "0 | 0.0740178 | -0.515058 | gold\n", "0 | 0.83975 | -0.422371 | gold\n", "... (148 rows omitted)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ckd = Table().with_columns(\n", " 'Hemoglobin', standard_units(ckd.column('Hemoglobin')),\n", " 'Glucose', standard_units(ckd.column('Glucose')),\n", " 'Class', ckd.column('Class')\n", ")\n", "\n", "color_table = Table().with_columns(\n", " 'Class', make_array(1, 0),\n", " 'Color', make_array('darkblue', 'gold')\n", ")\n", "ckd = ckd.join('Class', color_table)\n", "ckd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a scatter plot of the two attributes, along with a red point corresponding to Alice, a new patient. Her value of hemoglobin is 0 (that is, at the average) and glucose 1.1 (that is, 1.1 SDs above average)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAikAAAFWCAYAAACsDw2XAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXQUVd7G8W91dXdWoBMIECCAQIgsyiKiqGw6giioKOgoriMv4KizoKIOKqgzigs6jrijM46CwrghIO4Qg4CCIigKBFlkTcKSPZ1eqt4/GiOREIImdKd5PudwtKurq57b2X59761bRn5+vo2IiIhIhHGEO4CIiIhIVVSkiIiISERSkSIiIiIRSUWKiIiIRCQVKSIiIhKRVKSIiIhIRFKRIiIiIhFJRYqIiIhEJBUpESw7OzvcEepMNLcNort90dw2iP72idQnKlJEREQkIqlIERERkYikIkVEREQikooUERERiUjOcAcQEZHwCwQClJSUhDuGHIMSEhJwOqsuR1SkiIgc4wKBAEVFRXg8HgzDCHccOYbYtk1+fj4NGjSoslDRcI+IyDGupKREBYqEhWEYeDyeQ/biqUgRiQC79xawZXsugUAw3FHkGKUCRcKluu89DfeIhNkLs95jwaLlBAJBUpsl8+Dto2mYGB/uWCIiYaeeFJEw2r5rN/M++RzTNImJcZO3p4BnZ84PdywRkYignhSRMMovLMHvD+B2uQAwTZOi4tIwpxIJ+dM9T/HD5h1H7Xzt27bgX5P+eNTO95MZM2YwYcIEtm/fftTP/UtPPPEEzz33HN98881vOk5WVhbDhg3jhx9+oHHjxgc9v2XLFrp168bChQvp0aNHlceoyT51TUWKSBi1bdWMxsmNKC0rx2EY+Px+TuvZOdyxRAD4YfMOPvvyu3DHOKzc3FymTp3K+++/z44dO2jcuDFdunRhzJgxDBo0KNzx5DdQkSISRgnxsUyZcC3PvDKfcr+f007qzDkDTg53LJF6Y8uWLZxzzjkkJiYyadIkunbtimVZZGZmMn78eL799tujksPn8+F2u4/KuQ7H5/OFO0Kt0ZwUkTBLbdqYe8ZfxZTbruP83/UJdxyReuWWW24BYOHChQwfPpz09HQyMjIYM2YMixcvBmDr1q2MGjWKVq1a0apVK6644orDDu38+9//pkePHqSkpNCjRw9eeumlSs97PB6ef/55rrjiClq0aMG99977q/I//vjjdOzYkZYtWzJ27FiKi4srPf/VV18xfPhw2rVrR1paGueccw5ffPHFEWcpLy9n1KhR9OvXj7y8vIrtGzZs4JxzzqFZs2acfPLJfPLJJ4fMmpWVhcfjYc+ePRXbtmzZgsfjYeXKlRXb1q5dyyWXXEKrVq3o0KED1113HTk5OUf83oCKFBERqaf27dvHRx99xOjRo0lMTDzoeY/Hg2VZXH755eTl5TF37lzmzp3Lrl27GDVqFLZtV3ncuXPncuutt3L99dezdOlSxo0bx80338yCBQsq7ffggw8yaNAglixZwujRowFo2bJltf9GjBhR8fq33nqLv//979xxxx1kZmaSnp7OU089VekcRUVFXHrppSxYsICPP/6YE044gZEjR7J3797DZvlJYWEhF198Mfv27WPevHmkpKRUPDdp0iTGjh1LVlYWAwYM4PLLL2fHjl8/D2nXrl2ce+65dOrUiY8//pi3336b4uJiLr/8cizLOuLjabhHRETqpY0bN2LbNh07djzkPpmZmaxZs4aVK1fSpk0bAKZPn06PHj3IzMxkwIABB71m2rRpXHrppYwZMwaADh068PXXX/P4448zZMiQiv2GDx/OVVddVem1WVlZ1WaOjY2t+P+nn36ayy67jGuvvRYI9QplZWWxcePGin369+9f6fUPPfQQ77zzDh9++CGXXnrpIbNs3boVgLy8PMaOHUtqair/+c9/Kp0f4A9/+APDhw8HQoXOJ598wosvvsidd95ZbTsO5YUXXqBr167cc889FdueffZZ2rZty8qVKznppJOO6HgqUkREpF46VE/IgdatW0dqampFgQLQtm1bUlNTWbt2bZVFyrp16xg1alSlbX369DmoJ6WqK17atWtXw/Sh81x55ZWVtp188smVipS8vDz+8Y9/kJWVRV5eHsFgkLKyMrZt23bYLAAXX3wxJ554Ii+//HKVy86ffPLPc+AcDgcnnXQSa9eurXEbfmnVqlUsWbKEli1bHvTcpk2bVKSIiMixoX379hiGwfr163/V6490ld1f7p+QkHDQPlX9cT5Qnz59eP3112t8zuuvv57c3Fzuv/9+WrduTUxMDOeff/5Bk2OrygIwePBg3nrrLb777jtOPPHEGp+3Kg5HaIbIgcVhIBCotI9l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SZKkCCGEEKJLkiRFCCGEEF2SJClCCCGE6JIkSRFCCCFElyRJikirhQsXkp+fnyyk1Z5t2+Tn5zN37tw0RHbsDBkyhJkzZx7262bOnMmgQYMOet6+9/Djjz8+kvCEEKLLkiRFiG5uwoQJLF26lNLS0nSHIoQQx5SUxReimyssLKSwsDDdYQghxDEnIymiW9m2bRs33ngj/fv3p7i4mNGjR/PSSy+lnDN37lzy8/P58MMPmTJlCr169WLw4ME8++yzADz//POMHDmSsrIyrrjiCj766KOU18fjcebMmcOQIUMoKipiyJAhzJkzh3g83iGWqVOn0rNnT0477TTuvvtunn766UOaenn33XeZPHkyZWVl9OrVi0mTJvHuu+92eu6qVasYO3YsJSUlDBkyhCeeeCLl+51N9wwZMoRvfOMbLF68mLPPPptevXoxZswY3n777QO/wUII0YXISIroEhzHwbbtDsfaq6io4OKLL6aoqIj777+fwsJCXnjhBWbMmMHChQu57LLLUs7/8pe/zIwZM7jllltYsGAB3/rWt9i6dSsrVqzgnnvuwbZtZs+ezde//nVef/315OtmzpzJn/70J2677TbOO+88Vq1axcMPP8y2bdtYsGABALFYjCuvvJJYLMbDDz9MYWEhzzzzDC+++OJBn3XDhg1cfvnlfPazn2X+/PkAPPLII1x++eUsXbqUIUOGJM9tamriq1/9Krfeeiv9+vVj8eLF3HnnnWRnZx+098/KlSvZtGkTd999N4FAgPvuu49p06axfv168vPzDxqnEEKkmyQpoksYOXLkQc+ZN28eWmtefvllevToAcD48ePZuXMn999/f4ck5ZZbbmH69OkADB8+nFdffZXf/OY3rFu3jtzcXAB2797N7Nmz2b59O3369OG9995j0aJF3Hnnndx1110AjBs3DsuyuO+++5g1axaDBw/mueeeY9u2bbz++uucddZZAFxyySWMHj2aioqKAz7Hgw8+iN/v58UXX0wmC2PHjmXo0KE88MADyREf8JKURx55hC9+8YsAXHzxxVRWVjJ37lyuvfZalFL7vU9TUxMrVqxI3qOkpISxY8eydOlSpk6detD3Wwgh0k2me0SX8Oyzz7J8+fKUr2XLlqWc8/rrr3PJJZeQm5uLbdvJr/Hjx7NhwwYaGxtTzr/kkkuSf87Pz6eoqIiRI0cmExQg2Ul6586dgDf6ADBt2rSUa1199dUAvPXWWwC888479O7dO5mgACilmDRp0kGfdeXKlXz+859PGc3Izc3l0ksvTV5/H9M0O1xzypQpVFRUsGvXrgPe5+yzz065x76dQgdLooQQoquQkRTRJQwaNIh+/fqlHPvk9E9NTQ3PP/88zz//fKfX2Lt3b0oC8skpDZ/P1+kxgGg0CkBdXR3gjTq0t+/v+75fVVVFUVFRhxiKi4s7ja29urq6Dtffd4/6+vqUY/n5+ckYP3mPyspKysrK9nufUCiU8vdAIABAJBI5aIxCCNEVSJIiuo0ePXpw3nnnMWvWrE6/37Nnz6O+x74P9urqak499dTk8aqqqpTvl5SU8MEHH3R4fXV19SHdY9/12quqquqQRNXX1xOPx1MSlX33OBbPK4QQXZlM94huY/z48fz73//m9NNPZ/jw4R2+9o0UHI1Ro0YBsHjx4pTjf/zjHwEYPXo04K2hqaioSNmRo7VmyZIlB73H+eefz9KlS2lqakoea2pq4tVXX01efx/HcTpc84UXXqB379706tXrMJ5MCCG6HxlJEd3G97//fcaPH89ll13GjTfeSJ/n7zByAAAB2UlEQVQ+faivr+f9999n27ZtPP7440d9j0GDBnHVVVcxb948bNvmnHPOYfXq1fz0pz/lqquu4owzzgDg2muv5ZFHHuH666/nBz/4QXJ3T0NDAwCGsf/8//bbb+e1115j8uTJ3HrrrSilePTRRwmHw9xxxx0p5+bk5HDPPfdQW1tL//79WbRoEX//+9+ZP3/+ARfNCiHEiUCSFNFtlJeXs3z5cubNm8e9997Lnj176NGjBwMHDkzu4jkW5s+fT9++fXn22Wd56KGHKC0tZdasWdx5553Jc/x+P3/605+44447uO2228jKyuKqq65ixIgR/OhHP0pZG/NJgwcP5i9/+Qv33nsvN910E1prRowYwcsvv5yy/Ri8JOXJJ59k9uzZvPfeexQVFTFv3jyuvfbaY/a8QgjRVan6+nqd7iCEOFFMmzaNjRs3snbt2nSHIoQQ3Z6MpAhxhH75y1+SnZ1Nv379aG5u5s9//jOvvfYaP/vZz9IdmhBCnBAkSRHiCAUCAebPn09FRQWO43Daaafx2GOPMWPGjHSHJoQQJwSZ7hFCCCFElyRbkIUQQgjRJUmSIoQQQoguSZIUIYQQQnRJkqQIIYQQokuSJEUIIYQQXZIkKUIIIYTokv4/G9LnlzR/0M0AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "alice = make_array(0, 1.1)\n", "ckd.scatter('Hemoglobin', 'Glucose', group='Color')\n", "plots.scatter(alice.item(0), alice.item(1), color='red', s=30);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find the distance between Alice's point and any of the other points, we only need the values of the attributes:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "ckd_attributes = ckd.select('Hemoglobin', 'Glucose')" ] }, { "cell_type": "code", "execution_count": 9, "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", "
Hemoglobin Glucose
0.456884 0.133751
1.153 -0.947597
0.770138 -0.762223
0.596108 -0.190654
-0.239236 -0.49961
-0.0304002 -0.159758
0.282854 -0.00527964
0.108824 -0.623193
0.0740178 -0.515058
0.83975 -0.422371
\n", "

... (148 rows omitted)

" ], "text/plain": [ "Hemoglobin | Glucose\n", "0.456884 | 0.133751\n", "1.153 | -0.947597\n", "0.770138 | -0.762223\n", "0.596108 | -0.190654\n", "-0.239236 | -0.49961\n", "-0.0304002 | -0.159758\n", "0.282854 | -0.00527964\n", "0.108824 | -0.623193\n", "0.0740178 | -0.515058\n", "0.83975 | -0.422371\n", "... (148 rows omitted)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ckd_attributes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each row consists of the coordinates of one point in our training sample. **Because the rows now consist only of numerical values**, it is possible to convert them to arrays. For this, we use the function `np.array`, which converts any kind of sequential object, like a row, to an array. (Our old friend `make_array` is for *creating* arrays, not for *converting* other kinds of sequences to arrays.)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Row(Hemoglobin=0.5961076648232668, Glucose=-0.19065363034327712)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ckd_attributes.row(3)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.59610766, -0.19065363])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array(ckd_attributes.row(3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is very handy because we can now use array operations on the data in each row." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Distance Between Points When There are Two Attributes ###\n", "The main calculation we need to do is to find the distance between Alice's point and any other point. For this, the first thing we need is a way to compute the distance between any pair of points. \n", "\n", "How do we do this? In 2-dimensional space, it's pretty easy. If we have a point at coordinates $(x_0,y_0)$ and another at $(x_1,y_1)$, the distance between them is\n", "\n", "$$\n", "D = \\sqrt{(x_0-x_1)^2 + (y_0-y_1)^2}\n", "$$\n", "\n", "(Where did this come from? It comes from the Pythogorean theorem: we have a right triangle with side lengths $x_0-x_1$ and $y_0-y_1$, and we want to find the length of the hypotenuse.)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the next section we'll see that this formula has a straightforward extension when there are more than two attributes. For now, let's use the formula and array operations to find the distance between Alice and the patient in Row 3." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([0. , 1.1]), array([ 0.59610766, -0.19065363]))" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "patient3 = np.array(ckd_attributes.row(3))\n", "alice, patient3" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.421664918881847" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "distance = np.sqrt(np.sum((alice - patient3)**2))\n", "distance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We're going to need the distance between Alice and a bunch of points, so let's write a function called `distance` that computes the distance between any pair of points. The function will take two arrays, each containing the $(x, y)$ coordinates of a point. (Remember, those are really the Hemoglobin and Glucose levels of a patient.)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def distance(point1, point2):\n", " \"\"\"Returns the Euclidean distance between point1 and point2.\n", " \n", " Each argument is an array containing the coordinates of a point.\"\"\"\n", " return np.sqrt(np.sum((point1 - point2)**2))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.421664918881847" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "distance(alice, patient3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have begun to build our classifier: the `distance` function is the first building block. Now let's work on the next piece." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Using `apply` on an Entire Row ###\n", "Recall that if you want to apply a function to each element of a column of a table, one way to do that is by the call `table_name.apply(function_name, column_label)`. This evaluates to an array consisting of the values of the function when we call it on each element of the column. So each entry of the array is based on the corresponding row of the table.\n", "\n", "If you use `apply` without specifying a column label, then the entire row is passed to the function. Let's see how this works on a very small table `t` containing the information about the first five patients in the training sample." ] }, { "cell_type": "code", "execution_count": 16, "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", "
Hemoglobin Glucose
0.456884 0.133751
1.153 -0.947597
0.770138 -0.762223
0.596108 -0.190654
-0.239236 -0.49961
" ], "text/plain": [ "Hemoglobin | Glucose\n", "0.456884 | 0.133751\n", "1.153 | -0.947597\n", "0.770138 | -0.762223\n", "0.596108 | -0.190654\n", "-0.239236 | -0.49961" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = ckd_attributes.take(np.arange(5))\n", "t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just as an example, suppose that for each patient we want to know how unusual their most unusual attribute is. Concretely, if a patient's hemoglobin level is further from the average than her glucose level, we want to know how far it is from the average. If her glucose level is further from the average than her hemoglobin level, we want to know how far that is from the average instead.\n", "\n", "That's the same as taking the maximum of the absolute values of the two quantities. To do this for a particular row, we can convert the row to an array and use array operations." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def max_abs(row):\n", " return np.max(np.abs(np.array(row)))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4996102825918697" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "max_abs(t.row(4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we can apply `max_abs` to each row of the table `t`:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.4568837 , 1.15300352, 0.77013762, 0.59610766, 0.49961028])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.apply(max_abs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This way of using `apply` will help us create the next building block of our classifier." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Alice's $k$ Nearest Neighbors ###\n", "If we want to classify Alice using a k-nearest neighbor classifier, we have to identify her $k$ nearest neighbors. What are the steps in this process? Suppose $k = 5$. Then the steps are:\n", "- **Step 1.** Find the distance between Alice and each point in the training sample.\n", "- **Step 2.** Sort the data table in increasing order of the distances.\n", "- **Step 3.** Take the top 5 rows of the sorted table.\n", "\n", "Steps 2 and 3 seem straightforward, provided we have the distances. So let's focus on Step 1.\n", "\n", "Here's Alice:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 1.1])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "alice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What we need is a function that finds the distance between Alice and another point whose coordinates are contained in a row. The function `distance` returns the distance between any two points whose coordinates are in arrays. We can use that to define `distance_from_alice`, which takes a row as its argument and returns the distance between that row and Alice." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def distance_from_alice(row):\n", " \"\"\"Returns distance between Alice and a row of the attributes table\"\"\"\n", " return distance(alice, np.array(row))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.421664918881847" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "distance_from_alice(ckd_attributes.row(3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can `apply` the function `distance_from_alice` to each row of `ckd_attributes`, and augment the table `ckd` with the distances. Step 1 is complete!" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "distances = ckd_attributes.apply(distance_from_alice)\n", "ckd_with_distances = ckd.with_column('Distance from Alice', distances)" ] }, { "cell_type": "code", "execution_count": 24, "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", "
Class Hemoglobin Glucose Color Distance from Alice
0 0.456884 0.133751 gold 1.06882
0 1.153 -0.947597 gold 2.34991
0 0.770138 -0.762223 gold 2.01519
0 0.596108 -0.190654 gold 1.42166
0 -0.239236 -0.49961 gold 1.6174
0 -0.0304002 -0.159758 gold 1.26012
0 0.282854 -0.00527964 gold 1.1409
0 0.108824 -0.623193 gold 1.72663
0 0.0740178 -0.515058 gold 1.61675
0 0.83975 -0.422371 gold 1.73862
\n", "

... (148 rows omitted)

" ], "text/plain": [ "Class | Hemoglobin | Glucose | Color | Distance from Alice\n", "0 | 0.456884 | 0.133751 | gold | 1.06882\n", "0 | 1.153 | -0.947597 | gold | 2.34991\n", "0 | 0.770138 | -0.762223 | gold | 2.01519\n", "0 | 0.596108 | -0.190654 | gold | 1.42166\n", "0 | -0.239236 | -0.49961 | gold | 1.6174\n", "0 | -0.0304002 | -0.159758 | gold | 1.26012\n", "0 | 0.282854 | -0.00527964 | gold | 1.1409\n", "0 | 0.108824 | -0.623193 | gold | 1.72663\n", "0 | 0.0740178 | -0.515058 | gold | 1.61675\n", "0 | 0.83975 | -0.422371 | gold | 1.73862\n", "... (148 rows omitted)" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ckd_with_distances" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For Step 2, let's sort the table in increasing order of distance:" ] }, { "cell_type": "code", "execution_count": 25, "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", "
Class Hemoglobin Glucose Color Distance from Alice
1 0.83975 1.2151 darkblue 0.847601
1 -0.970162 1.27689 darkblue 0.986156
0 -0.0304002 0.0874074 gold 1.01305
0 0.14363 0.0874074 gold 1.02273
1 -0.413266 2.04928 darkblue 1.03534
0 0.387272 0.118303 gold 1.05532
0 0.456884 0.133751 gold 1.06882
0 0.178436 0.0410639 gold 1.07386
0 0.00440582 0.025616 gold 1.07439
0 -0.169624 0.025616 gold 1.08769
\n", "

... (148 rows omitted)

" ], "text/plain": [ "Class | Hemoglobin | Glucose | Color | Distance from Alice\n", "1 | 0.83975 | 1.2151 | darkblue | 0.847601\n", "1 | -0.970162 | 1.27689 | darkblue | 0.986156\n", "0 | -0.0304002 | 0.0874074 | gold | 1.01305\n", "0 | 0.14363 | 0.0874074 | gold | 1.02273\n", "1 | -0.413266 | 2.04928 | darkblue | 1.03534\n", "0 | 0.387272 | 0.118303 | gold | 1.05532\n", "0 | 0.456884 | 0.133751 | gold | 1.06882\n", "0 | 0.178436 | 0.0410639 | gold | 1.07386\n", "0 | 0.00440582 | 0.025616 | gold | 1.07439\n", "0 | -0.169624 | 0.025616 | gold | 1.08769\n", "... (148 rows omitted)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted_by_distance = ckd_with_distances.sort('Distance from Alice')\n", "sorted_by_distance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Step 3: The top 5 rows correspond to Alice's 5 nearest neighbors; you can replace 5 by any other positive integer." ] }, { "cell_type": "code", "execution_count": 26, "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", "
Class Hemoglobin Glucose Color Distance from Alice
1 0.83975 1.2151 darkblue 0.847601
1 -0.970162 1.27689 darkblue 0.986156
0 -0.0304002 0.0874074 gold 1.01305
0 0.14363 0.0874074 gold 1.02273
1 -0.413266 2.04928 darkblue 1.03534
" ], "text/plain": [ "Class | Hemoglobin | Glucose | Color | Distance from Alice\n", "1 | 0.83975 | 1.2151 | darkblue | 0.847601\n", "1 | -0.970162 | 1.27689 | darkblue | 0.986156\n", "0 | -0.0304002 | 0.0874074 | gold | 1.01305\n", "0 | 0.14363 | 0.0874074 | gold | 1.02273\n", "1 | -0.413266 | 2.04928 | darkblue | 1.03534" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "alice_5_nearest_neighbors = sorted_by_distance.take(np.arange(5))\n", "alice_5_nearest_neighbors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Three of Alice's five nearest neighbors are blue points and two are gold. So a 5-nearest neighbor classifier would classify Alice as blue: it would predict that Alice has chronic kidney disease.\n", "\n", "The graph below zooms in on Alice and her five nearest neighbors. The two gold ones just inside the circle directly below the red point. The classifier says Alice is more like the three blue ones around her." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "data": { "image/png": "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Gj388MOSpPz8fPXq1csx58KFC5o7d66Ki4sVEBCgqKgo7dq1S9HR0a4uDwAAeCCXB5rk5GQlJyc3OefIkSP1tlNTU5WamurqUgAAwHWCZzkBAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDI9AAAADDc2mgOX/+vJ577jkNHz5cPXv21KBBg/Tss8/q3Llzze67fft2xcbGKjg4WLGxscrIyHBlaQAAwIO5NNCcPn1ap0+f1qJFi7R3716tX79ee/fu1eOPP97kfvv27dO0adM0adIkZWVladKkSXrsscd04MABV5YHAAA8lKm0tNTelt/g448/1uTJk1VYWKiAgIBG50ydOlXnz5/X3//+d8dYYmKiunfvro0bN7ZleQAAwAO0+Tk0ZWVl6ty5s/z9/a86Z//+/YqPj683NmbMGH399ddtXR4AAPAAbRpoSktL9corr+jRRx+Vt7f3VedZrVb16NGj3liPHj1UXFzcluUBAAAP4VSgWbx4sQIDA5v8ysrKqrdPeXm5pkyZoptuukkvvfRSmxQPAAAgSVd/2+QXZs6cqaSkpCbn9O7d2/Hr8vJyTZo0SZK0efNm+fr6NrlvSEiISkpK6o2VlJQoODjYmfIAAMB1zqlAExQUpKCgIKcOWFZWpkmTJslut2vr1q3q0qVLs/sMHz5cmZmZeuaZZxxjmZmZio2Ndep7AgCA65tTgcZZZWVleuCBB1RWVqa0tDRVVFSooqJCktStWzf5+PhIkhISEhQdHa2FCxdKkmbMmKHx48drxYoVuvfee7Vz505lZWXpww8/dGV5AADAQ7n0pOBDhw5p//79On78uKKjozVgwADH1y+vWMrPz9eZM2cc27GxsbJYLEpPT9eIESP03nvvyWKxKCwszONv1Ldp0yZNmDBBoaGhCgwMVGFh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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plots.figure(figsize=(8,8))\n", "plots.scatter(ckd.column('Hemoglobin'), ckd.column('Glucose'), c=ckd.column('Color'), s=40)\n", "#ckd.scatter('Hemoglobin', 'Glucose', group='Color')\n", "plots.scatter(alice.item(0), alice.item(1), color='red', s=40)\n", "radius = sorted_by_distance.column('Distance from Alice').item(4)+0.014\n", "theta = np.arange(0, 2*np.pi+1, 2*np.pi/200)\n", "plots.plot(radius*np.cos(theta)+alice.item(0), radius*np.sin(theta)+alice.item(1), color='g', lw=1.5);\n", "plots.xlim(-2, 2.5)\n", "plots.ylim(-2, 2.5);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are well on our way to implementing our k-nearest neighbor classifier. In the next two sections we will put it together and assess its accuracy." ] } ], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 1 }