{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Logistic Regression Applied to Classification of Breast Tumors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this notebook, we use logistic regression to classify breast tumors in two classes, benign or malignant.\n", "The dataset used in this short tutorial is available here: https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/. *Note: there were a few missing data (label as '?') which were replaced with zeros*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The whole documentation of the dataset can be seen in the ``breast-cancer-wisconsin.names`` file available in the link above. Nonetheless, I will briefly mention the characteristics of this dataset." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This dataset has nine interger-valued features that biologically characterizes a given tumor, e.g., size of the cell, clump thickness, etc. Every sample in the dataset has a label (or ``class``) which indicates whether the tumor is benign or malignant. Benign samples have ``class == 2`` whereas malignant samples have ``class == 4``." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Data Visualization\n", "Let's load and visualize the dataset using Pandas" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "np.random.seed(123)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size',\n", " 'Uniformity of Cell Shape', 'Marginal Adhesion', 'Single Epithelial Cell Size',\n", " 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "breast_cancer_df = pd.read_csv('breast-cancer-wisconsin.data', names=names)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | Sample code number | \n", "Clump Thickness | \n", "Uniformity of Cell Size | \n", "Uniformity of Cell Shape | \n", "Marginal Adhesion | \n", "Single Epithelial Cell Size | \n", "Bare Nuclei | \n", "Bland Chromatin | \n", "Normal Nucleoli | \n", "Mitoses | \n", "Class | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "1000025 | \n", "5 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
1 | \n", "1002945 | \n", "5 | \n", "4 | \n", "4 | \n", "5 | \n", "7 | \n", "10 | \n", "3 | \n", "2 | \n", "1 | \n", "2 | \n", "
2 | \n", "1015425 | \n", "3 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "2 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
3 | \n", "1016277 | \n", "6 | \n", "8 | \n", "8 | \n", "1 | \n", "3 | \n", "4 | \n", "3 | \n", "7 | \n", "1 | \n", "2 | \n", "
4 | \n", "1017023 | \n", "4 | \n", "1 | \n", "1 | \n", "3 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
5 | \n", "1017122 | \n", "8 | \n", "10 | \n", "10 | \n", "8 | \n", "7 | \n", "10 | \n", "9 | \n", "7 | \n", "1 | \n", "4 | \n", "
6 | \n", "1018099 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "10 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
7 | \n", "1018561 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
8 | \n", "1033078 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "
9 | \n", "1033078 | \n", "4 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
10 | \n", "1035283 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
11 | \n", "1036172 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
12 | \n", "1041801 | \n", "5 | \n", "3 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "4 | \n", "4 | \n", "1 | \n", "4 | \n", "
13 | \n", "1043999 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "3 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
14 | \n", "1044572 | \n", "8 | \n", "7 | \n", "5 | \n", "10 | \n", "7 | \n", "9 | \n", "5 | \n", "5 | \n", "4 | \n", "4 | \n", "
15 | \n", "1047630 | \n", "7 | \n", "4 | \n", "6 | \n", "4 | \n", "6 | \n", "1 | \n", "4 | \n", "3 | \n", "1 | \n", "4 | \n", "
16 | \n", "1048672 | \n", "4 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
17 | \n", "1049815 | \n", "4 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
18 | \n", "1050670 | \n", "10 | \n", "7 | \n", "7 | \n", "6 | \n", "4 | \n", "10 | \n", "4 | \n", "1 | \n", "2 | \n", "4 | \n", "
19 | \n", "1050718 | \n", "6 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
20 | \n", "1054590 | \n", "7 | \n", "3 | \n", "2 | \n", "10 | \n", "5 | \n", "10 | \n", "5 | \n", "4 | \n", "4 | \n", "4 | \n", "
21 | \n", "1054593 | \n", "10 | \n", "5 | \n", "5 | \n", "3 | \n", "6 | \n", "7 | \n", "7 | \n", "10 | \n", "1 | \n", "4 | \n", "
22 | \n", "1056784 | \n", "3 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
23 | \n", "1057013 | \n", "8 | \n", "4 | \n", "5 | \n", "1 | \n", "2 | \n", "0 | \n", "7 | \n", "3 | \n", "1 | \n", "4 | \n", "
24 | \n", "1059552 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
25 | \n", "1065726 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "2 | \n", "7 | \n", "3 | \n", "6 | \n", "1 | \n", "4 | \n", "
26 | \n", "1066373 | \n", "3 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
27 | \n", "1066979 | \n", "5 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
28 | \n", "1067444 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
29 | \n", "1070935 | \n", "1 | \n", "1 | \n", "3 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
669 | \n", "1350423 | \n", "5 | \n", "10 | \n", "10 | \n", "8 | \n", "5 | \n", "5 | \n", "7 | \n", "10 | \n", "1 | \n", "4 | \n", "
670 | \n", "1352848 | \n", "3 | \n", "10 | \n", "7 | \n", "8 | \n", "5 | \n", "8 | \n", "7 | \n", "4 | \n", "1 | \n", "4 | \n", "
671 | \n", "1353092 | \n", "3 | \n", "2 | \n", "1 | \n", "2 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
672 | \n", "1354840 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "2 | \n", "
673 | \n", "1354840 | \n", "5 | \n", "3 | \n", "2 | \n", "1 | \n", "3 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
674 | \n", "1355260 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
675 | \n", "1365075 | \n", "4 | \n", "1 | \n", "4 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
676 | \n", "1365328 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "2 | \n", "
677 | \n", "1368267 | \n", "5 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
678 | \n", "1368273 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
679 | \n", "1368882 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
680 | \n", "1369821 | \n", "10 | \n", "10 | \n", "10 | \n", "10 | \n", "5 | \n", "10 | \n", "10 | \n", "10 | \n", "7 | \n", "4 | \n", "
681 | \n", "1371026 | \n", "5 | \n", "10 | \n", "10 | \n", "10 | \n", "4 | \n", "10 | \n", "5 | \n", "6 | \n", "3 | \n", "4 | \n", "
682 | \n", "1371920 | \n", "5 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "3 | \n", "2 | \n", "1 | \n", "2 | \n", "
683 | \n", "466906 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
684 | \n", "466906 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
685 | \n", "534555 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
686 | \n", "536708 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
687 | \n", "566346 | \n", "3 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "3 | \n", "1 | \n", "2 | \n", "
688 | \n", "603148 | \n", "4 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
689 | \n", "654546 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "8 | \n", "2 | \n", "
690 | \n", "654546 | \n", "1 | \n", "1 | \n", "1 | \n", "3 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
691 | \n", "695091 | \n", "5 | \n", "10 | \n", "10 | \n", "5 | \n", "4 | \n", "5 | \n", "4 | \n", "4 | \n", "1 | \n", "4 | \n", "
692 | \n", "714039 | \n", "3 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
693 | \n", "763235 | \n", "3 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "1 | \n", "2 | \n", "2 | \n", "
694 | \n", "776715 | \n", "3 | \n", "1 | \n", "1 | \n", "1 | \n", "3 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
695 | \n", "841769 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "2 | \n", "
696 | \n", "888820 | \n", "5 | \n", "10 | \n", "10 | \n", "3 | \n", "7 | \n", "3 | \n", "8 | \n", "10 | \n", "2 | \n", "4 | \n", "
697 | \n", "897471 | \n", "4 | \n", "8 | \n", "6 | \n", "4 | \n", "3 | \n", "4 | \n", "10 | \n", "6 | \n", "1 | \n", "4 | \n", "
698 | \n", "897471 | \n", "4 | \n", "8 | \n", "8 | \n", "5 | \n", "4 | \n", "5 | \n", "10 | \n", "4 | \n", "1 | \n", "4 | \n", "
699 rows × 11 columns
\n", "