{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# DS2500 Day 13\n", "\n", "Content:\n", "- Cross Validation\n", "- Measuring Binary Classifier Performance\n", "\n", "Admin:\n", "- hw4 due tonight\n", "- proposal due next monday\n", " - anybody want to workshop one live here at the start of class?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Claim: I know what your favorite number is\n", "\n", "(activity motivating cross validation)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# In Class Assignment 1\n", "\n", "Use the given 1-nearest neighbor classifier which estimates a penguins `species` by observing its `bill_depth_mm` and `bill_length_mm` to:\n", "- Plot a confusion matrix which shows the performance of your classifier\n", "- In a few sentences, explain whether this confusion matrix accurately represents the performance of the classifier on **new** penguins (those the classifier hasn't trained on). Why or why not? How might you fix this issue?" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "df_penguin = sns.load_dataset('penguins')\n", "df_penguin.dropna(how='any', inplace=True)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "k = 1\n", "x_feat_list = ['bill_depth_mm', 'bill_length_mm']\n", "y_feat = 'species'\n", "\n", "x = df_penguin.loc[:, x_feat_list].values\n", "y_true = df_penguin.loc[:, y_feat].values\n", "\n", "# initialize a knn_classifier\n", "knn_classifier = KNeighborsClassifier(n_neighbors=k)\n", "\n", "# fit happens \"inplace\", we modify the internal state of knn_classifier to remember all the training samples\n", "knn_classifier.fit(x, y_true)\n", "\n", "# estimate each penguin's species\n", "y_pred = knn_classifier.predict(x)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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AJydnWFqaorU1FSEh4cjMzOzwMxH7969Q1ZWFgCgWrVqamdZYqBARERERDqjq6xHpYFsOtIrV67gypUrhe6TkJCAdevWCdsjRowQAgWRSAQ3Nzf4+PggKysLL168QIMGDfKty8fHR7hdq1YttdvPOQpERERERGVEu3bthNuFrbZ89epV4XZhqzgrwx4FIiIiItKZLKg3/KUs8/T0hJ+fX6Hl3rx5gy5dugAAXFxccOnSpXzL9urVSxiatH//fowbN07p3IOIiAicOXMGAGBiYiLUrw72KBARERERlRG1atVCz549AQBRUVFYuHAhxGKxXJnk5GTMnj1byHg0ZswYuYnQqmKPAhERERHphBSApAxlPQoNDYWXl5fcfbI9BM+fP8eaNWvkHm/ZsiVatWqloRYoN2/ePDx8+BDh4eE4efIkXr58iYEDB6JixYoIDQ3FoUOHEBoaCiC7V2PixIlFOg4DBSIiIiIiJd6+fYs//vgj38f9/PwUhhYZGBhoPVBwdHTEli1bMG3aNAQFBcHPzw/Lly9XKNe4cWP89ttvaq+fkIOBAhERERHpzIc0R0Gb3NzccPToUXh5eeHs2bMICgpCfHw8bGxs4OHhgT59+qBfv37Q0yv6TAORVDZvExERERGRlmSIQxDwrrXWj+PmfAtGBtW0fpzyjpOZiYiIiIhIAYceEREREZHOcOhR2cEeBSIiIiIiUsAeBSIiIiLSiez0qNrvUeAEXM1gjwIRERERESlgjwIRERER6YhIR3MUOA9CE9ijQERERERECtijQEREREQ6IQWQpYPr1JyjoBnsUSAiIiIiIgXsUSAiIiIi3ZDqJusRuxQ0gz0KRERERESkgD0KRERERKQzXJm57GCPAhERERERKWCPAhERERHphBRAlpRZj8oK9igQEREREZEC9igQERERkY6IINHJdWrOg9AE9igQEREREZEC9igQFZNUKgay3pV0M6gMC39tVNJNIKIPlEMVO2SJJTA21d33ELMelR0MFIiKK+sdpNGdS7oVVIaNcmtU0k0gog/UzoANAADnGo4l3BIqjRgoEBEREZFOMOtR2cI5CkREREREpICBAhERERERKeDQIyIiIiLSGQknM5cZ7FEgIiIiIiIF7FEgIiIiIp3J4nXqMoP/U0REREREpIA9CkRERESkE1KIdJQelfMgNIE9CkREREREpIA9CkRERESkMxJepy4z+D9FREREREQK2KNARERERDqTJeX8gbKCPQpERERERKSAPQpEREREpBNS6GYdBanWj/BhYI8CEREREREpYI8CEREREemICBIdrKMArqOgEexRICIiIiIiBexRICIiIiKd0cUcBdIM/k8REREREZEC9igQERERkU5IoZt1FJj1SDPYo0BERERERAoYKBARERERkQIOPSIiIiIinZHwOnWZwf8pIiIiIiJSwB4FIiIiItINqQhZulhwTQcTpj8E7FEgIiIiIiIF7FEgIiIiIp2QApCA6VHLCvYoEBERERGRAvYoEBEREZHO6GSOAmkE/6eIiIiIiEgBexSIiIiISCekALJ0cJ2acxQ0g4ECEREREZESWVlZCAwMxNOnT/Hs2TM8ffoUvr6+SEtLAwAMGDAAK1asKLQeqVSKx48f49atW3j06BECAgIQHR0NqVQKKysreHh4oH379hgwYAAsLS1Vbl9GRga8vLxw9uxZBAUFIS4uDra2tqhduzZ69+6Nvn37Qk+v6IEZAwUiIiIi0hlJGVrjYObMmTh37lyx6nj16hXGjBmD8PBwpY9HRUUhKioKN27cwKZNm7BkyRJ079690HoDAwMxffp0BAQEyN0fERGBiIgIXL16FQcOHMD69ethb29fpLYzUCAiIiIiUiIrK0tu29raGtbW1ggODla5jvj4eCFIMDIyQosWLfDRRx+hUqVKMDIyQkhICE6cOIHAwEDExcVh5syZ+OWXX9CrV69864yMjMSECRPw9u1bAICHhwcGDBiAihUrIjQ0FF5eXggNDcX9+/cxceJE7N69G2ZmZmo/fwYKRERERKQjIp3MUYCG1mpo0KABatasibp166Ju3bqoUqUKjhw5gnnz5qlVj7OzM8aPH49+/frByspK4fHPP/8cy5Ytw549eyCRSLB48WK0bds232FIK1asEIKE3r17Y9WqVTAwyD2tHzlyJCZPnow7d+7g2bNn2Lx5M2bOnKlWmwEGCkRERERESk2ePLnYdbi7u+PcuXMwMjLKt4yBgQEWLlyIR48e4dmzZ4iLi8OFCxcwcOBAhbIBAQE4ffo0AMDBwQFLly6VCxIAwNzcHD///DM+/vhjpKenY/v27Rg3bpxa8x8ApkclIiIiIh2SSPW0/leamJmZFRgk5BCJROjRo4ew7efnp7Tc6dOnIZVm53Ua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w9fXFzdu3EDnzp3RrVs3NGzYELa2thCLxXj//j38/Pxw69YthIeHo2rVqpgzZ45W2kOa0bJbAjY388XFwza4ccoab4ONkRCjDzMLCSq5puOj9onoMypaZz0dpF2hASaY0bsWOn4Sh47941DNIw3W9mIkJ+jjXYgRbp6xwrkDtnKLbBHl4PuHSLP4SSmlXrx4gWfPngEArKyshLSnqurbty9Wr14NsViM8+fPIyEhAZaWlmjUqBF+++03fP3110hOToaPjw98fHzk9nV3d8e6deswfPjwQo/z008/wdXVFRs3bkRqaiquX79e4MrLNjY2ha7iXFQWFhbYu3cvFi9ejOPHjyM1NRXHjh3DsWPH8t1HdlL2h2TnnYJ7fzRNnQxJyljaZGHAhGgMmBCtuUZRqSXO1MMFL1tc8FKtF5VIFt8/RJrDQKGUkp3E3LNnT7VPru3s7NCuXTtcvnwZ6enpOHHihHDi36lTJ5w+fRpbtmzBtWvX8O7dO5iamqJKlSro1asXPvvsM5XXWhCJRPj888/x6aefwsvLC//99x8CAgIQFxcHALC0tETVqlVRr149tGnTBm3atIGhoeoLc6nL3Nwcq1atwsSJE3HkyBHcvXsXb968QUJCAgwNDWFrawtXV1c0btwY7du3R4MGDbTWFiIiIlIk0cFkZtIMkTTvIHUiUotUHApptHo9PkSyuldqVNJNIKIP1M6ADQAA5xqOOjleZFoUvn48T+vH+aXhclQ0cdD6cco79igQERERkc5wwbWyg1mPiIiIiIhIAXsUiIiIiEgnpNDNHAWOq9cM9igQEREREZEC9igQERERkc5kL4hGZQH/p4iIiIiISAF7FIiIiIhIR0Q6WkeBmZU0gT0KRERERESkgD0KRERERKQzXEeh7GCPAhERERERKWCPAhERERHpBNdRKFvYo0BERERERArYo0BEREREOqObrEekCexRICIiIiIiBexRICIiIiLdkOqoR4GTFDSCPQpERERERKSAPQpEREREpDOco1B2sEeBiIiIiIgUMFAgIiIiIiIFHHpERERERDohBSABF1wrK9ijQERERERECtijQEREREQ6w8nMZQcDBSIiIiIiJbKyshAYGIinT5/i2bNnePr0KXx9fZGWlgYAGDBgAFasWKFWnSEhIdi/fz+uX7+Od+/eQSKRoGLFimjdujUGDx4MT09P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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "conf_mat = confusion_matrix(y_true=y_true, y_pred=y_pred)\n", "conf_mat_disp = ConfusionMatrixDisplay(conf_mat, display_labels=np.unique(y_true))\n", "\n", "sns.set(font_scale=2)\n", "conf_mat_disp.plot()\n", "plt.suptitle('K=1 NN Classifier\\nSeems a little too accurate ...')\n", "plt.gcf().set_size_inches(7, 7)\n", "plt.grid(False)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Cross Validation\n", "\n", "Our motivation behind the confusion matrix was to quantify how well our classifier performs on samples it **hasn't** seen yet. \n", "- We built the classifier estimate the group of a new samples, we already know the group of every sample in the training set!\n", "\n", "# To estimate classifier classifier performance on new samples...\n", "## ... we must measure its performance on samples it hasn't been trained on" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### K-Fold Cross Validation\n", "\n", "1. Partition the data into K distinct \"folds\" (subset of the data)\n", "1. For each fold i:\n", " - train the model on all but the i-th fold\n", " - test the model on the i-th fold\n", " \n", " \n", "\n", " \n", "Animated:\n", "\n", "http://assets.yihui.org/figures/animation/example/cv-ani/demo-a.mp4" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Cross Validation in `sklearn`\n", "\n", "Silly example dataset:\n", "- Using the `favorite number` and `letters in name` to predict which of the beatles `takes milk in coffee`" ] }, { "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", "
namefavorite numberletters in nametakes milk in coffee
0john04True
1ringo25True
2paul1044False
3george-56False
\n", "
" ], "text/plain": [ " name favorite number letters in name takes milk in coffee\n", "0 john 0 4 True\n", "1 ringo 2 5 True\n", "2 paul 104 4 False\n", "3 george -5 6 False" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.model_selection import KFold\n", "import pandas as pd\n", "\n", "df_beatles = pd.DataFrame({'name': ['john', 'ringo', 'paul', 'george'],\n", " 'favorite number': [0, 2, 104, -5],\n", " 'letters in name': [4, 5, 4, 6],\n", " 'takes milk in coffee': [True, True, False, False]})\n", "df_beatles" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "in this iteration:\n", "we train on idx: [1 2 3] (i.e. ['ringo', 'paul', 'george'])\n", "we test on idx: [0] (i.e. ['john'])\n", "----------\n", "in this iteration:\n", "we train on idx: [0 2 3] (i.e. ['john', 'paul', 'george'])\n", "we test on idx: [1] (i.e. ['ringo'])\n", "----------\n", "in this iteration:\n", "we train on idx: [0 1 3] (i.e. ['john', 'ringo', 'george'])\n", "we test on idx: [2] (i.e. ['paul'])\n", "----------\n", "in this iteration:\n", "we train on idx: [0 1 2] (i.e. ['john', 'ringo', 'paul'])\n", "we test on idx: [3] (i.e. ['george'])\n", "----------\n" ] } ], "source": [ "x_feat_list = ['favorite number', 'letters in name']\n", "y_feat = 'takes milk in coffee'\n", "\n", "# extract the values as np.arrays\n", "x = df_beatles.loc[:, x_feat_list].values\n", "y = df_beatles.loc[:, y_feat].values\n", "\n", "# construction of kfold object\n", "kfold = KFold(n_splits=4)\n", "\n", "for train_idx, test_idx in kfold.split(x, y):\n", " print('in this iteration:') \n", " name_train = list(df_beatles.loc[train_idx, 'name'])\n", " name_test = list(df_beatles.loc[test_idx, 'name'])\n", " print(f'we train on idx: {train_idx} (i.e. {name_train})')\n", " print(f'we test on idx: {test_idx} (i.e. {name_test})')\n", " print('-'*10)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0. , 0. , 0.3, 1. , 0. , 0. , 1. , 1. , 1. , 1. ],\n", " [1. , 1. , 1. , 0. , 0. , 1. , 0.5, 0. , 0. , 1. ]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# np.empty allocates a new array of given shape\n", "# (no guarantees about the values inside!)\n", "import numpy as np\n", "np.empty((2, 10))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.model_selection import KFold\n", "\n", "# parameters of classifier\n", "k = 1\n", "x_feat_list = ['favorite number', 'letters in name']\n", "y_feat = 'takes milk in coffee'\n", "\n", "# extract the values as np.arrays\n", "x = df_beatles.loc[:, x_feat_list].values\n", "y = df_beatles.loc[:, y_feat].values\n", "\n", "# initialize classifier\n", "knn_class = KNeighborsClassifier(n_neighbors=k)\n", "\n", "# initialize of kfold object\n", "kfold = KFold(n_splits=4)\n", "\n", "# initialize an array of same shape and type as y\n", "y_pred = np.empty(y.shape)\n", "for train_idx, test_idx in kfold.split(x, y):\n", " # split into train and test sets\n", " x_train = x[train_idx, :]\n", " y_train = y[train_idx]\n", " x_test = x[test_idx, :]\n", " \n", " # fit classifier (on training set)\n", " knn_class.fit(x_train, y_train)\n", " \n", " # predict (on testing set)\n", " y_pred[test_idx] = knn_class.predict(x_test)" ] }, { "cell_type": "code", "execution_count": 10, "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", "
namefavorite numberletters in nametakes milk in coffee
0john04True
1ringo25True
2paul1044False
3george-56False
\n", "
" ], "text/plain": [ " name favorite number letters in name takes milk in coffee\n", "0 john 0 4 True\n", "1 ringo 2 5 True\n", "2 paul 104 4 False\n", "3 george -5 6 False" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_beatles" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1., 1., 1., 1.])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# y pred contains a prediction for each sample ... but not from the same classifier\n", "y_pred" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Applying Cross Validation to our penguins species classification..." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from copy import copy\n", "\n", "k = 1\n", "x_feat_list = ['bill_depth_mm', 'bill_length_mm']\n", "y_feat = 'species'\n", "\n", "x = df_penguin.loc[:, x_feat_list].values\n", "y_true = df_penguin.loc[:, y_feat].values\n", "\n", "# initialize a knn_classifier\n", "knn_classifier = KNeighborsClassifier(n_neighbors=k)\n", "\n", "# construction of kfold object\n", "kfold = KFold(n_splits=3)\n", "\n", "# allocate an empty array to store predictions in\n", "y_pred = copy(y_true)\n", "\n", "for train_idx, test_idx in kfold.split(x, y_true):\n", " # build arrays which correspond to x, y train /test\n", " x_test = x[test_idx, :]\n", " x_train = x[train_idx, :]\n", " y_true_train = y_true[train_idx]\n", " \n", " # fit happens \"inplace\", we modify the internal state of knn_classifier to remember all the training samples\n", " knn_classifier.fit(x_train, y_true_train)\n", "\n", " # estimate each penguin's species\n", " y_pred[test_idx] = knn_classifier.predict(x_test)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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7wQaouJggEhExebm5qYNEqOiohAaGooPP/wQmzdvLtdzfAHg6tWrhQ5BHjx4MN+1AQMGlMuJIX379sVvv/2G8PBwvbYrk8nwySefFLjQoiyaNm2K3bt3Y/78+Th69ChUKhUCAwMRGBhYYJ3q1avj008/LdFG6gDQqVMnjB07FqtXrwYAnD59GqdPnxaVadasGf73v/+hf//+RbaXkJAgyvT9V9WqVbFgwQLRVjh5F8b8+++/+Pfffwus36pVKyxZsqTCN5SWSqVYs2YN5s2bh+3btyM7OxsHDx7U+bOuwX0OqbQYIBJRibi7u2uDxOjoaDx8+BAffvghNm3aVO5BYmVlZmaGyZMnY8qUKXpvu3fv3li3bl2pjpYriqurKxYuXIhJkybhr7/+wuXLlxEeHo7nz59DoVCgSpUq8PT0RJMmTdC5c2e0bt261EHT1KlT0bx5c2zbtg03b95Eeno67O3tUbt2bbz77rvo06cPzMwK/y/q119/xaVLlxAUFISQkBBERkYiOTkZAGBvb486deqgffv26N+/f74/DDw8PPDXX3/hn3/+wbVr1/DgwQPExsYiMzMTMpkMLi4ueO211/Duu++iY8eOpXqPhiCTyfDtt99i2LBh2L17NwIDA/HkyROkpqZCKpXC0dERtWvXhq+vLzp06FBhq67J+EmEit79k4iIiIgqFS5SISIiIiIRBohEREREJMIAkYiIiIhEGCASERERkQgDRCIiIiISYYBIRERERCIMEImIiIhIhAEiEREREYkwQCQiIiIiEQaIRERERCTCAJGIiIiIRBggEhEREZEIA0QiIiIiEmGASEREREQiDBCJiIiISIQBIhERERGJMEAkIiIiIhEGiEREREQkwgCRiIiIiEQYIBIRERGRCANEIiIiIhJhgEhEREREIgwQiYiIiEiEASIRERERiTBAJCIiIiIRBohEREREJMIAkYiIiIhEGCASERERkQgDRCIiIiISYYBIRERERCIMEImIiIhIhAEiEREREYkwQCQiIiIiEQaIRERERCTCAJGIiIiIRMwqugNERERExSUIuYAyVv8Nm7pBImFYpMGvBBERERkPZSyExM56b1ZS7RRg5qX3do0VA0QiIiIyIgJUUOm9VVMIem/TmHEOIhERERGJMINIRERERkUpGCKDSHkxg0hEREREIswgEhERkdEQAKgMMF9Q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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# build and plot confusion matrix\n", "conf_mat = confusion_matrix(y_true=y_true, y_pred=y_pred)\n", "conf_mat_disp = ConfusionMatrixDisplay(conf_mat, display_labels=np.unique(y_true))\n", "\n", "sns.set(font_scale=1.5)\n", "conf_mat_disp.plot()\n", "plt.suptitle('K=1 NN Classifier')\n", "plt.gcf().set_size_inches(6, 6)\n", "plt.grid(False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How come we don't get any chinstraps correct?\n", "\n", "hint: count the `species` in each set of training data." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "trained on: Counter({'Gentoo': 119, 'Chinstrap': 68, 'Adelie': 35})\n", "tested on: Counter({'Adelie': 111})\n", "----------\n", "trained on: Counter({'Adelie': 111, 'Gentoo': 111})\n", "tested on: Counter({'Chinstrap': 68, 'Adelie': 35, 'Gentoo': 8})\n", "----------\n", "trained on: Counter({'Adelie': 146, 'Chinstrap': 68, 'Gentoo': 8})\n", "tested on: Counter({'Gentoo': 111})\n", "----------\n" ] } ], "source": [ "from copy import copy\n", "from collections import Counter\n", "\n", "k = 1\n", "x_feat_list = ['bill_depth_mm', 'bill_length_mm']\n", "y_feat = 'species'\n", "\n", "x = df_penguin.loc[:, x_feat_list].values\n", "y_true = df_penguin.loc[:, y_feat].values\n", "\n", "# initialize a knn_classifier\n", "knn_classifier = KNeighborsClassifier(n_neighbors=k)\n", "\n", "# construction of kfold object\n", "kfold = KFold(n_splits=3)\n", "\n", "# allocate an empty array to store predictions in\n", "y_pred = copy(y_true)\n", "\n", "for train_idx, test_idx in kfold.split(x, y_true):\n", " # build arrays which correspond to x, y train /test\n", " x_test = x[test_idx, :]\n", " x_train = x[train_idx, :]\n", " y_true_train = y_true[train_idx]\n", " \n", " print(f'trained on: {Counter(y_true_train)}')\n", " print(f'tested on: {Counter(y_true[test_idx])}')\n", " print('-' * 10)\n", " \n", " # fit happens \"inplace\", we modify the internal state of knn_classifier to remember all the training samples\n", " knn_classifier.fit(x_train, y_true_train)\n", "\n", " # estimate each penguin's species\n", " y_pred[test_idx] = knn_classifier.predict(x_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that we don't always get a proper mix of species in each training set ... the second training set doesn't even have any Chinstrap penguins!\n", "\n", "Why is this?" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "array(['Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie', 'Adelie',\n", " 'Adelie', 'Adelie', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap', 'Chinstrap',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo',\n", " 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo', 'Gentoo'], dtype=object)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Adelie penguins up front, then chinstrap, finally all gentoo\n", "y_true" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "the data is sorted by species.\n", "\n", "## Ensuring that each training set represents all target groups:\n", "\n", "- we can pass the `shuffle=True` parameter to the constructor of `Kfold` so that data is shuffled before the training indexing\n", "\n", "- alternatively, we could use a `StratifiedKFold` object in place of a plain old `Kfold`:\n", "\n", "\n", " \"This cross-validation object is a variation of KFold that returns stratified folds. The folds are made by \n", " preserving the percentage of samples for each class.\" \n", " \n", "taken from [sklearn doc](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "using `shuffle=True` on a `KFold`" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Counter({'Adelie': 99, 'Gentoo': 72, 'Chinstrap': 51})\n", "Counter({'Adelie': 103, 'Gentoo': 73, 'Chinstrap': 46})\n", "Counter({'Gentoo': 93, 'Adelie': 90, 'Chinstrap': 39})\n" ] } ], "source": [ "from copy import copy\n", "from collections import Counter\n", "\n", "k = 1\n", "x_feat_list = ['bill_depth_mm', 'bill_length_mm']\n", "y_feat = 'species'\n", "\n", "x = df_penguin.loc[:, x_feat_list].values\n", "y_true = df_penguin.loc[:, y_feat].values\n", "\n", "# initialize a knn_classifier\n", "knn_classifier = KNeighborsClassifier(n_neighbors=k)\n", "\n", "# construction of kfold object\n", "kfold = KFold(n_splits=3, shuffle=True)\n", "\n", "# allocate an empty array to store predictions in\n", "y_pred = copy(y_true)\n", "\n", "for train_idx, test_idx in kfold.split(x, y_true):\n", " # build arrays which correspond to x, y train /test\n", " x_test = x[test_idx, :]\n", " x_train = x[train_idx, :]\n", " y_true_train = y_true[train_idx]\n", " \n", " print(Counter(y_true_train))\n", " \n", " # fit happens \"inplace\", we modify the internal state of knn_classifier to remember all the training samples\n", " knn_classifier.fit(x_train, y_true_train)\n", "\n", " # estimate each penguin's species\n", " y_pred[test_idx] = knn_classifier.predict(x_test)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Counter({'Adelie': 97, 'Gentoo': 80, 'Chinstrap': 45})\n", "Counter({'Adelie': 97, 'Gentoo': 79, 'Chinstrap': 46})\n", "Counter({'Adelie': 98, 'Gentoo': 79, 'Chinstrap': 45})\n" ] } ], "source": [ "from sklearn.model_selection import StratifiedKFold\n", "\n", "from copy import copy\n", "from collections import Counter\n", "\n", "n_neighbors = 1\n", "x_feat_list = ['bill_depth_mm', 'bill_length_mm']\n", "y_feat = 'species'\n", "\n", "x = df_penguin.loc[:, x_feat_list].values\n", "y_true = df_penguin.loc[:, y_feat].values\n", "\n", "# initialize a knn_classifier\n", "knn_classifier = KNeighborsClassifier(n_neighbors=n_neighbors)\n", "\n", "# construction of kfold object\n", "kfold = StratifiedKFold(n_splits=3)\n", "\n", "# allocate an empty array to store predictions in\n", "y_pred = copy(y_true)\n", "\n", "for train_idx, test_idx in kfold.split(x, y_true):\n", " # build arrays which correspond to x, y train /test\n", " x_test = x[test_idx, :]\n", " x_train = x[train_idx, :]\n", " y_true_train = y_true[train_idx]\n", " \n", " print(Counter(y_true_train))\n", " \n", " # fit happens \"inplace\", we modify the internal state of knn_classifier to remember all the training samples\n", " knn_classifier.fit(x_train, y_true_train)\n", "\n", " # estimate each penguin's species\n", " y_pred[test_idx] = knn_classifier.predict(x_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I have a mild preference for the `StratifiedKFold` since it gets us as close as possible to an even splitting of target groups." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Note this quirk:\n", "the resulting `y_pred` contains predictions for all the samples ...\n", "\n", "... but samples in different folds were estimated by classifiers trained on different data\n", "\n", "### So which of these trained classifiers should we use as our \"final\" classifier?\n", "\n", "None of them, better to re-train on the whole dataset:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
KNeighborsClassifier(n_neighbors=1)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "KNeighborsClassifier(n_neighbors=1)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# discard previous training sets and train classifier on whole dataset\n", "# this is best for *truly new samples \n", "# (*penguins whose species is unknown, not just \"hidden\" for evaluation purposes)\n", "knn_classifier.fit(x, y_true)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Computing Accuracy\n", "\n", "use `accuracy_score`:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import accuracy_score\n", "\n", "y_true = [0, 1, 1, 2, 1]\n", "y_pred = [1, 1, 1, 2, 1]\n", "\n", "accuracy_score(y_true, y_pred)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# In Class Assignment 2\n", "\n", "One question we never answered: How do we pick the best K for a K-NN classifier?\n", "\n", "A common solution is to try many different k and then choose the one which works \"best\".\n", "\n", "\n", "\n", "In this ICA, make this plot of the **cross validated** accuracy of the k-NN classifier for k = 1 to 50.\n", "- in your cross validation, use `n_splits=10` folds of data\n", "- write a function `get_cv_acc_knn()` which:\n", " - accepts:\n", " - `x`, `y_true`, `k` (of k-NN) as defined above\n", " - stick with the same classification problem where we estimate `species` from `bill_depth_mm` and `bill_length_mm`\n", " - `n_splits=10` (defaults)\n", " - returns \n", " - the cross validated accuracy of k-NN on the dataset " ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import StratifiedKFold\n", "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.metrics import ConfusionMatrixDisplay\n", "import numpy as np\n", "\n", "def get_cv_acc_knn(x, y_true, k, n_splits=10):\n", " \"\"\" computes cross validated accuracy of a KNN classifier\n", " \n", " Args:\n", " x (np.array): (n_sample, n_feat) features\n", " y (np.array): (n_sample) target variable\n", " k (int): number of nearest neighbors in k-NN classifier\n", " \n", " Returns:\n", " acc (float): cross validated accuracy\n", " \"\"\"\n", " # initialize a knn_classifier\n", " knn_classifier = KNeighborsClassifier(n_neighbors=k)\n", "\n", " # \"Stratified\" ensures (roughly) same number of species across folds\n", " # otherwise we could get funny results with all `Adelie` penguins in one fold...\n", " kfold = StratifiedKFold(n_splits=n_splits)\n", "\n", " # initialize an empty array same size & datatype as y_true\n", " y_pred = np.empty_like(y_true)\n", " for train_idx, test_idx in kfold.split(x, y_true):\n", " # split test / training data\n", " x_train = x[train_idx, :] \n", " x_test = x[test_idx, :]\n", " y_true_train = y_true[train_idx]\n", "\n", " # train on training data\n", " knn_classifier.fit(x_train, y_true_train)\n", "\n", " # predict on the testing data\n", " y_pred[test_idx] = knn_classifier.predict(x_test)\n", " \n", " return accuracy_score(y_true, y_pred)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "n_splits = 10\n", "k = 5\n", "x_feat_list = ['bill_depth_mm', 'bill_length_mm']\n", "y_feat = 'species'\n", "\n", "# extract data into matrix\n", "x = df_penguin.loc[:, x_feat_list].values\n", "y_true = df_penguin.loc[:, y_feat].values\n", "\n", "# compute cross validated accuracy of each k\n", "k_all = np.array(range(1, 50))\n", "acc = np.empty(k_all.shape, dtype=float)\n", "for idx, k in enumerate(k_all):\n", " acc[idx] = get_cv_acc_knn(x, y_true, k)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(k_all, acc)\n", "plt.xlabel('k in k-NN')\n", "plt.ylabel('cross validated accuracy')\n", "plt.title('penguin classification optimization')\n", "plt.gcf().set_size_inches(10, 5)\n", "plt.savefig('best_k_penguin.png')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Measuring Binary Classification Performance\n", "- Accuracy\n", "- Sensitivity\n", "- Specificity" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## \"This Classifier is 90% accurate\"\n", "\n", "... is that a good thing?\n", "\n", "Lets take a look at a few 90% accurate classifications and see for ourselves:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ " ## This classifier is 90% accurate: example 0\n", " \"title\"\n", " \n", " ... isn't there more than one way this classification can be 90% accurate?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ " ## This classifier is 90% accurate: example 1\n", " \"title\"\n", " \n", " Assumes:\n", " - \"fair\" coin flip\n", " - equal accuracy in identifying heads / tails" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ " ## This classifier is 90% accurate: example 2\n", " \"title\"\n", " \n", " Assumes:\n", " - \"fair\" coin flip\n", " - ~equal accuracy in identifying heads / tails~\n", "\n", "Problems with Accuracy:\n", "1. Doesn't describe how accuracy varies with each particular target \n", " - (e.g. tails more accurately predicted than heads)\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ " ## This classifier is 90% accurate: example 3\n", " \"title\"\n", " \n", "Assumes:\n", " - ~\"fair\" coin flip~\n", " - equal accuracy in identifying heads / tails\n", " \n", "Problems with accuracy:\n", "1. Doesn't describe how accuracy varies with each particular target \n", " - (e.g. tails more accurately predicted than heads)\n", "1. Doesn't describe differences in distribution of our target variable\n", " - (e.g. heads occurs more often than tails does) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ " ## This classifier is 90% accurate: example 4\n", " \"title\"\n", " \n", " Regardless of how we quantify accuracy, doesn't it implicitly say something about the relative costs of each of the errors below?\n", " - given one has a disease predicting they are healthy\n", " - given one is healthy predicting they have a disease\n", " \n", "Problems with accuracy:\n", "1. Doesn't describe how accuracy varies with each particular target \n", " - (e.g. tails more accurately predicted than heads)\n", "1. Doesn't describe differences in distribution of our target variable\n", " - (e.g. heads occurs more often than tails does) \n", "1. Doesn't characterize the relative cost of each particular error\n", " - (e.g. missing a disease detection can harm someone's health, falsely predicting they have a disease may only inconvenience them)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ " ## This classifier is 90% accurate: example 5\n", " \"title\"\n", " \n", "Problems with accuracy:\n", "1. Doesn't describe how accuracy varies with each particular target \n", " - (e.g. tails more accurately predicted than heads)\n", "1. Doesn't describe differences in distribution of our target variable\n", " - (e.g. heads occurs more often than tails does) \n", "1. Doesn't characterize the relative cost of each particular error\n", " - (e.g. missing a disease detection can harm someone's health, falsely predicting they have a disease may only inconvenience them)\n", "1. Doesn't characterize the difficulty of the problem itself\n", " - (e.g. predicting coin flips is easier than predicting lotto numbers)\n", " - further reading: see use of 'entropy' in [my favorite book on info theory](http://www.inference.org.uk/mackay/itila/book.html) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## What about our confusion matrices?\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "Problems with accuracy:\n", "1. Doesn't describe how accuracy varies with each particular target \n", " - (e.g. tails more accurately predicted than heads)\n", "1. Doesn't describe differences in distribution of our target variable\n", " - (e.g. heads occurs more often than tails does) \n", "1. Doesn't characterize the relative cost of each particular error\n", " - (e.g. missing a disease detection can harm someone's health, falsely predicting they have a disease may only inconvenience them)\n", "1. Doesn't characterize the difficulty of the problem itself\n", " - (e.g. predicting coin flips is easier than predicting lotto numbers)\n", " - we won't say much further in DS2500 on this issue, see [a book on info theory](http://www.inference.org.uk/mackay/itila/book.html) \n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "**Confusion Matrices, being a whole array of numbers, are not easily compared for sorting.**\n", "\n", "(We'll focus on these scalar summary stats of accuracy today)**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Warning: Gnarly Naming Conventions Ahead:\n", "\n", "https://en.wikipedia.org/wiki/Sensitivity_and_specificity\n", "\n", "Everyone uses these ideas and each field seems to have their own terms of interest.\n", "\n", "I'm sorry, its [a tough problem to fix](https://xkcd.com/927/) :)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Binary classification: Names\n", "\n", "Lets examine the binary classification problem, where we're trying to determine if a sample if of class 0 or class 1.\n", "\n", "| | Predict: Class 0 | Predict: Class1 |\n", "|----------------|-------------------|------------------|\n", "| Truth: Class 0 | True Negative (TN) | False Positive (FP) |\n", "| Truth: Class 1 | False Negative (FN) | True Positive (TP) |\n", "\n", "To remember:\n", "- True / False - True if correct False otherwise\n", "- Positive / Negative - Positive if estimated as class 1, Negative otherwise\n", "\n", "Error Types:\n", "\n", "* **False Positives (False alarm / Type I error)** \n", " - sample belongs to class 0 and its predicted as class 1\n", "* **False Negative (Missed detection / Type II error)** \n", " - sample belongs to class 1 and its predicted as class 0" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Binary classification: Illness detection example\n", "\n", "Example: Illness Detection\n", "- Class 0: Healthy\n", "- Class 1: Illness\n", "\n", "| | Predict: Healthy (0) | Predict: Illness (1) |\n", "|--------------------|-------------------------------|---------------------------|\n", "| Truth: Healthy (0) | TN: Healthy predicted healthy | FP: Healthy Predicted Ill |\n", "| Truth: Illness (1) | FN: Ill predicted healthy | TP: Ill predicted ill |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## How to describe binary classifier performance\n", "\n", "- Accuracy\n", " - percentage of samples that the prediction is correct\n", " - illness detection example:\n", " - If 100 people take this test, how often will our test be correct?\n", "$$ \\rm{Accuracy} = \\frac{\\rm{TP} + \\rm{TN}}{\\rm{TP} + \\rm{TN} + \\rm{FP} + \\rm{FN}} $$\n", "\n", "- Sensitivity (Recall)\n", " - percentage of class 1 samples which are predicted as class 1\n", " - illness detection example:\n", " - If 100 ill people take this test, how many will we detect as ill?\n", "$$ \\rm{Sensitivity} = \\frac{\\rm{TP}}{\\rm{TP} + \\rm{FN}} $$\n", "\n", "- Specificity\n", " - percentage of samples predicted as class 1 which are truly class 1\n", " - illness detection example:\n", " - If the test says 100 people are ill, how many of these are really ill?\n", " \n", "$$ \\rm{Specificity} = \\frac{\\rm{TP}}{\\rm{TP} + \\rm{FP}} $$" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import confusion_matrix\n", "\n", "def get_acc_sens_spec(y_true, y_pred, verbose=True):\n", " \"\"\" computes sensitivity & specificity (assumed binary inputs)\n", "\n", " Args:\n", " y_true (np.array): binary ground truth per trial\n", " y_pred (np.array): binary prediction per trial\n", "\n", " Returns:\n", " acc (float): accuracy\n", " sens (float): sensitivity\n", " spec (float): specificity\n", " \"\"\"\n", " # line below stolen from sklearn confusion_matrix documentation\n", " tn, fp, fn, tp = confusion_matrix(y_true.astype(bool),\n", " y_pred.astype(bool),\n", " labels=(0, 1)).ravel()\n", "\n", " # compute sensitivity\n", " if tp + fn:\n", " sens = tp / (tp + fn)\n", " else:\n", " sens = np.nan\n", "\n", " # compute specificity\n", " if tn + fp:\n", " spec = tn / (tn + fp)\n", " else:\n", " spec = np.nan\n", " \n", " # compute acc\n", " acc = (tp + tn) / (tn + fp + fn + tp)\n", "\n", " return acc, sens, spec" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Unequal sample size happens (often):\n", "\n", "experimental design cost / danger\n", "- how does space travel impact plant growth?\n", "- how is the inside of this tornado different than a milder wind flow pattern?\n", "- are shark teeth sharper in a live shark's mouth?\n", "\t\n", "language modelling\n", "- given access to one's email (a relatively small amount of text compared to typical LM text libraries) how can we tune a generic language model to a particular user (increase prob of words they personally use often)\n", "\n", "many detection targets, by virtue of the fact that we bother building an AI system to detect them, are rare:\n", "- computer hacking\n", "- astronomy events (suns exploding etc)\n", "- accidents / crime\n", "- rare illness" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "# 'secret' slide: generate icbm data from ground truth\n", "import pandas as pd\n", "import numpy as np\n", "\n", "# total samples\n", "n = int(1e6)\n", "\n", "# prior prob of icbm event\n", "prior = .01\n", "\n", "# false alarm and detection (sensitivity) rates\n", "fa_detect = [(.1, .99), \n", " (.5, .95), \n", " (.8, 1), \n", " (.07, .95)]\n", "\n", "# sample n icbm events\n", "rng = np.random.default_rng(seed=0)\n", "icbm = rng.random(n) < prior\n", "\n", "# init dataframe\n", "df_icbm = pd.DataFrame({'icbm': icbm})\n", "\n", "for test_idx, (fa, detect) in enumerate(fa_detect):\n", " pred = np.empty_like(icbm)\n", " \n", " # get predictions (depend on icbm state)\n", " pred[icbm] = np.random.rand(icbm.sum()) < detect\n", " pred[~icbm] = np.random.rand((~icbm).sum()) < fa\n", " \n", " # store predictions\n", " df_icbm[f'alarm{test_idx}'] = pred\n", " \n", "df_icbm.to_csv('icbm.csv', index=False)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Intercontinental Ballistic Missile (ICBM)" ] }, { "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", "
icbmalarm0alarm1alarm2alarm3
0FalseFalseFalseTrueFalse
1FalseTrueFalseTrueFalse
2FalseFalseTrueTrueTrue
3FalseFalseTrueTrueFalse
4FalseFalseTrueFalseFalse
\n", "
" ], "text/plain": [ " icbm alarm0 alarm1 alarm2 alarm3\n", "0 False False False True False\n", "1 False True False True False\n", "2 False False True True True\n", "3 False False True True False\n", "4 False False True False False" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_icbm = pd.read_csv('icbm.csv')\n", "df_icbm.head()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "slideshow": { "slide_type": "-" } }, "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", "
accuracysensitivityspecificity
alarm00.9010430.9876950.900168
alarm10.5040130.9476790.499533
alarm20.2086871.0000000.200697
alarm30.9303560.9512810.930145
\n", "
" ], "text/plain": [ " accuracy sensitivity specificity\n", "alarm0 0.901043 0.987695 0.900168\n", "alarm1 0.504013 0.947679 0.499533\n", "alarm2 0.208687 1.000000 0.200697\n", "alarm3 0.930356 0.951281 0.930145" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_performance = pd.DataFrame()\n", "for idx in range(4):\n", " alarm = f'alarm{idx}'\n", " \n", " # get truth / predict for alarm\n", " truth = df_icbm.loc[:, 'icbm']\n", " pred = df_icbm.loc[:, alarm]\n", " \n", " # build dataframe of accuracy, sensitivity and specificity\n", " acc, sens, spec = get_acc_sens_spec(y_true=truth, y_pred=pred)\n", " df_performance.loc[alarm, 'accuracy'] = acc\n", " df_performance.loc[alarm, 'sensitivity'] = sens\n", " df_performance.loc[alarm, 'specificity'] = spec\n", " \n", "df_performance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## In Class Exercise 3\n", "\n", "Using the values above (and maybe other operations on the dataframe too) select which of the four alarm systems is most appropriate to detect ICBMs. Provide an explanation which is easily understood by a non-technical reader.\n", "\n", "Is there any other information you'd need to make this decision?" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.6" } }, "nbformat": 4, "nbformat_minor": 4 }