{ "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": 6, "metadata": {}, "outputs": [], "source": [ "k = 11\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": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwoAAAKRCAYAAAD07l4VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAD3d0lEQVR4nOzdd1xT1/sH8E/YSwSU4V4Mce+699Zata227l1bd2td1X6rtu66R2vdddWBs+49iwvcgoAoIlP2JuT+/uDHlZAEEkjC8PPuK6/mJufecxJJcp97znmORBAEAURERERERNkYFHYDiIiIiIio6GGgQEREREREChgoEBERERGRAgYKRERERESkgIECEREREREpYKBAREREREQKGCgQEREREZECBgpERERERKSAgQIRERERESlgoEBERERERAqMCrsBREREpFpCQgKePn2KoKAgxMTEIC0tDVZWVrC2tkblypVRq1YtmJmZqXUsDw8PzJ49W9zetWsXPvnkE101vcRwc3MT7/fr1w9LlixRa7+wsDDs27cPnp6eCAwMRFxcHKRSqfj80aNH4e7uDgAYOnQo7ty5AwCoUKECLl26pMVXQJQ/DBSISK/evn2LTp06idv5+UFcunQptm3bJvfYN998g++//14rbdSV1NRUPH/+HI8ePcLjx4/x6NEjvH79GoIgiGUuXryIihUrFqied+/eicd//Pgxnj59ioSEBPF5TU50CmrWrFk4cuSI3GPlypXDuXPnYGJiovZxcp7gzps3D0OGDFFZPvtJV5Z69erh4MGDatcJAOvWrcP69evF7T/++AMdOnTQ6Bj5kZSUhCNHjuDEiRN4+PAhZDKZyrJGRkaoU6cO+vTpg169esHGxkbn7aO8nThxAnPnzkVKSkphN4Uo3xgoEFGxIQgCFi5ciD179sg9PmnSJEycOLGQWpW39evX4+LFi/D19ZW7mqhNPj4+WLVqFR4/fozIyEid1KEtISEh2L9/P4YNG6bXeh89eoSLFy/KBapF0aFDh7BixQpER0erVV4qlcLb2xve3t5YtmwZRowYgbFjx8LKykrHLSVVvL29MWvWLJ193on0hYECERULMpkMP//8s8IV4R9//BFjxowppFap5/z583jx4oVO6wgKCsLly5d1Woc2bd68GV9++SXMzc31Wu/atWvRsWNHSCQSvdarjpSUFMyY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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=11 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": 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", " \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": 9, "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": 12, "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": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 2. , 2.5, 5. , 10. ],\n", " [ 20. , 25. , 50. , 100. , 200. ]])" ] }, "execution_count": 15, "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, 5))" ] }, { "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_true = 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_true.shape)\n", "for train_idx, test_idx in kfold.split(x, y_true):\n", " # split into train and test sets\n", " x_train = x[train_idx, :]\n", " y_train = y_true[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": 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": 16, "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": 17, "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": 12, "metadata": { "scrolled": true }, "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": true }, "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": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Counter({'Adelie': 97, 'Gentoo': 76, 'Chinstrap': 49})\n", "Counter({'Adelie': 99, 'Gentoo': 77, 'Chinstrap': 46})\n", "Counter({'Adelie': 96, 'Gentoo': 85, 'Chinstrap': 41})\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": 15, "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", "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 = 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.4" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import accuracy_score\n", "\n", "y_true = [0, 0, 0, 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')\n", "\n", "# hint: occam's razor" ] }, { "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": 21, "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 }